OmniAICreator/Qiita-1.07M huggingface dataset:
El CapitanのSystem Integrity Protection（rootless）の解除方法

Mac OS X 10.11 El Capitan の最新機能System Integrity Protectionが原因でルート権限での編集が必要なファイルの編集ができなくなりました。

例えば、以下のようなディレクトリー内の変更ができなくなりました。

/System
/bin
/usr
/sbin

変更しようとすると「Operation not permitted」というメッセージが表示されます。

System Integrity Protectionの機能(以下、SIP)をオフにする方法があったので以下にメモ。

必要な作業はリカバリーモードのターミナルで「csrutil disable」と入力すること。

1. Command+Rを押しながらMACを再起動でリカバリーモード起動

2.トップメニューから「ユーティリティー>ターミナル」と選んでターミナルを起動

3.csrutil disableというコマンドを実行

4.MACを再起動

5.ターミナルで「csrutil status」というコマンドを実行
SIP変更が完了していれば「System Integrity Protection status: disabled.」と表示されます。

これで完了。冒頭で挙げたようなディレクリ内での変更が可能になります。

System Integrity Protectionは、そもそもマルウェアからの攻撃をかわすためのセキュリティ機能のようなので不用意に設定をオフにするのは推奨されません。くれぐれも自己責任での実行をお願いします。
Google スプレッドシートを簡易ダッシュボードとして利用する方法

RDB のデータを手間をかけずに無料でグラフ表示できて、アクセス制限できるものを作ります。

まず新しい Google スプレッドシートを作り、`data1` というシートを作ります。

次に「ツール＞スクリプトエディタ」を開きます。次のコードを `コード.gs` にペーストして、DBへアクセスするアカウントとクエリを書き換えます。

```js
var address = 'ほすと:3306';
var user = 'ゆーざ';
var userPwd = 'ぱすわーど';
var db = 'でーたべーす';
var dbUrl = 'jdbc:mysql://' + address + '/' + db + '?characterEncoding=utf8&requireSSL=true'; // ← MySQL 以外の DB でもきっとつなげると思う

function updateData1() {
  var query = 'SELECT 1;'; // ← ここに好きなクエリを書く
  replaceSheet(query, 'data1'); // ← 結果が書き込まれるシート
}

function replaceSheet(query, sheetName) {
  Logger.log(query);
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  var stmt = conn.createStatement();
  var results = stmt.executeQuery(query);
  var metadata = results.getMetaData();
  var numCols = metadata.getColumnCount();
  
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  sheet.clear();

  var row = [];
  for (var col = 0; col < numCols; col++) {
    row = row.concat([metadata.getColumnLabel(col+1)]);
  }
  sheet.appendRow(row);
  
  while (results.next()) {
    row = [];
    for (var col = 0; col < numCols; col++) {
      row = row.concat([results.getString(col + 1)]);
    }
    sheet.appendRow(row);
  }

  results.close();
  stmt.close();
}
```

できたら保存して、`updateData1()` を実行してみます。スプレッドシートにクエリ結果が書き込まれたら成功です。
上のコードでは `sheet.clear();` していますが、日次で行を追加していきたい場合などはクリアせずに追記していくことも可能です。

「リソース＞現在のプロジェクトのトリガー」で新しいトリガーを追加します。 `updateData1()` を好みに応じて例えば1時間に1度更新するように設定します。

スプレッドシートの機能を使ってグラフを適当に書きます。

共有したい人にスプレッドシートを共有します。

以上、ホストを用意しなくても良い。可用性が高そう。無料。手軽。グラフは共有している人に勝手に作ってもらえる点がいいかなと思っています。

参考:

* https://developers.google.com/apps-script/guides/jdbc
* https://developers.google.com/apps-script/reference/spreadsheet/

## Security consideration

