OmniAICreator/Qiita-1.07M huggingface dataset:
gitコマンドでHEAD^が使えない


# 前提
- mac
- zsh

# 参考
http://subtech.g.hatena.ne.jp/cho45/20080617/1213629154

# 前置き
ローカルコミットをなかったことにしたいと思って

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

っていつものように打ってみたら

```
zsh: no matches found: HEAD^
```

というエラーが発生した

どうやら原因はzshの設定で
extended_glob
というオプションを有効にしていると

^を特殊文字と解釈してしまっていることが
原因になっているみたい

# 解決方法
参考にしたところを見るとgitとextended_globが
共存できる的なことが書かれていたのだが、 ちょっと面倒なので^をエスケープシーケンスして回避することにした

```
git reset HEAD\^
```

今度ちゃんと対応しよう
Visual Studio による ASP.NET MVC 導入と利用がいかにお手軽かの動画

Visual Studio で Web アプリを作るためのフレームワークとして ASP.NET MVC というものがあるんですけど、これ、ちゃんと動作してるところを見たことある人どのくらいいるでしょうか。
最高に優れている環境なので興味があれば是非触ってみてほしいのですけど印象だけでもお伝えするために動画あげておきます。

## Visual Studio インストール風景
Visual Studio が手元にない場合は
https://beta.visualstudio.com/downloads/
ここからインストーラを入手して実行するだけ（まぁこれが実際には1時間くらいかかりますが）
![install.gif](https://qiita-image-store.s3.amazonaws.com/0/25555/2dd28ac6-890b-a4d8-d03d-7b86ca039bb2.gif)

## ASP.NET MVC プロジェクトの作成と実行
基本的に MVC プロジェクトを作ったばかりの状態で既にログイン機能付きのサイトになっています。
![project.gif](https://qiita-image-store.s3.amazonaws.com/0/25555/e47eeb82-2a59-e0e5-7dd0-179f5227b64a.gif)

## 導入詳細手順
以下記事に詳細な導入手順を書きました。端的にいうと「インストーラを入手して実行」だけなのですけどね。

- [Visual Studio Community 2015 で始める ASP.NET MVC - clock-up-blog](http://blog.clock-up.jp/entry/2016/09/05/aspnet-mvc-setup)

## サイト作った告知
- [ASP.NET MVC Tips (非公式)](http://aspnet.clock-up.jp/)

というのを作った。日本語情報が少なすぎるのが ASP.NET MVC の難点であり、仕方ないから自分のほうからフォローアップしていく。
Android:string.xmlの初歩的な使い方

現在[TexhInstituteアプリ開発養成講座テキスト](http://techinstitute.jp/material/01/)を使って勉強しています。
テキストは２０１４年のものなので現在のバージョンと異なる事が多々あります。テキストのままやっても解決できなかった事や、テキストだけでは分からなかった事をここに書きます。


[chapter7](http://cdn.commucom.jp/techinstitute/pdf/Android_Volume02_chap_07.pdf):7-1-3

#string.xmlにて文字を打つ場所

「ScrollViewを使えば文字が沢山あってもスクロールして読める」という章で、
文字を書く際にテキストビューの中に埋め込まず、String.xmlを使う方法がいきなり紹介されました。

```xml:string.xml
<?xml version="1.0" encoding="utf-8"?>

<resources>
  <string name="app_name">SpinnerXml</string>
  <string name="hello_world">Hello world!</string><!-- ここにとにかくたくさん の文字を書く -->
  <string name="action_settings">Settings</string>
</resources>
```


しかし、上記の通り「ここに」沢山文字を打ったのですが般若心経ではなくHello World!が出力されました。（以下コード）

```xml:string.xml
<?xml version="1.0" encoding="utf-8"?>

//この位置は失敗
<resources>
  <string name="app_name">SpinnerXml</string>
  <string name="hello_world">Hello world!</string>觀自在菩（中略）是大明呪是無
  <string name="action_settings">Settings</string>
</resources>
```

勿論、文字を打つ場所は＜string＞の間でした。

```xml:string.xml
//この位置が正解
<string name="hello_world">觀自在菩（中略）是大明呪是無</string>
```


###全然「ここ」じゃないじゃん！

#string.xmlの初歩的な使い方

例えば、TextViewを使って長文を表示させたい時、activity_main.xmlやfragment_main.xmlにそのまま書いてしまうと、XML内の構造（パーツは何があるか）がわかりにくくなるという問題が起こるのだと思います。または、その文章を別の部分で使いたい等もあるのかもしれません。
そんな時に、数文字の「変数」で表して別の場所に格納できたら見やすい（使いやすい）んじゃないか、ということでString.xmlが生まれたのだと思いました。

使い方は以下の通り。
TextViewのandroid:text="の後に文章をかくべきですが"
"@string/moji"を入れることで、
string.xmlの ＜string name="moji"＞に記載されてる文字を読み取ります。

```xml:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    （後略）
>

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:text="@string/moji" />
```

```xml:string.xml
<resources>
    <string name="moji">Hello happy world!</string>
</resources>
```

```java:MainActivity.java
<resources>
    <string name="moji">Hello happy world!</string>
</resources>
```

string.xmlにはHello happy world!と記載されてるので、実行結果もそのようになります。

![スクリーンショット 2016-09-06 12.02.28.png](https://qiita-image-store.s3.amazonaws.com/0/139228/63728bd9-f671-f23f-9009-8ece529dafef.png)

string.xmlの初歩的な使い方については以上です。
今回でいうmojiやHello happy worldを書き換えていろいろ遊んでみてください！
特定のリビジョンのSDK Build-toolsをコマンドでインストールする


# 前提
- mac
- androidコマンドが使用できる

# 参考
http://stackoverflow.com/questions/27272605/failed-to-find-build-tools-revision-21-1-1-sdk-up-to-date

# 前置き

cocos2d-xでビルドしようとしたら以下のようなエラーが発生した

```
failed to find Build Tools revision 21.1.1
```

今まではこの手のエラーが出たらAndroid Studio->SDK Managerで
指定されたリビジョンのSDK build toolsを取得してきたが、

どうやらSDK Managerでは21.1.2は取得できるが
21.1.1は取得できないみたい

stackoverflowの方で同様の内容があったのでそちらを参照してみると
androidコマンドでできるとのこと

# 方法

実行するタスクのidを確認

```
$ android list sdk -a
```

以下のようになっていたら

```
1- Android SDK Tools, revision 24.0.2
2- Android SDK Platform-tools, revision 21
3- Android SDK Build-tools, revision 21.1.2
4- Android SDK Build-tools, revision 21.1.1
5- Android SDK Build-tools, revision 21.1
6- Android SDK Build-tools, revision 21.0.2
7- Android SDK Build-tools, revision 21.0.1
```

以下で21.1.1をインストールできる

```
$ android udpate sdk -a -u -t 4
```

# 感想

以上でとりあえずビルドは通ったので解決

androidコマンドを使用したことがあんまり記憶にないけど
なんか色々できそうな気がする

ちょっと勉強してみようかな...
機械学習論文読みメモ_2

[Metadata-Conscious Anonymous Messaging](http://web.engr.illinois.edu/~kairouz2/metadata_icml2016.pdf), ICML2016
匿名性を保ったSNSグラフ上へのメッセージ拡散はdiffusion processでモデル化できる。
しかしこのプロセスは時間情報が手に入る敵対者に対し脆弱である。
2015に提案されたadaptive diffusionを用いると、それらに対する匿名性を最適化し性能が向上可能である。

[ROBUST CONVOLUTIONAL NEURAL NETWORKS UNDER ADVERSARIAL NOISE](http://arxiv.org/pdf/1511.06306v2.pdf), ICLR2016
CNNは敵対的ノイズに弱い事は知られている。
本論で提案するCNNはそうしたノイズにロバストである。
確率的なノイズを入力とCNNモデルへ加える事で実現される。
通常と敵対的な目的関数双方を用いてCNNは学習され、パラメータはピクセルの平均と分散を用いる事で効率化しスケーラビリティを改善した。

[LEARNING TO DECOMPOSE FOR OBJECT DETECTION AND INSTANCE SEGMENTATION](https://arxiv.org/pdf/1511.06449.pdf), ICLR2016
CNNによる物体検知、あるいはセグメンテーションはその前後に前処理や後処理が必要である。
その処理は、region proposalとnon-maximum suppressionが含まれる。
本論ではそれらをend to endで行えるNN手法を提案する。

[PARTICULAR OBJECT RETRIEVAL WITH INTEGRAL MAX-POOLING OF CNN ACTIVATIONS](http://arxiv.org/pdf/1511.05879.pdf), ICLR2016
クエリ画像の持つコンポーネント情報から元の画像を探しだすタスクは、類似度ベースでデータベースの画像をランク付けするfiltering stageと、その類似度上位画像に関して再評価を行い性能向上するre-ranking stageで成り立つ。
本論ではCNNベースの手法でこれを実現する。
このモデルではクエリ画像が持つ複数コンポーネントを一度に処理可能で、コンパクトな特徴表現を学習出来る。
またmax-poolingを通した画像統合により、object localizationを可能にした。
さらにこの手法によりreranking手法に関してもより高効率化したquery expansion methodを提案する。

[You Only Look Once: Unified, Real-Time Object Detection](http://pjreddie.com/media/files/papers/yolo.pdf), CVPR 2016
従来のobject detectionはregion proposalや分類などが別々に分かれており、それらを組み合わせる事で実現していた。
本論で提案する手法はそれを一度に処理する回帰モデルとして提案する。
このモデルは画像をグリッド分けし、各グリッドが同時にクラス分類、bounding boxとそのconfidenceを予測し、すべての物体検知を一度に行う。
一度に処理可能な事から高速な処理が可能であり、また学習される特徴は非常に一般的なものになる。
vmware player > ホストが32bitOSの場合 > Player 6 Plusが最後のバージョン

VMware WorkstationのPlayerを32bit OS(Win7)上で動かそうとした。

最新版をダウンロードしようとすると64bit OS版しか見つからない。

http://www.vmware.com/jp/products/player.html
のFAQの「32 ビットのホストで Workstation 12 Player を実行したい場合はどうすればよいですか」
> ホスト PC 上で 32 ビットと 64 ビットの両方のオペレーティング システムをサポートするのは、Player 6 Plus が最後のバージョンです。

以下が32bit OS対応の最後のバージョン (6.0.7)のようだ。
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_player/6_0
特殊フォルダパスの列挙2

■ サンプルコード

	Console.WriteLine("{0}: {1}", Environment.DirectoryAlarms, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryAlarms).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryDcim, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryDocuments, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDocuments).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryDownloads, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryMovies, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMovies).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryMusic, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryNotifications, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryNotifications.Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryPictures, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryPodcasts, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPodcasts).Path);
	Console.WriteLine("{0}: {1}", Environment.DirectoryRingtones, Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryRingtones).Path);

■ 結果

Alarms: /storage/emulated/0/Alarms
Documents: /storage/emulated/0/Documents
Download: /storage/emulated/0/Download
Movies: /storage/emulated/0/Movies
Music: /storage/emulated/0/Music
Notifications: /storage/emulated/0/Notifications
Pictures: /storage/emulated/0/Pictures
Podcasts: /storage/emulated/0/Podcasts
Ringtones: /storage/emulated/0/Ringtones

■ サンプルコード

	Console.WriteLine("{0}: {1}", "RootDirectory", Environment.RootDirectory.Path);
	Console.WriteLine("{0}: {1}", "DataDirectory", Environment.DataDirectory.Path);
	Console.WriteLine("{0}: {1}", "DownloadCacheDirectory", Environment.DownloadCacheDirectory.Path);
	Console.WriteLine("{0}: {1}", "ExternalStorageDirectory", Environment.ExternalStorageDirectory.Path);

■ 結果

RootDirectory: /system
DataDirectory: /data
DownloadCacheDirectory: /cache
ExternalStorageDirectory: /storage/emulated/0

■ サンプルコード

	Console.WriteLine("{0}: {1}", "ExternalStorageState", Environment.ExternalStorageState);
	Console.WriteLine("{0}: {1}", "IsExternalStorageEmulated", Environment.IsExternalStorageEmulated);
	Console.WriteLine("{0}: {1}", "IsExternalStorageRemovable", Environment.IsExternalStorageRemovable);

■ 結果

ExternalStorageState: mounted
IsExternalStorageEmulated: true
IsExternalStorageRemovable: false

■ using

	using Android.OS;
EclipseからAndroid Studioに移行する時のめも。 (drawable関連)

このページは、参考のために残しておきます。

mipmapフォルダは、アプリアイコンを入れる時だけ使う、という意見が多いようです。
(他の用途にも使えますが、アプリアイコンを綺麗に表示するために使う、ということ。)

**mipmapフォルダの使用に関しては、要検証。**
(API18 (Android 4.3) 未満をサポートするなら) drawableフォルダ も 必要とする説明が、多く見られます。

##Eclipseの場合
drawable
drawable-mdpi
drawable-hdpi
・・・

##Android Studioの場合
~~dpiごとに分かれているdrawableは、mipmapに変更されました。~~
デフォルトで作成されるフォルダが、mipmapになりました。
※APIレベルに注意。
※安全を求めるなら、Eclipseの場合と同様に、drawable-(～dpi)フォルダを使う方がよさそう。
drawable
mipmap-mdpi
mipmap-hdpi
・・・

それに伴って、ソースコードもリソースファイルも、変更が必要なわけで・・・
Eclipseの場合：
R.drawable.
@drawable/

Android Studioの場合：
R.mipmap.
@mipmap/
に(Grepなどで見つけて)置き換えれば、ほぼ片付くのですが、
dpi非依存のdrawableと混在している(ようするに、一部をdrawableのまま残さないといけない)場合は、
ビルドしてエラーになる所を順番に、手作業で直すしかなさげ。

##追記1：
変更しないもの
`<drawable `
※ `<mipmap `とすると、エラーになる。
※ 別名を付ける時など。drawableとmipmapが行内に混在するので、要注意。
`<drawable name="image_1">@mipmap/some_image</drawable>`

##追記2：**APIレベルに注意**
R.mipmap は、API11以上
Bitmapクラスのmipmap機能のサポートはAPI17以上
BitmapDrawableクラスのmipmap機能のサポートはAPI18以上
(詳細は、各クラスのhasMipMap()などを参照。)

ちなみに、手元環境では、API10(Android 2.3.4)の実機でも、mipmapフォルダのみで問題なく動作しているように見えます。(v4.BitmapCompatなどを明示的に使っている箇所はありあません。)
サポートライブラリ(v4など)が潜在的に何か影響しているかも？？という気がしなくもないですが。

機種依存性があるかもしれないので、(他記事によれば)安全策はdrawable-～フォルダとmipmap-～フォルダの両方に同じ画像を用意する事かもしれませんが・・
通常は、R.drawable(```@drawable```)とR.mitmap(```@mitmap```)のどちらを使用するか、コード上で決め打ちなので、心配な場合は、drawableフォルダのみにしておくのが正解な気がします。

参考
[Android 4.3 APIs]
Graphics/ Mipmapping for drawables
https://developer.android.com/about/versions/android-4.3.html#Graphics

> Android 4.2 (API level 17) added support for mipmaps in the Bitmap class・・・
> Now in Android 4.3, you can enable mipmaps for a BitmapDrawable object as well

[Stackoverflow - mipmap drawables for icons]
http://stackoverflow.com/questions/23935810/mipmap-drawables-for-icons

[Stackoverflow - mipmap vs drawable folders [duplicate]]
http://stackoverflow.com/questions/28065267/mipmap-vs-drawable-folders

[Qiita - 【Andorid】アプリアイコンは「mipmap-」というリソースディレクトリに入れるのがいいらしい]
http://qiita.com/operandoOS/items/53b0f2074a806aacd290

緩募：
Android StudioのStructure Viewで、ソートが かからなくなる方法。(行の順に並んで欲しい)
※Visibilityとか、アルファベット順のソートは切ってあります。

お約束のあれ。
移行に伴う無駄な作業をなくそう。
EclipseからAndroid Studioに移行する時のめも。　(IInAppBillingService.aidl)

ファイルの配置が変わったので注意する。

Eclipseの場合：
(プロジェクトのルート)/src/com/android/vending/billing/IInAppBillingService.aidl

Android Studioの場合：　**AIDLフォルダに入れる必要がある。**
(プロジェクトのルート)/app/src/main/**aidl**/com/android/vending/billing/IInAppBillingService.aidl

※ここではない。
(プロジェクトのルート)/app/src/main/java/～

蛇足：
(aidl)ファイルを移動する時は、(Android Studio内ではなく)エクスプローラを開いて移動した方が無難です。気をつけないと、変なRefactorが・・

参考：
https://developer.android.com/google/play/billing/billing_integrate.html#billing-add-aidl
Adding the AIDL file to your project

http://stackoverflow.com/questions/21268595/iinappbillingservice-aidl-cannot-generate-java-file-in-android-studio
src(java)フォルダではなくて、aidlフォルダに入れないと動かないよ！という回答。
None的なものをwithする

なにもしない何かを`with`したい。

## 動機（読み飛ばして良い）

`tensorflow` では以下のようなコードをよく書く。

```py3
import tensorflow as tf

with tf.variable_scope('conv1'):
    with tf.device('gpu:0'):
        some_code()
```

`with` されるのは名前やデバイスのコンテキストである。

ここでたとえばフラグによりデバイスを指定するしないを制御したい。しかし以下のように`None`を`with`するコードは動かない。

```py3
import tensorflow as tf

with tf.variable_scope('conv1'):
    with tf.device('gpu:0') if use_gpu else None:
        some_code()
```

`with`されるためには `__exit__()`、`__enter__()`が実装されている必要があり`None`はこれらを実装していない（[with文とコンテキストマネージャ](http://docs.python.jp/3/reference/datamodel.html#with-statement-context-managers)）。

## 解法

何もしないクラスを作る。たぶんこれが一番短いと思います。

```py3
import tensorflow as tf

# with
class Empty():
    def __enter__(self): pass
    def __exit__(self, et, ev, tb): pass

with tf.variable_scope('conv1'):
    with tf.device('gpu:0') if use_gpu else Empty():
        some_code()
```
asp解析xml字符串

```
<%
Set xmlDoc=server.createobject("Microsoft.XMLDOM")
xmlDoc.async=False
xmlDoc.validateOnParse=False
content="<list><item><name>lv</name></item><item><name>wfn</name></item></list>"
xmlDoc.loadXml(content)
Set nodes=xmlDoc.getElementsByTagName("item")
For i=0 To nodes.length-1
	Response.write "name="&nodes(i).childNodes(0).Text&"<br/>"
next
%>
Excel > INTERCEPT() > 切片の値 > webの間違い > pythonで確認 / tupleで_,_という記載

http://excel.onushi.com/function/intercept.htm
に記載のINTERCEPT()の値。
> その結果、A4には線形回帰直線の切片の値である3.2が返されます。

こちらが持っている切片を求める関数(C実装)で計算すると-3.2となる。

符号が合わない。

pythonの勉強(scipyの入門)もかねてpythonで解いてみた。
参考 http://akiyoko.hatenablog.jp/entry/2013/06/16/005946

http://ideone.com/OVtvzj

```py
from scipy import stats

xs = [ 5, 10, 9 ]
ys = [ 2, 7, 7 ]

slope, intercept, r_value, _, _ = stats.linregress(xs, ys)

print "slope:", slope
print "intercept:", intercept
print "r_value:", r_value
```

```txt:結果
Success	time: 0.15 memory: 46904 signal:0
slope: 1.07142857143
intercept: -3.2380952381
r_value: 0.981980506062
```

webの記載の方が間違っているのか、定義が異なるのかもしれない。
こちらのC実装関数とpythonが整合することは確認できた。


### 余談

python実装の`slope, intercept, r_value, _, _`の最後の2つ。

http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.linregress.html
を見ると`"_,_"`の部分にはpvalue, stderrがtupleとして返ってくるようだ。
変数として使わない場合は`_`と書くのだろう。

http://stackoverflow.com/questions/2745018/python-is-there-a-dont-care-symbol-for-tuple-assignments
> `_` is indeed a very popular choice for "a name which doesn't matter" -- it's a legal name, visually unobtrusive, etc.

しかしながらGNUのgettextでの"_"イディオムには注意が必要、とのこと。
まだ自分には関係ない点なので、この情報はここまでとする。
[JavaScript]HTML5 Form Validation

##**概要**
HTML5から支援している**Form Validation**、皆さんご存知ですよね。
非常に便利ですし、自分もHTML5に感謝しています。👏
サーバでは常にデータを検証するべきですが、追加のデータ検証をWebページ自身で行うことにも多くの利点があります。ユーザがフォームに入力している間にデータを検証することで、ユーザは何らかのミスをしたことを直ちに知ることができます。これはユーザが HTTP のレスポンスを待つ時間を減らし、またサーバで誤ったフォーム入力を扱うことがないようにします。
![image](https://qiita-image-store.s3.amazonaws.com/0/108364/e17efceb-3818-d9b1-9c93-ea3345c470ee.png)

**しかし、ドンー (OA O; )**
ブラウザー別にメッセージが統一されず、実際の案件には、デメリットになっちゃったんです。
やっぱりHTML5 Form Validationに完全に依存されると気持ち悪いですね。

で、**HTML5 Form Validationのメッセージを制御できる内容**を書いておきたので、
以下の記事をご覧ください。
[🔗[JavaScript]HTML5 Form Validationの制御と注意事項](http://qiita.com/leedohyung-dba/items/b762e21018edc4d0387c)

意外と**簡単**にできますが、いくつかのケースを確認して見ると**変な状態**になります。
もし、他の記事に例を出しているコードをそのまま使って良い結果確認しても、
色んなケースをしっかり確認するべきです。
そうしないと、リリース後バグが出ちゃってしまうかもしれません。

また、せっかくなので、JavaScriptライブラリーを構築してnpmに上げました。
その内容は以下の記事をご覧ください。
🔗[JavaScript]HTML Form Validation コントローラー ライブラリー fvc (準備中)

この記事は、HTML5 Form Validationの紹介でございます。

##**データフォームの検証**
HTML5 Form ValidationはHTML5の機能のひとつとして、
スクリプトに頼ることなくほとんどのユーザデータを検証できることがあります。
これはフォーム関連要素の検証関連属性で行われます。
その検証関連属性は以下の通りです。

###**✪`<input>`要素の検証制約**
すべての`<input>`要素は、**pattern** 属性を使用して検証することができます。
この属性は値として、大文字・小文字を区別した正規表現を想定します。
要素の値が空ではなく、また **pattern** 属性で指定された正規表現にマッチしないとき、
その要素は不正であるとみなされます。

```html:ex_1.html
<input type="text" pattern="/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/" name="textMail">
```

###**✪required 属性**
フォームを送信する前に、ある要素で値が必要である場合は、その要素を required 属性でマークするとよいでしょう。この属性が真であるとき、フィールドは空にすることができません。

```html:ex_2.html
<input type="email" class="test" required>
```

###**✪その他の検証制約**
ユーザの入力を受け入れるすべてのフォーム関連要素(`<textarea>`、`<select>` など)は**required**属性をサポートしますが、`<textarea>`要素は**pattern**属性をサポートしないことは知っておくべきです。

すべてのテキストフィールド (`<input>` または `<textarea>`) は 
**maxlength** 属性を使用してサイズを制限できます。
フィールドの値が **maxlength** 属性で指定した値を超えると、そのフィールドは不正になります。
ただしほとんどの場合、ブラウザはユーザがテキストフィールドで想定される値より長く入力することを許可しません。

数値フィールドでは、**min** 属性と **max** 属性も検証制約を提供します。
フィールドの値が **min** 属性を下回ったり、**max** 属性を上回ったりすると、
そのフィールドは不正になるでしょう。

######[🔗MDN(Mozilla Developer Network)](https://developer.mozilla.org/ja/docs/Web/Guide/HTML/Forms/Data_form_validation)の情報を参考しました。


`<input>`の**type**属性をemailにしたり、
サーバ言語の方のフレームワーク(**CakePHP**など)に**notEmpty**ルールの設定がされていたら、
自動に**Form Validation**が発生されたりします。
その場合は、自動検証を無効にするため`<form>`のタグに**novalidate**属性を使用して対応しましょう。

```html:ex_3.html
<form novalidate>
```

##**HTML5 Form Validationの欠点**
記事の上端で説明したとおり、ブラウザー別にメッセージが統一されず、
実際の案件には、デメリットになっちゃうかもしれません。
また、これらの自動メッセージには、**欠点が 2 つ**あります。
**① CSS でメッセージのルックアンドフィールを変更するための標準的な方法がありません。**
**② メッセージはブラウザのロケールに依存しており、**
ある言語のページでエラーメッセージが別の言語で表示されることがあります。
**ちなみにこれらのメッセージの外見やテキストを変更するには、
JavaScript を使用しなければなりません。**
HTML や CSS だけで変更する方法はありません。
**※①番を対応するためには、※[🔗MDN(Mozilla Developer Network)](https://developer.mozilla.org/ja/docs/Web/Guide/HTML/Forms/Data_form_validation)の内容をご参考お願いします。**
**※②番は以下の記事を参号しても良いと思います。👏**
[🔗[JavaScript]HTML5 Form Validationの制御と注意事項](http://qiita.com/leedohyung-dba/items/b762e21018edc4d0387c)

##**まとめ**
ウェブの技術がどんどんより便利になっていますが、
エンジニアが制御及び拡張出来るかに注目しましょう。
以上、ご覧くださてありがとうございました。 👏
CentOS7でエラーに引っかからないようにpipからopenstackクライアントのインストール

[公式の手順](http://docs.openstack.org/ja/user-guide/common/cli_install_openstack_command_line_clients.html)だけだとエラーになったりしたので、成功したケースをメモ。ちなみにCentOS7.2で確認しました。
proxy経由の方は[こちら](http://qiita.com/egnr-in-6matroom/items/5b9c0ce91d4d203c8ede)も参考に。

## pipをインストール
pipをインストールします。一応gcc入ってない場合も想定してgccも入れてます。

```bash:
$ sudo yum install python-devel python-pip gcc
```

## pbrのインストール

これを忘れると、openstackクライアントインストール時に`Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-EFbty6/positional`　のようなエラーがでました。

```bash:
$ sudo pip install pbr
```

## OpenstackClientのインストール

```bash:
$ sudo pip install python-openstackclient
```

neutronは別らしいので、ネットワーク管理する人はneutronを追加。

```bash:
$ sudo pip install python-neutronclient
```

## バージョン確認
2016年9月現在はver3.2.0でした。

```
$ openstack --version
openstack 3.2.0
```
Enumerable#mapなどの引数に&で修飾したSymbolオブジェクトを渡せる理由メモ


## はじめに

[Rubyでのmap,injectなど使いこなしたい　（２）](http://qiita.com/lomycisw/items/f33d110f99dce9fd5027)というエントリにて、`Enumerable#map`等に`&`で修飾した`Symbol`オブジェクトを渡せる理由について考察されていた。

> この時＆を利用してProcオブジェクトをブロックに変換した。では&:to_sはオブジェクトではない。どのように呼び出してるのであろうか？

私自身きちんと理解していた訳ではなく、こういう使い方もあるという理解しかしていなかったので、今回改めてどういう原理になっているのかをまとめようと思う。

## 引数に`&`を付けたときの挙動

るりまの[ブロック付きメソッド呼び出し](http://docs.ruby-lang.org/ja/2.3.0/doc/spec=2fcall.html#block)に記述があるので引用する。

> それをブロックとして渡すにはブロック付きメソッドの最後の引数として `&' で修飾した手続きオブジェクトを渡 します。Proc の代わりにメソッドオブジェクト(Method)を渡す ことも出来ます。この場合、そのメソッドを呼ぶ手続きオブジェクトが生成さ れ渡されます。
> 
>   (中略)
> 
> to_proc メソッドを持つオブジェクトならば、`&' 修飾した引数として渡すことができます。デフォルトで Proc、Method オブジェ クトは共に to_proc メソッドを持ちます。to_proc はメソッド呼び出し時に実 行され、Proc オブジェクトを返すことが期待されます。 

サンプルコードも記載されていたので併せて引用する。

```ruby
class Foo
  def to_proc
    Proc.new {|v| p v}
  end
end

[1,2,3].each(&Foo.new)

=> 1
   2
   3
```

書いてあることが全てなのだが、`&`修飾した引数はメソッド呼び出し時に`obj.to_proc`が呼ばれ、返り値の`Proc`オブジェクトがブロックとして扱われることになる。
この`to_proc`メソッドを持つオブジェクトであれば`&`修飾した引数として渡せるという部分がキモとなる。

## `Symbol#to_proc`

`Symbol`も`to_proc`メソッドを持つ。
るりまの[`Symbol#to_proc`](http://docs.ruby-lang.org/ja/2.3.0/method/Symbol/i/to_proc.html)の項を引用する。

> self に対応する Proc オブジェクトを返します。 
> 生成される Proc オブジェクトを呼びだす(Proc#call)と、 Proc#callの第一引数をレシーバとして、 self という名前のメソッドを 残りの引数を渡して呼びだします。 

例えば、`:to_s.to_proc`は以下のような`Proc`オブジェクトを作成してくれるものという理解で良いと思う。

```ruby
Proc.new{|obj, *args| obj.send(:to_s, *args)}
```

さらに例を挙げるならばこういうことである。

```ruby
:to_s.to_proc.call 10    # => 10.to_s    => "10"
:to_s.to_proc.call 10, 2 # => 10.to_s(2) => "1010"
```

第一引数をレシーバとするので、当然だが第一引数に渡したオブジェクトが該当メソッドを持っていない場合は`NoMethodError`となる。

```ruby
:hoge.to_proc.call 10 #=> undefined method `hoge' for 10:Fixnum (NoMethodError)
```

## `&`で修飾した`Symbol`オブジェクトを渡したとき

ここまで来ればあとはもう分かったも同然だが、例えば`[1,2,3].map &:to_s`は内部的には以下のコードと同じようなことをしている。

```ruby
block = :to_s.to_proc
[1,2,3].map{|i|
  block.call i
} #=> ["1", "2", "3"]
```
WYSIWYGエディタTinyMCEプラグインjbimagesを日本語化してみた

### はじめに

以前書いたこれの続き
http://qiita.com/qwe001/items/9a86839db4da5a7ab763

以前書いたやつだけでも基本的な日本語化は完了しますが、今回はそれを含め、
エラーメッセージなど以前日本語化していなかった部分も日本語化しました。
ただし、私は翻訳が苦手なので使用は自己責任でお願いします。
筆者はこれに関わって発生するいかなる事象にも一切の責任を負いません。

### やっていること

* 画像アイコンの右のUploadの文字がいらなかったので消しています
* ポップアップウィンドウなどを日本語化しています
* エラーメッセージなども日本語化しています

公式のドキュメントを見てやりました
http://justboil.me/translating-to-other-languages/

### 日本語化ファイル
* **【注意】TinyMCE4を使用している場合はこれを設置するだけでは動きません！！**
* TinyMCE3では動くかもしれませんが検証はしていないです。動いたなら報告してくれると嬉しいなって
* CCBYライセンスだから再配布OKだと思うのですが、問題があれば教えて下さい。消しますので。

ここから日本語化ファイルをダウンロード↓
https://www.dropbox.com/s/3mnmd4shn2dbxqt/jbimages-ja.zip?dl=0

### ファイル構成

```
        jbimages
        ├ ci
        ｜   ├ application
        ｜   ｜   └ language
        ｜   ｜       └ japanese
        ｜   ｜           ├ imglib_lang.php
        ｜   ｜           ├ index.html
        ｜   ｜           ├ jbstrings_lang.php
        ｜   ｜           └ upload_lang.php
        ｜   └ system
        ｜       └ language
        ｜           └ japanese
        ｜               ├ imglib_lang.php
        ｜               ├ index.html
        ｜               └ upload_lang.php
        ├ langs
        ｜  └ ja.js
        ｜  └ ja_dlg.js
        ├ plugin.js
        └ plugin.min.js
```

### 使い方

* する前に必ずjbimagesフォルダのバックアップを取っておいて下さい

##### TinyMCE Ver.3.x を使用している場合（未検証）

ダウンロードしたファイルをそのままtinymce/plugins/jbimagesディレクトリに上書きして保存すればOKです。

##### TinyMCE Ver.4.x を使用している場合

公式HPにも書いているように、今のところ英語の文章を直打ちで修正するしかないようです。
ということで、ファイル構成を以下のように変更します。

```
        jbimages
        ├ ci
        ｜   ├ application
        ｜   ｜   └ language
        ｜   ｜       └ english ← japanese から english に変更
        ｜   ｜           ├ imglib_lang.php
        ｜   ｜           ├ index.html
        ｜   ｜           ├ jbstrings_lang.php
        ｜   ｜           └ upload_lang.php
        ｜   └ system
        ｜       └ language
        ｜           └ english ← japanese から english に変更
        ｜               ├ imglib_lang.php
        ｜               ├ index.html
        ｜               └ upload_lang.php
        ├ langs
        ｜  └ ja.js
        ｜  └ ja_dlg.js
        ├ plugin.js
        └ plugin.min.js
```

あとはtinymce/plugins/jbimagesディレクトリに上書きして保存すればOKです。

Ver3,Ver4共通でこんな感じでクライアントサイド(HTML)から呼び出したらOKです。

```html+js

<script type="text/javascript">
    tinymce.init({
        selector : 'textarea',
        plugins  : 'jbimages link autolink preview',
        toolbar  : 'bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link jbimages | preview',
        menubar  : false,
        relative_urls : false,
        language : 'ja'
    });
</script>

```

### 動作確認

* 画像アイコンの右の「Upload」の文字が表示されていないこと
* 画像アイコンにマウスオーバーすると黒ポップアップで「画像アップロード」と表示されること
* 画像アイコン押下後のポップアップウィンドウのタイトルとボタンが「画像アップロード」「アップロード」となっていること
* ファイルに許可されていない拡張子(.txtなど)をアップロードすると「そのファイル形式のアップロードは許可されていません。」と表示されること

以上。Ver3での動作報告があればうれしいです。
[ブックマーク]Rspecのマッチャー一覧

Ruby:rspecのマッチャー一覧のURLメモ。
一覧を見るだけなら、たくさん載っていて良いが、ちょっと検索に引っかかりにくい

https://www.relishapp.com/rspec/rspec-expectations/v/3-4/docs/built-in-matchers
Travis CIでC++11

Travis CIでC++11 + CMake3.2 + Google Testなプロジェクトをターゲットするためのメモです．
# パッケージを追加
Travis CI環境はツールチェーンとCMakeのバージョンが少し古く，Google Testが未導入なためパッケージを追加・更新を行います．
Clang-3.7 + CMake3.2 + Google Testの場合，以下のようにaddonsを.travis.yml追加します．

```yaml
addons:
  apt:
    sources:
      - ubuntu-toolchain-r-test
      - llvm-toolchain-precise-3.7
      - george-edison55-precise-backports
    packages:
      - clang-3.7
      - cmake
      - cmake-data
      - libgtest-dev
```

Google Testはパッケージを導入しただけではビルドされていないため，以下の設定を.travis.ymlに追加ビルドしておきます．

```yaml
before_script:
  - install -d gtest_build
  - pushd gtest_build
  - cmake -DCMAKE_CXX_COMPILER=clang++-3.7 /usr/src/gtest/
  - make
  - sudo cp *.a /usr/lib
  - popd
```
# 折角なので複数のコンパイラでテストする
Travis CIのmatrix機能を用いると，複数のツールチェーンに対してテストを実行することができるらしく，折角なのでやってみることにします．
以下のように，ツールチェーンに関する設定を複数記述します．この設定では，g++-4.9，g++-5.0，clang++-3.6，clang++-3.7を用いてそれぞれテストを行います．

```yaml
matrix:
  include:
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
            - george-edison55-precise-backports
          packages:
            - g++-4.9
            - cmake
            - cmake-data
            - libgtest-dev
      env: COMPILER=g++-4.9
    - compiler: gcc
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
            - george-edison55-precise-backports
          packages:
            - g++-5
            - cmake
            - cmake-data
            - libgtest-dev
      env: COMPILER=g++-5
    - compiler: clang
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.6
            - george-edison55-precise-backports
          packages:
            - clang-3.6
            - cmake
            - cmake-data
            - libgtest-dev
      env: COMPILER=clang++-3.6
    - compiler: clang
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.7
            - george-edison55-precise-backports
          packages:
            - clang-3.7
            - cmake
            - cmake-data
            - libgtest-dev
      env: COMPILER=clang++-3.7
```
# 成果物
最終的は.travis.yamlは[こんな感じ](https://github.com/ar90n/msgpack11/blob/master/.travis.yml)になりました．C++11向けにMessagePackのシリアライザを実装してみたので，良かったら使ってみてください．[msgpack11](https://github.com/ar90n/msgpack11)
# 参考
* [Travis CI and Modern C++](http://genbattle.bitbucket.org/blog/2016/01/17/c++-travis-ci/)
PSR-2では末尾に空行が必要なのでInttelij Ideaで設定する


知らなかったんですが、PSR-2では末尾に改行が必要なようです。

**PSR-2 2.2 Files**
http://www.php-fig.org/psr/psr-2/#2-2-files

> ### 2.2. Files
> 
> All PHP files MUST end with a single blank line.
> 
> *全てのPHPファイルの末尾には空行が必要です。*

PRで指摘されたので、早速IntellijIdeaの `Editor` -> `PHP` から設定項目を探したけど見つからず困ってたのですが、さすがStackOverflowさん何でも知ってるぜ！

**How to make Intellij Idea insert a new line at every end of file?**
http://stackoverflow.com/questions/16761227/how-to-make-intellij-idea-insert-a-new-line-at-every-end-of-file

> Change your Editor settings:
> 
> Settings→Editor→General→Other→Ensure line feed at file end on save.

というわけで、以下の部分を設定することで無事に改行を追加できました。
「PHPファイルのときだけ」とか器用な設定ではないですが、これで十分です。

![ensure_line_feed_at_file_end_on_save.png](https://qiita-image-store.s3.amazonaws.com/0/3865/8468108b-ef5e-c64a-3ba6-bf4186399755.png "ensure_line_feed_at_file_end_on_save.png")
Docker Swarm Mode でお手軽ブルーグリーンデプロイメント

Dockerで1.12から追加されswarm modeを使うと別途オーケストレーションツールを使わずとも簡単にブルーグリーンデプロイメントを実現できて便利です。簡単にブルーグリーンデプロイメントする手順を紹介したいと思います。

ブルーグリーンデプロイメントとは本番として使える環境を２環境用意して片方を待機系にしておき、待機系を更新してから環境を切り替えることでデプロイを行う方法です。環境をそれぞれブルーとグリーンと呼びます。

Dockerクラスタの構築とDockerイメージの用意の手順はほぼ説明しません。

必要環境は以下のとおり

 - Docker 1.12.1以上
 - Nginx
 - erb

ざっくり全体像

 - Dockerのサービスとしてblueとgreenの2環境を用意します。
 - 環境の更新は`docker service update`コマンドで行います
 - アクティブ環境の切り替えはNginxのupstreamの設定を更新して接続先のサービスを切り替えることで実現します。

#準備作業

##1. クラスタを作ります
  チュートリアルを見つつクラスターを作ります。1ノードでも試せますが2ノード以上あった方が雰囲気がでます。
  https://docs.docker.com/engine/swarm/swarm-tutorial/
  
##2. サービスを作成します
  Swarmのマネージャーノードでdocker service createコマンドを発行してサービスを作成します。
  これでサービスの起動も行われます。
  
  ```bash
  sudo docker service create --replicas 2 --name blue -p 8000:80 <イメージ>
  sudo docker service create --replicas 2 --name green -p 8001:80 <イメージ>
  ```
  
  <イメージ>の部分には`docker run`と同じ形式でイメージを指定できます。  
  `--replicas`はコンテナを起動する数、`-p`は公開ポートとコンテナ内のポートを指定します。(docker runの-pと同じです)この場合だと8000と8001がノードでDockerの外部に公開されるポートになります。  
  `sudo docker service ls`をしてREPLICASが2/2になっていれば作成完了です。
  しばらくしても0/2のままであればサービスの起動に失敗していますので、各ノードのdockerのログなどを確認します。
  
  AWS ECSを使っている場合など、`docker login`が必要な場合はあらかじめ`docker login`してから`--with-registry-auth`オプションを指定します。

  `docker service create`コマンドには大量のオプションがあり、ほとんどのオプションが後ほど説明する`docker service update`と共通です。一通り眺めておくと良いと思います。
  
  https://docs.docker.com/engine/reference/commandline/create/

##3. Nginxの設定のテンプレートを用意します

erbでテンプレートを作成します。
環境に応じて接続先を変更します。

`<DOCKER_NODEn_IP>` にはDockerクラスタのノードのIPを指定します。

```nginx-app.conf.erb
upstream backend {
  <% if ENV['SERVICE_ENV'] == 'blue' %>
    server <DOCKER_NODE1_IP>:8000;
    server <DOCKER_NODE2_IP>:8000;
  <% else %>
    server <DOCKER_NODE1_IP>:8001;
    server <DOCKER_NODE2_IP>:8001;
  <% end %>
}
```

ちなみにここにノードのIPを記述していなくてもコンテナが立ち上がっているノードにはリクエストが飛びます。
これはDockerのSwarmクラスタ自体にロード・バランシング機能が組み込まれているためです。
「docker ingress network」などで検索していただくと仕組みがわかると思います。

##4. Nginxの設定をします

nginx.confを編集して先ほど作成したupstreamにリクエストが向かうようにします。
パッケージ管理システムからNginxをインストールした状態でconf.dが存在する環境であればおそらくnginx-app.confはnginx.confから読まれる設定になっているでしょう。
conf.dからIncludeするようになっていない場合はIncludeする設定をしてください。

```nginx.conf
server {
  ...
  location / {
    proxy_pass http://backend;
  }
  ...
}
```

##5. アクティブ環境切り替え用のスクリプトを用意する

アクティブ環境更新用のシェルスクリプトを用意します。
Nginxの設定を環境にあわせて更新してからそれを読み込みこます。

```bash:set-active-env.sh
export SERVICE_ENV=$1
erb nginx-app.conf.erb > /etc/nginx/conf.d/nginx-app.conf
nginx -s reload
```

##6. 初期のアクティブ環境を設定します。

手前の手順で作成したシェルスクリプトを使って初期の環境をblueに設定します。

```bash
sudo ./set-active-env.sh blue
```

#デプロイ作業

##1. green環境の更新

ここからデプロイの作業です。現在はblue環境がアクティブな環境なのでgreen環境を更新します。

```bash
sudo docker service update --image <新しいイメージ> green
```

各ノード上で新しいイメージの取得と起動が行われます。
数分待つとgreen環境が更新されます。

下記はよく使いそうなオプションです。service createの時に指定することもできます。

--replicas　レプリカ数の変更
--with-registry-auth 認証情報のノードへの引き継ぎ(docker loginを使う環境では必須)
--update-parallelism 同時に更新を行うサーバー数

##2. アクティブ環境をgreenに変更

準備のところで作成したシェルスクリプトを使ってgreen環境に変更します。

```bash
sudo ./set-active-env.sh green
```
ansibleでインストールしたmysqlが起動出来なかった

## 概要

* ansibleを使い、centos7にMySQL5.7をインストール
* ansibleでservice startを行ったがエラー
* この原因の調査と対応について

## 現象

ansibleのPlaybookは下記のように記載していた。

```
      - name: install mysqld
        yum:
          name: "{{ item }}"
          enablerepo: mysql57-community
          disablerepo: mysql56-community
          state: present
        with_items:
          - mysql-community-server
          - mysql-community-client
          - mysql-community-common
          - mysql-community-libs
          - mysql-community-libs-compat
      - name: mysqld start
        # enable serve chkconfig
        service: name=mysqld state=started enabled=on
```

しかし、mysqldをstartさせる所でエラー

```
TASK: [mysqld start] **********************************************************
failed: [192.168.33.12] => {"failed": true}
msg: Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.


FATAL: all hosts have already failed -- aborting
```

ゲストOSに入って直接やってみる。

```
[root@localhost ~]# service mysql start
Redirecting to /bin/systemctl start  mysql.service
Failed to start mysql.service: Unit mysql.service failed to load: No such file or directory.
```

やはりダメ。

`/var/log/mysqld.log`を見てみる

```
2016-09-05T22:57:33.447887Z 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2016-09-05T22:57:33.448064Z 0 [Note] InnoDB: Buffer pool(s) load completed at 160906  0:57:33
2016-09-05T22:57:33.450290Z 0 [ERROR] /usr/sbin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2 - No such file or directory)
2016-09-05T22:57:33.450317Z 0 [ERROR] Can't start server: can't create PID file: No such file or directory
```

どうやら`/var/run/mysqld/mysqld.pid`というファイルを作成することができずに怒られてるようだ。

そもそも`/var/run/mysqld/`というディレクトリがなかったので、このディレクトリを作り、
パーミッションの設定をmysqlにしてあげた。

```
[root@localhost ~]# mkdir /var/run/mysqld
[root@localhost ~]# chown mysql.mysql /var/run/mysqld
[root@localhost ~]# service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]
```

お、行けた


## 一応ansibleでも起動出来るか確認

```
TASK: [mysqld start] **********************************************************
ok: [192.168.33.12]
```

大丈夫。


## まとめ

* なぜか構築したゲストOSに`/var/run/mysqld`ディレクトリがなかったため、自作して解決
* 本来はどこかのタイミングでこのディレクトリが作られる気がするが、それが作られなかった理由は謎のまま
Vuforiaであそぼう！ その4

<a href="http://qiita.com/ayumegu/items/91c1811acab95da817f4" target="_blank">Vuforiaであそぼう！</a>
<a href="http://qiita.com/ayumegu/items/fce21e35f6c9fac0a83d" target="_blank">Vuforiaであそぼう！ その2</a>
<a href="http://qiita.com/ayumegu/items/5b72a91cdd6ec247883a" target="_blank">Vuforiaであそぼう！ その3</a>
Vuforiaであそぼう！ その4

VuforiaのcoreのサンプルにUserDefinedTargetsというやつがありまして。
これがマーカーを自分で好きなやつ画像をマーカーに定義できる優れものなのですが、
これがなかなかいろいろつかえそう。

こんな感じ
<img width="320" alt="2016-09-05 21.28.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/7e2b56f6-1630-af43-d8d2-5065b4952a8a.png">

##やりかた
新規シーンを開きまして、カメラを削除
そして、Vuforia/Prefabsフォルダ配下にある
ARCamera ImageTarget UserDefinedTargetBuilderを配置
<img width="207" alt="スクリーンショット 2016-09-05 22.26.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/4214c66c-463f-9ee4-bf79-6169fd564afb.png">

ARCameraにApp keyをいれつつ、
ImageTargetのTypeをUserDefinedに修正
<img width="301" alt="スクリーンショット 2016-09-05 22.23.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/2287482a-0a5c-5a56-f64b-bbfc5c9d3bf5.png">

するとscene上ではこんな見栄えになります。
<img width="200" alt="スクリーンショット 2016-09-05 22.23.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/c99d1893-a7ce-1ea7-9c3f-284faf7d0e25.png">

次にuserDefinedTargetBuilderのインスペクタがこんな感じ。
サンプルと同じようにするにはStart scanning automaticallyにチェックを入れます。
あとはここにUDT Event Handlerをアタッチ。このスクリプトがキャプチャボタンなどのスクリプトを含んでいます。
そしてこのインスペクタにImageTargetをセット。
<img width="331" alt="スクリーンショット 2016-09-05 23.11.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/a8f666eb-d6db-4609-d75a-20ec73ef9180.png">

次にマーカーをとるところ周り。
UIで適当にボタンを用意して・・・。
ButtonのOnClickに先ほど追加したUDT Event HandlerのBuildNewTargetを設定
<img width="336" alt="スクリーンショット 2016-09-05 23.13.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/7fd345ea-7f7d-785c-a6a9-5c40aa12e027.png">

たったこれだけで出来上がり！
あとは好きなようにカスタマイズしてカップラーメンタイマーを・・・・あれ？
時間が減らない・・・・。
<img width="320" alt="2016-09-06 01.16.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/c3f51eb2-2ecc-1b67-aa8f-9c306a59f20c.png">

原因はok押すたびに3DオブジェクトがInstantiateされているのでTextMeshの参照が違っていたから。
複製されているのはUDTEventHandler.csのOnNewTrackableSourceメソッドにて。
とるたびに下記のような命名規則でオブジェクトが増えていく。

```csharp
string targetName = string.Format("{0}-{1}", ImageTargetTemplate.TrackableName, mTargetCounter);
```

3Dモデルのところにscriptを貼っておけば問題ないけれど、それ以外の場合は注意が必要。
とりあえずやっつけラーメンタイマー完成。
UserDefinedTargetBuilderこれを使えばきっとどんなカップ麺の蓋にも載せられるね。
あとは時間設定できるようにしたり、ちょっとしたミニゲームみたくしたり。そこは工夫のしどころ。
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/36107917-91e3-0223-6764-bd4295781780.png" width="300px"/><img width="300" alt="2016-09-06 07.57.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/e44d75a9-9419-8ef0-2f0f-9e68a9a6391b.png">




結構ARは待ち時間とかと相性が良さそうな気がしていて、
一つ調べたらすでにあったのが
<a href="http://markezine.jp/article/detail/18276" target="_blank">ハーゲンダッツ</a>
食べごろになる時間までっていう着眼点が素敵！
日本のはないみたいだ・・・。カップ麺タイマーどこかやらないかな・・・。
モンスターファームのCDの代わりに撮った画像の色とかをベースにモンスターをARで召喚とかでもいい気もするし。いろいろコンテンツとしてはいけそうだよね。
ポケモンGOのおかげでARってかなり浸透した気がするし・・・。

はい、今回はここまで。
Disk異常例 (smartctl, CrystalDiskInfo)

## smartmontools インストール

```bash:
sudo apt install -y smartmontools
sudo yum install -y smartmontools
```

## smartctl で RAW_VALUE確認

```rb:セルフテスト実施
sudo /usr/sbin/smartctl -t short /dev/sdb
# 2分待ってから以下。
sudo /usr/sbin/smartctl -A -l selftest /dev/sdb
```

```rb
# sudo /usr/sbin/smartctl -a /dev/sda | egrep "^ID|^  5|^197|^#"
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   100   100   036    Pre-fail  Always       -       9
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0
# 1  Short offline       Completed without error       00%     50626         -
```

```bash:16進数を10進数に変換
echo "obase=10; ibase=16; AF5" | bc
```

## SMARTが無効になっている場合、有効

> SMART support is: Disabled
> SMART Disabled. Use option -s with argument 'on' to enable it.


```rb
# /usr/sbin/smartctl -s on /dev/sda
smartctl 6.4 2015-06-04 r4109 [x86_64-linux-3.18.7-200.fc21.x86_64] (local build)
Copyright (C) 2002-15, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.
```


## 注意 の次は 異常

* `生の値`(16進)を気にすること。

![ng.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/4df63e5e-6d65-2c86-6975-8399723d3d04.png)

![5.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/356d3893-447a-3efa-32be-40c9d209c631.png)
![52.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/ee59b741-0955-5433-bd5f-01a574241d53.png)
![53.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/7db0ecf5-0f03-1146-cec1-026fb07dd6a3.png)
![54.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/24e5a527-a094-4832-8697-811233c39be7.png)

![c5.PNG](https://qiita-image-store.s3.amazonaws.com/0/25728/efb2dfa0-556e-12d4-f030-a34cdb94e34e.png)

## 不良セクタ

* [不良セクタのリペア – Imai blog](https://blog.glatts.com/blog/imai/?p=505)
* [ハードディスク障害か - torutkの日記](http://d.hatena.ne.jp/torutk/20130525/p1)

```rb:正常時
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%     50626         -
```

```rb:異常時
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       90%     11982         1717550205
# 2  Short offline       Completed: read failure       90%     11982         1717574320
```

```rb:shortテスト中
# 1  Short offline       Self-test routine in progress 30%     35538         -
```

## Raidカード

Raidカードの `PERC S100/S300` はlinuxのドライバがない

* [Acronis ブータブルメディアで Dell PERC S300 または S100 RAID がサポートされません | Knowledge Base](https://kb.acronis.com/ja/content/16393)

## 参考

* [Self-Monitoring, Analysis and Reporting Technology - Wikipedia](https://ja.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology)
Quantum Chemistry - Average Position

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Average Position
https://www.youtube.com/watch?v=sCeUFzxowuQ&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh&index=20

- 粒子の平均位置
- プサイn(x)
  - wave function
  - [3つ前のビデオ](https://www.youtube.com/watch?v=EK6C6mpxP-g&index=17&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh)　に導出した式
- 紫線の図
  - プサイ2(x)の図。n=2
- ピンク線の図
  - |プサイ2(x)|^2の図
    - probability density function
    - 位置xに粒子の存在する確率
    - n=2のケース
- 黄色の式
  - オペレータ (演算子)
  - オペレータは[このビデオ](https://www.youtube.com/watch?v=ktrJ-sqaaBs&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh&index=13)参照
  - xの上に'^'付き
    - エックス・ハット
    - xの値のオペレータ
  - x^2の上に'^'付き
    - エックス・スクエアード・ハット(という発音に近い?)
    - xの二乗のオペレータ
  - オペレータは、後の関数に対して作用する
- 水色の式
  - `<A>`
  - average value of A
      - Aの前後にプサイ*(x)とプサイ(x)をかけて積分した値
          - プサイ*(x)はプサイ(x)の複素共役 (complex conjugate)
  - (補足) Aというのはこれまで出た値ではなく、average valueの定義を示すために使っているだけ
- 緑の式
  - `<x>`
  - 粒子の位置xの平均値
  - 水色の式をもとに、プサイ(x)の定義（一番上の緑の式）を代入
  - box modelによりxは0からエルまでなので、積分範囲をそのようにしている
  - sin()の複素共役は`i`が含まれないので、sin()そのものとなり紫の式となる
- ピンクの式
  - xsin^2(kx)の積分
  - [こちらの記事](http://qiita.com/7of9/items/8874fea77ea1a325c7f2)で導出している
  - 2つ目の項の係数 (-1/(8k))は`k^2`が正しい
  - "movie magick"を使ってビデオ内で訂正している
  - が、その下の黄色の式は訂正漏れしている 
     - エル/(8n pi)は正しくはエル/(8n^2 pi^2)
     - cos()が0なので結果には影響しない
- 黄色の式
  - 紫の式とピンクの式、k=n pi / エルの定義などを使って成り立つ
  - cos()成分は
    - cos(2 pi n エル / エル) = 1
    - cos(2 pi n 0 / エル) = 1
    - なので、積分した時に0になる
  - sin()成分は
    - sin(2 pi n エル / エル) = 0
    - sin(2 pi n 0 / エル) = 0
    - なので、積分した時に0になる
  - 結果として、黄色の式はオンレジの式となる
- 水色の式
  - オレンジの式から水色の式が得られる
  - average position of particle
  - <x> = エル / 2
  - つまり、midpoint (中点)でした
- 緑の式
  - x^2のaverage valueの計算
  - <A>の定義にてAハットがx^2となっている
- 右上のピンクの式
  - 左下の式の解法に必要な x^2 sin^2(kx)の積分
  - [この記事](http://qiita.com/7of9/items/b533a1ab8587a29bc3d2)で導出した式とxcos(2kx)の符号が異なる
- 黄色の式
  - 左下の緑の式と右上のピンクの式から導出して積分をしている
- オレンジの式
  - 積分した時にこうなるらしい
  - (補足) 式の導出未確認
- 水色の式
  - オレンジの式から得られる
- 紫の式
  - `<x^2>`∞
      - n = infinity(無限大)の場合
      - 水色の式の2項目が極限値0なのでこうなる
  - `<x^2>`1
      - n=1の時の値
- 緑の式
  - シグマ^2 A
    - varianceと呼ぶ
    - varianceのsquare rootはstandard deviation (標準偏差)
- 紫の式
  - variance of Aの計算
  - Aハットとaverage value of Aの差に対して
  - プサイ*(x)とプサイ(x)をはさんで積分したもの
  - それは<x^2> - <x>^2となる
    - (補足) 導出未確認
- ピンクの式
  - variance of xの式
  - 右中段水色の式<x^2>と左下水色の式<x>から求まる
- 黄色の式
  - ピンクの式から整理した
  - この式から水色の式が得られる
- オレンジの式
  - n=1とn=∞(infinity)の場合の値
- 紫の式
  - シグマxはエルと比例する
- 緑の式
  - シグマxは(シグマx)n=1と(シグマx)n=∞(infinity)の間の値
Quantum Chemistry - UV-Vis Spectra of Polyenes

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - UV-Vis Spectra of Polyenes
https://www.youtube.com/watch?v=WRYSVj-FD48&index=19&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh

苦手な化学が出てきた。
「抵抗は無意味だ。」by borg集合体。
抵抗はせず分かるだけ見ることにした。
以下の記載は誤解が多いかもしれない。

- UVと可視域のスペクトル
  - particle in a boxモデルを使用
  - 3種類の物を見る
  - [ethylene](https://en.wikipedia.org/wiki/Ethylene) : C2H4
  - [1,3-Butadiene](https://en.wikipedia.org/wiki/1,3-Butadiene) : C4H6
  - [1,3,5-Hexatriene](http://www.chemicalbook.com/ChemicalProductProperty_JP_CB2501879.htm) : C6H8
- ethylene
  - pi bonding
  - 線が2本でdouble bondと言う
  - 長さをエルとする
  - bond内はpotential 0
  - bond外はpotential 無限大 (box model)
  - 2つの電子があり、光(hニュー)が当たる
  - 片方の電子が励起され2に遷移する (bondingとantibondingになる)
  - 片方が遷移した時のエネルギー差をΔEとする
  - ethyleneのこの状態をp=1とする
- 1,3-Butadiene
  - double bond, single bond, double bondという構造
  - 全体の長さをエルとする
  - 光(hニュー)による遷移は2から3の遷移となる
  - この状態をp=2とする
- 1,3,5-Hexatriene
  - double, single, double, single, double bond
  - 全体の長さをエルとする
  - 光(hニュー)による遷移は3から4の遷移となる
  - この状態をp=3とする
- 緑の式
  - En : energy of wave function
- ピンクの式
  - ΔE : 遷移した時のエネルギーの差
  - ΔE = hニュー(光子のエネルギー)
  - c = lambda ニューの式を入れて式を変形する (hc / lambda)
  - この式は緑の式のエネルギー差でもあるので、
  - 緑の式のnの部分がn2, n1となった場合の値の差でもある (ピンクの右端の式となる)
- 紫の式
  - ピンクの式の3つ目と4つ目からなる等式から整理して得られる
- オンレジの式
  - n1, n2の定義
  - その定義に基づいて n1^2とn2^2を計算したら2p+1となる
- 黄色
  - Rc=c
      - carbon-carbon double bondを意味する
      - carbon同士の二重結合
      - 1.34オングストローム
          - オングストロームは10^(-10)m
  - Rc-c
      - carbon-carbon single bond
      - 1.47オングストローム
          - オングストロームは10^(-10)m
  - R
      - 1.39オングストローム
          - (補足) この値の出自は不明
- 水色
  - C2H4, C4H6, C6H8のエルとpの関係から得られる式
  - 奇数の式 (2p-1)にRをかけたもの
- 右上の緑の式
  - 左下の紫の式、水色の式、オレンジの式から得られる
- 右中段の表
  - lambda_calc: 計算から求まる値
  - lambda_exp't:
      - exp'tはexperimentの略記
      - 実験からえられた値
  - lambda_calcとlambda_exp'tはオーダーでは合っている
  - 完全にあやまった計算ではない
技術英語 > If you [take the high road], you'll modify the old class so that it doesn't use global data.

@ Code Complete (No.11330 / 36077)

> If you <font color=red>take the high road</font>, you'll modify the old class so that it doesn't use global data.

> http://eow.alc.co.jp/search?q=high+road
> 公道、幹線道路

意訳「本道を行くなら、古いクラスを修正してグローバルデータを使わないようにする。」

対になる言葉として「low road」。
上記文章の数行下にて使われている。

> If you take the low road, you'll modify the new program to create the global data that the old class needs to use.
Open AI Gymのモデルをいくつか試してみる

環境：
CPU:Corei7 6700K
GPU:GTX1070
SSD:240GB
HDD:1TB
マザーボード:ASUS H170-pro
OS:Ubuntu14.04 LTS
python:2.7.6
CUDA:8.0 RC
cuDNN:5.1
TensorFlow:0.10.0
など

過去５回で、Ubuntu14.04、CUDA、chainer、dqn、LIS、Tensorflow、Open AI Gymを順次インストールした。
http://qiita.com/masataka46/items/94417a5974dba810e7b8
http://qiita.com/masataka46/items/fddef236cb211ef3f145
http://qiita.com/masataka46/items/125c7900ec8ca83f6eb2
http://qiita.com/masataka46/items/12fb01f3417bd0791703
http://qiita.com/masataka46/items/f64ce9c110113ab8e517

~~ただし、Unityがうまく立ち上がらないため、最後のLIS環境構築は完了していない。~~
またOpen AI Gymはインストールしたものの、一部のサンプルでエラーが生じている。

今回はOpen AI Gymのモデルをいくつか試してみる。前回と同様、公式HP
https://gym.openai.com/docs
に従って進める。

##はじめのテストサンプルをいじってみる
HPで「Running on Environment」項目で書かれているサンプルを若干いじってみる。具体的には以下。

```
import gym
env = gym.make('MountainCar-v0')
env.reset()
for _ in range(5000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
```

もともとのサンプルのeinvironmentを'MountainCar-v0'に、rangeを5000に変えてみた。車が頑張って山を登ってる。ゴールまではたどり着かなかったが・・・

次にenvironmentを'MsPacman-v0'に変えてみた。予想通り以下のエラーが表示された。

```
raise error.DependencyNotInstalled("{}. (HINT: you can install Atari dependencies by running 'pip install gym[atari]'.)".format(e))
gym.error.DependencyNotInstalled: No module named atari_py. (HINT: you can install Atari dependencies by running 'pip install gym[atari]'.)
```

##dependenciesをインストールする
そこで、言われた通りpipでAtari dependenciesインストールしてみる。

```
sudo pip install gym[atari]
```
として再度'MsPacman-v0'を試したところ、稼働した。

次に'Hopper-v1'を試したところ、以下のエラーが表示された。

```
gym.error.DependencyNotInstalled: No module named mujoco_py. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)
```
ここにはopenai/mujoco-pyをインストールしろ、と書いているが、openai/gym/envsの中にもmujocoがある。どちらなのだろうか？とりあえずatariと同様の手法を試してみる。

```
sudo pip install gym[mujoco]
```

としてインストールした後に'Hopper-v1'を試したところ、以下のようなエラーが表示された。

```raise error.MujocoDependencyError('To use MuJoCo, you need to either populate ~/.mujoco/mjkey.txt and ~/.mujco/mjpro131, or set the MUJOCO_PY_MJKEY_PATH and MUJOCO_PY_MJPRO_PATH environment variables appropriately. Follow the instructions on https://github.com/openai/mujoco-py for where to obtain these.')
mujoco_py.error.MujocoDependencyError: To use MuJoCo, you need to either populate ~/.mujoco/mjkey.txt and ~/.mujco/mjpro131, or set the MUJOCO_PY_MJKEY_PATH and MUJOCO_PY_MJPRO_PATH environment variables appropriately. Follow the instructions on https://github.com/openai/mujoco-py for where to obtain these.
```

やはりopenai/mujoco-pyからインストール必要があるのだろうか。

とりあえず、こんな感じで必要なパッケージをインストールしていったらいいわけだ。
カバレッジの種類について

毎回ごっちゃになるのでメモ程度に。

以下ようなコードがあった場合を考える。

```
 if(a = 1){
     処理１
 }

 if(b = 1){
     処理２
 }

```

###C0　命令網羅
すべての命令が実行されることを確認する。
上記の例だと、

* a=1,b=1

の1ケースを実施すれば100%になる。


###C1　分岐網羅
すべての条件分岐が正しく実行されることを確認する。
上記の例だと、

* a=1,b=1
* a=2,b=2

の2ケースを実施すれば100%になる。


###C2　条件網羅
すべての条件の組み合わせが正しく実行されることを確認する。
上記の例だと、

* a=1,b=1
* a=1,b=2
* a=2,b=1
* a=2,b=2

の4ケースを実施すれば100%になる。


ホワイトボックステストを行う場合、どこを指標にするか考えておく。
あくまで一つの指標であることを意識する。