OmniAICreator/Qiita-1.07M huggingface dataset:
Unity Tips：Unity5 のローカルヘルプをオンライン上の日本語ヘルプに切り替えるブックマークレット&オンラインマニュアルの言語をトグルするブックマークレット

# インスペクターよりUnity5のローカルヘルプを開く

Unity5のインスペクターには、各コンポーネントのローカルヘルプを開くアイコンがついています。各コンポーネントの右上にある「本に？マーク」のアイコンをクリックすると、英語のローカルヘルプが使用中のブラウザで開きます。

![1005-21_01.png](https://qiita-image-store.s3.amazonaws.com/0/12313/288da272-37ad-8a73-94bb-15dbbf8b52e0.png)

この英語のローカルヘルプのURLをオンライン上の日本語ヘルプのURLに変換するブックマークレットを紹介します。

ブックマークレットとは、ブラウザのブックマークのURLにJava Scriptを登録することで実行するコマンドのことです。

# オンライン上の日本語ヘルプのURLに変換するブックマークレット

適当なテキストエディタ上で、以下のようにブックマークレットを書きましょう。
もちろん下をコピーしてもかまいません。

```lang:LH2JO.js
javascript:var x="/Manual/";var i=location.href;var j=i.lastIndexOf(x)+x.length;var s=i.slice(j);location.href="https://docs.unity3d.com/ja/current/Manual/" +s;
```

# ブラウザのブックマークにブックマークレットを設定する

使用中のブラウザに適当なブックマークを作成し、作成したブックマークのURLを編集します。

Chromeの場合だったら、「ブックマークを編集」ウィンドウを開き、「URL:」欄に上のブックマークレットをペーストします。名前も適当な覚えやすいものに変更しましょう。

![1005-21_03.png](https://qiita-image-store.s3.amazonaws.com/0/12313/155cce8a-71b1-c047-900f-62c56d75b614.png)

編集が終わったら「保存」をします。保存をしたブックマークレットは、ブックマークバーなど、使いやすいところに配置しておくとよいでしょう。

# 使い方

Unity5のローカルヘルプが開いたら、登録したブックマークレットのボタンをクリックします。すると自動的に、日本語オンラインヘルプにURLが切り替わり、表示されます。

もちろんMac/Windows共に動作します。

Enjoy :-)

# おまけ：オンラインマニュアルの言語をトグルするブックマークレット

オンラインマニュアルで現在表示しているページの言語をトグルするブックマークレットです。
英語/日本語のトグル切り替えができます。

```lang:OnlineHelpLangChange.js
javascript:var x="/ja/";var i=location.href;var j=i.lastIndexOf(x);var pj="https://docs.unity3d.com/ja/current/";var pe="https://docs.unity3d.com/";if (j==-1){var x=pe;var pt=pj;}else{var x=pj;var pt=pe;}var j=i.lastIndexOf(x)+x.length;var s=i.slice(j);location.href=pt+s;

```

ブックマークレットの登録の仕方は同じです。

【修正履歴】
2016/09/16：　オンラインマニュアルのURLが、「http:⇒https:」に変更になっていたので修正しました。
スニペットを使ってプログラムを書く

Railsで毎回`<% %>`、`if else` やループの処理などを繰り返し書きますがやはりこういう繰り返しに使うコードはショートカットで入力したいですね。Sublimeを使っている方なら簡単にできます。

パッケージコントロールから**ERB-Sublime-Snippets**をインストールすればすぐに作動します。

ショートカットの文字を入力してTabで展開します
リストは以下の通りです。


| Tab Trigger | Output |
|------------:|:------------:|
|**er**	      |        <% %>|
|**pe**	      |        <%= %>|
|**pc**	      |        <%# %>|
|**if**	      |        <% if %>...<% end %>|
|**ife**	      |        <% if %>...<% else %>...<% end %>|
|**else**	      |        <% else %>|
|**elsif**	      |        <% elsif %>|
|**unless**	      |        <% unless %>...<% end %>|
|**end**	      |        <% end %>|
|**st**	|<%= submit_tag ..., ... %>|
|**tft**	|<%= text_field_tag ..., ... %>|
|**pft**	|<%= password_field_tag ..., ... %>|
|**lblt**	|<%= label_tag ..., ... %>|
|**lt**	|<%= link_to ..., ... %>|
|**each**	|<% @things.each do |thing| %> ... <% end %>|
|**form**	|<%= form_for(@ ) do |f| %> ... <% end %>|
|**t**	|<%= t('@') %>|


一発で全て覚えられないが一日一つずつ使うと覚えられるでしょう。

また新しい発見でうれしい！
小さなことですが活かしてみると作業の効率にも繋がると思います。


:relieved: :relieved: :sleeping:
/etc/hosts が反映されない？安心してください。反映されてますよ。

# 結論

安心してください。反映されてますよ。

# /etc/hosts が反映されない？

Yosemite にて `/etc/hosts` を編集したのだけれども反映されていないようだ。
キャッシュをフラッシュすれば良いと見たが、試しても変わらず。

```bash:/etc/hosts
xxx.xxx.xxx.xxx  www.my-awesome-domain.jp
```

```bash
$ nslookup nslookup www.my-awesome-domain.jp 
Server:         192.168.1.1
Address:        192.168.1.1#53

** server can't find nslookup www.my-awesome-domain.jp : NXDOMAIN
```

あれれれ〜？


# 一部コマンドではシステムの DNS リゾルバが使われない

`dig`, `nslookup`, そして `host` コマンドは `/etc/hosts` を参照しない。

ブラウザはちゃんと解決してくれるので大丈夫。
コマンドで確認したい場合には `ping` を使おう。

```bash
$ ping www.my-awesome-domain.jp
PING www.my-awesome-domain.jp (xxx.xxx.xxx.xxx): 56 data bytes
...
```


参考: [osx - OS X 10.10.1 /etc/hosts & /private/etc/hosts file is being ignored and not resolving - Ask Different](http://apple.stackexchange.com/questions/158117/os-x-10-10-1-etc-hosts-private-etc-hosts-file-is-being-ignored-and-not-resol)
MacでPythonが動かない状況をなんとか解決

こんにちは。

AWSの学習をするため、
Macにawscliを入れたかったのでPythonを利用としたところ、
まさかのエラーがでて動かないという状況が発生。

```lang:
-bash: /usr/local/bin/python: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory
```
調査で色々いじっていたので、変なところをいじってしまったのかも。
そもそも、/usr/local/opt/python/bin/python2.7なんてファイル存在しれない。

色々試してけど、UNIXほとんど触ったことない私にはまったく見当もつかず。
一旦pythonをアンインストールして、再インストール。
が、、、状況変わらず。

インストールログを確認していたら、エラーがあることに気がつく。

```lang:
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/2to3
Target /usr/local/bin/2to3
already exists. You may want to remove it:
  rm '/usr/local/bin/2to3'

To force the link and overwrite all conflicting files:
  brew link --overwrite python

To list all files that would be deleted:
  brew link --overwrite --dry-run python
```
シンボリックがすでに存在していて、更新できていなかったよう。

```lang:
  brew link --overwrite python
```
上記コマンドを実行して、動きました！

```lang:
$ python 
Python 2.7.10 (default, Sep 23 2015, 04:34:14) 
```

まだまだ、勉強不足のことが多いので少しずつ勉強します。
とりあえず、AWSの勉強は初められそう。
Swift2.0対応済！Swift用のDebugライブラリ「Debug」を作りました


## Swiftのデバッグって。。。
Swiftの入門編などで良くある

```
println("確認したい値 = \(str)")
```

などでDebugしてはいるけどなんだか使いづらいですよね。

でもそのために独自ライブラリを自分で作るのも面倒という方は多いのではないでしょうか？

そのような方々のために
**Debug**というDebug用ライブラリを作りました！
良かったら使ってください。

## 実行環境
### Mac:OSX Yosemite Version 10.10.5
### Xcode7.0.1
### Swift2.0


# 使うまでの流れ

## 1.Debugのソースを落としてくる
[ここから](https://github.com/g08m11/Debug)
zipファイルをダウンロードして、「Resource」フォルダ内にある
「Debug.swift」だけ取り出し、使用したいプロジェクトへ追加する。

## 2.デバッグ時のみ実行したい設定にする
(既に設定されている方はスキップ可能です。)

### 2.1①TARGEETSから「マイプロジェクト」を選び、②「Build Settings」を選び、「Swift Compiler」から③「Other Swift Flags」を選ぶ。

![スクリーンショット 2015-09-19 0.09.05.png](https://qiita-image-store.s3.amazonaws.com/0/15812/41bcd9e3-e1b4-af11-23ca-5629c9d07cb2.png "スクリーンショット 2015-09-19 0.09.05.png")


![スクリーンショット 2015-09-19 0.09.21.png](https://qiita-image-store.s3.amazonaws.com/0/15812/66c87ca0-af90-7854-d4d9-5201e77eca1c.png "スクリーンショット 2015-09-19 0.09.21.png")


### 2.2「+」を押し、「-D DEBUG」を入力して設定する。

![スクリーンショット 2015-09-19 0.09.38.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d44e301e-5637-802b-c246-e23e4424fd0c.png "スクリーンショット 2015-09-19 0.09.38.png")


![スクリーンショット 2015-09-19 0.09.38.png](https://qiita-image-store.s3.amazonaws.com/0/15812/63177c72-823f-cb5d-0abf-342fee71af5d.png "スクリーンショット 2015-09-19 0.09.38.png")

### 2.3設定を確認する。

![スクリーンショット 2015-09-19 0.41.56.png](https://qiita-image-store.s3.amazonaws.com/0/15812/063bda9d-c2e8-33da-ca33-b8c57132f7a8.png "スクリーンショット 2015-09-19 0.41.56.png")



## 3.デバッグしたい所にコードを書く
(今回はViewControllerに書いてます。)

```ViewController.swift
class ViewController: UIViewController {

  override func viewDidLoad() {
    Debug.log("ここまできてる")
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }


}
```



## 4.確認する
こちらはConsole側に出力されます。
こちらはConsoleのみにすると綺麗に見えます。


![スクリーンショット 2015-09-19 0.27.12.png](https://qiita-image-store.s3.amazonaws.com/0/15812/d404596e-d21d-686f-135c-d660b562ee32.png "スクリーンショット 2015-09-19 0.27.12.png")



# 使い方

ただ呼ばれているか確認したいだけの場合

```
Debug.log("")
```

呼ばれていてメッセージも確認したい場合

```
Debug.log("g08m11")
```


インスタンス変数や変数の値を確認したい場合

```
str = "g08m11"
Debug.log("ここまできてる\(str)")
```


# 見方

```
*** MESSAGE
  -- FileName: /Users/gushikenmasaru/work/swift/MyApps/test/test/ViewController.swift
  -- Method: viewDidLoad()
  -- Line: 14

```
### MESSAGE:
Debug.log("MESSAGE")など文字列を設定した場合に表示されます。

### FileName:
Debug.log()を追加したファイル名に該当します。

### Method:
Debug.log()を追加したファイルのメソッド名に該当します。

### Line:
Debug.log()を追加したファイルの行に該当します。

#ぜひご利用ください！
#[Debug](https://github.com/g08m11/Debug)

## 追加
[jollyjoester](https://github.com/jollyjoester)さんからSwift2.0対応などの
嬉しいプルリクを頂きましてそちらをマージしました！
Swift2.0でも使えるようになります！
[jollyjoester](https://github.com/jollyjoester)さんありがとうございます！

## 参考サイト：
http://oropon.hatenablog.com/entry/2014/06/05/030620
http://qiita.com/qmihara/items/a6b88b74fe64e1e05ca4
http://qiita.com/inamiy/items/c4e137309725485dc195
Monosnap 雑感

rosylilly さんのブログで紹介されていた [Monosnap](https://monosnap.com/) というスクリーンキャプチャツールが良さそうだったので軽く試してみました。

[(個人用途において)ほぼ最強に近いスクリーンキャプチャ / スクリーンキャスト環境](http://rosylilly.hatenablog.com/entry/2015/10/04/024653)

(本当に雑感すぎて運営さんに削除されないかだけ心配。)

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">Monosnap 試してみた。キャプチャ後に文字とか図形書いて簡単に編集できるのめっちゃいい。設定でクリップボードにコピーすることもできるので、GitHub とか Slack で使う分には S3 すらいらない。 <a href="http://t.co/goJSPXxMY6">http://t.co/goJSPXxMY6</a></p>&mdash; Yuya Takeyama (@yuya_takeyama) <a href="https://twitter.com/yuya_takeyama/status/651009865901469696">2015, 10月 5</a></blockquote>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">動画にも簡単な図形とか文字とか入れられたら最高だったけどさすがにそれは望みすぎか。あと動画だとクリップボードにコピーはできないっぽいので、一旦ファイルか何か経由させる必要がある。</p>&mdash; Yuya Takeyama (@yuya_takeyama) <a href="https://twitter.com/yuya_takeyama/status/651010499488821248">2015, 10月 5</a></blockquote>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">メールを受信してクリップボードにコピーするだけのローカル様 SMTP サーバとか考えたけどさすがにオーバーキル感ある。</p>&mdash; Yuya Takeyama (@yuya_takeyama) <a href="https://twitter.com/yuya_takeyama/status/651010675100229632">2015, 10月 5</a></blockquote>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">動画だとまだ LICEcap 使うかなー。動画の最初に「Start!」とか文字入れる機能があるのが良い。他ツールとの連携がまったくできないのはつらいところなんだけど。</p>&mdash; Yuya Takeyama (@yuya_takeyama) <a href="https://twitter.com/yuya_takeyama/status/651012576625586182">2015, 10月 5</a></blockquote>

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr">Monosnap トップページの犬がかわいいのが良い。あと Windows 版もあるそうです。iOS 用のはどうせ大したことできないだろうから試してない。 <a href="https://t.co/cbeKSWnzPX">https://t.co/cbeKSWnzPX</a></p>&mdash; Yuya Takeyama (@yuya_takeyama) <a href="https://twitter.com/yuya_takeyama/status/651011214735093762">2015, 10月 5</a></blockquote>
Sunspot(Rails) の検索結果をrspecでテストするためにstubする

## 概要

RailsでSolrが楽に使えるライブラリ、 `sunspot_rails` の検索結果をRSpecで偽装するためにstubを使うやりかた

だいたい以下のバージョン

* Ruby 2.2.0
* Rails 4.2.3
* RSpec 3.3.2
* Sunspot 2.2.0

## 前提

公式によると、以下のようにしましょうってことなので、まずはコレに従う。

https://github.com/sunspot/sunspot/wiki/RSpec-and-Sunspot

```rb
require 'sunspot/rails/spec_helper'

RSpec.configure do |config|
  config.before(:each) do
    ::Sunspot.session = ::Sunspot::Rails::StubSessionProxy.new(::Sunspot.session)
  end

  config.after(:each) do
    ::Sunspot.session = ::Sunspot.session.original_session
  end
end
```

## 実例

```rb
RSpec::Mocks.with_temporary_scope do
  search = Hoge.search
  record = FactoryGirl.build(:hoge)
  # Hogeは適当に置き換えましょう。 FactoryGirlじゃなくfixture使ってたらそっちで。 scoreの数字は何でもいい。
  raw_hit = {"id"=>"#{record.class.to_s} #{record.id}", "score"=>7.265403}
  hit = Sunspot::Search::Hit.new(raw_hit, nil, search)
  hit.instance_variable_set(:@result, record)
  allow_any_instance_of(Sunspot::Rails::StubSessionProxy::Search).to receive(:hits).and_return([hit])
  allow_any_instance_of(Sunspot::Rails::StubSessionProxy::Search).to receive(:results).and_return([record])
  
  # 何かsunspotに依存した処理をして・・
  YourSearchManager.search_hoge
  # あとは自由にexpectationを書こう！
end
```

`each_hit_with_results` を使いたければ `rails_spec` の適当なところに以下のコードを書いておくとよいです。

```rb
class Sunspot::Rails::StubSessionProxy::Search
  def each_hit_with_result
    return unless block_given?
    hits.each do |hit|
      yield(hit, hit.result)
    end
  end
end
```

こんな感じで書くと良さげでした。 `RSpec::Mocks.with_temporary_scope` がないと、同じスコープ内で別のitemをテストしようとするとコケるし、イディオム的に入れておきました。
このブロック内だけのシンプルなexpectationなら、外しちゃっても良いでしょうね。

`allow_any_instance_of` がグローバル過ぎて気持ち悪いって人は、適当な所でメソッドを切り分けて、代わりに以下のようにしてstub化したsearchを返すようにするとよいです。（僕はそうしてる）

```rb
allow(search).to receive(:hits).and_return([hit])
allow(search).to receive(:results).and_return([hoge])
expect(YourSearchManager).to receive(:search_hoge).and_return(search)
```
Redshift 自分用メモ

## TSV形式でS3にアップロードされたGZファイルの流し込み
Copyを使う

```
copy テーブル名 (カラム1,カラム2,カラム3,...)
from 's3://バケット名/path/to/ファイル名'
credentials 'aws_access_key_id=アクセスキー'
GZIP
delimiter '\t';
```

## RedshiftデータのTSV形式のGZファイルのS3へのエクスポート
UNLOADを使う

```
unload ('
select カラム1,カラム2,カラム
from テーブル名
where ...
')
to 's3://バケット名/path/to/ファイル名'
credentials 'aws_access_key_id=アクセスキー'
GZIP
delimiter as '\t';
```

## Redshiftのストレージ使用容量
出典: [公式ドキュメント](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/tutorial-tuning-tables-test-performance.html)

```
select stv_tbl_perm.name as table, count(*) as mb
from stv_blocklist, stv_tbl_perm
where stv_blocklist.tbl = stv_tbl_perm.id
and stv_blocklist.slice = stv_tbl_perm.slice
and stv_tbl_perm.name in ('client_analytics_traffic','client_analytics_reference','client_analytics_traffic_by_page_group','client_analytics_reference_by_page_group','client_site_search_ranking','conflict_site_search_ranking','client_site_findability_score','conflict_site_findability_score')
group by stv_tbl_perm.name
order by 1 asc;
```

## ソート状況の確認クエリ
出典: [Amazon Redshift Useful SQL: VACUUM処理が必要なテーブルを洗い出す](http://dev.classmethod.jp/cloud/aws/amazon-redshift-useful-sql-require-tables-to-vacuum/)

```
/** 0.VACUUM処理が行われていないテーブル群 */
select
  '0_not_sorted' as status,
  sum_result.tablename,
  sum_result.sorted_rows,
  sum_result.rows,
  cast(0 as decimal(5,3)) as sort_percentage
from
(select
  trim(name) as tablename,
  sum(sorted_rows) as sorted_rows,
  sum(rows) as rows
from
  stv_tbl_perm
group by name
order by name) sum_result
where
  sorted_rows = 0
UNION ALL
/** 1.VACUUM処理が行われているテーブル群 */
select
  '1_sorted' as status,
  sum_result.tablename,
  sum_result.sorted_rows,
  sum_result.rows,
  cast(
    cast(sum_result.sorted_rows as double precision) / cast(sum_result.rows as double precision)
    as decimal(5,3)
  ) as sort_percentage
from
(select
  trim(name) as tablename,
  sum(sorted_rows) as sorted_rows,
  sum(rows) as rows
from
  stv_tbl_perm
group by name
order by name) sum_result
where
  sorted_rows != 0
order by
  status asc,
  sort_percentage asc,
  rows desc;
```

## テーブル定義の確認
出典: [Redshiftの調査系クエリ3選](https://librabuch.jp/2013/10/redshift_system_query/)

```
SELECT * FROM pg_table_def WHERE tablename = 'テーブル名';
```
mapに渡せる2種類のメソッド参照

# バージョン情報
Java 8

# メソッド参照
引数を1個取る `Integer#valueOf` みたいなやつに対して,

```java:ラムダ
int value = Optional.of("12345")
    .map(n -> Integer.valueOf(n))
    .get();
```

を

```java:メソッド参照
int value = Optional.of("12345")
    .map(Integer::valueOf)
    .get();
```

と書き直せるのは知っていたが,
引数を取らない `String#length` みたいなやつに対して

```java:ラムダ
int length = Optional.of("alpaca")
    .map(str -> str.length())
    .get();
```

を

```java:メソッド参照
int length = Optional.of("alpaca")
    .map(String::length)
    .get();
```

と書けるのは知らなかった.

# なんで？
メソッド参照の理解不足でした. メソッド参照は受け取り側の型にあわせて意味が変わるらしいです.

上の例だと `Integer::valueOf` は直感通りに `Function<String, Integer>` です.
しかし, `String::length` は `Supplier<Integer>` **ではなく**, `Function<String, Integer>` になっています.

***
たとえば,

```java
class MyClass {
    public ReturnType myMethod() {...}
}
```
みたいなクラスとメソッドがあって, これのメソッド参照 `MyClass::myMethod` を

```java
Function<MyClass, ReturnType> method = MyClass::myMethod;
```
のように受けると, 以下と等価になります.

```java
Function<MyClass, ReturnType> method = self -> self.myMethod();
```
***
`map()` で `String#length` が渡せたりするのは, `map()`が引数に `Function` を期待しているからということですね.

# 参考文献
* http://www.ne.jp/asahi/hishidama/home/tech/java/methodreference.html
Amazon Linuxにluaとか対応してるvimをインストールする


# 概要

表題の通りです。
デフォルトなvimは`-lua`ってなってて（neocompleteが効かなくて）悲しかったので自分で入れちゃう。


## 前提


```bash
uname -a
#=> Linux 940399d03c1a 4.1.7-15.23.amzn1.x86_64 #1 SMP Mon Sep 14 23:20:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
```

- 面倒なのでrootユーザーで一通りやってます


# 流れ

## 1. ncurses-develをインストールする

```bash
yum install -y ncurses-devel
```

## 2. lua-develとかruby-develとか入れとく

```bash
yum install lua-devel ruby-devel
```

## 3. GitHubからソースコード引っ張ってくる

[これ](https://github.com/vim/vim)です。

```bash
cd /path/to/src
git clone https://github.com/vim/vim.git
```

## 4. とりあえず最新のver.にする

めっちゃtagが多いけど、とりあえずv7.4の最新を引っ張ってくる。

```bash
# めっちゃたくさん出てくるからlessとかに渡して探す
git tag | less
#=> (めっちゃたくさん出てくる)

git checkout v7.4.889
```

## 5. configureします

とりあえず以下のようなかんじにしといた。
perl-develを入れて`--enable-perlinterp`もつけようかと思ったけど、`make install`でコケたから外してしもた。

```bash
./configure \
  --prefix=/usr/local \
  --enable-multibyte \
  --enable-luainterp \
  --enable-rubyinterp \
  --with-ruby-command=/usr/bin/ruby \
  --enable-pythoninterp \
  --with-python-config-dir=/usr/lib64/python2.7/config
#=> (logだばー)
```

## 6. makeする

```bash
make
#=> (logだばー)
```

終わったら、compileしたvimを実行して確認してみる。

```bash
./src/vim --version
#=> VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Oct  5 2015 21:00:00)
#=> Included patches: 1-889
#=> (中略)
#=> +lua
#=> (以下略)
```

よし。

## 7. make installする

```bash
make install
```


# おわりに

類似エントリはありそうだけど、まあいいか。
参考になれば幸いです。


# 参考

- [vim/vim](https://github.com/vim/vim)
- [CentOS - enable-luaなvim7.4をインストール - Qiita](http://qiita.com/kbt48/items/a4ff903dd7a7b16e86af)
MySQL 自分用メモ

# SQL文
## CSV出力
```
SELECT
  'カラム名1','カラム名2','カラム名3',... 
UNION
SELECT
  `カラム1`,
  `カラム2`,
  `カラム3`,
  ...
FROM `テーブル` 
WHERE ...
INTO OUTFILE "/path/to/filename.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
```

## 全テーブルのレコード数
```
select table_name, table_rows from information_schema.TABLES
where table_schema = 'DB名';
```

# SQLコマンド

## DB全体のテーブル構造ダンプ
```
$ mysqldump -u ユーザ名 -p -d データベース名 > ファイル名
```

## 複数テーブルのデータのみダンプ
```
$ mysqldump -u ユーザ名 -p -t データベース名 テーブル1 テーブル2...> ファイル名
```
El Capitan で library not found for -lgmp が発生する時の対処法


OS を El Capitan にアップデートしてから遭遇した問題のメモ。

# library not found for -lgmp が発生

gem をインストールしようとしたら下記のようなエラーが発生。

```
guest1-107:app t-fujiki$ bundle install
Fetching gem metadata from https://rubygems.org/.............
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Using i18n 0.7.0
Installing json 1.8.3 with native extensions

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/t-fujiki/.rbenv/versions/2.2.3/bin/ruby -r ./siteconf20151005-20477-hk2ir0.rb extconf.rb
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling generator.c
linking shared-object json/ext/generator.bundle
ld: library not found for -lgmp
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [generator.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/t-fujiki/Development/iOS/iosApp/vendor/bundler/ruby/2.2.0/gems/json-1.8.3 for inspection.
Results logged to /Users/t-fujiki/Development/iOS/iosApp/vendor/bundler/ruby/2.2.0/extensions/x86_64-darwin-14/2.2.0-static/json-1.8.3/gem_make.out
An error occurred while installing json (1.8.3), and Bundler cannot continue.
Make sure that `gem install json -v '1.8.3'` succeeds before bundling.
```

# 対処法

コマンドラインツールをインストールしたら成功するようになりました。

```
xcode-select --install
```
gulpを使ってES6のJavaScriptをブラウザ用にビルドする


[gulpを使ったJavaScript(とCoffeeScript)のビルド - Qiita](http://qiita.com/kosuke_nishaya/items/aedf087e3ce6f1f54069)
の続き。

## babelifyのインストール

```
$ npm install --save-dev babelify
```

## ES6で記述する
```js:foo.es6
export default class Foo {
  constructor(x, y) {
    this._x = x;
    this._y = y;
  }

  sum() {
    return this._x + this._y;
  }

  diff() {
    return this._x - this._y;
  }
}
```

```js:example.es6
import Foo from './foo.es6';

var foo = new Foo(4, 6);

console.log(foo);
console.log(foo.sum());
console.log(foo.diff());
```


## gulpfile.coffee

```coffee:gulpfile.coffee
gulp = require 'gulp'
source = require 'vinyl-source-stream'
browserify = require 'browserify'
babelify = require 'babelify'

gulp.task 'build-es6', ->
  browserify('./src/sample.es6')
    .transform(babelify)
    .bundle()
    .pipe source 'bundle-es6.js'
    .pipe gulp.dest 'build'

gulp.task 'default', ['build-es6']

```

## ビルドと実行



```
$ gulp
[19:47:51] Requiring external module coffee-script/register
[19:47:52] Using gulpfile ~/test/node/build_test/gulpfile.coffee
[19:47:52] Starting 'build-es6'...
[19:47:52] Finished 'build-es6' after 231 ms
[19:47:52] Starting 'default'...
[19:47:52] Finished 'default' after 22 μs

$ node build/bundle-es6.js 
{ _x: 4, _y: 6 }
10
-2
```

  

## 参考

[ES6時代のJavaScript - クックパッド開発者ブログ](http://techlife.cookpad.com/entry/2015/02/02/094607)
[ECMAScript 6: New Features: Overview and Comparison](http://es6-features.org/#Constants)
[JavaScript - React.js + Babel + Browserify + gulp の環境を作ってみた - Qiita](http://qiita.com/hkusu/items/e068bba0ae036b447754)
【Git】リポジトリをそのまま別の管理ツールへ移行する方法（Backlog→GitLab を例に）

##経緯

[Backlog](http://www.backlog.jp/help/usersguide/git/userguide1278.html) で管理している Git を大人の事情で [GitLab](https://about.gitlab.com/) へ移行することになった



##前提

- ディレクトリやファイルを一式移行
- open, finish に関わらずブランチやタグも引き継ぎ
- これまでのコミットログも丸ごと
- ローカルで使用していた Git 用ディレクトリを継続して利用



##方法

###1. GitLab で新規プロジェクトを作成

- 移行先として事前に GitLab 側で新規プロジェクトを作成
- 作成したプロジェクを開きリポジトリの URL を確認



###2. 現在 Backlog のリポジトリであることを確認

```
$ git remote -v
origin	https://***.backlog.jp/git/[プロジェクトキー]/[任意の名称].git (fetch)
origin	https://***.backlog.jp/git/[プロジェクトキー]/[任意の名称].git (push)
```


###3. リポジトリの URL を GitLab に変更

作成したプロジェクトのリポジトリ URL を origin 以下にセット

```
$ git remote set-url origin https://glab.***.co.jp/[グループ名]/[任意の名称].git
```


###4. GitLab のリポジトリへ変更されたことを確認

```
$ git remote -v
origin	https://glab.***.co.jp/[グループ名]/[任意の名称].git (fetch)
origin	https://glab.***.co.jp/[グループ名]/[任意の名称].git (push)
```


###5. git push

リモートからチェックアウトしていたブランチは push すると反映


###6. GitLab のプロジェクトを確認

Backlog で運用していたものがそのまま GitLab へ移行完了！
Gradleプロジェクト作るときLazybones使うと便利

# 概要
Gradleでプロジェクト作るとき、IDEを使うと比較的よしなにやってくれるがシェルで操作しているときは手作業でやっていた。
とは行っても`gradle init`してから少しディレクトリを追加するだけなんだが

```
project
├── build.gradle
└── src
    ├── main
    │   ├── java
    │   └── groovy
    └── test
        ├── java
        └── groovy
   
```

まずはじめにこの構成を作っていた。

最近面倒になってGitHub上によく使う基本的な構成を作ってクローンするようにしていた
[gradletemplate](https://github.com/ligun/gradletemplate)
多分こういうのを簡単に作れる仕組みあるんだろうなぁとは思いつつ、見つけきらなかったのでこういう方法を使っていたが最近Lazybonesというものを知ったので使ってみたらまさにやりたいことだった。

Lazybonesを使うと様々なパターンで最初に設定すべきもののテンプレートが用意されておりこのようなことに無駄に時間を使うことがなくなる。
JavaプロジェクトやGroovyプロジェクトなど幾つかのパターンが用意されている

# Lazybones導入
Lazybonesを使うにはSDKMAN(元GVM)を使う必要がある。
SDKMANを知らない、もしくはまだGVMを使っているという人は下記を参照
http://qiita.com/saba1024/items/967ee3d8a79440a97336

今までSDKMAN、GVMを使っている人なら説明不要だろうがインストールは次の通り

```bash
sdk install lazybones
```

何も問題がなければ使いはじめることができるだろう。

# Lazybonesの使い方
自分もまだ使い始めたばかりで下記記事を参考に試しただけなんだけどいくつか書いてみる。
http://nobusue.hatenablog.com/entry/2014/12/28/021420

## 使えるテンプレート一覧
```bash
lazybones list
```

と入力するとテンプレート一覧が表示される。
執筆時は以下のように表示された。

```
    aem-multimodule-project
    afterburnerfx
    afterburnergfx
    angular-grails
    asciidoctor-gradle
    asciidoctor-revealjs
    dropwizard
    gaelyk
    gradle-plugin
    gradle-quickstart
    groovy-app
    groovy-lib
    java-basic
    lazybones-project
    nebula-plugin
    ratpack
    ratpack-lite
    spring-boot-actuator
    test-handlebars

```

## プロジェクト作成
テンプレートを使ってプロジェクト作成するには次のように入力する。

```bash
lazybones create groovy-app project-name
```

project-nameディレクトリが作成され、以下にGroovyアプリを開発するのに適した構成のファイル群が作成される。
この場合私が冒頭で載せたGroovy用設定にほぼ似ている構成となる。
その他JavaアプリやSpring Boot用の設定なども用意されているので一通り見てみるといいでしょう。
テンプレートの詳細は`lazybones info groovy-app`のようにすると表示される。
いくつかバージョンがあるものはcreateするとき、`lazybones create groovy-app 0.1 project-name`と入力するとそのバージョンのテンプレートが作成される。


# 最後に
Gradle使うときずっとやりたかったことの情報が見つかったので書いてみた。
同じようなこと思ってる人もっといるだろうになかなか情報が出てこなかった。
Photoshopのパターンファイル（*.pat）の中から元画像を抽出する方法

# 背景

Webサイトの背景に一般配布されているPhotoshopのパターンファイルの画像をタイリングしたい。
そのためにはパターンを元のサイズで切り出す必要がある。

# 前提

使用したいパターンファイルが読み込まれていること。

# 実現方法

新規ファイルを開く。
「塗りつぶしツール」を選択し、「描画色」ではなく「パターン」を使用するように設定する。
パターンのリストを開き、使いたいパターンが右下にくるように（理由は後述）リストサイズを調整する。
使いたいパターンにカーソルを数秒当てると、以下の情報が得られる。

* 元ファイル名
* 画像サイズ
* カラーモード

![2015-10-05.png](https://qiita-image-store.s3.amazonaws.com/0/95607/3a1978b4-1d3b-5d0b-98ee-965ea14cf67e.png)

「イメージ」＞「カンバスサイズ」で画像サイズをパターン元画像のサイズに合わせて変更する。

![2015-10-05_2.png](https://qiita-image-store.s3.amazonaws.com/0/95607/279c8bd8-ef42-91e2-eaf1-ab8c285b843a.png)

新規ファイルをそのまま塗りつぶせば元画像を取得できる。
後はサイズを変更するなり、色調を調整するなりご随意に。

## なぜ使いたいパターンを右下に持ってくる必要があるのか

今回、パターンの情報を得るためにわざわざパターンのリストサイズを変更した。
試しに中央の画像にカーソルを当ててみると、以下のようなバグ？が発生する。

![2015-10-05_3.png](https://qiita-image-store.s3.amazonaws.com/0/95607/75650831-6374-7cd7-9c92-e34fd1dd23de.png)

そう、肝心なサイズ情報が見えないのだ。
なお、この事象は以下のバージョンで発生している。今後修正されることに期待したい。

![2015-10-05_4.png](https://qiita-image-store.s3.amazonaws.com/0/95607/df158cd4-e08b-b294-c30c-2f2602c39b9a.png)
Link >  2015-10-05 winAppDev > AppData 以下のフォルダ > Local / LocalRow / Roaming

```txt:動作環境
Windows7 以降
```

良い情報をシェアするためのリンク記事です。

AppData (`C:\Users\[ユーザ名]\AppData`) 以下のフォルダは３つある。

- Local
- LocalRow
- Roaming

違いが何かというと以下のサイトでよくまとまっている。

- http://rms-099.hatenablog.jp/entry/20130120/1359218895
    - RMS-099 様

情報感謝です。

抜粋すると

- Local : ユーザから独立 / 危険度が低いもの
- LocalRow : ユーザから独立 / 危険度が高いもの
- Roaming : コンピュータから独立 / ユーザに付随
Unity4で書き出したXcodeプロジェクトにNCMB iOS SDKを組み込むとiOS9でEXC_BAD_ACCESSが出るのを何とかしてみた

# 概要
[Unity4][link-1]で書き出したXcodeプロジェクトに[NCMB iOS SDK][link-2]を[クイックスタート][link-3]の「SDKをダウンロードして利用する」に従って導入した場合、ビルドしたアプリをiOS9で動かすとEXC_BAD_ACCESSが出てしまいます。

> Unity上でUnity SDKを導入するのではなく、Unityから書き出したXcodeプロジェクト上でiOS SDKを導入する場合です！

# 原因
[Unity4][link-1]から書き出されたXcodeプロジェクトはObjective-C Automatic Reference Counting(ARC)がNOに設定されています。つまり非ARCなプロジェクトです。
一方で[NCMB iOS SDK][link-2]のソースコードはARC前提で実装されています。
非ARCなプロジェクトでARCなコードを混在させてしまったため、想定外の部分でメモリが解放されてEXC_BAD_ACCESSが発生したものと思われます。
iOS8以前で発生しなかった明確な理由は不明ですが、メモリ管理周りの仕様の厳格化が影響しているのかなと思います。（iOS6→iOS7の時も同じようなことがありました）

# 回避策
ARCなソースコードをARCでコンパイルするように、ファイル毎にコンパイルフラグを付けてあげることで回避できます。
「Project > Targets > Build Phases > Compile Sources」で、インポートした[NCMB iOS SDK][link-2]の全てのファイルのCompiler Flagsに「-fobjc-arc」を設定するだけです。
（[NCMB iOS SDK][link-2]のファイル数がめっちゃ多いんですけどね・・・）


[link-1]:http://japan.unity3d.com/ "Unity"
[link-2]:https://github.com/NIFTYCloud-mbaas/ncmb_ios
[link-3]:http://mb.cloud.nifty.com/doc/current/introduction/quickstart_ios.html "イントロダクション（iOS）：クイックスタート｜ニフティクラウドmobile backend"
CakePHPでキャッシュファイルを消しても新しく追加したカラムに値が入らないときの対処法

CakePHPで、カラム追加等のDB設計変更がモデルに反映されない問題は、
結構起きる（最初にハマる）問題ですが、
ググると以下のように情報がたくさん出てきます。

![スクリーンショット 2015-10-05 18.15.25.png](https://qiita-image-store.s3.amazonaws.com/0/68751/e1061bec-7a34-0746-e95e-2a617b88352d.png)

解決方法の内容としては、
大体、このようなことが書かれております。

> CakePHPではデータベースのテーブル構造を格納するキャッシュファイルが作成されます。
データベースのフィールドを追加した場合、キャッシュファイルが前の情報のままだとデータが正しく更新されません。

> その際は下記のディレクトリのキャッシュファイルを削除します。

> `app/tmp/cache/models`

参考: [CakePHP：データベースが更新されない時の対処方法](http://raining.bear-life.com/cakephp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%8C%E6%9B%B4%E6%96%B0%E3%81%95%E3%82%8C%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95)

上記方法で解決すれば良いのですが、
たまに解決しないことがあります。
（APCキャッシュを有効にしている場合に発生？）

そんなときはデバッグレベルを確認してください。
デバックレベルを0にして開発していると、
キャッシュの影響で、DB設計変更がモデルに反映されない問題が起きるようです。

そこで、

```php:core.php
// app/Config/core.phpの35行目らへん
Configure::write('debug', 2);
```

という形でデバックレベルを2にすると解消すると思います。
※デプロイ時にレベルを0に戻すのをお忘れなく
*_test.goが含まれているPackage一覧を取得する

`go list` という便利コマンドがあるので、利用すると簡単に取得できる。

```
$ go list -f="{{if .TestGoFiles}}{{.ImportPath}}{{end}}" ./...
```

以前の自分はShellで取得していた。

```
$ find . -maxdepth 3 -path '*_test.go' -type f | xargs -I{} dirname {} | uniq
```

Gopherなら、積極的に `$ go <action>` を使っていきましょう。
Swift does not support the SDK 'iPhoneSimulator8.4.sdk'

Xcodeをアップデートしたら
`<unknown>:0: error: Swift does not support the SDK 'iPhoneSimulator8.4.sdk'`
みたいなエラーが出て、ビルドできなくなった。 **は？**

ググったけどよく分からなくて、
http://stackoverflow.com/questions/32934067/swift-does-not-support-the-sdk-iphonesimulator8-4-sdk
ここを見る感じ、Xcode7.0.1とyosemiteの組み合わせで発生する問題らしい。
家のMacはElcaptanと7.0.1にアップデートしたけど特におかしい事にはなってないので、確かにそれっぽい。

yosemiteをアップデートするか、
https://developer.apple.com/downloads/
↑から7.0.0(7A220)をダウンロードしてダウングレードすればビルドが通るようになる。

**旧バージョンのXcodeは必ずAppleの公式リンクからダウンロードすること！**
参考：http://nlogic.jp/?p=464
[C#][MacOSX] 簡単なWebサーバーを作る

Mac環境でC#を使ってWebサーバを作ったのでメモ。
ちなみにC#はほぼ初心者です。

## セットアップ

Mac環境だとhomebrewを使ってmonoをインストールすることで実行・コンパイル環境を得ることができます。

```bash
brew install mono
brew link mono # dllファイル、binファイルなどをパスの通った場所にリンクする
```

### コンパイル

コンパイルは`mcs`コマンドを使って行います。
C#や.NETのバージョンによっては他のコマンドを使うか`-sdk`オプションをつける必要があるようです。

参考：http://noriok.hatenadiary.jp/entry/2014/05/18/163019

dllを指定する場合は-rオプションをつけてやる必要があります。
僕の場合は（下記コードには出てきませんが）Sqliteを使ったので、オプションで指定してやる必要がありました。

```bash
mcs -r:Mono.Data.Sqlite.dll *.cs
```

## 実行

実行には`mono`コマンドにexeファイルを渡してやります。

```bash
mono application.exe
```

## サンプルコード

```csharp:application.cs
using System;

namespace WebServer
{
    public class Application
    {
        static void Main (string[] args)
        {
            Server server = new Server();
            server.Start();
        }
    }
}

```

```csharp:server.cs
using System;
using System.Net;
using System.Text;
using System.Threading;

namespace WebServer
{
    public class Server
    {
        private bool debug = false;

        public Server()
        {
        }

        public void Start()
        {
            HttpListener listener = GetHttpListener();
            try
            {
                listener.Start();
            }
            catch (Exception e)
            {
                // Error handling is here
            }
            StartListenLoop(listener);
        }

        HttpListener GetHttpListener()
        {
            var listener = new HttpListener();
            listener.Prefixes.Add("http://*:8081");
            return listener;
        }

        void StartListenLoop(HttpListener listener)
        {
            while (true)
            {
                HttpListenerContext context = listener.GetContext();
                ThreadPool.QueueUserWorkItem(o => HandleRequest(context));
            }
        }

        void HandleRequest(HttpListenerContext context)
        {
            AddResponseHeader(context);
            AddResponseOutput(context);
            context.Response.Close();
        }

        void AddResponseHeader(HttpListenerContext context)
        {
            context.Response.StatusCode = 200;
        }

        void AddResponseOutput(HttpListenerContext context)
        {
            byte[] bytes = Encoding.GetEncoding("UTF-8").GetBytes("test");

            context.Response.OutputStream.Write(bytes, 0, bytes.Length);
        }
    }
}
```

## 動作確認

```bash
mono application.exe # サーバの起動

# 別シェルで
curl http://localhost:8081 # testと返ってくればOK
```

## まとめ

HttpListenerクラスとThreadを使えば簡単にマルチスレッドのWebサーバを組めますね。C#すごい。
ちなみにシングルスレッドだと、curlをfor文使って1000件ぐらい連打したら結構な割合でconnection refusedが返ってきたのでマルチスレッドにしました。

C#の練習ということでSqlite使ってみたり、Loggerクラス作ったりもしたのですが特につまる所もなかったです。
C#でSqliteについてはあまり参考になる文章がなかった（特にLinqは全然見当たらなかった）のでまた記事書くかも。
OS X, Finder Sync Extension 開発のTips

# App Extension をコマンドラインで制御

## 有効にする

```shell-session:enable
$ pluginkit -e use -i com.example.ExampleOSX.FinderSync
```

## 無効にする

```shell-session:disable
$ pluginkit -e ignore -i com.example.ExampleOSX.FinderSync
```

## 情報の確認
* App Extension のパスを確認する

```shell-session
$ pluginkit -m -A -i com.example.ExampleOSX.FinderSync -v
+    com.example.ExampleOSX.FinderSync(1.8.0)	7764BDF3-7C1B-410F-B1B0-34B07FA26E98	2015-10-01 03:18:54 +0000	/Applications/Example.app/Contents/PlugIns/FinderSync.appex
 (1 plug-in)
```
 
## 有効／無効を コードから制御する
* system()
* NSTask
* NSAppleScript

を使います。

例

```
system("pluginkit -e use -i com.example.ExampleOSX.FinderSync");
```

# コンテナアプリとApp Extension とのプロセス間通信
* MMWormhole を使うと良いです
* CFNotificationCenterGetDarwinNotifyCenter() で取得できる `Darwin Notify Center` と、App Group のコンテナ `$HOME/Library/Group Containers` を使って実現しています

# システム環境設定を表示する

```objc
NSURL *url = [NSURL fileURLWithPath:@"/System/Library/PreferencePanes/Extensions.prefPane"];
[[NSWorkspace sharedWorkspace] openURL:url];
```

# Debug
## App Extension が更新されない場合
1. システム環境＞機能拡張で当該 Extension を無効にしてから
2. Xcode で Clean してから Build します

## selectedItemURLs

* `[[FIFinderSyncController defaultController] selectedItemURLs]`の各要素のURLは、`file:///.file/id=8438323.161`のような形式なっています
* パスに変換する場合は、`fileSystemRepresentation`を使います

## 動作ログ
* `tail -f /var/log/system.log` か `Console.app` で確認します

# 参考
* [How to enable FinderSync Extension in the System Preference in Cocoa - Objective C - Stack Overflow](http://stackoverflow.com/questions/31176942/how-to-enable-findersync-extension-in-the-system-preference-in-cocoa-objective)
Rails: CanCanでアクションごとに権限を設定する方法

次のように指定する。

```ruby:app/models/ability.rb
def initialize(user)
  can :update, ExampleClass
  can :create, ExampleClass
end
```

CRUD ( Create / Read / Update / Delete ) の四種類で指定しよう。

厳密には「アクション名」ではないので、edit / new / index / show は存在しなから注意だ。
たとえば CanCan で update を許可すると、 Rails では update と edit アクションの二つが許可されるぞ。

--- 

対応は次の通り。( CanCanでの指定 => Rails でのアクション)

- read => index + show
- update => update + edit
- create => new + create
- delete => delete  
- manage => 上記のアクション全て

---

-「CanCan アクション 権限」でググってもヒットしなかったのでメモ。
- [Cancanで管理者と一般ユーザを簡単にわける方法 - ユーザタイプごとの役割の設定（認可）](http://qiita.com/ShimojiK/items/2b5f8d1729cbc28b48c2)を参考にした。



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
sin関数実装。


テーラー展開して、適当に実装。
floatで。精度がいまいち。気にしない。

```c:sin.c
#define N 15
float my_sin(float x)
{
  float sum;
  float f;
  float x2;

  x -= (int)(x / (2*PI)) * 2 * PI;
  sum = x;
  f = x;
  x2  = x*x;
  for (int n=1; n<=N; n++) {
    f *= - x2 / ((2*n + 1) * (2*n));
    sum += f;
  }
  return sum;
}
```
SIMD(AVX)で並列化。8個一気に求める。

```c:sin8_simd.c
#define N 11
void my_sin8_simd(float *inp, float *out)
{
  const __m256 ymm_2pi  = _mm256_set1_ps(2*PI);
  const __m256 ymm_zero = _mm256_setzero_ps();
  __m256 ymm_x = _mm256_loadu_ps(inp);
  __m256 ymm_div2pi = _mm256_div_ps(ymm_x, ymm_2pi);
  __m256 ymm_floor = _mm256_round_ps(ymm_div2pi, _MM_FROUND_TO_ZERO);
  ymm_x = _mm256_fnmadd_ps(ymm_floor, ymm_2pi, ymm_x);
  __m256 ymm_sum = ymm_x;
  __m256 ymm_f   = ymm_x;
  __m256 ymm_x2  = _mm256_mul_ps(ymm_x, ymm_x);

  for (int n=1; n<=N; n++) {
    //denominator = 1.0 / ((2*n + 1) * (2*n)); 事前に計算しておく。
    const __m256 ymm_denominator = _mm256_set1_ps(denominator[n]);
    __m256 ymm_mul = _mm256_mul_ps(ymm_x2, ymm_denominator);
    ymm_f = _mm256_mul_ps(
        _mm256_sub_ps(ymm_zero, ymm_f),
        _mm256_mul_ps(ymm_x2, ymm_denominator)
    );
    ymm_sum = _mm256_add_ps(ymm_sum, ymm_f);
  }
  _mm256_storeu_ps(&out[0], ymm_sum);
  return;
}
ajaxのクロスドメイン接続でセッションを参照する

ブログパーツを作り、別ドメインのapiへデータを参照することとなった。
このapiはブログパーツを提供するサービスのユーザー情報を参照するもので、actionからユーザー情報を取得しようにもcookieが送信されない問題にぶち当たった。

# ajaxで別ドメインへcookieの送信
何も考えずに$.getJSONをしてもcookieは送信されない。
いろいろ検索するとあらかじめ

```js
$.ajaxSetup(
 {
  xhrFields:{
   withCredentials: true
  }
 }
);
```

と書いておけば良いらしいので試した。
これでcookieは送信されるようになったが、今度はレスポンスが返らなくなった。

# ajaxの失敗
ブラウザのコンソールを見ると、ajaxが失敗している模様。
メッセージの内容から、どうやら「Access-Control-Allow-Origin」をワイルドカードに指定してはダメということを把握。
このためapacheで以下の設定を追加して解決

```
Header set Access-Control-Allow-Origin http://[ブログパーツのドメイン]
Header set Access-Control-Allow-Credentials true
```
hipchatにcurlで投稿

さくっと

```
curl -X POST -H 'Content-type: application/json' -d "{\"message\":\"$1\"}" https://api.hipchat.com/v2/room/${_ROOM_ID}/notification?auth_token=${_TOKEN}
```

参照
https://www.hipchat.com/docs/apiv2/method/send_room_notification
mysqlでカラムの中身だけ出力する

実行

```
# mysql database -uroot -N -s -e 'select id from member;'
```

結果

```
4
6
7
8
9
10
11
12
13
14
```

-N skip-column-names. カラム表示しない
-s silent. セパレータ表示しない
-e execute. コマンド実行
【Unity5】複数のカメラのレンダリング結果を1つのテクスチャに重ねて画面へ出力する方法メモ

#Cameraを複数用意
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/caad9eca-28e7-6335-43d9-36c4e45588b5.png)

#RenderTexture作成
Project -> Create -> Render Texture　
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/8ca5a52a-b96f-a717-053b-40c2699e9f4a.png)

名前は「New Render Texture」とします。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/b05ee28a-bff5-5702-974b-66c9628150a9.png)

#レンダリングターゲットにRenderTextureを指定
Camera1とCamera2両方のCameraコンポーネントのTargetTextureへ「New Render Texture」をアタッチします。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/b9bfcf72-80b3-4375-22c6-6ed594fd4430.png)
こうすることでCamera1とCamera2のレンダリング結果が「New Render Texture」へ描きこまれるようになります。


#RenderTextureを描画するカメラの作成
名前を「Final Camera」とします。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/f8cd9c77-36c0-9c84-c606-981baf362f0e.png)

#RenderTextureを描画するスクリプト

以下のスクリプトを先ほど作ったカメラ「Final Camera」にアタッチします。

```ChangeRenderSrc.cs
using UnityEngine;

public class ChangeRenderSrc : MonoBehaviour
{
    public RenderTexture source;

    void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        Graphics.Blit(source, dest);
    }
}

```

#RenderTextureをカメラにアタッチ
ChangeRenderSrc コンポーネントのsourceに「New Render Texture」をアタッチします。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/6cf6f187-35db-9af9-48e7-93ba5b6778e9.png)
これで「New Render Texture」が画面に出力されるようになりました。
シリアル通信でバイト列を扱うときのフレーム構造

#問題
マイコン触っているとPCとのインターフェースにUARTを使うことがよくある。(UART-USB変換ICとか入れて)
単純なデータであればASCIIコードの文字列でやり取りすればいい。

例えばこんな感じ

```
元データ
{文字列}

変換後
<STX>{文字列}<ETX> 
(<STX>=0x02,<ETX>=0x03)
```

フレームは`STX`が来たら開始、`ETX`が来たら終了となる。

さて、送りたいデータが増えてくると、テキストではなく生バイト列で送りたくなってくる。
しかしバイト列には当然`0x00`~`0xFF`が含まれ得るので、
何も考えずに文字列と同じように`STX`と`ETX`で挟んで送ると
データに`0x02`や`0x03`が含まれる場合、意図しないところでフレームの切れ目を認識してしまう。
ではどうするか？
先人たちの知恵を調べた。

(一番楽なのはUARTを投げ捨てることだが。)

#時間を空ける
マイコン側が面倒。

#データリンク拡張を使う

制御文字の`DLE=0x10`を使う方法。
送りたいデータ中の`0X10`を特別扱いする:
送りたいデータ中に`DLE`が入っていた場合には`DLE DLE`に置換する。
要するにエスケープシーケンス。

```
{データ}
|
V
<DLE><STX>{変換データ}<DLE><ETX> 
```

```
変換前
00 02 10 1A 00 10 10

変換後(除Header,Trailer)
00 02 10 10 1A 00 10 10 10 10
```

特に難しいロジックでもなく、フレーム検出、変換の実装が容易。
ただし、元データ中に`DLE`が多く含まれると、変換後のフレーム長がやたら長くなる。
全データが`DLE`なら変換後はデータ部分が2倍になってしまう。

#文字列に変換する
バイナリデータをASCIIで印字可能な文字列に変換すれば、制御文字を使用して送信できる。
変換方法に例えばBase64を使うと、データサイズ約33%の増加で文字列化できる。
Base64エンコード/デコード処理のマイコン向け実装もネットの海に転がっている。

#Consistent Overhead Byte Stuffing[^1] (COBS)
長さが同じなら、どんなデータでも変換後のオーバーヘッドがだいたい等しくなるような変換方法。

`0x00`を特殊なバイトとして、データ中に`0x00`が出る場合は別のバイトで置換する。

- フレームの切れ目は`0x00`で表現する：元データ先頭と末尾に`0x00`を追加する。
- 末尾以外の`0x00`を、次の`0x00`までのバイト長(=`0x00`~`0x00`間にあるバイト数+1)で置換する。
- 次に`0x00`が出てくるまでのバイト長が`0xFF`以上になる場合、`0xFF`に置換して、`0xFF`後に次の`0x00`が出てくるまでの(残りの)バイト長を入れる。

フレームの切れ目が`0x00`固定なので簡単にフレームを検出可能。
オーバーヘッドがそこそこ安定している。(254byte以下なら確実に+2byte)
ただし変換が若干面倒。

##変換例
```
元データ + 末尾00
変換データ

   01 (00)
02 01 00

   00 (00)
01 01 00

   00 00 (00)
01 01 01 00

   01 02 00 03 04 00 (00)
03 01 02 03 03 04 01 00

   01 02 ... FE (00)
FF 01 02 ... FE 00

   01 02 ... FE FF (00)
FF 01 02 ... FE 02 FF 00
```

#エラーチェック付きヘッダーをつける
フレームの長さが書かれたヘッダーを付ける。
当然長さ情報だけではフレームの区切りがわからないので、
一緒にヘッダーのエラーチェックなどをつける。
多分シリアルポート界では定番。とあるGNNS付き9軸+αセンサーもこうなっていた。

Generic Framing Procedure(GFP)だと
長さ2byte + ヘッダーエラーチェック2byte

オーバーヘッドが固定。
変換もヘッダー付け外しするだけなので簡単。
ただしフレーム開始の検出が（他の方法に比べ）面倒。

---

[^1]: http://www.stuartcheshire.org/papers/cobsforton.pdf
Knockout.jsでapplyBindings で気をつけたいこと

下記のようなviewの構成の場合、サイドバーは共通のviewmodelで、ページ毎の描画は個別のviewmodelをapplyBindings したいということがあると思います。

```html:sample.html
<html>
 <body>
 <!-- ここは使い回ししたい -->
  <div id='side_menu'>
   サイドバーを描画
    〜
  </div>

  <!-- ここは個別にしたい -->
  <div id='main'>
   ページ毎内容を描画
   <div id='sub_main'>
　　ページにぶら下がる内容を描画
    〜
   </div>
   〜
  </div>
 </body>
</html>
```

その場合、applyBindings は第二引数で対象のDOMを受け付けるので下記のようにバインディングできます。

OKのパターン
第２引数で個別部分、共通部分の両者にbinging対象となるタグを指定することでbingingが有効になります。

```coffeescript:sample.cofee
# id=mainの配下にページ個別のviewmodelをbinding
ko.applyBindings({
      main_vm: new MainViewModel(),
      sub_vm: new SubViewModel(),
    },
    getElementById('main')
)
# id=side_menuの配下に共通のviewmodelをbinding
ko.applyBindings(
    new SideMenuViewModel(),
    getElementById('side_menu')
)
```

NGのパターン1
【個別・共有ともに第二引数でDOMを指定しない場合】
applyBindingsには追記していくようにできていないため、下記のように指定すると後から指定しているapplyBindingsが無効となります。

```coffeescript:sample.cofee
# id=mainの配下にページ個別のviewmodelをbinding
ko.applyBindings({
      main_vm: new MainViewModel(),
      sub_vm: new SubViewModel(),
    }
)
# id=side_menuの配下に共通のviewmodelをbinding
ko.applyBindings(
    new SideMenuViewModel()
)
```

NGのパターン2
【個別のみ第二引数でDOMを指定した場合】
applyBindingsの第二引数を指定しないとページ全体にbindingするためdoublebindingエラーが発生します。

```coffeescript:sample.cofee
# id=mainの配下にページ個別のviewmodelをbinding
ko.applyBindings({
      main_vm: new MainViewModel(),
      sub_vm: new SubViewModel(),
    },
    getElementById('main')
)
# id=side_menuの配下に共通のviewmodelをbinding
ko.applyBindings(
    new SideMenuViewModel()
)
```
【PHP】名前をスペースで姓と名に分割する

名前をスペースで姓と名に分割する処理。

手入力された値なので、姓と名の間のスペースが全角だったり半角だったり、スペース複数だったり。また、名前の前後にスペースが入っているなど。姓名がスペースで分かれてないものは姓の方に入れる。


```php
list($last_name,$first_name) = split_name('鈴木　 太郎　');
var_dump($last_name);
var_dump($first_name);

function split_name($name){
    //1.全角スペースを半角スペースに変換
    $name = str_replace('　', ' ', $name);
    //2.前後のスペース削除（trimの対象半角スペースのみなので半角スペースに変換後行う）
    $name = trim($name);
    //3.連続する半角スペースを半角スペースひとつに変換
    $name = preg_replace('/\s+/', ' ', $name);
    //姓と名で分割
    $name = explode(' ',$name);
    
    $last_name = $first_name = null;
    
    if(!empty($name[0])){
        $last_name = $name[0];
    }
    
    if(!empty($name[1])){
        $first_name = $name[1];
    }
    
    return [$last_name,$first_name];
}
```
OS X 10.11 El Capitanにアップグレードするとblessに失敗する

## macOS Sierra について (2016/10/2 追記)

macOS Sierra にアップグレード時にも同様の現象が発生しますが， El Capitan と同様の方法で対処可能です．

## 問題

OS X 10.11 El Capitan にアップグレードしたところ，デュアルブートに使っていた GRUB が立ち上がらず，普通に OS X が起動する事象が発生しました．
そこで，`bless` し直してみたところ，次のエラーが起きました．

```
$ sudo bless --folder=/Volumes/arch_grub/ --file=/Volumes/arch_grub/EFI/arch_grub/grubx64.efi --setBoot
Password:
Could not set boot device property: 0xe00002bc
```

## 原因と解決策

どうやら OS X 10.11 から追加された SIP の影響のようでした．
したがって，一度 SIP を無効にすれば，再び `bless` することができます．
具体的な手順は以下の通りです: 

1. Command + R を押しながら Mac を起動
1. Terminal を起動し，以下のコマンドで SIP を無効化する
  
    ```
    # csrutil disable
    ```

1. リブートし `bless` する
1. 再び Command + R を押しながら起動し，以下のコマンドで再び SIP を有効化する

    ```
    # csrutil enable
    ```

## 参考

- [Bless failed on El Capitan beta 7](https://github.com/kainjow/BootChamp/issues/19#issuecomment-139811187)
- [HomebrewはEl Capitanへアップグレードする前に入れておく](http://qiita.com/riocampos/items/525ec4b35744ad586c5a)
VagrantでAWSのインスタンスを指定時間後に停止

　AWSのインスタンスを指定時間帯で停止する方法は見かけますが、指定時間後に停止する方法は見かけません。今回は、Vagrantで起動したAWSのインスタンスを指定時間後に停止したいと思います。
　事前準備として、Vagrant及びvagrant-awsプラグインをインストールして置いてください。

　まず、指定時間後の停止については、shutdownコマンドのオプションを利用します。Vagrantのプロビジョニングで以下のコマンドを実行します（指定時間は分単位です）。

`sudo shutdown -h +60`

   ここで問題なのが、AMIでは初期状態でtty経由でのsudoコマンドしか受け付けない設定であることです。そのため、初期状態では以下のエラーメッセージが表示され、プロビジョニングは失敗します。

`sudo: sorry, you must have a tty to run sudo`

　そこで、回避方法としてプロビジョニングをpty（擬似端末）で実行するよう設定します。なお、このオプションはVagrantの1.4以上のバージョンで適用できます。

`config.ssh.pty = true`

 それでは、Vagrantfileの記載内容を以下に提示します。初回以降のプロビジョニング実行については、VagrantでのAWSのインスタンス起動時にporovisionオプションを指定してください。

```rb
Vagrant.configure(2) do |config|
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id     = 'AWS_ACCESS_KEY_ID'
    aws.secret_access_key = 'AWS_SECRET_ACCESS_KEY'
    aws.keypair_name      = 'AWS_KEYPAIR_NAME'
    aws.security_groups   = 'AWS_SECURITY_GROUP'
   
    aws.ami = "ami-xxxxxxxx"
    aws.instance_type = "t2.micro"
    aws.region = "ap-northeast-1"
    aws.availability_zone = "ap-northeast-1a"

    override.ssh.username = 'AWS_SSH_USERNAME'
    override.ssh.private_key_path = 'AWS_SSH_KEY'

    # pty will be used for provisioning >= 1.4
    override.ssh.pty = true

  end

  # provisioning with a shell script
  config.vm.provision "shell", inline: <<-SHELL
    sudo shutdown -h +60 &
    sudo ps ax |grep shutdown
  SHELL
end
```
## 参照
- [特定の時間にシャットダウンさせる - ITmedia エンタープライズ](http://www.itmedia.co.jp/help/tips/linux/l0548.html)
- [VagrantでAWSのインスタンスのプロビジョニング | mizoguche.info](http://mizoguche.info/2014/03/aws-vagrant/)
VMWare Fusion 上の Yosemite の動作が遅い時の対処法

# 対処方法

1. [Graphics Tools for Xcode 6.3](http://adcdownload.apple.com/Developer_Tools/Graphics_Tools_for_Xcode_6.3/GraphicsTools_Xcode_6.3.dmg) をダウンロード (https://developer.apple.com へのログインが必要)
2. `Quartz Debug` を /Applications にコピー
3. `Quartz Debug` を起動
4. Menu > Window > Quatz Debug Settings (Command + 1)
5. Beam Sync > Disable

![Quatz Debug Settings](https://qiita-image-store.s3.amazonaws.com/0/49300/2c03049d-0005-19e3-1b5e-111c1e425a57.png)

## 注意
* `Quartz Debug` は VMWare Fusion 上の Yosemite で動作させます
* [Graphics Tools for Xcode 7](http://adcdownload.apple.com/Developer_Tools/Graphics_Tools_for_Xcode_7/Graphics_Tools_for_Xcode_7.dmg) の `Quartz Debug` では、`Beam Sync` の項目が無くなっています

## 確認した環境
* VMWare Fusion 8.0.1
* 仮想マシン: OS X 10.10.5

## beamoff
* https://github.com/JasF/beamoff でも対処できるかもしれませんが、試していません

# 参照
* [Graphics Performance Issues when Running OS X Yosemite in a VM - VMware Fusion Blog - VMware Blogs](https://blogs.vmware.com/teamfusion/2015/01/graphics-performance-issues-running-os-x-yosemite-vm.html)
* [Improving Yosemite VM performance in VMware Fusion | Der Flounder](https://derflounder.wordpress.com/2014/12/13/improving-yosemite-vm-performance-in-vmware-fusion/)
nginScriptを試す(1):nginxをソースコンパイル

[VirtualBox]:https://www.virtualbox.org/wiki/Downloads
[Ubuntu]:http://ftp.riken.jp/Linux/ubuntu-releases/
[nginx]:http://nginx.org/

関連記事:

 * [VirtualBox+UbuntuにLEMP環境構築](http://qiita.com/dozo/items/1c21c8758121c366ba90)
 * nginScriptを試す(1):nginxをソースコンパイル
 * [nginScriptを試す(2):js_set,js_runディレクティブ](http://qiita.com/dozo/items/5885ef826ac9897b033c)

なんで突然[nginx]？

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

***
------------------- ↓ 余談はここから ↓-------------------

さて前回の記事で、
おもむろにnginxの環境を作ったわけだが、
なんで突然nginxを使うのかというと、

*nginscriptを試したかった*

のだ。
あとついでに

*HTTP/2を試したかった*

自動実行周りが煩雑で長くなったので分割。
補足欄にまとめてある。

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪
***
------------------- ↓ 本題はここから ↓-------------------
# nginxビルド

##準備

前回記事ではパッケージ版を使用したが、
nginScriptを使うにはビルドが必要なので先にアンインストールをしておく。

```shell-session
sudo apt-get purge nginx
```

#### ビルドツールのインストール
```shell-session
sudo apt-get install build-essential # ビルド全般ツール
sudo apt-get install libpcre3-dev    # PCREライブラリ(nginxのビルドで必要)
sudo apt-get install zlib1g-dev      # zlibライブラリ(nginxのビルドで必要)
sudo apt-get install libssl-dev      # SSLライブラリ(nginxのビルドで必要)
```
###### 省略形

```shell-session
sudo apt-get install build-essential libpcre3-dev zlib1g-dev libssl-dev
```

## nginxインストール
#### nginscriptのビルド
```shell-session
wget http://hg.nginx.org/njs/archive/tip.tar.gz
tar xvfz tip.tar.gz
cd njs-3ed92ffa3f05
./configure
make
cd ..
```

#### nginxのビルド
```shell-session
wget http://nginx.org/download/nginx-1.9.5.tar.gz
tar xvfz nginx-1.9.5.tar.gz
cd nginx-1.9.5
./configure --add-module=../njs-3ed92ffa3f05/nginx --pid-path=/run/nginx.pid --user=www-data --group=www-data --with-http_ssl_module
make
sudo make install
cd ..
```

#### 動作確認
```shell-session
sudo /usr/local/nginx/sbin/nginx
```

#### ブラウザで確認
![nginx03.PNG](https://qiita-image-store.s3.amazonaws.com/0/40697/6c40a4d4-c71a-3e0c-4be9-1bea1cef9674.png)

#### 終了
```shell-session
sudo /usr/local/nginx/sbin/nginx -s quit
```


ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪
***
------------------- ↓ 補足はここから ↓-------------------
## 自動起動登録
ソースビルドの自動実行周りの煩雑さは異常。

#### nginx.serviceの設置
/lib/systemd/system/nginx.service を作成し以下の呪文を記述
 
```ini:/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

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

参考:https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

#### init, defaultの設置
```shell-session
wget https://github.com/Fleshgrinder/nginx-sysvinit-script/archive/master.tar.gz
tar xvfz master.tar.gz
cd nginx-sysvinit-script-master
sudo make
sudo update-rc.d nginx enable
#make uninstall
cd ..
```

#### 各種コマンド
```shell-session
sudo service nginx start # 起動
sudo service nginx stop # 終了
sudo service nginx restart # 再起動
```