* DBがアクセス元 IP を制限している場合、[ここに書いてある範囲](https://developers.google.com/apps-script/guides/jdbc#setup_for_google_cloud_sql)を許可します。許可したくない場合はこの方法は使えません。当然ですがインターネットからアクセス不能なDBの場合にも使えません。
* AppsScript にデータベースのアクセスアカウントを記載することになります。公開されるわけではありませんが、何らかの事故により漏洩するリスクが全く無いとは言い切れません。必要最小限のテーブルを読み取れるアカウントを使ったほうが良いです。そもそもアカウントを外部サービスに書きたくない場合はこの方法は使えません。
Visual Studio ショートカットキー　メモ


■コメントアウト
　Ctrl+KおしてからCtrl+C

■自分の設定フォーマットに変更(タブやインデントの設定を変更)
　Ctrl+KおしてからCtrl+F

■ソースファイルのgrep検索
　スペースで区切って文言を追加すると絞り込み検索可能
　[Ctrl]+[,]

■タブ間の移動
　[Ctrl] + [Alt] + [PageUp/PageDown]

■定義へ移動して呼び出し元に戻る
　[Ctrl] + [-]

■矩形選択(マウスで選択した範囲を選択状態にできる)

　Altを押しながらマウスで選択、コピーするとマウスで選択した範囲のコードをコピーできる。
AWS user-dataを使用してlaunch時にadminのパスワードを変更する（windows）

#AWSへの慣れ
検証環境として大活躍のEC2。
ちょっとした調べものをしたくて個人で作成するEC2。
恥ずかしながら、launch時に自動生成されるadminのパスワードを
そのまんま使用することが多い。

#声高に叫んでは見たものの面倒くさい。
検証機のadminパスワードは社内で統一の設定にしたい。
（だってその方が、検証で詰まったときに人に見てもらいやすいから）
そんなことを声高に叫んでは見たものの、
ワンタイムのEC2だと設定する気にならない。

#じゃあどうしよう。→User-Dataを使おう
ようやく本題です。
そしてすぐ終わります。

以下のuser-dataをlaunch時に使用しましょう。
※鍵の指定も不要になります。

```powershell:user-data
<powershell>

$UserID = "Administrator"
$Password = "パスワード" #お好きに変えてください。

$hostname = hostname
[ADSI]$UpdateUser = "WinNT://$HostName/$UserID,User"
$UpdateUser.SetPassword( $Password )
$UpdateUser.SetInfo()

</powershell>
```

恥ずかしながら、以上となります。
app/console doctrine:schema:update --forceしてたらエラーで進まなくなった

orm.ymlをこちゃこちゃいじってたら

```
[Doctrine\DBAL\DBALException]
An exception occurred while executing 'DROP INDEX IDX_10A003478CDE5729':SQLSTATE[42704]: Undefined oject: 7 ERROR: ******** "idx_10a003478cde3729" *******
```

とかでてまったくどうしようもなくなったので、
ないと言われてるindexをテキトーに作ったら動きましたとさ
正しいやりかたを誰かおしえてください！！！！！！！！！
ideone > VisualStudioでない環境でscanf_s()の処理を実行する

scanf()のsecure版、scanf_s()はideoneなどの非VisualStudio環境では実行できない。

安易な手として scanf()のラッパーを作って実行する。

http://ideone.com/NWjvjL

```c
#include <stdio.h>

// wrapper for non-VisualStudio environment
void scanf_s(char *format, int *ptr)
{
	scanf(format, ptr);	
}

int main(void) {
	int b;
	
	scanf_s("%d", &b);
	printf("%d\n",b);

	return 0;
}
```

scanf_s()が使える環境では素直にscanf_s()を使いましょう。
突然ATOMが動作しなくなった- pigmentsが原因

下記のようなエラーが出るようになり、ATOMの設定画面すらいけなくなってしまった。

```
TypeError: this.editor.displayBuffer.getVisibleRowRange is not a function
```

どうやらこれはatom-pigmentsパッケージが古いと出てくる問題のようで、これを解決する手っ取り早い方法は対象のパッケージを削除することです。

`自分のユーザーディレクトリ/.atom/packages/pigments`を削除して、再度起動すると設定画面まで行けるようになるので、そのあとパッケージのアップデートで対応します。
AngularJS の開発を PhpStorm で始める際の初期設定


AngularJS の開発を始めるにあたり、初期設定したので参考までにメモしておきます。他にも設定ありそうですがまずはここからです。基本的なことになります。

## やること
* カスタムの .jshintrc を適用する
* JetBrains の AngularJS プラグインを追加する
* IntelliJ AngularJS コード補完用定義ファイルを適用する

## IDE
* PhpStorm 10(WebStorm11あたりを内包？)

## 参考
[IntelliJ IDEA でAngularJSのコード補完を利用する](http://takeyuweb.hatenablog.com/entry/intellij_idea_angularjs)


# カスタムの .jshintrc を適用する

> https://en.wikipedia.org/wiki/JSHint
> コード解析ツール。JavaScriptコードのエラーや潜在的な問題を検出するのに役立つツール。

## 設定画を面開く

* プロジェクトに適用したいので、メニューバーの Preferences より設定画面を開く。

![スクリーンショット_2015-11-06_16_53_50.png](https://qiita-image-store.s3.amazonaws.com/0/39380/1fa0e27d-b52c-f071-6b3d-ac692da544b4.png "スクリーンショット_2015-11-06_16_53_50.png")

## 設定する

* 「Languages & Frameworks」>「JavaScript」>「Code Quality Tools」>「JSHint」を選択します。
* Enable にチェックを入れる
* Custom configuration file を選択し対象の .jshintrc を選択してください
* Apply ボタンにて適用です

![スクリーンショット_2015-11-06_16_09_31.png](https://qiita-image-store.s3.amazonaws.com/0/39380/9cdfd71b-57d0-c877-c001-8651a4fa5155.png "スクリーンショット_2015-11-06_16_09_31.png")


# AngularJS プラグインを追加する

> https://github.com/JetBrains/intellij-plugins/tree/master/AngularJS
> AngularJS 用のコード補完など、開発をサポートしてくれるプラグインです。

## 設定画面を開く

* プロジェクトに適用したいので、メニューバーの Preferences より設定画面を開く
* 「Plugins」>「Install JetBrains Plugin」を選択してください

![スクリーンショット_2015-11-06_16_07_34.png](https://qiita-image-store.s3.amazonaws.com/0/39380/35d641b2-7a45-37d3-a64c-a812ea9291f6.png "スクリーンショット_2015-11-06_16_07_34.png")

## JetBrains Plugin 選択ダイアログを開きインストール

* 選択ダイアログが開きますので AngularJS を選びインストールを行ってください
* PHPStorm の再起動が必要です

![スクリーンショット_2015-11-06_16_07_53.png](https://qiita-image-store.s3.amazonaws.com/0/39380/99ef5511-0d1d-6e7b-4feb-65e52283b1b1.png "スクリーンショット_2015-11-06_16_07_53.png")

# IntelliJ AngularJS コード補完用定義ファイルを適用する

## 設定する

* 「Languages & Frameworks」>「JavaScript」>「Libraries」を選択します
* 「Download」を選択します
* Download Library にて angularjs を選択し「Download and Install」でインストールします

![スクリーンショット_2015-11-06_16_10_58.png](https://qiita-image-store.s3.amazonaws.com/0/39380/51998ca9-f58d-3817-5053-1b1aaf796b43.png "スクリーンショット_2015-11-06_16_10_58.png")

----

今回は以上となります。PhpStormの設定はいろいろありますが、少しずつ馴染ませて効率の良い開発ができるようになりたいです。
mackerelでログ監視を試してみた


mackerelは2015/11/06、公式プラグインでログ監視ができるようになった。

* [mackerel-check-pluginsでのログ監視・死活監視でのアラート再送 ほか](http://blog-ja.mackerel.io/entry/2015/11/06/113117)

待ちに待った機能なので、早速試してみた。

# インストール

わざわざ書くまでもないが、mackerel-agentをyum/aptで入れている環境であれば`mackerel-check-plugins`の一部としてインストールされる。

```bash
$ yum install mackerel-check-plugins
```


# 最初に挙動を確認してみる

## 実装の確認

[gitリポジトリ](https://github.com/mackerelio/go-check-plugins/blob/master/check-log/check-log.go)で実装を見る限り、Nagiosのcheck_log系プラグインと同様に、毎回プロセスが起動し直すタイプの動作のようだ。
前回読んだ場所を覚えていて、そこまでseekする挙動となっている。

```check-log.go
	if skipBytes > 0 && stat.Size() >= skipBytes {
		f.Seek(skipBytes, 0)
	}
```

こういう動作のログ監視はtail系と違って負荷が気になる。

## 動作試験

ちょうど良く300MBほどのログファイルがあったので、読み込ませてみた。
実装からすると、こんな挙動が推測される。

* 初回起動はログファイル全読込で重い
* 2回目以降は速い（CPU使用率は高いかもしれない）

### 初回実行

1回目はとにかく重いはず。

```bash
$ time /usr/local/bin/check-log --file XXX.log --pattern 'error'
LOG OK: 0 warnings, 0 criticals for pattern error.
10.60user 0.43system 0:10.45elapsed 105%CPU (0avgtext+0avgdata 6496maxresident)k
0inputs+8outputs (0major+438minor)pagefaults 0swaps
```

予想通りCPUは1core分(100%)まるまる持って行ってしまった。
が、10秒程度で処理が終わった。

ちなみに、速いことで有名な`fgrep`と比較するとこんな感じだ。

```bash
$ time fgrep 'error' XXX.log
0.19user 0.06system 0:00.26elapsed 99%CPU (0avgtext+0avgdata 2608maxresident)k
0inputs+0outputs (0major+192minor)pagefaults 0swaps
```

0.19秒・・・　格が違う。
ちなみに検証環境は物理マシン。間違いなく実行時間はI/O速度に依存する。

### 2回目実行

再度実行してみる。

```bash
$ time /usr/local/bin/check-log --file XXX.log --pattern 'error'
LOG OK: 0 warnings, 0 criticals for pattern error.
0.00user 0.00system 0:00.00elapsed 50%CPU (0avgtext+0avgdata 6048maxresident)k
0inputs+16outputs (0major+397minor)pagefaults 0swaps
```

さすがに速い。
CPU使用率は高めだが、それは仕方ないだろう。

## 試験まとめ

初回実行の挙動を見る限り負荷は決して軽いとは言えないが、エージェントが`check-log`を実行するのが1分間隔であることを前提とすると、1分間のログ量が多いログファイルでなければ十分に使えそうである。

こういった文字列監視の主な用途は、システムログやエラーログの監視であろうから、簡単に実装できるということにメリットがある。



# 設定してみる

## 実装例

よくある実装パターンは、`/var/log/messages`の`segfault`を検知するものだろう。
ルールとしてはこんな感じのものを`mackerel-agent.conf`に書けば良い。

```mackerel-agent.conf
[plugin.checks.log_messages]
command = '/usr/local/bin/check-log --file /var/log/messages --pattern "segfault" -c 2'
```

ポイントは`-c 2`のオプションで、これにより

* 2回発見まではWarning
* 3回以上発見した場合Critical

という条件となる。「より大きい(>)」条件であることに注意。
同様にWaring条件を制限する`-w`オプションもあるが、この例では設定していない。


## 動作確認

普段は当然OKになる。

```bash
$ check-log --file /var/log/messages --pattern "segfault" -c 2
LOG OK: 0 warnings, 0 criticals for pattern segfault.
```

2回まではWarningで良しとする。（作業影響とかもありうるので）

```bash
$ logger -t test -p user.err "segfault at XXXXX"
$ check-log --file /var/log/messages --pattern "segfault" -c 2
LOG WARNING: 1 warnings, 1 criticals for pattern segfault.
```

3回以上発生した時はCritical。

```bash
$ logger -t test -p user.err "segfault at XXXXX"
$ logger -t test -p user.err "segfault at XXXXX"
$ logger -t test -p user.err "segfault at XXXXX"
$ check-log --file /var/log/messages --pattern "segfault" -c 2
LOG CRITICAL: 3 warnings, 3 criticals for pattern segfault.
```


# 最後に

負荷に関して問題ないとは言い切れない点、エラー検知した時のメッセージが少し不自然な気がする点は気になるものの、mackerelという便利なサービスでログ監視もできるようになったことは大変ありがたい。
KarabinerでFinderのキーバインドをviライクにする

しつこく Mac vi関連を攻めます。

前回の記事で、OSワイドにviライクキーバインドでカーソル操作を可能にしたわけですが、できればよく使うアプリ、finderとかは修飾キーなしでviのキーバインドを使いたいじゃないですか。

unite.vim使え？わかってます。わかってますよ。でもfinder使いたい気分の時もあるんです。

そんな時にKarabiner。

ここからダウンロードできます。
https://pqrs.org/osx/karabiner/index.html.ja


でおもむろに

```
Use "hjkl" keys as arrow keys if you are not editing text.
```

にチェックを入れる。

<img width="765" alt="Screen Shot 2015-11-06 at 17.14.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/74328/e3804bba-ed36-98f2-74b6-5b6f89a6722f.png">

これで修飾キーなしでhjklがfinderで使えます。


良いviライフを！
AWS EC2でjupyter + opencv(Ipython notebook + opencv)

ネットにある情報は古くて泣きそうだったのでメモ
2015年11月6日現在この手順でインストールできる。

ハマりどころはAnaconda3でインストールできるopencv3のバイナリパッケージがpython3に対応してない点
[この方はできているのかな？](http://piruty.hateblo.jp/entry/2015/10/10/133921)謎だ・・・

環境
---
AWS EC2 ubuntu
Anaconda2
Python2.7
OpenCV3

手順
---
1.AWSにログインubuntuで新規インスタンス作成
2.セキュリティグループにHTTPS（443）と任意のポート（8888）を追加
3.EC2起動
4.Anaconda 公式サイトからpython2.7用のAnaconda2（3ではない）のスクリプトダウンロード、インストール
`$wget https://3230d63b5fc54e62148e-c95ac804525aac4b6dba79b00b39d1d3.ssl.cf1.rackcdn.com/Anaconda2-2.4.0-Linux-x86_64.sh `
`$bash Anaconda2-2.4.0-Linux-x86_64.sh`

インストール後
`$ipython notebook` としてもjupyterが起動するので
(これが解らずはまった）
設定ファイル作成は
`$jupyter notebook --generate-config`
`$vi ~/.jupyter/jupyter_notebook_config.py`

```jupyter_notebook_config.py
c.NotebookApp.ip ='*' <外部からアクセス可能にする
c.NotebookApp.port = 8888 <EC2のセキュリティグループで開けたポートに合わせる
**パスワード設定も書く必要あり、別記事にする**
```
**パスワード設定は[こちら](http://jupyter-notebook.readthedocs.org/en/latest/public_server.html)**
**[ありがたい日本語の記事](http://qiita.com/y__sama/items/5fb14f2dc7d294fa9980)**

5.`$jupyter notebook`で起動

6.ブラウザでEC2ダッシュボードのパブリックDNSの名前：8888（指定したポート）でアクセスできる

opencv3をインストール
---
`$conda install -c https://conda.binstar.org/menpo opencv3`

足りないライブラリを追加

`$sudo apt-get install libgomp1`
`$sudo apt-get install libgtk2.0-0`
`$sudo apt-get install libsm6`

Tips
----
ターミナルを閉じると止まっちゃうのはけしからんので
`$nohup jupyter notebook`
とするとターミナルを閉じてもコマンドを実行し続けてくれるのでよろしい

最後に＆を付けた方が良いか？？
Railsアプリ開発に途中から参加する場合の環境設定

#はじめに
Railsアプリ開発に途中から参加する場合の環境設定についてメモします。

#開発環境
- OS
    - Mac OS X Yosemite
        - 10.10.5
- Software
    - git
        - 2.3.8
    - Ruby
        - 2.2.2
    - rbenv
        - 0.4.0

#プロジェクトのクローン
ここでは、gitでソースコード管理を行っているものとします。Githubの場合は以下のようにクローンします。

```
$ git clone https://github.com/xxx/yyy.git
```

#Rubyのバージョン合わせ

通常、Rubyのバージョンをrbenvで管理していると思うので、クローンしたプロジェクトのディレクトリに移動し、Rubyのバージョンを確認します。

```
$ cat .ruby-version 
2.2.2
```

一方で、rbenvに上記のバージョンが入っている保証はないので、以下のコマンドで確認します。

```
$ rbenv versions
  system
  2.1.2
  2.1.3
  2.1.4
  2.2.1
* 2.2.2 (set by /path/to/project/.ruby-version)
```

上記の様に、rbenvにすでに入っているバージョンであれば問題ありません。

一方で、下記のようなエラーが出た場合にはrbenvにRailsプロジェクト内で用いるバージョンのRubyをインストールする必要があります。

```
rbenv: version `2.2.2' is not installed
```

#Bundlerの導入
RubyではRubyGemsというパッケージ管理システムにより、ライブラリをインストールすることができます（RubyGemsはMacでいうところのHomebrew、Redhat系でいうところのyum、Debian系でいうところのapt-getのようなものです）。

基本的にはgemコマンドでライブラリをインストールすればライブラリを使用することができるようになりますが、ライブラリのバージョン管理など細かい設定を行うことができません。

そこでBundlerの出番です。Bundlerを用いることで、gemパッケージ（ライブラリ）の導入やバージョン管理をスムーズに行うことができます。

gemコマンドもrbenvによりバージョン管理されているため、作業ディレクトリで以下のコマンドを叩き、gemコマンドによりBundlerを導入します（BundlerもRubyGemsにより提供されています）。

```
$ gem install bundler
```

次に、Bundlerにより、開発で利用しているgemパッケージ群をインストールします。この時、どのgemパッケージを用いるかは、Gemfileに記されています。

```
$ bundle install
```

以上で、プロジェクトで用いているgemパッケージを導入することができました。

#データベースの設定
データベースの種類により設定方法が変わりますが、Rails側ではRakeコマンドを用いてデータベースの作成とテーブルの作成を行うのみです。

```
$ bundle exec rake db:create
$ bundle exec rake db:migrate
```

また、MySQLやPostgreSQLでは接続先データベースやユーザなどを設定する必要があります。プロジェクトでどのデータベースを用いているか確認した上で、config/database.ymlに書かれている内容をデータベースに設定する（DBやユーザの作成など）を行います。例えば、PostgreSQLの場合の設定は[MacのRailsアプリでPostgreSQLを使う方法](http://qiita.com/yh2020/items/8be3087004d100fe752b)を参照ください。

#プロジェクトの動作確認
プロジェクトによっては、他にも設定箇所がある場合もありますが、基本的には上述した内容で環境設定終了です。Railsサーバを立ち上げ、ブラウザで動作確認を行いましょう！

```
$ bundle exec rails s
```
2点の座標と角度の中間を求める

Vector3.Lerp と Quaternion.Lerp が便利

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

public class BlendedPosition : MonoBehaviour
{
	[SerializeField] private Transform a;
	[SerializeField] private Transform b;
	
	void Start ()
	{

	}

	void Update ()
	{
		transform.position = Vector3.Lerp(a.position, b.position, 0.5f);
		transform.rotation = Quaternion.Lerp(a.rotation, b.rotation, 0.5f);
	}
}
```

追記：2015/11/08

そもそも２点間の中間をもとめるには、補間方法が違う Lerp と Slerp があります。
http://docs.unity3d.com/jp/current/ScriptReference/Vector3.Lerp.html
http://docs.unity3d.com/jp/current/ScriptReference/Vector3.Slerp.html

パフォーマンスと精度に違いあるようですが、試してないので不明です。
http://forum.unity3d.com/threads/what-is-the-difference-of-quaternion-slerp-and-lerp.101179/

補間の違いについては下記コメントの @Ushio@github さんのコードがすごく分かりやすいです。
FuelPHPのRESTコントローラーをPHPUnitでテストする方法

例として、http://www.example.com/hoge/list を想定する。

テストコード内のRequestオブジェクトだけでは、RESTのフォーマットを定義することが出来ない模様。
( core/controller/rest.php の _detect_format() でフォーマットが判断されているので、詳細はソースを閲覧のこと )

一番簡単なのは、$_GETパラメータにformatを設定する方法だと思われる。

下記のコードでは、フォーマットがjsonのデータでアサーションすることを想定。

# 方法案

| 方法 | メリット | デメリット |
| --- | --- | --- |
| $_GETパラメータでformatを設定する | 簡単 | リクエスト毎に設定する必要がある |
| RestControllerのフォーマットを決め打ち | ソースが見やすい | URLでフォーマットを決めることが出来ない(list.json, list.xml も全て同じフォーマットになる) |
| RestControllerのparam()メソッドを上書き | | 影響範囲が不明 |


# 基本のコード

== Restコントローラー

```
<?php

class Controller_Hoge extends Controller_Rest
{
        public function get_list()
        {
                $this->response( array("ooo") );
        }

}
```


## テストコード

```
<?php
class Test_Controller_Hoge extends \TestCase
{
    protected function setUp()
        {
                parent::setUp();
        }

    protected function tearDown()
        {
                parent::tearDown();
        }

    public function test_index(){
                $request =  Request::forge('/hoge/list', true)->execute();
                $response = $request->response();

                $expect = '["ooo"]';
                $this->assertEquals( $expect, $response->body );
        }
}

```


# 各方法の実装

## $_GETパラメータでformatを設定する

テストコードに、以下の様に ``` $_GET ``` 変数を設定する

```
<?php
class Test_Controller_Hoge extends \TestCase
{
    protected function setUp()
        {
                parent::setUp();
        }

    protected function tearDown()
        {
                parent::tearDown();
        }

    public function test_index(){
                $_GET = array( "format" => "json" );
                $request =  Request::forge('/hoge/list', true)->execute();
                $response = $request->response();

                $expect = '["ooo"]';
                $this->assertEquals( $expect, $response->body );
        }
}

```


## RestControllerのparam()メソッドを上書き

Restコントローラーに、以下の様に param() メソッドを定義

```
<?php

class Controller_Hoge extends Controller_Rest
{
        public function get_list()
        {
                $this->response( array("ooo") );
        }


        public function param( $param, $default = NULL ){
                if( $param == "format" ){
                        return "xml";
                }else{
                        return $parent::param( $param );
                }
        }
}
```


## Restコントローラー内でフォーマットを固定してテストを行う

Restコントローラー内に、$format 変数を定義する

```
<?php

class Controller_Hoge extends Controller_Rest
{
        protected $format = "json";

        public function get_list()
        {
                $this->response( array("ooo") );
        }

}
```
独自ドメインでのrails Action Mailerのエラーを直す（Postfix編）

独自ドメイン設定の際に面倒だったのでメモ（Ubuntu 14.04）。
# 証明書とドメイン名が合っていないと認めません
postfixが使うサーバーの証明書とActionMailerのドメインが合っていないと

OpenSSL::SSL::SSLError (hostname *** does not match the server certificate)

と怒られる

# 解決策その１
SSLを使わなければいい！

```rb:config/application.rb
    config.action_mailer.smtp_settings = {
      :address => 'example.jp',
      :openssl_verify_mode  => 'none' #←これな
    }
```
…というのは乱暴すぎるので

# 解決策その２
証明書を作る

```shell-session:
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
```

住所とかいろいろ聞かれるので適当に答える←だめ
コモンネームが重要！独自ドメインを入力する

```shell-session:
Common Name (eg, YOUR name) []:example.jp
```

postfixはパスフレーズのついた証明書が読めないので解除してあげる

```shell-session:
openssl rsa -in server.key -out server_noenc.key
```

コモンネームが設定できたかは以下で確認

```shell-session:
openssl x509 -noout -text -in server.crt
```
## Postfix側の設定
証明書ができたらPostfixに教えてあげる

```vim:/etc/postfix/main.cf
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/server.crt
smtpd_tls_key_file=/etc/ssl/private/server_noenc.key

# 下記も設定
myhostname = example.jp
mydestination = localdomain, localhost, localhost.localdomain, localhost, example.jp
```

設定をリロード

```shell-session:
sudo service postfix reload
```
※サービス登録してない場合は起動スクリプトで＾＾

以上。

# 参照元
https://help.ubuntu.com/lts/serverguide/postfix.html
https://help.ubuntu.com/lts/serverguide/certificates-and-security.html
http://oxynotes.com/?p=4547
http://shimotori.github.io/blog-it/2013/05/15/1-rails-actionmailer-hostname-does-not-match-the-server-certificate/
https://www.geotrust.co.jp/support/ssl/csr/apache_openssl_new.html

## spfも設定すると迷惑メールになりにくいのかも
お名前の場合
http://powerbiz.jp/abiz/spfrecord/archives/7763/
android sdkをダウンロードして仮想デバイスを作る

Android Studioを使わずに、Android SDKをダウンロードして仮想デバイスを作るまで。

まず、Android SDKを[ここ](http://developer.android.com/intl/ja/sdk/installing/index.html)からダウンロードしてくる。（2015/11/06の時点でv24.4.1が最新）

落ちてきたファイルを解答して、テキトウな場所に置く。（今回はホームに置いた想定。）

```bash
$ cd ~/Download
$ unzip android-sdk_r24.4.1-macosx.zip
$ mv android-sdk-macosx ~/android-sdk
```

android sdkへのパスを設定する。

```bash
$ echo "export PATH=$PATH:/Users/<username>/android-sdk/tools" >> ~/.zshrc
$ echo "export PATH=$PATH:/Users/<username>/android-sdk/platform-tools" >> ~/.zshrc
$ source ~/.zshrc
```

コマンドを実行して、パスが通っていることを確認する。

```bash
$ android -h

       Usage:
       android [global options] action [action options]
       Global options:
...

$ adb version
Android Debug Bridge version 1.0.32
Revision eac51f2bb6a8-android
```

ターミナル上で`android`コマンドを実行してSDKマネージャーを起動し、必要な物をインストールする。
（特にこだわりがなければ、デフォルトで選択されているものをそのままインストールしてしまえばいい。）

インストールが完了したら、同じくターミナル上で`android avd`コマンドを実行して仮想デバイスの設定を行う。  

まとめると、

* android sdkを落としてくる
* パスを通す
* `android`コマンドで必要な物をインストール
* `android avd`で仮想デバイスを設定（<- ここ大事）
AtlasにOpenVAS in CentOS7 のboxを追加

脆弱性診断をするために、[OpenVAS](http://www.openvas.org/) をインストールした仮想マシンをつくりました。
折角なので、再利用できるようにvagrantのboxファイルにして、[Atlas](https://atlas.hashicorp.com/)にのせました。

もとになるCentOS7は[Vagrantbox.es](http://www.vagrantbox.es/) から

## 入手方法

https://atlas.hashicorp.com/nslender/boxes/openvas に、諸々の情報があります。

vagrantをつかってたちあげるには下記手順でOKです。

```
vagrant init nslender/openvas
vagrant up --provider virtualbox
```

127.0.0.1:2222からvagrant/vagrantでsshログインできます。
vagrantユーザはパスワードなしsudo可能です。（この辺はvagrantの公式サイトにあるとおり） 

## OpenVAS管理ページ

Guestマシンでは、https://localhost:9392 でアクセスできます。ホストからアクセスするには、ポートフォワーディングかNATの設定などを適宜してください。

### PDFレポートできます。

どうやらlatexのライブラリが必要のようです。
http://openvas-discuss.wald.intevation.narkive.com/gCiEGTTs/openvas-8-on-centos-7-pdf-generation-failed

紆余曲折を経たあげく、 `yum install texlive-collection-latex texlive-collection-latexrecommened` をしたら、レポートのPDF出力できるようになりました。（この2ついれるのに依存関係を150くらいいれているので微妙な気がしますが...）

### TimezoneはAsia/Tokyo　

国内の作業で使うからです。

### chronydは起動済み

`yum install chrony` して、設定かえずに起動しています。ネットがつながるところなら、起動すれば時刻調整されるはずです。

### まとめ

Atlas経由だと、仮想マシンの取得がかなり気楽、git pullで入手するような感覚。
仮想マシンの使いまわしもやりやすそう。

#### 参考サイト

http://qiita.com/yunano/items/7883cf295f91f4ef716b

http://qiita.com/dumpty-alma@github/items/0e43c1b585f1fb90ec8e
EV3+ROS+ev3_robot_gyro_carを読んでみた

ROS初心者が[こちら記事](http://qiita.com/mechamogera/items/504fcf57153086094ba2)を読みつつgyro_carを動かしてみた。なんとなく動いたけど中身がどうなってるのか知りたかったので、軽く調べたメモ。

# 登場するノード
以下の8つ
* nxt_teleop
* base_controller
* ev3_ros
* js_agg
* robot_pose_ekf
* base_footprint_fixed_publisher
* robot_state_publisher
* base_odometry


![Screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/17960/f26603e7-820e-f1ae-59d6-010574fbb68b.png)

# 各ノードの役割
※使ってなさそうなノードは調べてません

## nxt_teleop
C++で書かれている（他のノードはpython）
キーボードの入力を拾って矢印キーが入力された場合に前進後退、旋回の指定値を/cmd_velに書き込む。0.15秒おきに/cmd_velの初期化が走っている。

/cmd_velの構造は以下のようになっている。使っているのはlinear:xとangular:zのみで、-1,0,1のいずれかの値をとる。

```
linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
```

## base_controller
nxt_teleopの入力(/cmd_vel)とEV3のモータの状態(/joint_stats)から次のモータの出力値を/joint_commandに書き込む。

/joint_commandの構造は以下のようになっている。左右それぞれのモータ出力値が出ている

```
name: l_wheel_joint
effort: 19.7664285714
---
name: r_wheel_joint
effort: 19.7664285714
```

## ev3_ros
gyro_carの本体。メインループがあり、rpycを使ってEV3とコネクトしている。
/joint_controllerからの出力値を読み、値を補正してmortorを駆動させている。
モータの状態を/joint_stateに、超音波センサの値を/ultrasonic_sensor、ジャイロセンサの値を/gyro, /gyro_imuに書き込んでいるが、/joint_state,/gyro_imu以外は使われていない。
モータやセンサの構成情報などはev3_robot_gyro_carの方に設定がある。

/joint_stateの構造は以下のようになっている。

```
header:
  seq: 9122
  stamp:
    secs: 1446688086
    nsecs: 660684108
  frame_id: ''
name: ['l_wheel_joint']
position: [5.654866776461628]
velocity: [1.0]
effort: [0.0]
```

## js_agg
ev3_rosからのモータフィードバック(/joint_state)をバリデーションし、base_controllerが読める形式に繋げて/joint_statesに書き込んでいる。
バリデーションの内容はnameの数とposition,velocity,effortのデータ数が一致しているかを見ている程度。

/joint_statesの構造は以下のようになっている。

```
header:
  seq: 18539
  stamp:
    secs: 1446695836
    nsecs: 102682113
  frame_id: ''
name: ['l_wheel_joint', 'r_wheel_joint']
position: [8.377580409572781, 31.747539093776854]
velocity: [1.0, 1.0]
effort: [0.0, 0.0]
```

## その他のノード
値を読んだり書いたりしているが、ev3_rosに影響していないので読んでいない。
将来的にrobot_pose_ekfで倒立制御をしたりするのかな？

# 参考にしてモーター2つのロボを動かしてみた
ev3_robot_gyro_carを参考に、必要なノードのみでロボを動かしてみた

## 構成
* (モーター＋車輪) * 2
* 倒立制御をしないため、本体をささえるためのベアリング1

![robo.JPG](https://qiita-image-store.s3.amazonaws.com/0/17960/71ccb006-a812-3e99-8b7f-70a9f968e204.jpeg)

## ノード構成
ev3_robot_gyro_carを参考に必要なパッケージだけを抜き出し。ロボの設定を変更するだけで動作した。

![Screenshot-2.png](https://qiita-image-store.s3.amazonaws.com/0/17960/8431e7b3-0687-94bf-01c4-71d6b6436ddb.png)
deleteやfreeにメモリ内容のクリア機能がないのはなぜ？

こんにちは。素朴な疑問なのですがdeleteやfreeを使った場合メモリの内容をクリアしないというCやc++の仕様があるのですがこれはなぜなのでしょうか？

たとえば以下のように書いた場合、ほぼ正常に動きます

```cpp
int *a;

// 領域確保
a = new int;

// 値代入
*a = 100;

// 領域開放
delete a;

// 開放領域にアクセスしているにもかかわらず、正常に終わる（高確率で100を出力する）
cout << *a << endl;
```

このように開放した領域にアクセスしても、開放場所のメモリが再利用されていなければ元の値がそのまま返されます

これがどうにも解せなく思います。

このせいで開放領域にアクセスしても「動いてしまう」ことによりバグチェックをすり抜け、再現性のないバグの温床にもなります（何度も見ました）

内部的にはcoutの処理はaのアドレスにアクセスしているだけなので、そこに有効な値があれば返してくるというカラクリです。しかしdeleteしているのであるから、このような場合はエラーを返すか100でない値を返すのが筋だと思います。なぜdeleteやfreeには使っていた部分をクリアする機能がついていないのでしょうか？自前でクリア機能付きのアロケーター作れといわれればそれまでなのですが・・・

個人的にはdeleteの処理を「開放」と訳したのもクリアもセットでやってくれると勘違いする人が増えるので「放棄」くらいにしとけばよかったのではないとも思います。誰が最初に訳したのかは知らないですけど・・・
グローバルIPが変わる環境でもAWS接続のACLを簡単に変更してアクセス

AWS ではVPCのネットワークACLを利用してアクセス制限をかける。特に、ssh(ポート22) は特定のIPからの接続しか許可しないのが普通だと思う。セキュリティグループを使う場合もあるけど、ここでは、ネットワークACLで制限をかけている前提。

wifi ルーターなんかのグローバルIPが変動するもの経由でIPのしぼられたサーバに接続したい時、通常 VPN を使うだろうけども、それがない場合は ACL を変更してアクセスすることになる。そういう時の楽で間違えない対応方法ということで。

# 前提
環境は Mac で。Windows でも基本的に同じことができるが、sed とか無いので、bash とかを cygwin なんかで入れてもらうのがてっとりばやそう。

# 普通のやり方
いちいちAWSマネジメントコンソールにログインして VPC-->ネットワークACLのインバウンドを修正する、というのが普通のやり方。毎回は面倒くさい。

# コマンドラインで出来ないか？
コマンドラインでこれを実現するには、
- 自分のグローバルIPの取得
- ACLの設定（変更）
ができれば良いよな、できるよな・・・と思い立った。
# 前準備
## pip と awscli をインストールする。
コマンドラインで以下を実行。

```bash:install-pip-awscli
$ sudo easy_install pip
$ sudo pip install awscli
```

awscli 利用するために若干設定が必要だけど、これはいろんなところに情報あるので省略する。

# 自分のグローバルIPの取得方法
グローバルIPを返してくれるサービスを使う。ifconfig.me が定番だけどえらい遅いので、別のを使う。今回は、httpbin.org/ip を使った。レスポンスが json なんで、必要な所だけ切り出して使う。

```bash:get-my-global-ip
$ curl -s httpbin.org/ip | sed -n -e "s/.*: .\(.*\).$/\1/p"
```

これで、自分の IP アドレスだけ表示されたらOK。

# aws コマンドと組み合わせたワンライナー
事前に書き換えたい network-acl-id、ACLの rule-number を確認しておいて、以上を使ったワンライナーが以下。ここでは network-acl-id が acl-acsdee9c9、ACLインバウンドの rule-number が2200番を指定した。

```bash:open-my-global-ip
$ aws ec2 replace-network-acl-entry --network-acl-id acl-acsdee9c9 --ingress --rule-number 2200 --protocol all --rule-action allow --cidr-block `curl -s httpbin.org/ip | sed -n -e "s/.*: .\(.*\).$/\1/p"`/32
```

長くてゴメン。

必要であればこれをそのままシェルスクリプトにすればいい。自分のグローバルIP の部分を任意のグローバルIPにすることも出来るので、日常のオペレーションでもこれを使ったほうが間違いが少ないように思う。

いじょ。
Redux + Relay : Adrenaline


# 概要

Redux 上で Relay 的な実装ができる [Adrenaline](https://github.com/gyzerok/adrenaline) について調べました。


# 動機

React で GraphQL を使う場合、[Relay](https://facebook.github.io/relay/) を使うのが一般的です。

しかし、新規のプロジェクトでいきなり GraphQL というのはリスクがあるので、まずは Redux + REST で作っておき、少しずつ（例えば１画面ずつ） Relay + GraphQL に置き換えていければ、GraphQL を試すのには良いと考えました。

残念ながら、Relay も Redux も state を自分で管理しているため、外部から state を変更されると期待通りに動作せず、Relay と Redux を組み合わせることはできません。（[参考](https://github.com/rackt/redux/issues/464)）

そこで、Redux で Relay と同じような記法で書ける [Adrenaline](https://github.com/gyzerok/adrenaline) について調べました。

今回は [adrenaline/example](https://github.com/gyzerok/adrenaline/tree/master/example) に少し修正を入れた [sample_js_adrenaline](https://github.com/yasuhiro-okada-aktsk/sample_js_adrenaline) を使って説明します。

# Root

まず Root に ```<Adrenaline>``` を追加します。

```js:src/client/index.js
ReactDOM.render(
  <Adrenaline schema={schema} renderLoading={Loader} createStore={createStore} >
    {() => <Router history={history} children={routes} />}
  </Adrenaline>,
  rootNode
);
```

追加の middleware がない場合は、```createStore={createStore}``` を省略できます。

# Smart and Dumb component

Adrenaline では Redux の [Smart and Dumb component](https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0) の考え方に基づいて、 Smart component で query や mutation を記述し、Dumb component に fragment を記述するようになっています。

```Relay.createContainer``` の代わりに、それぞれ ```createSmartComponent``` / ```createDumbComponent``` を使って記述します。


```js:src/src/client/components/TodoApp.jsx
class TodoApp extends Component {
  :
}

export default createSmartComponent(TodoApp, {
  initialArgs: {
    count: 2,
  },
  query: `
    query TodoApp($count: Int) {
      viewer {
        id,
        ${TodoList.getFragment('todos')}
      }
    }
  `,
  mutations: {
    ...todoMutations,
  },
});
```

```js:src/client/components/TodoItem.jsx
class TodoItem extends Component {
  :
}

export default createDumbComponent(TodoItem, {
  fragments: {
    todo: `
      Todo {
        text
      }
    `,
  },
});
```

以上のような記述で、Action の発行、GraphQL への fetch、props への反映をすべて Adrenaline が行ってくれます。

mutation も ```this.props.mutations.createTodo({text: "buy apple"})```  のように ActionCreator と同じように使えます。

# 問題点

Redux + REST のプロジェクトから GraphQL への段階的な移行が目的でしたが、まだ次のような問題があります。

* GraphQL しか書けない。
* Reducer が追加できない。

今のままでは、Reducer が追加できないため、REST 通信などができなくなります。
これらについては、[こちらのプルリク](https://github.com/gyzerok/adrenaline/pull/16) の Adapter で解決されます。

# 最後に

[Adapter を拡張したプルリクの Adrenaline](https://github.com/gyzerok/adrenaline/pull/16) は実用的なレベルだと思います。
時間ができたら Relay で同じ実装をして比べてみようかと思います。

# 参考

* [gyzerok/adrenaline](https://github.com/gyzerok/adrenaline)
* [Relay and Redux · Issue #464 · rackt/redux](https://github.com/rackt/redux/issues/464)
Androidの実行時パーミッションチェックを実装する

カメラや外部ストレージを利用する場合、Android 6.0から実行時にパーミッションチェックを行う必要がある。
support v4ライブラリに含まれる`ContextCompat`と`ActivityCompat`を使うことで、旧バージョンとの互換性に関するコードは書かなくてよくなるが、それでもいろいろとめんどくさい。

```java:カメラパーミッションをチェックする例
int permissionCheck = ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA);

if (permissionCheck != PackageManager.PERMISSION_GRANTED) {

    // Android 6.0 のみ、該当パーミッションが許可されていない場合

    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
        // パーミッションが必要であることを明示するアプリケーション独自のUIを表示
    }

} else {
    // 許可済みの場合、もしくはAndroid 6.0以前
    // パーミッションが必要な処理
}
```

パーミッションダイアログはシステムが管理しておりテキストなどを調整することはできないので、なぜそのパーミッションが必要なのか等を説明するUIを用意して`パーミッションが必要であることを明示するアプリケーション独自のUIを表示`のところで表示することが推奨されている。この画面にパーミッションが必要である理由を説明する文や絵と、パーミッションダイアログを表示するためのボタン等を表示する。

パーミッションダイアログを表示するには`ActivityCompat.requestPermissions`を呼ぶ。引数にActivityのインスタンスと利用したいパーミッションを文字列配列で渡す。

```java:カメラパーミッションをリクエストする例
static final int REQUEST_CODE = 1;
ActivityCompat.requestPermissions(activity, new String[]{
        Manifest.permission.CAMERA
}, REQUEST_CODE);
```

すると、こうなる
![device-2015-11-06-162256.png](https://qiita-image-store.s3.amazonaws.com/0/56668/648f94ec-6b8a-b49e-a934-e7c3f76e7517.png)

パーミッションダイアログの結果はActivityに`ActivityCompat.OnRequestPermissionsResultCallback`をimplementして`onRequestPermissionResult`をオーバーライドすることで取得する。
support v4の`FragmentActivity`はこのインターフェースを実装しているので、すでにこれを継承してアプリを作っている場合は単に`onRequestPermissionsResult`をオーバーライドするだけで良い。

```java:パーミッションダイアログの結果を受け取る例
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE: {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // パーミッションが必要な処理
            } else {
                // パーミッションが得られなかった時
                // 処理を中断する・エラーメッセージを出す・アプリケーションを終了する等
            }
        }
    }
}
```

複数のパーミッションを一度にリクエストする場合は、それぞれについて許可・拒否が行われる可能性がある。その場合、`permissions`一つ一つをチェックして適切な処理を行う必要がある。

ちなみにどうしてもこのパーミッションを実装できない場合は、とりあえず`targetSdkVersion`を23未満にしておくことでAndroid 6.0でも従来のパーミッション方式で動作するので、その場しのぎにはなる。
PyCharmで Fatal Python error: Py_Initialize: can't initialize sys standard streams LookupError: unknown encoding: windows-31j が発生する場合の対処

PyCharm/Python Commynity Edition Pluginで以下のエラーが発生する場合の対応方法

```pycon
Fatal Python error: Py_Initialize: can't initialize sys standard streams
LookupError: unknown encoding: windows-31j

Process finished with exit code 3
```

PyCharm(IDEA)のインストールディレクトリにある`bin/pycharm.exe.vmoptions`(`idea.exe.vmoptions`)に、以下を加える。

```
-Dfile.encoding=UTF-8
```

これで対応可能。

* 2015/11/11にリリースされた143.595では対応済み([PyCharm 143.595 Release Notes](https://confluence.jetbrains.com/display/PYH/PyCharm+143.595+Release+Notes))
* Pluginで使っている人は、2015/11/12リリースの143.382ではまだ修正の当たった5.0.143.116~をインストールすることができない(plugin is incompatible with this installationが発生)。[Early Access Program](https://confluence.jetbrains.com/display/IDEADEV/IDEA+15+EAP)でマイナーバージョンを更新する手もあるが、別の問題が発生する可能性もあり微妙。

Bug Tracker

* [PY-17458 Fatal Python error: Py_Initialize: can't initialize sys standard streams](https://youtrack.jetbrains.com/issue/PY-17458)
* [PY-17100
Project encoding is ignored](https://youtrack.jetbrains.com/issue/PY-17100)
Mac環境（El Capitan）にpyenvからpython環境を構築し直す方法


## pyenvとpip-rehashを入れておく

```bash
brew install pyenv
brew install homebrew/boneyard/pyenv-pip-rehash
```

.zshrc（Shellに応じて変えてください）に必要最低限の設定を投入
PYENV_ROOTを設定している記事もありますが、pythonのインストール先の変更は特に必要ありません。
デフォルトでは`~/.pyenv/shims`にインストールされますが、どうしても変更したいのであれば設定しましょう。

```bash
vi ~/.zshrc
```

```bash
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
```

```bash
source ~/.zshrc
```

## pyenvでpython3.5.1を入れる

インストールできるバージョンの確認

```bash
pyenv install -l
```

バージョンを指定してインストール

```bash
pyenv install 3.5.1
```

システムデフォルトのpythonをインストールした3.4.3に変更する
`pyenv local x.x.x`はカレントディレクトリだけのpythonバージョンになるので、システム全体で変更する場合はglobalを使います。

```bash
pyenv global 3.5.1
```

設定を反映

```bash
pyenv rehash
```

切り替わっているか確認

```bash
python --version
```

pythonのパッケージ管理用のpipをインストール

```bash
easy_install pip
```
CoreData at Github

##Getting Started1

開始するためにまず、あなたのプロジェクトの"pchファイル"にMagicalRecord.h headerfileをimport(外部データを取り入れる。)しましょう

これは、必要とするすべてのheaderファイルを"グローバルインクルード"を許可するためです。

もしあなたがCocoaPodsやMagicalRecord.frameworkを利用してimportをするならこんな感じでやりましょう。

```
// Objective-C
#import <MagicalRecord/MagicalRecord.h>
```

```
// Swift
import MagicalRecord

```

もしくは、あなたがMagicalRecord's source filesObjective-C projectに直接追加したいなら、あなたはこんな感じでやる必要があります。

```
#import "MagicalRecord.h"
```

##Getting Started2

次にiOSアプリのDelegateファイルで次のMagicalRecord Classの"Setup calls" => setupCoreDataStackメソッドのうちの一つを使います。このメソッドには、初期化の意味合いとデータの永続保存の設定の意味合いがあります。
そしてapplicationDidFinishLaunching: withOptions: methodかもしくはawakeFromNibで使用します。

```
+ (void)setupCoreDataStack;
+ (void)setupAutoMigratingCoreDataStack;
+ (void)setupCoreDataStackWithInMemoryStore;
+ (void)setupCoreDataStackWithStoreNamed:(NSString *)storeName;
+ (void)setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName;
+ (void)setupCoreDataStackWithStoreAtURL:(NSURL *)storeURL;
+ (void)setupCoreDataStackWithAutoMigratingSqliteStoreAtURL:(NSURL *)storeURL;
```

それぞれの呼び出しは、CoreDataStackの各部分のいずれかをインスタンス化し、getter/setterメソッドをインスタンスに提供します。これらはMagicalRecordのインスタンスとして知られていて、そして初期設定として認められています。


あなたのiOSアプリが終了するときに、あなたは"cleanUp"クラスメソッドを呼び出す必要があります。

```
[MagicalRecord cleanUp];
```


##学習

pchファイル
グローバルインクルード
セットアップコール

##参考URL
https://github.com/magicalpanda/MagicalRecord
http://qiita.com/key/items/1bbd72abc54e52639041
RubyからGoの関数をつかう → はやい

この記事ではRuby2.2.3とGo1.5.1を使用しています。

# すごい要約
[Go and Ruby-FFI - Code7 Interactive](http://c7.se/go-and-ruby-ffi/)を読むといい。

# Go、はやい
最初にRubyとGoの計算速度を比べるため、フィボナッチ数を単純に計算するやつをそれぞれ書きました。

```rb:fib.rb
def fib(n)
  return n if n <= 1
  fib(n - 1) + fib(n - 2)
end

puts fib(40)
```
```go:fib.go
package main

import "fmt"

func fib(n uint) uint {
	if n <= 1 {
		return n
	}
	return fib(n-1) + fib(n-2)
}

func main() {
	fmt.Println(fib(40))
}
```

比較のためにできるだけ単純に同じロジックで実装しました。
実行結果は以下です。

```:Ruby
> time ruby fib.rb
102334155
ruby fib.rb  19.00s user 0.11s system 92% cpu 20.690 total
```
```:Go
> time go run fib.go
102334155
go run fib.go  1.24s user 0.25s system 84% cpu 1.758 total
```
```:ビルド済みGo
> time ./fib
102334155
./fib  0.80s user 0.01s system 89% cpu 0.903 total
```

この処理だと圧倒的にGoの方がはやいようです。
「Rubyより、ずっとはやい！！！！！！」

# Goを共有ライブラリにする
GoをRubyから利用するためには、まずShared Libraryとしてコンパイルします。
ここらへんは「[Golang で Shared Library を出力する。](http://qiita.com/yanolab/items/1e0dd7fd27f19f697285)」を参考にさせていただきました。
Goのビルド時に```-buildmode=c-shared```オプションを渡すとよしなにしてくれます。

ただ、今のままだとRubyから関数が呼べないのでGoのソースを書き換えます。

```go:fib.go
package main

import "C"

//export fib
func fib(n uint) uint {
	if n <= 1 {
		return n
	}
	return fib(n-1) + fib(n-2)
}

func main() {}
```

ポイントはCをインポートするのと、```//export fib```を追記する点です。
Rubyから呼べる関数を明示的に選べます。
```main()```は実行されませんが、コンパイル上必要なので書いておきます。
これで

```
> go build -buildmode=c-shared -o fib.so fib.go
```

fib.so と fib.h がディレクトリに作成されたら成功です。


# RubyからGoの関数を呼ぶ
共有ライブラリとしてコンパイルしたGoをRubyから扱うにはFFIを使用します。
そもそもFFIとは[Foreign function interface](https://ja.wikipedia.org/wiki/Foreign_function_interface)の略で、[ffi](https://github.com/ffi/ffi)というgemがこれをRubyでもいい感じにやるぞ！ってやつです。

まずインストール。

```
> gem install ffi
```

Ruby-FFIはRubyのオブジェクトに他言語の関数をアタッチしていく感覚で使用します。

```rb:go-fib.rb
require "ffi"

module Fib
  extend FFI::Library
  ffi_lib "fib.so"
  attach_function :fib, [:uint], :uint
end

puts Fib.fib(40)
```

この```attach_function()```の引数は、「関数名、[関数の引数型]、戻り値型」です。
ちなみに型として利用できるのは[Types · ffi/ffi Wiki](https://github.com/ffi/ffi/wiki/Types)に一覧があります。
今回は数値だったのでそこまで問題はありませんが、文字列をやりとりする場合は、
Goの関数内で受け取ったCのstringを```C.GoString(str)```としたり、逆にGoのstringを```C.CString("Go no string dayo!!!!!")```
するなど適宜変換してあげる必要があります。
詳しくは[cgo - The Go Programming Language](https://golang.org/cmd/cgo/)を参照！！！

# Ruby meets Go
はいここまで長かった！
速度の計測です。

```:RubyOnly
> time ruby fib.rb
102334155
ruby fib.rb  19.00s user 0.11s system 92% cpu 20.690 total
```

```:Ruby+Go
> time ruby go-fib.rb
102334155
ruby go-fib.rb  0.85s user 0.06s system 95% cpu 0.953 total
```

約20倍はやい！！！！！！すごい！！！！！！！！！！！！！！
Go単体での実行に毛が生えた程度になりました！！！！！！！！！！！！！！！！！！
もう「Rubyより、ずっとはやい」なんて言わせないぞ！！！！！！！！

こうやってそれぞれの得意分野でよろしくやっていくのが平和でよいなと思いました。

# 参考
[Golang で Shared Library を出力する。 - Qiita](http://qiita.com/yanolab/items/1e0dd7fd27f19f697285)
[ffi/ffi](https://github.com/ffi/ffi)
[cgo - The Go Programming Language](https://golang.org/cmd/cgo/)
[Go and Ruby-FFI - Code7 Interactive](http://c7.se/go-and-ruby-ffi/)
トリビア：MessageBox に表示されている内容をクリップボードにコピーできる

![QueryOverwrite.png](https://qiita-image-store.s3.amazonaws.com/0/67318/b947c9a8-23c3-34ca-d288-53224bed5df7.png)

キーボード操作：Ctrl+C (Copy)

```lang:Clipboard
[Window Title]
ペイント

[Main Instruction]
無題 への変更内容を保存しますか?

[上書き保存(S)] [保存しない(N)] [キャンセル]
```

エラーレポートが捗るのでぜひ利用していただきたい。
'●●●.csv'は、実際にはその拡張子が示すファイル形式ではありません　エラーは初めのセルが原因

CSVファイルをMicrosoft Office Excel 2007、 Excel 2003 で開く際、
初めのセルが”ID”だとエラーになります。
（エラーが出て、はいを押せば開ける）

CSVの中身が以下のような場合、

ID,hall_id,
あああ,いいい,

以下のエラーメッセージが出ます。

>開こうとしている　'●●●.csv'は、実際にはその拡張子が示すファイル形式ではありません。このファイルを開く前に、ファイルが破損してないこと、信頼できる発行元からのファイルであることを確認してください。ファイルを今すぐ開きますか？

はい　をクリックすると、

>Excelは、'●●●.csv'がSYLKファイルであることを確認しましたが、読み込みことができません。ファイルにエラーが含まれるか、SYLKファイル形式でない可能性があります。異なるファイル形式でそのファイルを開くには[OK]をクリックしてください。

OKをクリックすると、CSVファイルは開けます。

初めのセルをIDではなくしたり、IDをaIDなどにすると上記エラーが解消します。
Qiita > コーディング > 空白の数が正しく扱えない。

コーディングの時に1行のコード記法では空白の数を正しく扱えない。

`[ ]`
`[   ]`
`[      ]`


対策: 複数行のコーディング記法を使う。

```
[  ]
```

```
[     ]
```

```
[          ]
```
16进制颜色使用

```c
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
```
新しく macOS Sierra をインストールしたので環境設定を書いてみる

# 環境
- MacBook Pro (Mid 2013)

にクリーンインストール！！！

# 初期設定
## 日本語入力
日本語入力は標準のライブ変換が便利すぎるので，これを使うと良い．

## 3 本指ドラッグ
System Preferences -> Accessibility -> Mouse & Trackpad -> Trackpad Options... -> Enable dragging を three finger dragging として，3 本指ドラッグを有効にする．

## Finder のアイコンを揃える

Finder で ⌘J，Arranged By: Name, Sort By: Name とする．

## SSH 鍵の生成

```
ssh-keygen -t rsa -b 4096
```


# Homebrew のインストール

まずは，Command Line Tools for Xcode をインストール．

```zsh
xcode-select --install
```

続いて Homebrew のインストール．

```zsh
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

[homebrew-rmtree](https://github.com/beeftornado/homebrew-rmtree) がよさげなのでこちらもインストール．

```zsh
brew tap beeftornado/rmtree && brew install beeftornado/rmtree/brew-rmtree
```

以下，Homebrew の使い方．

```
フォーミュラの更新
brew update

パッケージの更新
brew upgrade

パッケージの検索
brew search $package_name

パッケージの削除
brew remove $package_name

パッケージとそれにのみ依存するパッケージを削除
brew rmtree $package_name
```


# Homebrew を使って諸々のインストール

```zsh
brew install wget homebrew/gui/inkscape ghostscript imagemagick
brew cask install google-chrome dropbox adobe-reader atom mendeley-desktop vlc
brew cask install intellij-idea clion pycharm rubymine
brew cask install xquartz java 
brew install python python3
```

## dotfiles のリンク

僕は Dropbox に dotfiles を置いて，シンボリックリンクを貼って使っています．

次のスクリプトを使うと，同一ディレクトリに存在する `.*` を `~/.*` にリンクします．

[y-sira/autolink: A Dotfile Management Tool with Dropbox](https://github.com/y-sira/autolink)

## Zsh の導入

Homebrew から最新版の Zsh をインストールします．

```zsh
brew install zsh
```

Zsh をログインシェルにします．

System Preferences -> Users & Groups -> [User Name] -> Advanced Options... の Login shell を `/usr/local/bin/zsh` にして，ターミナルを再起動．


## git の導入

```zsh
brew install git
```


## rbenv の導入

```zsh
brew install rbenv
echo 'eval "$(rbenv init -)"' >> .zshrc.local
source ~/.zshrc
rbenv install -l
rbenv install 2.3.1
rbenv global 2.3.1
ruby --version
```

## LaTeX の導入

[macOS Sierra に LaTeX 環境を作る - Qiita](http://qiita.com/sira/items/d7f5c411ccb0f90c43d8)
haskellで書いてみた

haskellで何か書いてみる練習。
iPhoneの画素情報の構造体のリストを計算してみる。
正しい記述なのかは不明。データ型の使い方を覚えた。

```hs:pixel.hs
{-

画素計算します。
多くのコードは以下を参照しています。
  http://walk.wgag.net/haskell/higherorder.html
-}

-- module PixelModule where

main = do { 
            print (map (name) (qsort iphones ++ ipads));
          }

type PixelSize = (Integer, Integer)

production ::  PixelSize -> Integer
production (x, y) = x * y

svga :: PixelSize
svga = (800,600)
fullHD = (1920,1080)



data DeviceInfo = DeviceInfo { name :: String, pixelSize :: PixelSize, retina :: Integer } deriving Show

iphone3 = DeviceInfo { name = "iphone3", pixelSize = (320, 480) , retina = 1 }
iphone4 = DeviceInfo { name = "iphone4", pixelSize = (640, 960) , retina = 2 }
iphone5 = DeviceInfo { name = "iphone5", pixelSize = (640, 1136) , retina = 2 }
iphone6 = DeviceInfo { name = "iphone6", pixelSize = (750, 1334) , retina = 2 }
iphone6p = DeviceInfo { name = "iphone6p", pixelSize = (1242, 2208) , retina = 3 }
ipad = DeviceInfo { name = "ipad", pixelSize = (768, 1024) , retina = 1 }
ipadair = DeviceInfo { name = "ipadair", pixelSize = (1536, 2048) , retina = 2 }
ipadpro = DeviceInfo { name = "ipadpro", pixelSize = (2048, 2732) , retina = 2 }


iphones = [iphone4, iphone5, iphone6, iphone6p, iphone3]
ipads = [ipad, ipadair, ipadpro]

size :: DeviceInfo -> Integer 
size  = production.pixelSize 





qsort :: [DeviceInfo] -> [DeviceInfo]
qsort [] = []
qsort (p:xs) = qsort lt ++ [p] ++ qsort gteq
                     where
                        lt = [x | x <- xs, size x < size p]
                        gteq = [x | x <- xs, size x >= size p]
```
ATOM(エディタ)でHTML作業に便利なShift-Enterで<br>タグをつっこむ方法

既知の高機能エディタ（SublimeTextやDreamweaver)はHTML作業中にShift + Enterで`<br>`タグを挿入してくれますが、Atomはデフォルトの設定ではできないので起動スクリプトと、キーマップファイルの設定をオーバーライド（上書き）します。

以下の2つのファイルを開き追記するだけでOKです。

<img width="251" alt="貼り付けた画像_2015_11_06_15_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/99479/c2e118d1-84b0-f2de-f6ee-93d5a92a887e.png">


**起動スクリプト**

```cson:init.coffee
atom.commands.add 'atom-text-editor',
  'insert-br': (event) ->
    editor = @getModel()
    editor.insertText("<br>")
```
※`insert-br`の部分は任意です。


**キーマップファイル**

```cson:keymap.cson
'atom-workspace atom-text-editor:not([mini])':
  'shift-enter': 'insert-br'
```


これでひとまず `<br>` タグは Shift + Enterで補完されます。
何か干渉やクリティカルな問題があればご報告ください。
(windows7) git-flowをgit bashで使用する設定


windows環境にて、`git bash`で`git-flow`を使用する設定を行った。



## 1.git-flowをクローン
`git bash`で以下のように操作。

```bash
$ git clone http://github.com/nvie/gitflow.git
```

## 2.`.gitmodules`の編集
クローンしてきたファイルを以下のように修正。

```pl:gitflow/.gitmodules
[submodule "shFlags"]
        path = shFlags
        url = http://github.com/nvie/shFlags.git
```

## 3.サブモジュールを取得
gitflow直下に移動して、以下のように操作。

```bash
$ cd gitflow
$ git submodule init
$ git submodule update
```

## 4.コマンドプロンプトでgit-flowのインストーラを実行
以下全て、`コマンドプロンプト`での操作。

コマンドプロンプトを`管理者として実行`したのちクローンしてきた
以下の例のようにgitflowディレクトリに移動して以下のコマンドを実行。

```bash
C:\Users\user\Desktop\gitflow>contrib\msysgit-install.cmd "C:\Program Files (x86)\Git"
```



以上で`git bash`で`git-flow`を使用することができる。


## 参考
[git-flowのインストールとブランチ運用前のリポジトリ準備](http://www.atmarkit.co.jp/ait/articles/1311/28/news042.html)
linux起動時に自動的に実行するコマンド（プログラム）の設定

~/.bashrc　の中に書き込むのとは別に、

/etc/rc.local　の中に書き込んでおけば、起動時に自動的に実行してくれる。

/etc/rc.local　に書き込むためには、root権限が必要なので、

sudo vi /etc/rc.local　
で編集する。

たとえば、

```rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
mount -t ext4 -o noatime /dev/disk/by-id/dm-name-isw_djicghdigb_work1p1 /work1
exit 0
```

mount -t ext4 -o noatime /dev/disk/by-id/dm-name-isw_djicghdigb_work1p1 /work1
を書いておくことで、起動時に毎回、外付けHDDをマウントしてくれる。

root権限を使うので、注意が必要。

**注記**
上記は、例としてマウントコマンドを書いたが、本来、起動時のマウントは`/etc/fstab`に書くべきである。
https://askubuntu.com/questions/119467/mount-ntfs-on-ubuntu-start-up-rc-local-vs-fstab
rspecのFactoryGirlをrails c のコンソールで使う方法


 以下のコマンド実行

```rails
require 'factory_girl';include FactoryGirl::Syntax::Methods;FactoryGirl.reload
```
これでrspec上に記載している

```rails
create(:test_record)
```

を好きに呼び出せる

毎回spec/spec_helper.rbから3行コピペするの面倒なので、1行にまとめて自分用メモ
iTunes > BADUI > 次はこちらに追加 / 次に再生

今聞いている曲の後に再生したい曲の追加メニューに以下の2種類がある
- 次はこちらに追加
- 次に再生

違いは以下で説明されている。
http://simpleguide.blog.jp/archives/36862204.html

- 次はこちらに追加 : リストの後ろに追加
- 次に再生 : リストの先頭に追加

<hr>
自分だったら、どういうUIにするか?

- 次に再生(先頭へ追加)
- 次に再生(最後尾へ追加)

最後尾というのがいまいち。
[ chef ] windowsでrunlistにrecipeとrole追加するときの注意点

タイトルの通りレシピ開発中にハマったのでメモ。

## 1.作業環境
PC: windows7
VM: vagrantVMを作って、ターミナルからssh接続
chef: chef zero

## 2.レシピ追加/削除

```bash
knife node run_list add "vm-name" recipe["cookbook-name"] (default.rbのレシピを指定)
knife node run_list add "vm-name" recipe["cookbook-name::hogehoge"] (hogehoge.rbというレシピを指定)
knife node run_list remove "vm-name" recipe["cookbook-name"]
```


## 3.ロール追加/削除

注意)　ロール追加のコマンド`knife node run_list add`が、windowsだとちゃんと動いてくれない(> <)。解決策は以下の通り。

```bash
knife node run_list add vm-name "role[test_role001]"
vm-name:
  run_list: recipe[roles]
```

なぜかこんな意味不明な結果になり、run_listにロールが追加されないです。
[`この記事`](https://tickets.opscode.com/browse/CHEF-2486)に解決策がありました。
曰く、`role[ ]`を`""`で囲うのではなく__`''`__で囲む。さらに`[]`の後ろに__`,`__を入れると。

```bash
knife node run_list add vm-name 'role[test_role001],'
vm-name:
 run_list: role[test_role001]
knife node run_list remove vm-name 'role[test_role001],'
```

こうするとうまくいきました。。。。。。
わけのわからん仕様というかバグ(?)です。macで作業している方にはまったく関係ないかも。

## 4.レシピ実行

```bash
knife zero converge 'name:vm-name ' -a knife_zero.host
```
`knife_zero.host` にはlocalに立てたvagrantVMへのssh接続情報をあらかじめセットしてあるものを使います。たぶんググればたくさん出てくるのでここでは割愛します。
coding79 > ポインタを書替える > #if 1 char szbuf[100]; dstPtr = &szbuf[0];

##内容

たった今、思いついた。

```c
static void s_TRT_setFloatToCharArray(char *dstPtr)
{
        ...
}
```

上記のコードがあった時、dstPtrにchar文字列を代入しても関数内のデバッグではその配列を見ることができない。

以下のように一時的に変更する

```c
static void s_TRT_setFloatToCharArray(char *dstPtr)
{
#if 1
    char szbuf[100];
    dstPtr = &szbuf[0];
#endif
        ...
}
```

ステップ実行時にszbuf[]を見ることでどういう代入になっているかわかる。
Blender PythonでSine波を描画

```py:sine.py
import bpy
import math

for n in xrange(360):
    x = n
    y = math.sin(n * 20 * math.pi / 180.0) * 10
    bpy.ops.mesh.primitive_cube_add(location=(x * 10, y * 10, 1))
```

３D空間にキューブでsine波を表現できます。３Dステージ作りにお使いください。