OmniAICreator/Qiita-1.07M huggingface dataset:
「awesome」キーワードで新しい工学についてまとめた資料を検索する 

## はじめに
新しい言語を学習したいとき、インタネットでその言語の資料がいっぱいあるんですが、良い資料を選べるのが難しいと思います。「awesome」キーワードで対象検索について完全な資料が取れます。 

```
awesome + {keyword}
```
## まとめ
### **Back-End Development**
[awesome go](https://www.google.com.vn/search?q=awesome+go)
[awesome nodejs](https://www.google.com.vn/search?q=awesome+nodejs)
[awesome php](https://www.google.com.vn/search?q=awesome+php)
[awesome laravel](https://www.google.com.vn/search?q=awesome+laravel)
[awesome java](https://www.google.com.vn/search?q=awesome+java)
[awesome scala](https://www.google.com.vn/search?q=awesome+scala)
[awesome dotnet](https://www.google.com.vn/search?q=awesome+dotnet)
[awesome python](https://www.google.com.vn/search?q=awesome+python)
[awesome ruby](https://www.google.com.vn/search?q=awesome+ruby)
[awesome rest](https://www.google.com.vn/search?q=awesome+rest)

### **Front-End Development**
[awesome javascript](https://www.google.com.vn/search?q=awesome+javascript)
[awesome angularjs](https://www.google.com.vn/search?q=awesome+angularjs)
[awesome react](https://www.google.com.vn/search?q=awesome%20react)
[awesome css](https://www.google.com.vn/search?q=awesome+css)
[awesome html5](https://www.google.com.vn/search?q=awesome+html5)

### **Mobile Development**
[awesome android](https://www.google.com.vn/search?q=awesome+android)
[awesome objective c](https://www.google.com.vn/search?q=awesome+objective+c)
[awesome swift](https://www.google.com.vn/search?q=awesome+swift)
[awesome react native](https://www.google.com.vn/search?q=awesome+react+native)

### **Database**
[awesome database](https://www.google.com.vn/search?q=awesome+database)
[awesome mysql](https://www.google.com.vn/search?q=awesome+mysql)
[awesome postgres](https://www.google.com.vn/search?q=awesome+postgres)

### **System**
[awesome aws](https://www.google.com.vn/search?q=awesome+aws)
[awesome microservices](https://www.google.com.vn/search?q=awesome+microservices)
[awesome docker](https://www.google.com.vn/search?q=awesome+docker)

### **Computer Science**
[awesome bigdata](https://www.google.com.vn/search?q=awesome+bigdata)
[awesome machine learning](https://www.google.com.vn/search?q=awesome+machine+learning)
[awesome deep learning](https://www.google.com.vn/search?q=awesome+deep+learning)

### **特別**
[awesome awesome](https://github.com/sindresorhus/awesome)
開発ツール Delphi / C++Builder 10.1 Berlin Starter Edition 無料ダウンロード提供開始！

#Delphi / C++Builder 10.1 Berlin Starter Edition 無料ダウンロード提供開始！
![image](https://qiita-image-store.s3.amazonaws.com/0/145847/ce7c4941-ef2e-6bfc-4fcf-c785f433c5ad.png)

※当記事は2016年12月26日に[エンバカデロコミュニティサイトに掲載した記事](https://community.embarcadero.com/blogs/entry/delphi-c-builder-10-1-berlin-starter-edition-japan)の転載です。

すでに一部の方々はお気づきで、話題にしていただいておりますが、弊社 Delphi / C++Builder 10.1 Berlin Starter Edition の無償提供を開始しました。

Delphi / C++Builder 10.1 Berlin Starter Editionは、無料で利用でき、Delphi または C++を使用してWindows 向けアプリケーションのプログラミング・開発ができる、高機能で使いやすい開発環境です。Delphi / C++Builderは視覚的に「コンポーネント」呼ばれるパーツを使ったユーザーインターフェース設計やロジック構築ができる特徴を持っており、より「簡単」に「素早く」アプリ開発を行えるでしょう。無償ですので、これからまずはプログラミングを学んでみたいという方、無料で使いやすい開発環境をお望みの方、それから簡単にアプリ開発をしたいという方に、気軽に使っていただけます。コンポーネントと言われる「VCL」や「FireMonkey」を使い、難しそうであったアプリ開発が、こんなにも簡単にできるのか！と驚いていただければ嬉しいですね。

もちろん、古くから使い続けている方々も、無償公開記念にダウンロードを！ 昔、Delphiに触れた方々も、再び触ってみてください。Delphiの開発環境も、言語仕様も進化しています。

さまざま書いておりますが、無償ですので、まずは下記のリンクよりダウンロードしておくことをお勧めします。プレスリリースには「無期限無料版を公開」と記載がありますが、永遠に公開しているとは書いてません(笑)

###ダウンロードはこちらから

* Delphi : https://www.embarcadero.com/jp/products/delphi/starter/promotional-download
* C++Builder: https://www.embarcadero.com/jp/products/cbuilder/starter/promotional-download

###Starterエディションのダウンロード方法、インストール方法をブログと動画でご紹介

* ブログ： https://community.embarcadero.com/blogs?view=entry&id=9038
* 動画： https://youtu.be/r2K-1XR37WA?list=PLoQxxVNY10oEmNSjiPdYPV_E9IL9ipico

###Starterを使った初心者向けのチュートリアルをオンライン放送で毎週実施

わかりやすく、一から学べる入門者向けセミナーです。

* シーズン1（完結）： [まとめブログはこちらから](https://community.embarcadero.com/blogs/entry/delphi-c-builder-starter-japan)
* シーズン2 : 2017年1月26日より実施中です。視聴は[こちらのWebからご登録](http://forms.embarcadero.com/starter-tutorial-webinar)の上、ご視聴ください。

###製品の紹介ページ

* Delphi 製品ページ： https://www.embarcadero.com/jp/products/delphi
* C++Builder 製品ページ: https://www.embarcadero.com/jp/products/cbuilder

■以前、無償提供を行った際に実施したWebセミナーにて、かんたんな使いかたをご紹介しています

* Delphi Boot Camp: http://forms.embarcadero.com/delphi-boot-camp-2016
* C++ Boot Camp: http://forms.embarcadero.com/cpp-boot-camp-2016

■本弊社プレスリリースを @Pressさんで掲載しています。

* https://www.atpress.ne.jp/news/112593

上記の弊社プレスリリースで、「8月29日より開始したWebセミナー合わせ期間限定無料版を公開した結果、2,000件以上ものダウンロードを記録」の記載がありますが、これは日本国内のみを範囲とした場合の話で、ワールドワイドでは20,000件以上のダウンロードを記録しました。
昨今、無償ソフトが氾濫するなか、不必要なソフトはダウンロードされないようになっているにもかかわらず、こんなにも注目とダウンロードをしていただいて、大変ありがたい話であります。

さらには**窓の杜**さんにも記事として取り上げていただいているので、お読みいただければ幸いです。

* [入門者向け「Delphi」「C++Builder」の有償販売が終了、無期限の無償版として公開](http://forest.watch.impress.co.jp/docs/news/1021826.html)

**CodeZine**さんでのニュースもどうぞ

* [エンバカデロ・テクノロジーズ、Delphi／C++Builder Starter Editionの無期限無料版を公開](http://codezine.jp/article/detail/9693)

**@IT**さんでのニュースもどうぞ

* [DelphiとC++BuilderのStarterエディションが無料に](http://www.atmarkit.co.jp/ait/articles/1609/28/news101.html)
 

有償版となりますが、上位版をお使いいただくと、一つの同一プログラミングソースと、一つのマスタUI設計で、Windows, Mac OS X, Android, iOS 対応の同時クロスプラットフォーム開発もできます。

そして毎年アップデートを続けて進化し続けている Rad Studio / Delphi / C++Builderにご注目ください。
機械学習論文読みメモ_42


[Planar Ultrametric Rounding for Image Segmentation](http://www.ics.uci.edu/~fowlkes/papers/yf-planarumround.pdf), NIPS2015
planer graphにおけるheirarchical clusteringを考える。
planer graphは辺が頂点以外で交わる事のないようなグラフである。
ultrametricは三角不等式の代わりに、d(u,v) =< max{d(u,w), d(v,w)}が成り立つ事を仮定した距離測度である。
本論では、グラフカットを考え、カットのない状態から、全てのエッジ間がカットされた状態までの階層的なカットを考える。
この時各階層に対してしきい値が設定されており、multicut indicaterと呼ばれる、あるエッジに対してカットが行われる層に対応したしきい値をそのエッジに対応する距離、すなわちultrametricとして用いる。
この設定の元、入力として実際のエッジ重みが与えられた際に、ultrametricとエッジ重みの二乗誤差を最小化する。
この問題は層数Lとしきい値を固定し、グラフカットを最適化するための整数線形計画問題になる。
この問題はNP困難のため、実際は整数の制約を緩和し実数条件下で近似的に解く。
この問題はcutting-plane法を用いて解く事が可能だが、その解は問題の制約を満たす事が難しい。
代わりに本論では、planer graph上で、グラフを２つに分割するtwo-way cutを考え、その上で得られるmulticutがtwo-cutを示す行列の線形和で表せる事を利用する。
これよりtwo-cutの線形和(superposition)に関するconic hullはmulti-cutのconic hullに一致し、結局解きたいmulti-cutの問題をplaner graph上のtwo-cutに関する線形計画問題に帰着させる事ができる。
実際にはこの問題はまだ解く事が難しいため、さらに近似的なアプローチで解く事になる。

[Tagger: Deep Unsupervised Perceptual Grouping](https://arxiv.org/pdf/1606.06724v2.pdf), NIPS2016
segmentationに関して、その入力、特徴に関する理由付けを可能にするフレームワークを提案する。
このフレームワークは教師ありだけでなく、教師なし学習の文脈においてもsegmentationにおけるグルーピング処理を行う事ができる。
この時、NNにおける表現力を向上させる事で、入力と、抽出された特徴に関して逐次的に異なる物体のグルーピングを、互いに独立性を仮定する事で行う。
このグルーピングは物体のカテゴリ、そのグルーピングをEMアルゴリズム的な相互更新を行う事で行われる。
この処理は実際にはdenoising autoencoderの文脈を用いて、根底の生成モデルを直接学習するのではなく、代わりにグルーピングを逐次改善するモデルを学習させる事で、学習の難易度を下げる。
提案フレームワークは他の従来手法と異なり、入力が画像以外のものに関しても適用可能である。
例えば音声認識におけるカクテルパーティ効果で示されるような音声分離が挙げられる。

[Learning to learn by gradient descent by gradient descent](https://arxiv.org/pdf/1606.04474.pdf), NIPS2016
ディープラーニングにおいては、特徴量を自動で学習する事を可能にした事で飛躍的な性能改善を可能にした。
しかし最適化手法に関しては、例えばdeep learningではADAM、ADAGRADなど、未だに人手によって作られている。
本論ではそうした最適化手法を学習問題に置き換える手法を提案する。
この手法は、対象とする問題の構造を元に自動で最適な最適化手法を学習する事を可能にする。
つまり、各ステップにおけるパラメータの更新値を関数として扱い、これをRNNとして各ステップ毎に動的に学習する。
No Free Lunch Theoremで知られるように、結局最適化手法は解きたい問題に対して特化させなければ上手くいかない。
この特化を考えるとき、従来であれば対象の問題を解析し、汎化誤差を出来る限り小さくできるようなアルゴリズム設計を行う。
これはつまり、学習したい真の関数とそれに関するサンプルセットに対して、まだ見ぬ新たなサンプルに対する損失が小さくなるような関数を学習する事を目的とする。
本論ではこの考え方をある問題で学習された構造を他の問題へ知識転用する転移学習の文脈で考え、この場合汎化誤差とは与えられているサンプル（＝問題）がまだ見ぬ（サンプル＝他の問題）どの程度へどれだけ知識を転用出来るかという事になる。
この考え方はメタ学習の文脈で議論されてきた。
本論では、RNNを用いてパラメータや損失の変化を元に逐次的に更新値を推測する。
実際の適用においては、パラメータ空間が膨大になる場合を考え、coordinate wiseな更新を行う事となる。
機械学習論文読みメモ_41


[Pointer Networks](https://arxiv.org/pdf/1506.03134v2.pdf), NIPS2015
sequence-to-sequenceモデルなどは、出力の次元が予め決められたものしか適用が出来ないモデルである。
それに対し本論では入力の長さが変数であり、その長さに応じて出力のクラス数が変わるような場合における出力シーケンスの条件付き分布を学習可能な新たなネットワークを提案する。
組合せ最適化問題などはこのクラスに属する。
このようなモデルをneural attentionの考え方を応用して実現する。
従来のneural attentionではencoderから得られる隠れ層を用いてcontext vectorを出力していた。
本論で採用するneural attentionではを与えられた入力シーケンスに対し、出力はその入力の中でいずれかを選択(pointer)しそれを出力する。
これにより、出力の次元は、入力の次元に一致する事となり、可変となる。

[Probabilistic Curve Learning: Coulomb Repulsion and the Electrostatic Gaussian Process](https://arxiv.org/pdf/1506.03768.pdf), NIPS2015
データの低次元構造を学習する問題で、特に多様体学習を考える。
このような手法で生成確率モデルは少ない。
gaussian process latent variable model(GPLVM)はその１つだが、identifiabilityに問題がある。
本論では、物理学における粒子間の静電による反発効果にインスパイアされた、Coulomb repulsive(Corp) processを新たに提案する。
このprocessとGP prirorを組合せて新たなelectrostatic GP processを提案する。
このprocessでは、GPの潜在変数はgaussianではなく、repulsive processの１つであるCorpを用いる。
repulsive processは各データ点が反発するように、広く散布するような分布モデルであり、これを潜在変数の分布として採用する事で、多様体上で広く分布するデータ点を得る事が出来る。
これにより多様体学習におけるidentifiabilityを改善する事が出来る。
Corpは特にCoulomb’s lawに基づいた粒子間の静電による反発効果に関するモデルを利用し、GPの潜在変数分布として最適である。

[Galileo: Perceiving Physical Object Properties by Integrating a Physics Engine with Deep Learning](http://www.mit.edu/~ilkery/papers/phys_nips.pdf), NIPS2015
人は動的なシーンから物理的な予測を行う事や、静的画像から物理的特性を予測する事が出来る。
本論ではDeep Learningによる生成モデルに基づき、そのような物理シーンの理解を行う。
このモデルは物理演算エンジンを利用し、物体の物性表現を用いた学習を行う。
学習では、MCMCを利用した物体のvisual representationの特徴に関する予測タスクを考え、それに基づいた最適化を行う。
またvisual inputから直接その中の物体の物性を予測する問題も扱う。
これは生成モデルをinvertする事で実現される。
cakephp3 group by count


Sitesテーブル
id
user_id
ftp_id

指定した user_id が合計 いくつの ftp_id を持っているかを求める

```
$Query = $this->Sites->find('all');

            $Query->select([
                'id',
                'ftp_id',
                'count' => $Query->func()->count('*')
            ])
                //->where(['user_id' => u('id')])
                //->find('search', ['search' => $this->request->query])// searchplugin
                ->group('ftp_id');


            foreach ($Query as $v) {
                $ftp_count[$v['ftp_id']] = $v['count'];
            }

```

結果

Array
(
    [12] => 1
    [13] => 1
    [16] => 2
    [17] => 1
    [19] => 1
    [22] => 3
    [25] => 2
    [30] => 1
    [34] => 1
    [37] => 1
    [39] => 1
    [40] => 1
)
auto-complete.el が遅いと感じたら

### .zshenvのせいかも！？

`c-mode-common-hook` に以下が追加されてます。

```
(defun ac-cc-mode-setup ()
  (setq ac-sources (append '(ac-source-gtags) ac-sources)))
```

ac-source-gtagsの中で、以下の関数が実行されています。
`shell-command-to-string`が実行される際、`.zshenv`が読み込まれるので、
`.zshenv`の中で重たい処理をしていると応答が帰ってくるまで時間がかかってました。

```
(shell-command-to-string (format "global -ciq %s" ac-prefix)) "\n")
```

### 対策

`.zshrc.local` を、 `.zshrc` で読み込むようにして、 `.zshrc.local` で重たい処理をするようにしました。
TensorFlowを理解するための基礎情報共有（６）

前回の投稿からあっという間に１年が経過しましたが、皆さんいかがお過ごしでしょうか？TensorFlowの発表と公開（2015年11月）から１年以上経ち、巷の大企業の「人工知能を使った○○」という売り文句も耳慣れた感じがします。と同時に、スマホが普及する前に各社の各携帯電話で仕様が異なるために一般的にはまだモバイル・インターネットが普及していなかった頃（2005年ごろ）のような「敷居が高い」感じの足踏み感も伺えます。こうした俯瞰的な話を含めて今後は定期的に投稿していきますので宜しくお願いいたします。

- - - - - - - 

前回はMNIST For ML Beginnersで難しい箇所について言及しました。

　前回　http://qiita.com/MATS_ELB/items/db85de80c72be28fc60b

今回は多くの方が足踏みする箇所に見える[Deep MNIST for Experts](https://www.tensorflow.org/versions/master/tutorials/mnist/pros/index.html#deep-mnist-for-experts)についての補足説明です。Expertsになって急に難しくなりました。この章では「Multilayer Convolutional Network（多層畳み込みネットワーク）」という話がページ中盤から出てきて、まずはこの「多層畳み込みネットワーク」の考案のの背景にある話の流れから言及します。

　章の前半では「MNIST For ML Beginners」で登場したモデルの作り方が語られています（Pythonのコードは「MNIST For ML Beginners」と同じなので前回の記述を参照されたし）。このモデルは下記のような１層からなるモデルで、認識する28 pixel x 28 pixel（合計784 pixel）の画像を全てのピクセルを１行にした１次元の入力データとして学習および評価させるシンプルなものでした[図１]。

<center><img src="https://www.tensorflow.org/versions/master/images/softmax-regression-scalargraph.png" width="500"></center>

図１ MNIST For ML Beginnersで用いた一層の単純なニューラルネットワークモデル

これを使って1000回の学習（毎回50セットの画像を読ませたので学習した画像はのべ50000枚）を行ってみると精度は91%だったと。精度が低すぎる。この精度の低さは何が原因か考え下記のように考えたそうです。

　**アイディア１：層を複数にしたらいいのでは？**

理論上は入力と出力の関係を表す数式が細かくなって繊細になり精度が上がるはずなのだが、やってみたところニューラルネットワークの特徴である「学習（誤差逆伝播法/バックプロパゲーション：出力に出た誤差を修正するためひとつ手前の層の重みを調整し、そうするとその前の層の重みをこれくらい調整し。。。）」において、入力に近い層の重みがブレて精度が期待したほど上がらないという由々しき事態（過学習）に遭遇した。まるで、曲がらない棒で黒板を指すと棒の先は思い通りに定まるが、いろんな場所を指せるよう棒に関節をいくつもつけたら棒がクニャクニャ曲がって棒の先がうまく定まらないのと似た状態です。そこで再び考えた↓。

　**アイディア２：学習する際に一部の重みを無視して感度を下げたらいいのでは？**

ということで、学習する際に各層の各重み全てを修正するのではなくて、一部（確率的に選ぶことが多いようです）を学習時には無視して残りの重みだけ修正するという「学習感度を下げる」方法を編み出した。これを「Dropout（ドロップアウト）」と呼びます。これにより学習のブレは抑制できましたが、さらに下記のように考えた↓。

　**アイディア３：そもそも、画像を１行のデータにして入力するのは適切なのか？**

これは学習データが画像であるから改善方法として出るアイディアで全てのタイプの学習に適用される手法ではありませんが、例えば、画像に表現されている絵（A）が全体で右に１ピクセル移動した画像(B)があった場合、人間の脳はほぼ同じ絵と認識するはずなのに、画像を１行のデータにしてしまうと（A）と（B）はまったく異なるデータとなってしまい、ニューラルネットワークは非常に理不尽な学習をしてしまうだろうと。このような画像の枝葉末節な違いではなく、人間が映像を捉える時のように「少しざっくりと、画像としての特徴をつかむような」捉え方をしたデータをニューラルネットワークの入力にしてはどうかと。

上記の経緯を経て、本性で扱われる「多層畳み込みネットワーク」が考案されたとのことです。

- - - - - - 

次回の投稿では、技術や数学の観点を少し離れて、「この一年の機械学習・人工知能の発展推移を見て考える、あるべき今後と課題」に言及します。
第1回  数学をコードにする試み（∈編）

この投稿は、[Mathematics to code : ∈ - by Kohei Shingai](http://codepen.io/koheishingai/post/x-is-an-element-of-a) の日本語訳です。

![is.element.of.2.jpg](https://qiita-image-store.s3.amazonaws.com/0/42246/b7dd44b4-7480-a92d-3315-0e84e0a56c63.jpeg)


![is.element.of.1.jpg](https://qiita-image-store.s3.amazonaws.com/0/42246/b696a77e-cb7a-7820-130b-ff8d587c2c0e.jpeg)
[https://www.instagram.com/p/BQvOfRygJCA](https://www.instagram.com/p/BQvOfRygJCA)

## Rの関数で、x ∈ A を確認する
`is.element(x, A)` を使う、

```r
A <- c(1:5)
# 集合A は、 [1, 2, 3, 4, 5]

is.element(1, A) # 結果: TRUE
# つまり、 1 ∈ A - {1, 2, 3, 4, 5} かどうか？ 

is.element(6, A) # 結果: FALSE
# つまり、 6 ∈ A - {1, 2, 3, 4, 5} かどうか？
```

## Pythonの標準演算子で、x ∈ A を確認する
`x in A` を使う、

```python
A = set([1, 2, 3, 4, 5]) # 集合A

1 in A # 結果: True
# つまり、 1 ∈ A - {1, 2, 3, 4, 5} かどうか？

6 in A # 結果: False
# つまり、 6 ∈ A - {1, 2, 3, 4, 5} かどうか？
```

## Rubyのメソッドで、x ∈ A を確認する
`A.include?x` を使う、

```ruby
A = (1..5).to_a
# 集合A は、 [1, 2, 3, 4, 5]

A.include?1 # 結果: true
# つまり、 1 ∈ A - {1, 2, 3, 4, 5} かどうか？

A.include?6 # 結果: false
# つまり、 6 ∈ A - {1, 2, 3, 4, 5} かどうか？
```

## JavaScriptの式やメソッドで、x ∈ A を確認する

`A.indexOf() != -1` もしくは `A.includes(x)` を使う、

```js
A = [1, 2, 3, 4, 5] // 集合A

A.indexOf(1) != -1 // 結果: true
// つまり、 1 ∈ A - {1, 2, 3, 4, 5} かどうか？

A.indexOf(6) != -1 // 結果: false
// つまり、 6 ∈ A - {1, 2, 3, 4, 5} かどうか？

A.includes(1) // 結果: true - ES2016以降
// つまり、 1 ∈ A - {1, 2, 3, 4, 5} かどうか？

A.includes(6) // 結果: false - ES2016以降
// つまり、 6 ∈ A - {1, 2, 3, 4, 5} かどうか？
```
[Java][Spring] Java EE(JAX-RS) vs. Spring REST実装比較メモ

# クラスの実装

## Java EE

`ResourceConfig`を継承したクラスの中で、RESTリソースクラスが存在するパッケージを指定する。

## Spring

`@RestController`アノテーションを付ける

# リクエスト受け付け部分

|内容| Java EE | Spring | 備考 |
|:--|:--|:--|:--|
|メソッドの指定| `@GET`  | `@RequestMapping(method=RequestMethod.GET)`  | POST/DELETE/PUTも同様  |
|パスの指定| `@Path("/path")`   | `@RequestMapping(value="/path")`  |   |
|パラメータとしてのパスの指定| `@Path("{id:[0-9]+}")` | `@RequestMapping(value="{id:[0-9]+}")` | 可変部分は同様に{}で囲む。正規表現も使える。コロンの前後にスペースを入れてはいけません。 |
|パス指定されたパラメータの受け付け| `@PathParam("id") Integer id`  | `@PathVariable(name="id") Integer id`  |   |
|クエリ文字列の受け付け| `@QueryParam("name") String name`  | `@RequestParam(name="name",required=false) String name`  | Springは引数なしだと400 BAD REQUESTになるので、required=falseを付けます。  |
|リクエスト本体の受け付け| とくになし。通常の引数のまま。 | `@RequestBody`を引数に付ける||

# レスポンス出力部分


|内容| Java EE | Spring | 備考 |
|:--|:--|:--|:--|
|コンテントタイプ指定| `@Produces(MediaType.APPLICATION_JSON)`   | `@RequestMapping(produces=MediaType.APPLICATION_JSON_VALUE)`   | Springの`MediaType`は、`org.springframework.http`パッケージ  |
|200 OKを返す。|return Response.OK.build();|void||
Qiitaの記事コメントへのリンクURL取得方法

# <i class="fa fa-graduation-cap" aria-hidden="true"></i> 結論

ただの記事URL+idアンカーだけど、
コメントの投稿日時文字列が、そのコメントへのリンクになっている。

![投稿日時.png](https://qiita-image-store.s3.amazonaws.com/0/62354/635c3ad5-9011-ba34-b2fa-cb134f3fd911.png)



# <i class="fa fa-cubes"></i> 余談


[Qiitaで「この記事にリンクしている記事」の一覧が見られるようになりました - Qiita Blog]
>記事やコメント間でリンクをはると、上記のようにリンクされた側にリンク元が表示され、関連する情報をたどることができます。

にあるように、記事だけではなくコメント単位でも被リンクが表示される。

記事にリンクを貼ると、

![リンク.png](https://qiita-image-store.s3.amazonaws.com/0/62354/fc79b3c9-f9ec-73f1-a93b-1006aadfa1f8.png)

こうなる。

![被リンク.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/978efeb3-8109-461a-1cc5-50318fb22a78.jpeg)

自己主張が激しくてあまり好きでない[^1]というのは余談の余談なんだけど、自記事よりよっぼど良いことが書かれてるし、見直しやすいので記事リンクと同程度には扱っている[^2]。

しかし、肝心のコメントの参照方法がわからなくて、最初はインスペクタからコメントを参照して、`id`属性を拾ってリンクにしていた。
でも最近、コメントも(おそらく)React製になり、FirefoxのインスペクタではDOMに`id`属性がなくなって、`dataset`のJSONを整形して探さなくきゃいけなくなって難儀になっていた。

![json化.JPG](https://qiita-image-store.s3.amazonaws.com/0/62354/3302cab9-ca7c-b7da-aa6b-8ba51c5f78e6.jpeg)


一方、
[Qiita > バグ? > コメントへのリンクが機能しない - Qiita].[^3]
みたいに複数人がコメントリンクを使いこなしていて、かるく記事検索してもそれらしい不満が出てなかった。[^4]

でも自分は不満なので、いつもみたいにJSで解決するかとインスペクタでレイアウト考えていたら、アンカー付きのURLを見つけた。
結論にも出しているけど、投稿日時の`a`タグ。

![投稿日時.png](https://qiita-image-store.s3.amazonaws.com/0/62354/635c3ad5-9011-ba34-b2fa-cb134f3fd911.png)

アンダーラインと色で自己主張していることはなんとなく気づいていたけど、リンクになっているとは気づかなかった。クリックなんてしないし。

嘘だろ…最近追加された機能だろとむしゃくしゃして魚拓を漁ったらかなり昔からそうだった。凹んだ。

今のところ、「フィードで開いた記事はダブルクリックで閉じられる」機能に次いで2番めにわかりにくい機能だ。:rage:
あっちは補助的機能だからまだいいけど。

# <i class="fa fa-cube"></i> 知らないこと

コメントへのリンクの通知は記事投稿者にも飛ぶのか。
飛ぶなら肩透かし食らいそうで申し訳ない。


[Qiitaで「この記事にリンクしている記事」の一覧が見られるようになりました - Qiita Blog]:http://blog.qiita.com/post/131195150189/qiita-reference-feature

[Qiita > バグ? > コメントへのリンクが機能しない - Qiita]:http://qiita.com/7of9/items/7bb49fbc1b88e40a89a3

[^1]: 「開く」とかでデフォルトは隠して欲しい。恥ずかしい。
[^2]: 当然記事自体のリンクの方が多が。
[^3]: たぶんまだ直っていない。
[^4]: コメントリンク自体あまり見ないですけど。
CSSでマウスカーソルを見えなくする方法

プレゼンとか展示やるのにWebブラウザでやってて、マウスカーソルが画面に表示されてるとうざいよね

簡単に消せた

```css
body {
  cursor: none;
}
```

これだとaタグの`:hover`とか勝てないことがあるので、
完全抹消したいときは`!important`

```css
* {
  cursor: none !important;
}
```

しかし見失うのでjsでマウスが`動いているときは表示`、`止まったら消す`みたいにしたほうが良い

```js
var timer;
window.addEventListener('mousemove', function() {
  document.body.classList.remove("hideCursor");
  clearTimeout(timer);
  timer = setTimeout(function() {
    document.body.classList.add("hideCursor");
  }, 1000);
});
```

雑だけどこんな感じでいけるはず
babili で JavaScript を圧縮しよう

[babili](https://github.com/babel/babili) は、 JavaScript を圧縮して、サイズを軽量化するためのツールです。

[YUI Compressor](http://yui.github.io/yuicompressor/) をはじめ、 JavaScript の圧縮ツールは数多く存在しますが、 babili は [Babel](https://babeljs.io) と連携させて、 ES2015/ES6 や React(React.js) の構文をトランスパイル(古いブラウザで読めるように変換) をすることができます。

## インストール方法

```bash
## package.json が無い場合は生成しておく
## npm init .

npm install --save-dev babili
```

[Node.js v4 以降が必要です。](https://nodejs.org/ja/download/)
プロジェクトごとにトランスパイルの方針が異なる場合もあるので、ローカルにインストールすることをおすすめします。

## 利用方法

例として、 EC-CUBE3 の JavaScript を圧縮してみます。
html/template/default/js.min に圧縮後のファイルを出力します。

```bash

cd path/to/ec-cube
node_modules/.bin/babili html/template/default/js -d html/template/default/js.min
```

約40〜50% 程度のサイズに圧縮されました。

```bash

ls -al html/template/default/js html/template/default/js.min
html/template/default/js:
total 72
drwxrwxrwx  5 nanasess  staff    170  1 10 17:36 .
drwxrwxrwx  7 nanasess  staff    238  2 20 10:28 ..
-rw-rw-rw-  1 nanasess  staff  20401  1 10 17:36 eccube.js
-rw-rw-rw-  1 nanasess  staff  12470  1 10 17:35 function.js
drwxrwxrwx  9 nanasess  staff    306  1 10 17:35 vendor

html/template/default/js.min:
total 40
drwxr-xr-x  5 nanasess  staff   170  2 20 10:56 .
drwxrwxrwx  7 nanasess  staff   238  2 20 10:28 ..
-rw-rw-rw-  1 nanasess  staff  8377  2 20 10:20 eccube.js
-rw-rw-rw-  1 nanasess  staff  6512  2 20 10:20 function.js
drwxr-xr-x  9 nanasess  staff   306  2 20 10:03 vendor
```

## まとめ

EC-CUBE をちょっとカスタマイズする分には、 jQuery くらいで十分、、かもしれませんが、フロントエンドを充実させようとすると、どうしても JavaScript フレームワークや、最新の構文を使いたくなってきます。 React や、最新の ES2015/ES6 の構文で開発して、本番環境では babili を使うといった運用がよさげですね。

## 参考

- https://babeljs.io/blog/2016/08/30/babili
Googleスプレッドシートの数式に自動で色を付ける

## はじめに
「数式」が設定されているセルに色を付けたいと思いググっても、「カスタム書式に数式を設定」する方法ばかりひっかかってしまい、ドンピシャな方法が見つけられず、自分が思いつく方法でやってみました。

## 設定方法

1. メニューから「表示形式」「条件付き書式...」を選択
2. 「新しい条件を追加」を選択
3. 以下の設定を記入する（全範囲に設定する場合）
    4. 「範囲に適用」: A1:Z1000
    5. 「セルの書式設定の条件」：カスタム数式
    6. 条件：=ISFORMULA(A1)
    7. 「書式設定のスタイル」：お好みで

![image](https://qiita-image-store.s3.amazonaws.com/0/162091/5ecfabc7-d65a-92f9-c25f-2d61c322a184.png)

## これでできないこと
ImportRangeが設定されている範囲全体を色付きません。無念。。。

## どういう時に使う？
複数人でGoogleスプレッドシートを編集していると、「数式」で入力しているセルを値で上書きしてしまうというミスがしばしば起こります。大抵の場合その時点では問題になりませんが、それをコピーのベースにして新しいシートを作るときに問題が起こります。
パット見で「数式」と「値」の区別がつかないため、「すべて数式で設定されているだろう」と思いこんでしまい、直接入力された値の誤りに気づくことが困難になります。

そこで「数式は赤色」「値は黒色」のようにルールを決めて運用することで、区別できるようになります。

## この解決法の課題
* 色付けは誰でも自由に設定できるものなので、色で区別するというのはルールを守らない人がいる限り破綻しそうです
* 数式の内容をコピペミスしても気づけない（数式が1セルずつズレてたりしたら？）
* セルをロックするという案も考えられるが、シートをコピペ運用していく場合、ロック設定が煩雑になりそう

こうなってくると数式を使うこと自体が問題な気がしてきますね！

おそらく、コピペ運用のルールを見直す必要があるでしょう。
色付け自体は有用ですが、他のルールと組み合わせて現実的な運用方法を模索する必要がありそうです。
WindowsにCmderでBash環境を作って日本語が表示できるようになるまでの覚え書き

## インストール
### Cmder mini
まずはコンソールとしてCmderをインストールする。
Git for WindowsがセットになったCmderと本体のみのCmder miniがあるが、Cmder miniを選択する。理由は下の注意点を参照。
Cmderにはインストーラーはないので、Zipを解凍して任意の場所に置く。
Cmderのダウンロードはここから。[cmder](http://cmder.net/)

chocolateyを使ってインストールすることもできるが、最新版がすぐにはリリースされないので最新版を使いたい場合は上の方法で。
[Chocolatey Gallery | CmderMini 1.3.2](https://chocolatey.org/packages/cmdermini)

### Git
Bash環境としてはGitに含まれているGit bashを使うのでGitをインストールする。
インストーラーの指示に従ってインストールするだけ。
ダウンロードはここから　[Git](https://git-scm.com/)

### 注意点
- Cmderに含まれているGit bashを使うとなぜか日本語が表示できない。.bash_profileのLANG環境変数も反映されていることも確認した。原因は全くわからない。
- 右クリックで出るCmder Hereから起動しても、起動時のディレクトリが常にホームディレクトリになる。GitHubにIssueがあるのでそのうち修正されるはず。[cmder here not working with windows bash · Issue #1063](https://github.com/cmderdev/cmder/issues/1063)


## 設定
### PATHの設定
下の２つのディレクトリをPATHに追加する。

- cmder.exeのあるディレクトリ
- bash.exeのあるディレクトリ（デフォルトではC:\Program Files\Git\bin）

### Cmderの設定
#### コンテキストメニューの追加
コマンドプロンプトを起動して`cmder.exe /REGISTER USER`を実行する。
実行するとエクスプローラで右クリックした時にCmder Hereというメニューが表示されるようになる。

#### Settings - Stratup - Tasks
1. 「+」ボタンでタスクを追加
2. 設定は最初からある{bash::bash}からコピーしてくる。
3. Bashのパスだけ書き換える。

```
cmd /c ""C:\Program Files\Git\bin\bash.exe" --login -i" -new_console:d:%USERPROFILE%
```
![Tasks.png](https://qiita-image-store.s3.amazonaws.com/0/37701/c0a5080f-8f1d-f0bc-643a-65d536199747.png)

#### Settings - Startup
Specified named task から上で作成したタスクを選択する。
この設定でCmderを起動した時にBashで起動するようになる。
![Startup.png](https://qiita-image-store.s3.amazonaws.com/0/37701/18ab200c-c356-3697-c78f-63349389eaf7.png)

### Bashの設定ファイル
#### .bash_profile
Bashを起動するとホームディレクトリ（C:\Users\ユーザー名）に自動的に作成される。日本語環境で使うためのLANG環境変数を追記する。

```
# generated by Git for Windows
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

export LANG=ja_JP.UTF-8
```

#### .bashrc
自動的には作成されないので、ホームディレクトリに自分で作成する。
エイリアスはこっちに書いておく必要がある。エイリアスを.bash_profileに書いていると、bashの中からさらに別のbashを起動した時にエイリアスが設定されない。

```
alias ls='ls --show-control-chars -F --color --ignore={NTUSER.*,ntuser.*}'
alias activate='source activate'
alias deactivate='source deactivate'
```

- `--show-control-chars`: 日本語のファイル名やディレクトリ名が表示されるようにする。
- `--ignore={NTUSER.*,ntuser.*}`: ホームディレクトリにNTUSER.DAT{.....という長い名前の隠しファイルがある。lsを実行するたびに表示されると邪魔なので表示されないようにする。
- Conda環境を切り替えるのにbashだと`source activate [環境名]`と打つ必要がある。面倒なので`activate [環境名]`だけで実行できるようにする。deactivateも同様。

## この記事を書いた時のバージョン
Windows 7 SP1
Git for Windows 2.11.1
Cmder mini 1.3.2
Wordpressのプラグインでハマった話

###Word PressのPlugins「Autoptimize」を使うときに。

###「Autoptimize」とは。
「HTML・CSS・JavaScript」を自動で圧縮してくれるプラグインです。

###「Autoptimize」でハマりやすい原因
* 圧縮したファイルがcacheファイルとして自動で生成される
* cacheファイルが残っていると、ファイルの修正内容が反映されない

上記のことを知らずに作業していると変更したのにcssが反映されないなどが起こるので注意です。
また複数人で作業していると、ファイルの操作の権限等でcacheファイル自体が消せないなどの問題も発生するので、ファイルの権限も気にしておくと問題が起こったときすぐに対処できると思います。
基本的なことですが、ブラウザのcacheにも注意しましょう。
最終的にbundle updateでCould not find rake-0.9.2.2 in any of the sources Run `bundle install` to install missing gems.が解決

エラー内容はこちら⇩です。
<pre class="toolbar:1 lang:sh decode:true " title="エラー内容" >$ rails s
Could not find rake-0.9.2.2 in any of the sources
Run `bundle install` to install missing gems.</pre>

全コードは分量があるので＆コチラでの綺麗な掲載方法を知らないので、自分のブログ⇨http://kuguido-fujinka.com/2016/11/01/error対処：could-not-find-rake-0-9-2-2-in-any-of-the-sources-run-bundle-install-to-install-missing-gems/
に載せてます。

解決した流れはこちら⇩
1：bundle installとしてみるが上手くいかない。
2：そこで、gem install bundlerを実行する。
3：再び、サーバーの起動を試みるがダメ。
4：もう一度bundle installを実行するがダメ。
5：そこで、gem install json -v ‘1.7.5’を実行する。
6：でも、サーバーは起動しない。
7：そこで、bundle updateを実行すると・・・、最後の行に「nothing to do! Yay!」のメッセージが！直訳すると⇨「何もすることないよ！イェイ！」。と言うことは、これでサーバーが起動出来るはず。
8：サーバーが起動しました。
みすず学苑の広告の背景を簡単に作る方法

## 概要
電車内で見られる芸術作品として有名な[みすず学苑の広告](https://www.google.co.jp/search?safe=off&client=ubuntu&espv=2&biw=1301&bih=654&tbm=isch&sa=1&q=%E3%81%BF%E3%81%99%E3%81%9A%E5%AD%A6%E8%8B%91+%E5%BA%83%E5%91%8A&oq=%E3%81%BF%E3%81%99%E3%81%9A%E5%AD%A6%E8%8B%91+%E5%BA%83%E5%91%8A&gs_l=img.3..0j0i30k1j0i24k1l8.2149.3471.0.3881.9.9.0.0.0.0.158.783.6j2.8.0....0...1c.1j4.64.img..2.7.671...0i4k1j0i4i24k1j0i4i10i37i24k1.pvuT7JSud1Y)ですが、たまにリニューアルされており登場人物が変更されています。しかし何度か見かけるうちに、大波にプリンが浮遊している背景については共通して利用されていることが分かりました。このような背景であれば、拙作 Gem の [spacestuff](https://github.com/suzuki86/spacestuff) を使うと簡単に作成できそうですので、やり方をシェアしたいと思います。

## 手順

### 1. 大波の背景画像とプリンの切り抜き画像を用意する


大波
https://pixabay.com/en/wave-atlantic-pacific-ocean-huge-1913559/

プリン
http://www.denko-do.com/picture/food/sweets/4_1.html



### 2. spacestuff コマンドを実行する

```
spacestuff -b wave.jpg -s pudding.png -n 10
```

`-b`: 背景画像のパスを指定します。ここでは `wave.jpg` が大波の画像です。
`-s`: 背景画像の上に浮かばせる物体の画像のパスを指定します。ここでは `pudding.png` がプリンの画像です。
`-n`: 背景画像の上に浮かばせる物体の画像の数を指定します。

このコマンドを実行すると `result.jpg` という画像が、コマンドを実行したディレクトリに保存されます。画像は下記のようになります。

![misuzu.jpg](https://qiita-image-store.s3.amazonaws.com/0/16758/a5a577f0-ac98-3e3c-2292-e8cb27a2f77d.jpeg)
技術英語 > Today I still learn stuff because it is interesting [even if the need seems unlikely]

@ http://thecodist.com/article/yes_i_still_want_to_be_doing_this_at_56

> Today I still learn stuff because it is interesting **even if the need seems unlikely**.

意訳「今日（でも）私は(色々な)ものを学んでいる。それらが必要でなさそうであっても、面白そうだから。」
Windows10 dlibのためにboostをビルド


# 目的：pythonからdlibを使いたい

* cmakeをインストールしてパスを通す
* pip install dlibするとエラーと共に導入方法がログに出るので参考にする
* C:\Program Files\boost_1_63_0 にソースを展開
* スタートメニューに cmd と入力して Ctrl+Shift+Enter (管理者権限)
* 上記ディレクトリに移動して
    * bootstrap.bat
    * b2
* これでコンパイルが走りはじめる
* boost_1_63_0\project-config.jamに下記を追記 (pipするpythonとバージョンを合わせる)
    * using python : 3.5 : C:\\Users\\kt\\Anaconda3\\envs\\py35 ;
* その後、導入用ログを参考に、
    *  b2 -a --with-python address-model=64 toolset=msvc runtime-link=static
* cmdでpip install dlibが通ることを確認
* pythonを実行してimport dlibが通ることを確認
[Ruby]CSV::Tableが便利

## CSV::Table
行単位や列単位の操作が簡単にできる！

```ruby
require 'csv'
table = CSV.table('./test.csv')
table.headers  #=> [:id, :name, :uid, :created_at]
```

列でデータが取れます。

```ruby
row = table.first
row[:id]    #=> [1, 2, 3, ...]
row[:name]  #=> [taro, ryota, kengo, ...]
```

ループで処理する際も、ハッシュで管理できて楽です。

```ruby
table.each do |row|
  puts "row[:id] row[:name] row[uid]"  #=> 1 taro 28c762c8ab6c84d8380496ede2599d00
end
```

## CSV <==> CSV::Table の変換もできる！
CSV => CSV::Table に変換

```ruby
csv = CSV.new('./test.csv', headers: true)
table = csv.read
table.inspect # => "#<CSV::Table mode:col_or_row row_count:2>"
```
CSV::Table => CSV に変換

```ruby
csv = CSV.new('./test.csv', headers: true)
table = csv.read
table.to_csv                       #=> csvが返る 
table.to_csv(write_headers: false) #=> ヘッダーなしのcsvが返る
```

## 参考リンク
https://docs.ruby-lang.org/ja/latest/class/CSV=3a=3aTable.html
Sequencer改造 #UE4Study

SequencerにキーをBakeするような機能が欲しいので、Editor拡張をしてみようと思った

Engine->UE4->Source->Editor
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/0d46a00e-6ac8-afe2-65ab-f74737d82c99.png)

以下の３つが怪しそう
- Sequencer
- SequenceRecorder
- SequencerWidgets
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8f8372b8-ba1f-db36-a5c1-c1b55892be04.png)


![image](https://qiita-image-store.s3.amazonaws.com/0/111261/a20d20a5-a961-c448-fcc5-48db8c73bf02.png)

マウスオーバーで表示されるテキストで検索をかけてみる
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/8256bd24-7fd1-5341-9bb9-65802b6bfa99.png)

検索すると、Keyの追加を押した時のイベントが見つかった
OnAddKeyClicked
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/d99b2929-fc79-e0b0-26c1-75ddb045ef31.png)

Deleteのメニューをコピーして、文字を少しだけ変えてビルドしてみる
変わっているだろうか
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/82718121-5df3-13d2-c7b3-450604772535.png)

LOCTEXTの第一引数が同じだから、Deleteがすべて第二引数の"Pokopen"で変更されてしまった。
キー情報ということなのだろうか。

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ad342717-89c8-714f-e7c8-985b6a906b5f.png)
Simba and Pumbaa (Python) on ESP32

Hello all,

sorry for writing in English, I'm from Sweden and don't know Japaneese =(

The Simba and Pumbaa projects have been ported to the ESP32, and the Nano32 board in particular. Simba is an embedded OS with a bunch or drivers, file systems, networking and other useful modules. Pumbaa is MicroPython on top of Simba, with similar features as listed for Simba.

Both projects can be installed, built and uploaded with the Arduino IDE and PlatformIO, so it's easy to get started!

Simba getting started: http://simba-os.readthedocs.io/en/latest/getting-started.html
Pumbaa getting started: http://pumbaa.readthedocs.io/en/latest/getting-started.html

Check out this video for some great Pumbaa footage and tunes: https://youtu.be/R4SLIyBysfg

Enjoy!
Jupyter notebookでMayaviを使う時の設定

環境
Windows10
conda 4.3.11
python3.4.4

https://anaconda.org/menpo/mayavi
に従って、mayaviをインストールする。

    $ conda install -c menpo mayavi=4.5.0

http://docs.enthought.com/mayavi/mayavi/tips.html
に従って、jupyterを設定する。

    $ jupyter nbextension install --py mayavi --user

さっそく3D図を書いてみる。
これだと、ウインドウは開くが、絵は表示されない。

    from mayavi import mlab
    s = mlab.test_plot3d()
    s

これだと、別ウインドウに絵が出せる。

    from mayavi import mlab
    %gui qt
    s = mlab.test_plot3d()
    s

![image](https://qiita-image-store.s3.amazonaws.com/0/110538/70cd762c-2564-ac77-d1a2-cb4961c322b1.png)

これだと、notebook上に絵が出せる。

    from mayavi import mlab
    mlab.init_notebook()
    s = mlab.test_plot3d()

![image](https://qiita-image-store.s3.amazonaws.com/0/110538/ad1adbe8-f142-f8a5-6b44-9886036d7771.png)
ステータスコード 4xx

4xx　クライアントエラー
400 BadRequest　リクエストの間違い
401 Unauthorized　アクセス権不正
404 NotFound　リソースの不在
405 MethodNotAllow
406 NotAccept
407 ProxyAuthenticationRequired
408 RequestTimeout
409 Conflict
410 Gone
411 LengthRequired
412 PreconfitionFailed
413 RequestEntityTooLarge
414 Request-URITooLong
415 UnsupportedMediaType
417 RequestedRangeNotSatisfiable
422 UnprocessableEntity
423 Locked
424 FailedDependency
ステータスコード 3xx 5xx

3xx　リダイレクト
301 MovedPermanently　リソースの恒久的移動
301 MovedPermanently
302 Found
303 SeeOther　別のURI参照
304 NotModified
305 UseProxy
307 TemporaryRedirected

5xx　サーバーエラー
ボディ
関連メソッド
リスポンスヘッダ
500 InternalServerError　サーバー内部エラー
501 InternalServerError　サーバー内部エラー
502 ServiceUnavailable サービス停止
503 ServiceUnavailable
504 GatewayTimeout
505 HTTPVersionNotSupported
Herokuの設定に必須のComposer(コンポーザー)をMac(Sierra)にインストール

#Composerをインストールする目的
- 快適HerokuPHPライフ満喫が目標。オンプレミスよさらば。
- Heroku CLI (Heroku Toolbelt)をローカルにインストールする際に、PHP、Git、Composerのインスコが必須。
    - ※詳細は、[Getting Started on Heroku with PHP](https://devcenter.heroku.com/articles/getting-started-with-php#set-up)を見て下さい。
- PHPはMac Sierraにはデフォルトでインストールされているので、飛ばしでOKです。
- Gitのインスコは難しくないので、Herokuの指示通りにしこしこ作業すればうまくいくはずです。
- Composer(コンポーザー)のインストールが厄介だったので、備忘録も兼ねてかきかきします。

#まずは
- ターミナルを起動します。
 
#Composerをインストールする
- [Download Composer(Composer)](https://getcomposer.org/download/)に行く
- トップに4行くらいあるコマンドをコピペしてターミナルに貼り付ける。これでダウンロードが始まります。
    - ※2017/02/20の時点では、下記のコマンドでした。
        - `php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '55d6ead61b29c7bdee5cccfb50076874187bd9f21f65d8991d46ec5cc90518f447387fb9f76ebae1fbbacf329e583e30') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"`
        - `php composer-setup.php`
        - `php -r "unlink('composer-setup.php');"`
- 全部ターミナルで実行して下さい。これで、インスコ完了です。

#composerを移動する
- インストールした場所は、今ログインしているユーザー名のフォルダの直下にあるので、これをアプリを入れる所定の場所に移動します。
- 移動するためのコマンドは、[Getting Started(Composer)](https://getcomposer.org/doc/00-intro.md#globally)に行くとあります。
    - ※2017/02/20の時点では、下記のコマンドでした。
        - `mv composer.phar /usr/local/bin/composer`
- しかしながら、このコマンドをそのままターミナルで実行するとPermission Deniedと表示され、移動されないはずです。
- ここがこの記事の一番のポイントですが、Mac Sierraからセキュリティが強くなったので、このコマンドにsudoを付加する必要があります。
    - 以下、参考例
        - `sudo mv composer.phar /usr/local/bin/composer`
- このコマンドを実行することで、composerを移動できました。

#確認
- 下記コマンドを実行し、Composerのバージョンが表示されれば、正常にインスコ完了です。おつあり、めしてら。
    - コマンド:`Composer -V`
    - 実行後の表示例:Composer version 1.3.2 2017-01-27 18:23:41

#免責
- 上記の操作を行ってトラブルが起きた場合、自己責任になりますのでご了承下さい。

#参考・引用元
-[Composer](https://getcomposer.org/)
-[OSX -bash: composer: command not found (stack overflow)](http://stackoverflow.com/questions/25018894/osx-bash-composer-command-not-found)
-[Using the sudo command in Terminal requires a non-blank administrator password(Apple)](https://support.apple.com/en-mo/HT202035)
Agdaで自然数

# やったこと
Agdaで自然数を定義して基本的な性質を示しました。

# コード
https://github.com/karrym/NatToReal/blob/master/Nat.agda

## 自然数の定義
```hs
data ℕ : Set where
    zero : ℕ
    succ : ℕ → ℕ

_+_ : ℕ → ℕ → ℕ
zero + m = m
succ n + m = succ (n + m)

_*_ : ℕ → ℕ → ℕ
zero * _ = zero
succ n * m = m + (n * m)

_≤_ : ℕ → ℕ → Set
n ≤ m = Σ ℕ (λ l → n + l ≡ m)
```

今回は数学での流儀によせようとして順序を存在量化を用いて定義しましたが、以下の様に定義した方が証明しやすいでしょう。コードの最後で同値性を証明しているので論理的にはどちらを用いても問題ありません。

```hs
data _≲_ : ℕ → ℕ → Set where
    0≲n : {n : ℕ} → zero ≲ n
    s≲s : {n m : ℕ} → n ≲ m → succ n ≲ succ m
```

## 証明の例
例えば、+の可換性は以下の様に証明しています。Reasoningと数学的帰納法を乱用してます。

```hs
+-rUnit : (n : ℕ) → n + zero ≡ n
+-rUnit zero = refl
+-rUnit (succ n) = cong succ (+-rUnit n)

+-right : (n m : ℕ) → n + succ m ≡ succ (n + m)
+-right zero m = refl
+-right (succ n) m = cong succ (+-right n m)

+-comm : (m n : ℕ) → m + n ≡ n + m
+-comm zero n = sym (+-rUnit n)
+-comm (succ m) n = begin
        succ (m + n)
    ≡⟨ cong succ (+-comm m n) ⟩
        succ (n + m)
    ≡⟨ sym (+-right n m) ⟩
        n + succ m
    ∎
```

# まとめ
このコードを書きながらReasoning(\_≡⟨\_⟩\_で式変形を行なう技法)を理解したのですが、現在の式とGoalを確認しながら証明を進めることができて非常にやりやすいですね。
Agda初心者なので直和やReasoningについて調べながら書いたのですが、Agdaはライブラリを探しにくいですね。Hoogleみたいなものがあればいいのですが。

# 予定
今回定義した自然数を拡張して整数、有理数、実数と定義していきたいのですが、Agdaで商集合ってどうやってとるんですかね?簡単に調べたところSetoidとやらを使うらしいですが……
初心者なので調べつつ挑戦していきます。

# 参考文献
+ エルフに数学を装備するだけ (http://ncode.syosetu.com/n2185cj/)
+ Encyclopedia of P-adic Numbers (http://padic.wicurio.com/)
+ Agda Tutorial (http://people.inf.elte.hu/divip/AgdaTutorial/Index.html#general-information)
ステータスコード　1xx　2xx　

ステータスコード
・ボディ
・関連メソッド
・リクエストヘッダ
・リスポンスヘッダ

1xx　処理中
100 Continue
・null
・all
・Except
・-
101 Switching Protocols
・null
・all
・Upgrade
・-

2xx　成功
200 OK リクエスト成功
・GET:リソース表現、他メソッド:処理結果
・all
・-
・-
201 Created リソースの作戦成功
・新規リソース表現、処理結果の説明
・POST,PUT
・-
・Location
202 Accepted
・リソースのリンク、予測処理時間
・-
・-
・Location,Retry-After

203 Non-AuthoritativeInformation
200 OKと同じ

204 NoContent
・null
・POST,PUT,DELETE
・-
・-
205 ResetContent
・null
・all
・-
・-
206 PartialContent
・指定範囲のリソース表現
・GET
・Range,If-Range
・Content-Range
207 Multi-Status
・WebDAVのマルチステータスXML文書
・POST
・-
・-
Macの隠しファイル・隠しフォルダを開く方法

#追記　2017/02/20
-[Finderで隠しファイルを一時的に表示する(キーボードショートカット)(Qiita)](http://qiita.com/hmiura/items/4709e0776d14055fb2f8)を見て下さい。
    - @on0z　さんのご指摘により、下記記事は意味をなさなくなりましたorz

#目的
- Macの隠しファイル・隠しフォルダを表示し、不要なファイルを消す。
    - ※うかつに操作すると、取り返しがつかないので、初心者が触れないようにするために隠されているはずです。
    - ある程度PC操作に熟知しており、リテラシーを持った方向けの作業になるので、初心者は熟練の方の指導の元で、明確な目的を持って操作して下さい。

#免責
- 下記の操作を行ってトラブルが起きた場合、自己責任になりますのでご了承下さい。

#操作手順
- Terminalを起動します
- `defaults write com.apple.finder AppleShowAllFiles -boolean true`
    - ※隠しファイル・隠しフォルダを表示するコマンドです
- `killall Finder`
    - ※ファインダーを再起動するコマンドです
- これで、ファインダーを起動すると、隠しファイル・隠しフォルダが見られるようになります。

#元に戻す手順
- 隠しフォルダ・隠しファイルは、いつも見られる状態にすると誤操作で消してはいけないファイルを消すかもしれないので、元に戻します。
- `defaults delete com.apple.finder AppleShowAllFiles`
    - ※隠しファイル・隠しフォルダを隠すコマンドです
- `killall Finder`
    - ※ファインダーを再起動するコマンドです

#参照・引用元
- [Macの隠しファイルや隠しフォルダを表示する裏技(Inforati インフォラティ)](http://inforati.jp/apple/mac-tips-techniques/system-hints/how-to-show-hidden-file-or-folder-of-macos.html)
    - この記事は、こちらのサイトを見て実際に自分のローカルPC(Mac Sierra)で作業をした時の備忘録です。
重複ありの組み合わせ作成

# 概要
もう少しシンプルに考えてできそうだと思ったのでやってみた。

- n進数変換を基に組み合わせを作成。
- 元の配列を使って、数値を配列要素に変換する。

# コード
- [実行サンプル](http://codepen.io/yama-t/pen/zrJppK)

```js:JS
// 要素の長さと組み合わせ数を基に、n進数列を1文字ずつ配列変換したものを作成。
function getCombArr(len = 2, comb = 1) {
  const num = Math.pow(len, comb),
    makeArr = (v, i) => {
      const n = i.toString(len),
        padStr = '0'.repeat(comb - n.length);
      return (padStr + n).split('');
    };
  return [...Array(num).keys()].map(makeArr);
};

console.log(getCombArr(3, 2)); // [['0','0'],['0','1'],['0','2'],['1','0'],['1','1'],['1','2'],['2','0'],['2','1'],['2','2']]

// 上記関数を利用しつつ、組み合わせを作成
function getComb(arr = [], comb = 1) {
  const base = getCombArr(arr.length, comb),
    convert = v => arr[v],
    makeArr = comb => comb.map(convert);
  return base.map(makeArr);
};

console.log(getComb(['a', 'b', 'c'], 2)); // [['a','a'],['a','b'],['a','c'],['b','a'],['b','b'],['b','c'],['c','a'],['c','b'],['c','c']]
```

# 解説
## n進数列への変換
3つの要素を2つずつ組み合わせる場合、重複ありで考えると3の2乗で9通り。

```js
const num = Math.pow(len, comb)
```

数値iをn進数変換する。要素数が3つなら3進数に変換する形となる。
ex. 10進数の3 → 3進数の10,　10進数の8 → 3進数の22

```js
const n = i.toString(len)
```

最大桁数（組み合わせ数）と同じ桁になるまで0埋めをしつつ、文字列の配列化。
ex. `0` → `"00"` → `["0", "0"]`

```js
 padStr = '0'.repeat(comb - n.length);
 return (padStr + n).split('');
```

組み合わせパターンと同じ要素数の配列を、n進数を基にした配列に変換する。

```js
[...Array(num).keys()].map(makeArr);
```

## 元の配列を基に変換する
1. 上記手順でn進数配列を作成。
2. 元の配列`arr`が`["a", "b", "c"]`で、n進数配列内の要素が["0", "1"]`であった場合、`[arr[0], arr[1]]`という形式で変換させ、配列`["a", "b"]`を得る。
3. 上記結果を配列としてまとめる。

```js
function getComb(arr, comb) {
  const base = getCombArr(arr.length, comb),
    convert = v => arr[v],
    makeArr = comb => comb.map(convert);
  return base.map(makeArr);
};
```

# 注意点
- Number.toStringは2~36までしか対応してないため、36個以上の要素数を持つ配列の組み合わせに対応していない。

# リンク
- [組み合わせ（重複あり）を取得するコード](http://qiita.com/ponponner/items/8443c692b7b98d4f1a1f)
playgroundを使ってみました。

[TwitterAPIとSwiftを使ってiOSアプリを作ろう！ - 前編 - #dotsgirls](http://qiita.com/ktanaka117/items/e721b076ceffd182123f) というテキストが投稿されているイベントに参加しました。半日でSwiftを使用したTwitterクライアントを作成しようというイベントです😊

このイベントではテキストの通りにSwiftのコードを書いていくと、Twitterクライアントができてしまいました。Swiftについては素人なので全くわからなかったのですが、作成したアプリが動いてしまってすごいイベントだと思いました😂

# Swiftをやるにはまずどうするか
懇親会でスタッフの方に質問をしました。

ボク「Swiftさっぱりわかりません。やるにはどうしたらいいでしょうか😭🙏」
先生「playgroundを触るといいんじゃないですかね。」
ボク「playground❓❓❓❗❗」
先生「playgroundはXcodeに最初から入っていますよ。」
ボク「なるほど❗❗」

なるほどわからん😓

# playgroundを作る
Xcodeを起動すると、一番わかり易い場所に`Get started with a playground`という記述があるではありませんか。
<img width="40%" alt="Playground" src="https://qiita-image-store.s3.amazonaws.com/0/1624/ec7cd626-e283-9966-58fb-b560096dfd73.png">
なるほど、playgroundはここから開始すればよかったのですね。

２つほどクリックするとファイルが生成されます。　

```swift:
//: Playground - noun: a place where people can play

import UIKit

var str = "Hello, playground"
```

## 変数

```swift
var 変数 = 初期値
```
`var`で変数を定義できるようです。

## コメント
先程のファイルを見るとコメントの書き方がわかります。

```swift:コメントの書き方
// コメント
```
`//`でコメントを書くことができます。

## 右に出力がでている
playgroundで気づいたのは、右側に変数の出力のようなものがでています。
<img width="509" alt="playground" src="https://qiita-image-store.s3.amazonaws.com/0/1624/c03d7249-a1e1-50d5-5d49-34edcc333033.png">

つまり、左にコードを書くと右側で結果が見られるものがplaygroundなのかなと思いました。

# 次にやること

続きたい(☝ ՞ਊ ՞)


# 参考になりそうなもの
困ったらダンボー田中@高木さんで悶え死んださんに聞くと良さそうです。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/eventdots?src=hash">#eventdots</a> <a href="https://twitter.com/hashtag/dotsgirls?src=hash">#dotsgirls</a><br><br>ご参加いただいた皆様、今日はどうもありがとうございました！<br>今日の内容以外でも構いません、もし開発で困る・悩んだことがございましたらお気軽に質問ください！</p>&mdash; ダンボー田中@高木さんで悶え死んだ (@ktanaka117) <a href="https://twitter.com/ktanaka117/status/833312108590698496">2017年2月19日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

こちらは書籍についてです。
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/eventdots?src=hash">#eventdots</a> <a href="https://twitter.com/hashtag/dotsgirls?src=hash">#dotsgirls</a> <br><br>Swift初学者にオススメの書籍<a href="https://t.co/mjWXa40F4u">https://t.co/mjWXa40F4u</a></p>&mdash; ダンボー田中@高木さんで悶え死んだ (@ktanaka117) <a href="https://twitter.com/ktanaka117/status/833312508278509568">2017年2月19日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
Macの便利な使い方〜設定編〜

#この記事について
社内で"Macの便利な使い方講座"の講師をやることになったのでメモ書き。
そのまま使えればいいなとも。

#〜設定編〜
##トラックパッド
タップでクリック⇨１本指でクリック
副ボタンのクリック⇨２本指でクリックまたはタップ
軌跡の速さはMaxにしとくとヌルヌル動く。
<img width="642" alt="スクリーンショット 2017-02-20 0.03.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/42587/15e3a4b8-3374-6cd2-65de-efde12d0fba5.png">

##デスクトップとスクリーンセーバー
\>スクリーンセーバー>ホットコーナー
カーソルを各コーナーに合わせるだけで操作できる。
下図の場合は、右下に行くとデスクトップを表示、
左下に行くとLaunchpadを表示できる。
ただし、思わぬ時にこの挙動をするとイラっとするのでお好みで。
<img width="774" alt="スクリーンショット 2017-02-20 0.26.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/42587/d6c7020f-b1d5-02a5-ca93-7532233ebb59.png">

##キーボード
テキスト編集中に、矢印ボタンを長押ししても
カーソルの移動が遅いと感じるならこの設定をするべき。
キーのリピート・リピート入力認識までの時間⇨最速
**※この設定をすると、⌘wとかでウィンドウを閉じるのも速くなります。
　　リピートしない時はすぐにボタンを離す癖をつけるか
　　このカーソルの位置を調整しましょう。**
<img width="668" alt="スクリーンショット 2017-02-20 0.50.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/42587/763350cb-3463-080e-31a3-7b0f0b6ce5a9.png">
↑F1,F2などの・・・ってのはチェックをつけるべき。
間違えて日本語モードで打ってしまった文字をF10でアルファベットに直したり、
F7でカタカナに一発変換できたりする。
ファンクションキーの各役割については[こちら](http://enjoy.sso.biglobe.ne.jp/archives/function/)
Windows用だけどまぁ同じようなもん。

ユーザー辞書⇨一般的には使われていない単語とか商品名とかを登録しとくと楽。
ショートカット⇨「入力ソース」はチェックいらないかと。
入力ソース⇨"¥"キーで入力する文字をバックスラッシュにしたほうがいい(プログラマのみ)

##Finderの設定
・Finderをタブで管理する。
新規ウィンドウで開くとごちゃごちゃになってなにがなんだかわからなくなるので
フォルダを新規ウィンドウではなくタブで開くにチェックする。
<img width="332" alt="スクリーンショット 2017-02-20 1.17.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/42587/edad6265-ffd7-d63b-d1dd-219e55994ee7.png">

・ファイル名の拡張子を表示させる。
Macはデフォルトでは拡張子が表示されない。
jpgなのかpngなのか。txtなのかrtfなのか。
\>詳細>全てのファイル名拡張子を表示にチェックしちゃう。
<img width="326" alt="スクリーンショット 2017-02-20 1.13.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/42587/c5151943-2a73-5856-6324-b56fa382f5af.png">

##デスクトップの設定
Macは、Windowsと違ってフォルダを自由に配置できるけど、
自由すぎてデスクトップがごちゃごちゃしてくる。
右クリック→選択範囲を整頓で綺麗に配置することもできるが、
そもそも数センチ単位でフォルダの位置を決めたいこととかないと思うので、
デフォルトで整頓するようにしちゃおう。
デスクトップを表示した状態で、
表示>表示オプションを表示をクリックするとこんな画面が出てくる。
<img width="214" alt="スクリーンショット 2017-02-22 23.58.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/42587/7b4cfca9-c32d-000f-50c0-e1991953d423.png">
グリッド間隔を調整→表示順序を「グリッドに沿う」に設定すると、
デスクトップがいい感じになる。
アイコンサイズも調整できるのでお好みで。

##スクリーンショットをダウンロードフォルダに格納する。

初期設定のままスクリーンショットをとるとデスクトップがかさばるのでおすすめしない。
ターミナルを立ち上げて、コマンドを２つ実行する。

```shell
hondy12345$ defaults write com.apple.screencapture location ~/Downloads/
hondy12345$ killall SystemUIServer
```
これだけ。


###設定編〜完〜

[Macの便利な使い方〜アプリ編〜](http://qiita.com/td2983_qp/items/c8c3faba4f0c46edbf07)
Gitbook + Mermaid.js のセットアップ

ドキュメントを書くときに便利な Gitbook。それに UMLやガントチャートを記述できる Mermaid.js を組み込んだ環境を作るためのメモ。

ガントチャートがほしいならMermaid.jsだが、UMLが使えればいいのなら、PlantUMLを使うのがおすすめ。
PlantUMLが使えるGitbook環境については次のエントリで書いたのでそちらもどうぞ。

- [Gitbook 環境 マイ・ベスト \- Qiita](https://qiita.com/HeRo/items/f9ef391fa005b5fa100c)

## 手順
1. まずは npm 環境の初期化。聞かれる設定は適宜入力。

 ```
 $ npm init
 ```
 
2. gitbook-cli をインストールする

 ```
 $ npm install -D gitbook-cli
 ```
 
3. 次の内容で book.json を作る。
 ここでは直接gitリポジトリから `hypc/gitbook-plugin-mermaid.git` を導入する。[^1]

 ```json:book.json
 {
     "plugins": [
       { "name": "mermaid",
         "version": "git+https://github.com/hypc/gitbook-plugin-mermaid.git"
       }
       ,"-sharing","hide-published-with"]
  }
 ```


4. 次のコマンドを実行して mermaid プラグインをインストールする
 
 ```
 $ gitbook install
 ```

5. Gitbookを初期化する。
 
 ```
 $ gitbook init
 ```
 実行後、`README.md` と `SUMMARY.md` ができている。
 ここまででセットアップ自体は終了。以下は動作確認
 
6. `README.md` に次の内容をコピペする
 
 ```
 　```mermaid
　graph TD;
　  A-->B;
　  A-->C;
　  B-->D;
　  C-->D;
　```
 ```
 
7. 次のコマンドを実行して `http://localhost:4000/` にブラウザでアクセスする。

 ```
 $ gitbook serve
 ```
 次のように表示されているとうまく動作している。
 ![Kobito.09PSXw.png](https://qiita-image-store.s3.amazonaws.com/0/32533/ea7b19c0-4cab-dc49-1975-95b72f02c1cf.png "Kobito.09PSXw.png")

## Tips
ドキュメントの作成開始時点で 目次とファイル構成が決まってるなら、`SUMMARY.md` にそれを記述して `gitbook init` を実行すれば、必要なディレクトリ/ファイルを生成してくれる。便利。
 
[^1]: [gitbook-plugin-mermaid−2](https://github.com/morlay/gitbook-plugin-mermaid-2) を試してみたが、うまく動かすには 2017/02/20現在ではソースを[修正する必要があるらしい](http://shingaki.me/web/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%ABgitbook%E3%81%AE%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%97%E3%81%A6mermaid-js%E3%82%92%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%A7/)。このプラグインならその必要はない。
目線で敵を破壊する


`GameController`に以下のスクリプトを設定

```c:KillTarget.cs
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class KillTarget : MonoBehaviour {
	public GameObject target; // 敵
	public ParticleSystem hitEffect; // 視線が当たっている間のエフェクト
	public GameObject killEffect; // 敵を破壊した時のエフェクト
	public float timeToSelect = 3.0f; // 視線を当てている時間
	public int score;
	public Text scoreText;

	private ParticleSystem.EmissionModule hitEffectEmission;
	private float countDown;

	void Start () {
		score = 0;
		countDown = timeToSelect;
		hitEffectEmission = hitEffect.emission;
		hitEffectEmission.enabled = false;
		scoreText.text = "Score : 0";
	}

	void Update () {
		Transform camera = Camera.main.transform; // タグがMainCamera
		Ray ray = new Ray (camera.position, camera.rotation * Vector3.forward);
		RaycastHit hit;
		if (Physics.Raycast (ray, out hit) && (hit.collider.gameObject == target)) {
			Debug.DrawLine(ray.origin, hit.point, Color.red);
			if (countDown > 0.0f) {
				// 的中した際の処理
				countDown -= Time.deltaTime;
				hitEffect.transform.position = hit.point;
				hitEffectEmission.enabled = true;
			} else {
				// 殺された際（カウントが０）の処理
				Instantiate (killEffect, target.transform.position,
					target.transform.rotation);
				score += 1;
				scoreText.text = "Score : " + score;
				countDown = timeToSelect;
				SetRandomPosition (); // リポップ
			}
		} else {
			// リセットする
			countDown = timeToSelect;
			hitEffectEmission.enabled  = false;
		}
	}

	// リポップ respawn（ランダムな場所に移動）
	void SetRandomPosition() {
		float x = Random.Range (-100.0f, 100.0f);
		float z = Random.Range (-100.0f, 100.0f);
		target.transform.position = new Vector3 (x, 0.0f, z);
	}
}
```

> 参考
https://github.com/oreilly-japan/unity-virtual-reality-projects-ja
[Ruby]gsubとsubの違い

## sub
初めにマッチした部分のみ置換

```irb
>> "hoge hoge".sub('hoge', 'ruby')
=> "ruby hoge"
```

## gsub
マッチした部分全てを置換

```irb
>> "hoge hoge".gsub('hoge', 'ruby')
=> "ruby ruby"
```
ターゲットスコープを快適な距離に保つ


ターゲットスコープはHUDなので、
Cameraの子要素に、RawImageをもったCanvasを追加

```c:CursorPositioner.cs
using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;

public class CursorPositioner : MonoBehaviour {
	private float defaultPosZ;

	void Start () {
		defaultPosZ = transform.localPosition.z;
	}

	void Update () {
		Transform camera = Camera.main.transform;
		Ray ray = new Ray (camera.position, camera.rotation * Vector3.forward);
		RaycastHit hit;
		if (Physics.Raycast (ray, out hit)) {
			if (hit.distance <= defaultPosZ) {
				// デフォルトより近づいたらレイがヒットした距離にする
				transform.localPosition = new Vector3 (0, 0, hit.distance);
			} else {
				transform.localPosition = new Vector3 (0, 0, defaultPosZ);
			}
		}
	}
}
```

> 参考
https://github.com/oreilly-japan/unity-virtual-reality-projects-ja
aws-sdk-goでEC2のIAMロールとAWS認証情報ファイルの両方に対応する


[Amazon Elasticsearch Service用の認証プロキシ](http://qiita.com/ikeisuke/items/b68e1380e6e10d4c6db1)を作る際に、クレデンシャルの取得部分でとてもハマったのでメモしておきます。

assumerole用とかアクセスキー用とかのプロバイダもあるので、それらを組み合わせればAWSCLIと同等のものを簡単にれるかと思います。

コードとしてはこの辺でやってます。
https://github.com/ikeisuke/amzn-es-proxy/blob/master/signer.go#L29

## EC2のIAMロールのクレデンシャルの取得
```golang
ec2m := ec2metadata.New(session.New(), &aws.Config{
	HTTPClient: &http.Client{Timeout: time.Second},
})
creds := ec2rolecreds.EC2RoleProvider{
	Client: ec2m,
}
```

## AWS認証情報ファイルからの取得
```golang
creds := credentials.SharedCredentialsProvider{
	Profile: profile,
}
```

## 二つをまとめて１つのクレデンシャルとして取得
```golang
ec2m := ec2metadata.New(session.New(), &aws.Config{
	HTTPClient: &http.Client{Timeout: time.Second},
})
creds := credentials.NewChainCredentials([]credentials.Provider{
	&credentials.SharedCredentialsProvider{
		Profile: profile,
	},
	&ec2rolecreds.EC2RoleProvider{
		Client: ec2m,
	},
})
```