OmniAICreator/Qiita-1.07M huggingface dataset:
Vagrant+VirtualBox: kernelアップデート後にvagrant-vbguestが動かなくなった場合の対処

## 概要
ゲストOSのCentOS7上でyum updateコマンドを打ってkernelのアップデートをしたところ、次起動時からvagrant-vbguestがエラーを吐くようになり、GuestAdditionsが動作しなくなった。
結果的にVirtualBoxのアップデートで解決したのでメモ。

## エラーの内容
```
==> default: Machine booted and ready!
GuestAdditions seems to be installed (5.0.12) correctly, but not running.
Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]
bash: 行 3: vboxadd: コマンドが見つかりません
Removing existing VirtualBox non-DKMS kernel modules[  OK  ]
Building the VirtualBox Guest Additions kernel modules
The gcc utility was not found. If the following module compilation fails then
this could be the reason and you should try installing it.

Building the main Guest Additions module[失敗]


...


Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device
```

## VirtualBoxアップデート後
Vagrant upでVMを起動したところ、

```
GuestAdditions versions on your host (5.0.24) and guest (5.0.12) do not match.
```
と表示されてその後は必要なパッケージのインストールが自動的に始まった。
VirtualBox-GuestAdditionのバージョンがゲストOSのカーネルのバージョンに対応していない場合、このようなエラーが出る模様。
Emacs on OS Xのフォント設定

# はじめに

OS XのEmacsで下記の通り動作するように`init.el`にフォント設定を追加する。

* 欧文フォントはXcodeやターミナルでデフォルトのMenloを使用する。
* 日本語フォントはヒラギノ角ゴ ProNを使用する（JIS X 0213:2004対応）。
* 一般的な等幅フォント（半角:全角 = 1:2）の設定とする。

# 動作確認環境

* OS X 10.11.5
* X11 Emacs 24.5.1（Cocoa Emacsでは未確認）

# 設定内容

`init.el`に追加したフォント設定は以下の通り。

```el
(when (and (>= emacs-major-version 24) (not (null window-system)))
  (let* ((font-family "Menlo")
         (font-size 9)
         (font-height (* font-size 10))
         (jp-font-family "ヒラギノ角ゴ ProN"))
    (set-face-attribute 'default nil :family font-family :height font-height)
    (let ((name (frame-parameter nil 'font))
          (jp-font-spec (font-spec :family jp-font-family))
          (jp-characters '(katakana-jisx0201
                           cp932-2-byte
                           japanese-jisx0212
                           japanese-jisx0213-2
                           japanese-jisx0213.2004-1))
          (font-spec (font-spec :family font-family))
          (characters '((?\u00A0 . ?\u00FF)    ; Latin-1
                        (?\u0100 . ?\u017F)    ; Latin Extended-A
                        (?\u0180 . ?\u024F)    ; Latin Extended-B
                        (?\u0250 . ?\u02AF)    ; IPA Extensions
                        (?\u0370 . ?\u03FF)))) ; Greek and Coptic
      (dolist (jp-character jp-characters)
        (set-fontset-font name jp-character jp-font-spec))
      (dolist (character characters)
        (set-fontset-font name character font-spec))
      (add-to-list 'face-font-rescale-alist (cons jp-font-family 1.2)))))
```

# 内容の説明

* 1行目の`when`マクロで`emacs-major-version`が`24`以上でかつ`window-system`が`nil`でない場合を指定。`system-version`の制約は特になし。
* 2〜5行目で欧文フォントと日本語フォントを指定。
    * ファミリーはemacs上で確認

        ```el
        (dolist (font-family (font-family-list)) (print font-family))
        ```

* 6行目の`set-face-attribute`でデフォルトフレームのフェイスの属性（フォントファミリーと高さ）を指定。
* 9〜13行目で今回対象とする日本語文字セットを指定。
    * JIS X 0201、JIS X 0213とJIS X 0212の未重複部を網羅するように指定。[^1]
        ![JIS文字集合の関係概念図](http://www.ndl.go.jp/jp/data/bib_newsletter/2015_4/images/img09.jpg "JIS文字集合の関係概念図")

* 15〜19行目で上記日本語文字セットに含まれるが、欧文（半角）として表示したい文字を指定。
    * ラテン文字やギリシア文字など。
* デフォルトでは半角:全角 = 1:2とならないため、最終行の`face-font-rescale-alist`で日本語フォントは1.2倍で表示するよう指定。

# 結果

Emacsの通常使用において期待する結果を得られた。

<img width="599" alt="sample.png" src="https://qiita-image-store.s3.amazonaws.com/0/37213/c9be9ba1-6f3c-d1d9-3f69-a8547e841aa5.png">

# 注意点

* ヒラギノ角ゴ ProNに含まれないグリフは正しく表示されない（推測）。
* 「Apple カラー絵文字」を使って絵文字表示対応を試みたが、Emacsがクラッシュするため未実施。

[^1]: [文字コード講座 第1回―文字コードの歴史（Unicode前史）](http://www.ndl.go.jp/jp/data/bib_newsletter/2015_4/article_05.html)
Railsアプリのherokuへのデプロイをシェルスクリプト(bash)で自動化する

##  動機
herokuへのデプロイは、gitを利用します。

```shell
git push heroku master
``` 

これは開発者の手に馴染んだツールで、開発者がアプリケーションコードを開発する自然な流れの中でデプロイ操作を可能にすることが重要だと考えているからです。

今日、CIツールとの連携でリポジトリにpushすると、単体テストパスし、デプロイが走るようにすることも可能ですが、今回は
1. 最新をローカルへpull
2. heroku環境へpush
3. rake db:migrate
ができればよいので、シェルスクリプトの範囲で解決できそうです。
また、私はステージング環境、本番環境を持っているので引数で指定してそれぞれの環境へデプロイするものを作りました。


### 仕様
- シェルスクリプトはRailsのアプリケーションルートに'deploy.sh' というファイル名で配置する
- 引数でstaging, productionという文字列を渡してそれぞれのデプロイを行うようにする
- ステージング環境のリポジトリ名は 'staging'にする。developブランチをデプロイする
- 本番環境のリポジトリ名は'production'にする。masterブランチをデプロイする
- herokuのアプリケーション名はここでは便宜的に testapp-staging, testapp-production
- かならずデプロイ後にマイグレーションを実行する
- デプロイ終わったら、git checkout -　で直前のブランチに戻る

### ソース
```bash

#!/bin/bash 

# 前提 staging環境のリモートリポイジトリ名 -> staging
# 前提 production環境のリモートリポイジトリ名 -> production


env=$1

if [ $env = "staging" ]; then
  echo "deploy to staging"
  git checkout develop
  git pull origin develop
  git push $env develop:master
  heroku run rake db:migrate --app testapp-staging 
  git checkout -
fi

if [ $env = "production" ]; then
  echo "deploy to production"
  git checkout master
  git pull origin master
  git push $env master
  heroku run rake db:migrate --app testapp-production 
  git checkout -
fi


```

### 実行
```console
bash deploy.sh staging
bash deploy.sh prodution
```
37signals database 

https://signalvnoise.com/posts/2479-nuts-bolts-database-servers

https://www.youtube.com/playlist?list=PLuVcDOUVjW2ePvFapFSHBZ71ya2fLHZS5 episode 16 17

https://signalvnoise.com/posts/1185-the-need-for-speed-making-basecamp-faster

https://signalvnoise.com/posts/3090-basecamp-nexts-caching-hardware
ブラウザのハードウェアアクセラレーションを理解してJavaScriptアニメーションを最適化する方法

http://calendar.perfplanet.com/2014/hardware-accelerated-css-the-nice-vs-the-naughty/

最近、アニメーションがっつりなウェブアプリケーションを早くするみたいな仕事をしていて、ハードウェアアクセラレーションってどういう仕組みなんだろうと調べていたらこんな英語でこういう記事があったので、紹介してみる。

訳しつつ独自解釈を入れてみたのが以下のような感じ。

--------------------------------------------------------
一般にアニメーショングラフィックスをCPUのみで処理しようとした際、アニメーションにおけるフレーム毎にピクセル単位で生成し、描画するという処理を行っている。一方でCPU+GPUを処理に用いる場合、アニメーションさせる要素をGPUで確保されている無数の「テクスチャー（レイヤー）」に書き込む。そのうえでCPUからのアニメーション処理要求に応じてGPUが内部的にアニメーションを行うことで、高速な処理を実現している。

一般にいうブラウザのHA（ハードウェアアクセラレーション）とは、アニメーションを行わせるDOM要素を抽出し、その単位でGPUテクスチャー(レイヤー)に保存しGPUに命令することを行っていることで描画性能を出すことを行っている。

一方でその内部処理は非常に複雑な処理であるということをウェブアプリ実装者は意識する必要がある。例えば「translate3dを使えばパフォーマンスが改善される」というのは通説だが、それはケースバイケースであり、あるケースにおいては極めて有効な手段であることもあれば、パフォーマンスが悪い理由が別にあるためほとんど効果が出ないこともある。したがってどのような実装を行えばよいのかを考える際は、ハードウェアアクセラレーションがどのようなものであるのかを理解する必要がある。

そのうえで意識するべきことはCPUとGPUのバス（データのやり取り）の量である。ウェブアプリケーションのレイヤー（composited layers）である。ブラウザはレイヤーごとにGPUテクスチャーを生成してしまうため、多くのレイヤーが生成されるとその分のメモリーを消費してしまう。その結果、フレームがスキップされてしまったりクラッシュの原因になってしまう。あるウェブアプリケーションでどれだけレイヤーが生成されているのかを確認するためにはブラウザのデバッグモードを利用するといい
■ Firefoxの場合
about:config -> layers.draw-borders を trueに
■ Chromeの場合
chrome://flags/#composited-layer-borders を enableに

CPUとGPUのバス（データのやり取り）の量を最小限に維持したままにすることも重要である。そのためには、あるアニメーションが始まってから終了するまでは他のアニメーションやレイヤーのアップデートをできる限り実行しないようにすることが必要である。

描画性能の最適化を図るうえでFPSを意識することは重要である。FPSを見るにはブラウザ下記のような設定をすればよい
■ Firefoxの場合
about:config -> layers.acceleration.draw-fps を trueに
■ Chromeの場合
chrome://flags/#show-fps-counter

--------------------------------------------------------
このあたりで根気が尽きたのでいったん公開。
間違いがあればだれか修正してくれると嬉しい。
VimでNeosnippetを導入した後JSONのダブルクオーテーションが表示されなくなった場合の解決法

## 概要
- VimでJSONファイルを開いたら、ダブルクオーテーションが表示されない
- 最近Neosnippetを公式GitHubの設定を参考にしながらインストールした
- 非表示になっているだけでダブルクオーテーションは存在するので編集で混乱
- シンタックスがハイライトされているときはダブルクオーテーションで囲まれているらしい
- vim-autocloseやlexima.vimを導入していると一見こちらの不具合に見える

## 原因
Neosnippetの公式サイトから設定をまるまるコピーしていることが原因
https://github.com/Shougo/neosnippet.vim

```vim:.vimrc
" Plugin key-mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)

" SuperTab like snippets behavior.
"imap <expr><TAB>
" \ pumvisible() ? "\<C-n>" :
" \ neosnippet#expandable_or_jumpable() ?
" \    "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

" For conceal markers.
if has('conceal')
  set conceallevel=2 concealcursor=niv "こちらが原因
endif
```

## 解決法
上記設定を削除するか、コメントアウトしましょう。

```vim:.vimrc
" For conceal markers.
" if has('conceal')
"   set conceallevel=2 concealcursor=niv "こちらが原因
" endif
```

## 結論
- シンタックスがハイライトされているときはダブルクオーテーションで囲まれている、ということを瞬時に理解できず、package.jsonが編集出来なくてマジ焦った

## 参考など
- [Vim で JSON のダブルクォーテーションが表示されない場合の解決法](http://qiita.com/karur4n/items/a26007236c59c5fb8735)
- [Vim でjsonファイルを開いた時にチラつくダブルクォーテーションを何とかしたお話。](http://yuzuemon.hatenablog.com/entry/2015/01/15/035759)
- [Shougo/neosnippet.vim](https://github.com/Shougo/neosnippet.vim)
- [vimでautocloseの設定をする](http://www.axlight.com/mt/sundayhacking/2015/02/vimautoclose.html)
- [Townk/vim-autoclose](https://github.com/Townk/vim-autoclose)
- [cohama/lexima.vim](https://github.com/cohama/lexima.vim)
集合論メモ

# 確認
- 無限集合には無限部分集合が無限にある
- 無限集合には有限部分集合が無限にある
- 有限集合には無限部分集合は存在しない
- 有限集合には有限部分集合が有限個ある

## 定義
### 極大
集合$S\in \mathcal{A}$が極大であるとは，$S$を**真部分集合**とする$\mathcal{A}$の要素が存在しないことである．

# コンパクト性
## 定義
集合$A$に対して，$A$の部分集合$S$が性質$P$をもつとき，そしてそのときに限り，$S$の任意の有限部分集合が性質$P$をもつとき，$P$はコンパクトであるとする．

集合族$\mathcal{S}$の元であるという性質がコンパクトであるとき，$\mathcal{S}$はコンパクトであるとする．
いいかえると，$S$が$\mathcal{S}$の元であるとき，そしてその時に限り，$S$の有限部分集合が$\mathcal{S}$の元であるとき$\mathcal{S}$はコンパクトである．

## 補題
**1.コンパクトな性質$P$を満たす集合$S$の任意の部分集合は$P$を満たす**
[証明]
$S$の任意の部分集合を$T$とし，$T$の任意の有限部分集合を$U$とする．$U$は$S$の有限部分集合でもあり，$C$はコンパクトな性質$P$を満たすから$U$は性質$P$を満たす．よって$T$の任意の有限部分集合は性質$P$を満たすため，$T$は性質$P$を満たす．

**2.極大集合が存在しない無限集合が存在する**
[証明]
$S_0 \subset S_1 \subset ... \subset S_i \subset ...$
を満たす$S_i$だけを部分集合としてもつ集合において極大集合は存在しない

**3.コンパクトな性質を満たす集合に対してコンパクトな性質を満たす極大集合が存在する**
[証明]
可算無限集合$V$ = {$x_0, x_1, \dots, x_i, \dots$}のコンパクトな性質を満たす部分集合を$S_0$とおく．
$S_i \cup$ {$x_i$}が

- コンパクトな性質を満たすとき,$S_{i+1} = S_i \cup$ {$x_i$}, 
- コンパクトな性質を満たさないとき$S_{i+1} = S_i$

とおく．
このとき$S = \lim_{i \to \infty} S_i$とおく．

**$S$のコンパクト性**
任意の有限部分集合{$y_1, ... y_n$} $\subset S$に対して$y_i \in S_{m_i}$$m = \max_{1 \leq i \leq n} m_i$とすると$S_i$の定義より, {$y_1, ..., y_n$} $\subset S_m$である．$S_m$はコンパクトな性質を満たすからその有限部分集合である{$y_1, ..., y_n$}はコンパクトな性質を満たす．よって$S$はコンパクトな性質を満たす．


**$S$の極大性**
$S_i$の定義より, 任意の$x\in V(x\notin S)$に対して, $S\cap${$x$}はコンパクトな性質を満たさない．
よって$S$はコンパクトな性質を満たす集合の中で極大である．
MonacaでWikitude SDKを使う際の注意点（Android）

MonacaはCordovaプラグインを自由に使うことができます（ゴールドプラン以上）。[Monaca × Wikitudeを試す](http://qiita.com/moongift/items/a64c6f470ec43a50be40)ではiOS向けにWikitude SDKを使ってみたのですが、その状態でAndroid向けにビルドするとエラーが起こってしまいました。

エラーの内容は次のようになっており、uses-sdk:minSdkVersionが14になっているのが問題とのことです。しかしAndroidManifest.xmlを編集しても解消されません。 tools:overrideLibrary について記述を追加しても同様です。

```
Execution failed for task &apos;:processDebugManifest&apos;.
&gt; Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 15 declared in library [:wikitudesdk:] /private/tmp/monaca/57887adefd17347a20a60510/project/platforms/android/build/intermediates/exploded-aar/wikitudesdk/AndroidManifest.xml
  	Suggestion: use tools:overrideLibrary=&quot;com.wikitude.architectandlib&quot; to force usage
```

色々試したのですが、エラーは解消されず…。そこでMonacaの掲示板を頼ってみました。

[Got an error when building android app with plugins | Monaca & Onsen UI Community](https://community.onsen.io/topic/551/got-an-error-when-building-android-app-with-plugins)

そうすると一件のコメントをいただきました。config.xmlに次の記述を追加すると良いというのです。

```
<platform name="android">
    <preference name="android-minSdkVersion" value="15" />
</platform>
```

そこでプロジェクトのルートディレクトリにある config.xml に以下の記述を追加します。

```
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" id="com.example.helloworld" version="1.0.1">
  <name>Minimum Template</name>
    :
  <preference name="Fullscreen" value="false"/>
  <!-- 追加ここから -->
  <platform name="android">
    <preference name="android-minSdkVersion" value="15" />
  </platform>
  <!-- 追加ここまで -->
</widget>
```

これでビルドを行うと見事に成功しました！

![wikitude-android-monaca-4.png](https://qiita-image-store.s3.amazonaws.com/0/61833/8045787f-806f-9300-e37e-014ffce512b1.png)

なお、最初にARのカメラを起動する際に確認ダイアログが出ます。

![wikitude-android-monaca-3.png](https://qiita-image-store.s3.amazonaws.com/0/61833/992e9643-9eb9-191f-6009-c9a2bc271c32.png)

後は普通にARが実行できます。

![wikitude-android-monaca-2.png](https://qiita-image-store.s3.amazonaws.com/0/61833/407aa4bc-f0c4-3aac-ee52-2a11970ab6f4.png)

----

これでMonacaでもWikitudeと組み合わせたAR（拡張現実）アプリが作れるようになります！

[Wikitude（ウィキチュード）みんなが使えるARアプリ開発ツール｜グレープシティ株式会社](http://wikitude.grapecity.com/)
Google Spread Sheet で日時の変換


調べるのにかなり時間がかかってしまったので忘備録。

IFTTT を使って Google Spread Sheet へ日時を書き込んだ時に ```July 17, 2016 at 09:37PM``` となったので、これを```2016-07-17 21:37``` と変換したかった。

```July 17, 2016``` も ```09:37PM``` も value() に渡せば数値にしてくれるので、これを text() で表示形式を指定するだけ。

```
=text(value(REGEXEXTRACT(A7,"^[^a]+")),"yyyy-mm-dd") & text(value((REGEXEXTRACT(A7,"[^ ]+$")))," HH:mm")
```
nginxのdockerコンテナをreloadする

nginxのイメージは公式のalpine版


###再起動
これは普通に

```bash
docker restart コンテナ名
```


### reload

```bash
docker kill -s HUP コンテナ名
```

これだけなんだけどvolumeでnginxの設定ファイルを直接指定しているとホスト側で設定ファイルを変更してもコンテナのファイルに反映されなかったので、volumeはディレクトリ単位で。
Ubuntuのアップグレードでフリーズしたときの対処法

Ubuntu 14.04からUbuntu15.04にアップグレードをしていたときに、なんとアップグレードの最中にフリーズし、強制的に電源を落とさざるをえなくなるときがある。こういうことがあると、大抵の場合起動できなくなったり、いろいろと面倒事が起きるので、その対処法をここにメモしておく。

![Upgrade Ubuntu](http://livedoor.blogimg.jp/shattered/imgs/2/e/2eeea96b.png)
（例: この画面のままフリーズすることがある）

## 対処法
GUIが使えない場合は、Ctrl+Alt+F1とかF2でほかの端末にログインする

パッケージのコンフィグレーションを再実行

```shell-session
$ sudo dpkg --configure -a 
```

インストールされていないパッケージをインストール

```shell-session
$ sudo apt-get upgrade 
```

再びペンディングされているアップグレードを実行

```shell-session
$ sudo apt-get -y dist-upgrade
```

（出典: http://askubuntu.com/questions/361506/restarting-update-manager-after-freezing）
UnityでOculus側とディスプレイ側に別々の視点の映像を表示する

Qiita初投稿記事です．よろしくお願いします．

#Oculusとは別のカメラの視点でディスプレイに表示したい！
VRゲーム開発などを行っていると，Oculus側に表示されるディスプレイのミラーリングではなく，固定視点や俯瞰視点の映像をディスプレイに表示したくなるときがあります．
今回はこのようなケースにおいて，Oculus側の視点の映像をOculusに，別カメラの視点を通常のディスプレイに表示する方法を紹介します．

#注意
カメラが増えるほど同時にレンダリングするフレームが増えるので，マシンにかかる負荷が増大します．パフォーマンスに注意しましょう．

#環境
- Unity 5.3.1f1
- Oculus Rift DK2
- Oculus SDK 1.3.0

以上の環境で動作を確認しました．（CV1でもいけると思います）

#やりかた
##Hierarchy側の設定
Hierarchyに以下のオブジェクトを設置します．

- Oculus側に表示するCamera
- ディスプレイ側に表示するCamera

※Project Settings->Player->Virtual Reality Supportedにチェックを入れておきます．

##Oculus側カメラInspectorの設定
1. Target Eyeを"Both"に設定する．
2. Target Displayを設定する．(デフォルトのDisplay 1で構いません)
3. VRSettings.showDeviceViewでOculus側の映像をディスプレイにミラーしないように設定する．

```csharp:VRmirrorSettings.cs
    UnityEngine.VR.VRSettings.showDeviceView = false;
```

![image](https://qiita-image-store.s3.amazonaws.com/0/71690/c511bad0-d277-0e2a-226a-ab63bf1e6e68.png)

##ディスプレイ側カメラInspectorの設定
1. Target Eyeを"None(Main Display)"に設定する．
2. __Target Displayの値をOVRCameraRigで設定したものと同じにする__（ここで違う値にするとダメでした（ハマった原因））

![image](https://qiita-image-store.s3.amazonaws.com/0/71690/c7acd74f-cbf7-fec3-5cdc-aba3587957a9.png)

#さいごに
今回の手法を使って戦車を2人で協力して操作して戦うゲームの制作のお手伝いをさせていただきました．
Oculus側の人は戦車のキューポラから頭を出して周囲を索敵する役割を，ディスプレイ側の人は砲手の役割を担っています．

##BitSummit4thに出展しました！[@mn_chrome](https://twitter.com/mn__chrome)
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">戦車プレイヤー その1<a href="https://t.co/bUmaKekHlp">https://t.co/bUmaKekHlp</a></p>&mdash; ちょろめ (@mn__chrome) <a href="https://twitter.com/mn__chrome/status/751711426717167616">2016年7月9日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
【vvvv】フルスクリーンが解除できない時にチェックするべきこと【xml編集】

vvvvのRendererをフルスクリーンにする方法は様々あります。

・RendererのFullscreenを1にする
・[Alt+Enter]
・[ctrl + 8]

などなど。

一番おすすめなのは、Windowsの標準機能としてウィンドウを最大化して[ctrl + 8]でウィンドウの枠を消すこと。

だいたいこの方法でもろもろを乗り切ってきました。


# フルスクリーンが解除できない…詰んだ…

.v4pパッチを開くたびにいきなりFullscreenのRendererが表示されてパッチが編集できない…詰んだ。
こういう悲しい状況に直面することも、ないわけではありません。

そんな時はあわてず騒がず次の方法を試しましょう。
あ、その前に、バックアップを取ることをお忘れなく。

### 1.パッチの拡張子を[xml]に書き換えて、適当なエディタで開く

 ![a1.png](https://qiita-image-store.s3.amazonaws.com/0/100231/10c55350-c5f6-2ffd-8fed-be1a4b09e588.png)

はい。見事なxmlができました。
なんとv4pファイルの中身はxmlそのものだったのです！！！！！！
なんということでしょう！！（茶番

### 2.[Ctrl+F]でcomponentmode="Fullscreen" になっているRendererを見つけよう。
いました。
私の場合7行目。
`<NODE systemname="Renderer (EX9)" nodename="Renderer (EX9)" componentmode="Fullscreen" id="0">`
と記載されています。

つまり、ここがFullscreenという指定をしているので、これを書き換えてあげれば、フルスクリーンが解除されるはずなのです。


### 3."Fullscreen"を"InAWindow"書き換える

"Fullscreen"を"InAWindow" に書き換えて
`<NODE systemname="Renderer (EX9)" nodename="Renderer (EX9)" componentmode="InAWindow" id="0">`
にすると、フルスクリーンが解除されます。
ここでxmlを保存して閉じましょう。

### 4.拡張子をxmlからv4pへ戻す。

これで普通に開けるはずです。


もちろん、すべてバックアップをとってから編集してくださいね。

関連項目→[【vvvv】ウィンドウがどこかへ旅立った時にチェックするべきこと【xml編集】](http://qiita.com/AquaLamp/items/ba7824ec423e4898783f)
よきvvvvLifeを！
【Unity】Android端末のジャイロセンサーを使ってボールを転がすメモ

<img width="783" alt="スクリーンショット 2016-07-18 2.15.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/96688/81294dcf-5f1c-57ee-ed85-ff6862ba3e2f.png">

# やりたいこと
- スマホを傾けてアプリの中のボールを転がしたい
- スマホを机に置いた状態が水平であってほしい

# とりあえず実装
参考

- [傾きで玉を転がすゲームなどの場合（モバイル端末を地面に水平に構えた場合）]
(http://ft-lab.ne.jp/cgi-bin-unity/wiki.cgi?page=unity_script_gyro_mobile)

できた。

# さらにやりたいこと
- directional lightも傾きに合わせて動かしたい

# とりあえず実装
参考
- [Unity スクリプトリファレンス Gyroscope]
(http://docs.unity3d.com/ja/current/ScriptReference/Gyroscope-attitude.html)

ライトに直接スクリプトを貼って簡単じゃーん（？）

# ・・・何か違う
- 想定通りに影が変わらない軸がある
- どうやらAndroid端末のジャイロは、手に持ち、通話中の状態を基準と想定している？
- Unity上とAndroid端末のy軸とz軸が逆っぽい

# yとzを入れ替える
できた。ソースは後述。

# もうひとつやりたいこと
- このままだと直射日光は垂直にしか当たらないので、適当に傾けたい

# シーンで設定しているライトの向きをオフセットとして使う
- transform.rotation の値の型は Quaternion
- Quaternion同士を掛け算すると向きを合成できる

というわけで、以下のコードに。

```csharp:gyro_to_light.cs

public Quaternion direction_light_offset;
public Quaternion gyro_to_light;

void Start () {
	// 太陽光の傾きオフセットをシーンの設定から保持
	direction_light_offset = this.transform.rotation;
}

void Update () {
	// 端末の傾きを保持
	gyro_to_light = Input.gyro.attitude;
	// yz軸の値を入れ替え
	float yz_change;
	yz_change = gyro_to_light.y;
	gyro_to_light.y = gyro_to_light.z;
	gyro_to_light.z = yz_change;
	// ライトの向きを端末の傾き＋元の設定のオフセットで変更
	this.transform.rotation = gyro_to_light * direction_light_offset;
}
```

できた。

Quaternionについての参考はこちら
[UnityのベクトルとQuaternionによる回転について / テラシュールブログ]
(http://tsubakit1.hateblo.jp/entry/2014/08/02/030919)
CloudAtCostのメモリ512MBでddリストア

* メモリ512MBで成功した。
* alpineはEasyBCDで起動できなかった。

## 1. windows側

* cloudatcostのOSを`windows 7`選択
* [EasyBCD](http://neosmart.net/EasyBCD/)を起動
* [debian mini.iso](https://d-i.debian.org/daily-images/amd64/daily/netboot/)を`boot from ram`で登録
* reboot

## 2. mini.iso

* mini.isoの`rescue mode`で起動。ネットワーク設定実施。

```bash:wgetでdd
wget -qO- http://myserver.com/backup.dd \
| dd if=/dev/stdin of=/dev/sda bs=16M
```

`rescue mode`し忘れた場合はDisk認識しないためOS再起動すること。

## 3. OS起動後

```bash:ネットワーク設定(ens192)
vim -p /etc/network/interfaces /etc/hosts /etc/hostname
echo "nameserver 8.8.8.8" > /etc/resolvconf/resolv.conf.d/base
resolvconf -u
```

```bash:パーティションサイズ拡張
fdisk /dev/sda
# d
# n p Enter Enter Enter
# w
reboot

resize2fs /dev/sda1
```

事前に1パーティション(swapなし)でOSインストールしておくこと。
忘れてた場合はp1は`51000000`
最新のAtomでウインドウ切り替えのショートカットキーが効かない

長らくAtomのバージョン1.6を使用していましたが、最近になって最新の1.8にバージョンアップしました。
すると・・いつも使用しているウインドウ切り替え(Cmd+F1)のショートカットキーを押しても何も起こらない現象が・・！

「HAHAHA,そんなバカな(^^)」と思ってAtomを再起動するも結果変わらず :sob: 

調べてみたらElectronのIssueにこんなの挙がってましたよ
https://github.com/electron/electron/issues/5246

「"Move Focus to Next Window" stopped working a long time ago」
とな。マジか。

仕方なくウインドウ切り替えのデフォルトショートカットキーをCmd+F1から変えることにしました。
<img width="668" alt="スクリーンショット 2016-07-18 11.56.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/71113/8a5bfaf8-6641-ea77-1c71-5fb93df8456b.png">

Atomを再起動したら変更後のショートカットキーでウインドウ切り替えできました。とりあえずこれでいくしかないのか・・
Visual Studio Code ではじめての ASP.NET Core アプリケーションを作る

[前回「Visual Studio Code ではじめての C# アプリケーションを作る」](http://qiita.com/nskydiving/items/4127c96e9588016566fe)では「.Net Core」を使ってコンソールアプリケーションを作りましたが、今回は「ASP.NET Core」アプリケーションを作ります。

「ASP.NET Core」は「.Net Core」でウェブアプリケーションを作るためのフレームワークです。

プロジェクト構成が複雑なウェブアプリケーションでは、よくテンプレートからプロジェクトを作成するかと思います。

しかし、残念ながら「Visual Studio Code」には本家「Visual Studio」のようなテンプレートからプロジェクトを作成する機能はありません。

ですので、今回はテンプレートからプロジェクトを作成してくれるツールのインストールから始めていきます。

※「.Net Core」のインストールは[前回「Visual Studio Code ではじめての C# アプリケーションを作る」](http://qiita.com/nskydiving/items/4127c96e9588016566fe)で紹介していますので、今回は省略させて頂きます。

## 動作環境
- Mac OS X 10.11.5
- .NET Core SDK Installer (Preview 2)
- Visual Studio Code 1.3

## テンプレート作成ツールをインストール
いくつかインストールしなくてはいけないツールがあるのですが、一行のコマンドですべてインストールできますので、中身についてはあまり知らなくても問題ありません。

- Yeoman（ヨーマン）：テンプレートジェネレーター
- Bower（バウアー）：パッケージマネージャー
- Grunt（グラント）：タスクランナー
- Gulp（ガルプ）：タスクランナー

以下のコマンドを実行して、ツール群をインストールします。

```sh
npm install -g yo bower grunt-cli gulp
npm install -g generator-aspnet
```

## ウェブアプリケーションのプロジェクトを作成
yo コマンドでテンプレートからプロジェクトを作成できます。

以下のコマンドを実行してください。

```sh
yo aspnet
```

1.使用するテンプレートを選択
上下キーで「Web Application」を選択して、Enterキーを押してください。

![yo_aspnet_01.png](https://qiita-image-store.s3.amazonaws.com/0/127532/ebe52b4e-9bfd-0fa4-c8b2-47b1cbaa884c.png)


2.UIフレームワークを選択
「Bootsrap (3.3.6)」を選択してください。

![yo_aspnet_02.png](https://qiita-image-store.s3.amazonaws.com/0/127532/330e9c91-bf53-6871-55cf-7e72e2619f42.png)

3.プロジェクト名を入力
「MyWebApp」と入力して、Enterキーを押してください。

![yo_aspnet_03.png](https://qiita-image-store.s3.amazonaws.com/0/127532/9137909f-0047-5dd5-cc7d-65053573f53f.png)

4.ウェブアプリケーションを起動
これで新規プロジェクトが作成されましたので、実際に動かしてみます。

以下のコマンドを実行して、ウェブアプリケーションを起動します。
※ウェブアプリケーションの停止は「Ctrl + C」

```sh
cd MyWebApp
dotnet restore
dotnet run
```

![mywebapp_run.png](https://qiita-image-store.s3.amazonaws.com/0/127532/bbbdfc03-9273-2368-3742-6a8fd473addb.png)

5.ウェブアプリケーションにアクセス
ブラウザで「 http://localhost:5000 」にアクセスしてください。

以下のような画面が表示されていれば成功です。

![mywebapp.png](https://qiita-image-store.s3.amazonaws.com/0/127532/628b4cb4-7032-a86c-432c-8589e1c80378.png)

## まとめ
別途ツールをインストールする必要はありますが、結構簡単にウェブアプリケーションのテンプレートを作ることができました。

もちろん「Visual Studio Code」でコードを編集したり、デバッグすることも可能です。

![cscode_mywebapp.png](https://qiita-image-store.s3.amazonaws.com/0/127532/11ba15ce-bdb4-63fd-74b5-534827cea302.png)

今のところ、「ASP.NET Core」についての日本語の情報はかなり少ないので、公式ドキュメント（英語）を読むのが近道のような気がします。

ASP.NET Core Documentation
https://docs.asp.net/en/latest/
nysol (MCMD) （１） 4桁の文字列を、00 補完で６桁にする。

# 4桁の文字列を、６桁にする。
※[nysol](http://www.nysol.jp/) を実際に触っている人向けの文章です。

nysol は、基本的なデータ処理機能があって、組み合わせで実現できるようになっています。PHPのように、関数一発でやってくれるわけではないです。そこで、こんなことができるというのを書いていきます。他の言語でももちろんできますが、nysol ではこんな感じできるという事例提示です。
タイプコストでいくと他言語よりはタイプ数がすくなくてすみます。

こんなデータがあります。コード(hs)が、4桁だったり、６桁だったりします。
４桁の場合は、00 をつけて、６桁にしたいのです。下記の例では、
馬 0101を、010100 にします。

データ(temp.1)

```
hs,hs_name
0101,−_馬
0102,−_家畜のもの
010229,−_水牛
010310,−_その他のもの
```

処理するスクリプト

```
#!/bin/sh
mcal i=temp.1 c='length($s{hs})' a=len |
mcal c='if(${len}==4,"00","")' a=zero |
mcal c='cat("",$s{hs},$s{zero})' a=hs6 
```

説明

1.ファイル名 temp.1 を読み込みます。**ファイルオープンが、i= の２文字です。**
1.hs の項目の文字列長を新規項目 len として追加します。
2.項目長 len が、4 なら、新項目zero を、00 とし、4でないなら、空白として追加します。
3.もとの項目 hs と zero を結合して、新項目 hs6 を追加します

結果

```
hs,hs_name,len,zero,hs6
0101,−_馬,4,00,010100
0102,−_家畜のもの,4,00,010200
010229,−_水牛,6,,010229
```

データ処理では、コード変換はしばしば行われます。どんな言語でやってもいいのですが、
タイプコストという点では、nysol は優れていると思いますが、どうでしょうか？

馬の部分が、-_馬　となっているのは、処理おわってから対応予定です。
node.jsでMVPしたかった人生だった


#下記のサイトをまねて、何か応用したかった。
node.jsでGoogleAnalytics
http://liginc.co.jp/web/programming/node-js/123492

##トラブルシューティング
記事に記載のga.js
"（ダブルクォーテーション）が
```
&quot;
```
逆から言った方がいいかな？
記載が見た目と違って実は"だったということです。

知らんがな。。

##詰んでた
つーかそもそもga.jsはテンプレ　※まあ、そりゃそーか。。
事前にGoogleAnalyticsの準備しとけって書いてるもんね。
無駄サイト用意するのも面倒だったので
実際に試すのは後で。。

##愚痴
このサイトやたらと簡単、簡単言ってるの誇張っぽいってか
ミスリーディングだと思う。不信感持たれないのかなあ。

これうまくいっても結局リポジトリのコードみないと
GoogleAnalyticsのデータ取得するのが簡単なのか分からないよね。
まあ、読んでみたら、ほんとだ！確かに超簡単！
ってなるのかもしれないけど、

一歩一歩で納得感が欲しい自分にはつらい。
（と思っていましたがそうでもなかった。）

それともnode.jsコミュニティでは
機能なりソシューションの話題に、
「誰かが作ったモジュール使ったら」ってのが暗黙的につくのだろうか(笑)
だったらとってもいいんだけれど。

不具合起きたとき怖すぎ。

「開発」って何を開発してるんだ？
モジュール使うnode向けのコードのことを指すと思うのだけど
開発？何の開発だったのか？とはなりました。

・・・
##まあ納得
リポジトリの内容みたら確かにそれっぽい感じ。
へぇ～。
c++ builder / fileIO > 指定日付以降のファイルだけ見つける

```txt:動作確認
C++ Builder XE4
```

TFile::Copy()を使って指定日付以降のファイルだけフォルダ単位でコピーしたいと考えていた。
TFile::Copy()自体には日付範囲指定はできないようだ。

TFile::GetFiles()でリストを取得することになる。

山本隆さんのblogにてGetFiles()使用時のフィルタ方法が掲載されている。
http://www.gesource.jp/weblog/?p=4509

上記を元に日付範囲指定をしようとしたが、timestampから日付範囲指定しようとした時に"const" "非const" "GetCurrentDateTime"などの部分でエラーが出た。

結局、以下の手順とすることにした。

1. GetFiles()で指定のコピー元フォルダのサブフォルダ含めて全部のファイルリストを取得
2. ループでまわしながらTFile::GetLastWriteTime()で日付範囲によるフィルタ
3. フィルタ後のファイルリストを使ってTFile::Copy()で逐次コピーする

上記の2までの部分を以下に実装した。

```Unit1.h
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE で管理されるコンポーネント
	TButton *Button1;
	void __fastcall Button1Click(TObject *Sender);
private:	// ユーザー宣言
public:		// ユーザー宣言
	__fastcall TForm1(TComponent* Owner);
};


//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

```

```Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <IOUtils.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	String path = L"D:\\TMP\\160718_someData";
	String searchPattern = L"*.*";
	TSearchOption option = TSearchOption::soAllDirectories;

	TStringDynArray fileList = TDirectory::GetFiles(path, searchPattern, option);
	int allcnt = fileList.Length;

	TStringList *lst = new TStringList();

	TDateTime filedt;
	for(int idx = 0; idx < fileList.Length; idx++) {
		filedt = TFile::GetLastWriteTime(fileList[idx]);
		if ( filedt < VarToDateTime("2016/05/24 12:00") ) {
			continue;
		}
		lst->Add(fileList[idx]);
	}

	String msg = IntToStr(lst->Count) + L"/" + IntToStr(allcnt);
	OutputDebugString(msg.c_str());

	delete lst;
	lst = NULL;
}
//---------------------------------------------------------------------------
```

```txt:結果
デバッグ出力: 177/261 プロセス Project1.exe (2384)
```

261あるファイルのうち、日付フィルタによって177個に絞りこまれた。

フォルダ内のファイルが増えたときのパフォーマンスが気にはなる。
Thymeleaf-Spring 2.1.5.RELEASEがリリースされていた

2016/6/11にThymeleaf-Spring 2.1.5.RELEASEがリリースされました。このリリースには私がコントリビュートした「[テキストエリア内の先頭の改行コードが消えていくバグ](https://github.com/thymeleaf/thymeleaf-spring/issues/103)」も修正されています :v: 

> Note:
>
> テキストエリアのバグのついては、Qiitaの過去投稿「[Springの`<form:textarea>`を使うと先頭の改行が消えていく・・・](http://qiita.com/kazuki43zoo/items/cf82364eb718d7950c74)」をご覧ください。


# Spring Bootでのサポート

Spring Bootは、近日(2016/7/28)リリース予定の1.3.7.RELEASEと1.4.0.RELEASEでThymeleaf-Spring 2.1.5.RELEASEがサポートされます。なお、Spring Boot 1.4.0.RELEASEでは、デフォルトはThymeleaf 2系のままですがThymeleaf 3系を利用することもできます。Thymeleaf 3系の適用方法は、[Spring Bootの公式リファレンス](http://docs.spring.io/spring-boot/docs/1.4.0.BUILD-SNAPSHOT/reference/htmlsingle/#howto-use-thymeleaf-3)をご覧ください。

# Spring IO Platform BOM(Bill Of Materials)でのサポート

Spring IO Platform BOMは、2.0.7.RELEASEとAthens(共に投稿時点では未リリース)でThymeleaf-Spring 2.1.5.RELEASEがサポートされます。


# まとめ

2系ユーザーはThymeleaf-Spring 2.1.5.RELEASEに更新しよう！！そして、これからThymeleafを使う方はThymeleaf 3.0.0.RELEASEを使おう！！

# [参考] Thymeleafのドキュメント

* http://www.thymeleaf.org/documentation.html

#### 2系のドキュメント

* http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html
* http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html
* http://www.thymeleaf.org/doc/tutorials/2.1/extendingthymeleaf.html

#### 3系のドキュメント

* http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
* http://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html
* http://www.thymeleaf.org/doc/tutorials/3.0/extendingthymeleaf.html
* http://www.thymeleaf.org/doc/articles/thymeleaf3migration.html
事務系リーマンがWEBサービスを作ろうと思い立って、まず考えたこと


今年のやりたいことのひとつとして、小さくてもいいので、自分の「WEBサービス」を立ち上げたいなと思っている。その決意表明だというわけではないのだけど、今、考えていることをまとめて、整理していきたい。WEBサービスを立ち上げ終わった時に、「あっ、こんなこと考えたんだ」っていう記録のために。


##WEBサービスを立ち上げようとおもったきっかけ


きっかけは一冊の本。[脱社畜ブログ](http://dennou-kurage.hatenablog.com/)を運営している日野さんの書籍[「脱社畜の働き方」](https://www.amazon.co.jp/dp/B00EZP7DI8/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)を読んだこと。

この本の中で、日野さんがエロサイトや、ソーシャルゲームのサイトを立ち上げる話が出てくるんだけと、それを読んですごい楽しそうだなと感じたんですよね。同時期に、ギークハウスで有名な[phaさん](http://pha.hateblo.jp/)の「ニートの歩き方」って本でも、WEBサービスの収入で成型をたていてうらやましいなと。二人とも、会社とか組織にしばられず、自分の腕やアイデアだけで生活していて、自分もそんな背一喝を送りたいなと思ったから。あと、単純にプログラミングを勉強していて、作ったものが動くのは楽しい。

##今、できること
プログラミング自体には、ずっと前から興味を持っていて、プログラミングの本を読んで、サンプルプログラムを動かしたりしたことはあった。ただ、完全に独学だったし、大学も文系で、仕事もあったりで本格的に勉強していたわけではなかった。（ちなみに仕事も、開発職ではないです）

- ローカル環境で、Python、シェルスクリプトで簡単コマンドとかなら実行できる
- 仕事でSQLは学んだので、データベースの知識は多少あり。（基本、集計するだけなんだけど）
- 作業できるのは、平日の夜。もしくは土日。ただ、最近は平日は仕事が忙しいので、30分ほどが限界。であれば、週に時間が確保できるのは平日の2時間半（30分☓5日）、週末の5時間☓2日で10時間ほど。
- そのため、あまり手のかかるサービスはリリースまでに時間がかかるかもしれない。
- まずはサービスインすることを目標に。できれば3ヶ月〜半年以内でなにかひとつサービスインしたい


##ぼんやりと作りたいもの

勉強しながら作ることになるので、なるべく単一のスキルでできること
に集中する。また、最初から大きなものはできないので、まず小さくても一通り、サービスインをするところまで完成させるというのが目標になる。

作るものとしては、

- JavascriptでTwtter APIを利用した画像のスライドショーなど
- さくらVPSなどのサーバーを利用して公開できるようにする
- もしくはGit Hub。Git Hubでは静的なページであれば、簡単に公開できると少し調べて、書いてあった
- DropBoxのPublicフォルダに公開するという方法もあるらしい。
- とにかく動くものを公開することにこだわる（アウトプットを意識したいなと考えている）

##学んでいきたいこと

ざっくり、これらのことを学んでいく必要があるのかなと考えている。きっと、他にもいろいろと出てくるんだろうけど。週に一度ぐらいで、できたことをまとめて、行きたいと思う。自分のやったことをリスト化して、モチベーションを維持する作戦。

- Git Hubの使い方をマスターする
- さくらVPSでサーバーを構築する方法を学ぶ
- HTMLとCSSの基本。デザインをやりたいわけではないので、基本が本を読まずにできるようになるぐらいまで。

学習の過程はGit Hubリポジトリで公開
https://github.com/tadaken3/twitter-api-image-list
Processing > ControlP5 > ListBox > クリックイベントが発生しない

```txt:動作環境
Processing 3.1.1 on Windows 8.1 pro(64bit)
Library: ControlP5 v2.2.6
```

以下のListBoxの実装を試したが、Event1, Event2ともに発生しない。


```java
import controlP5.*;

ControlP5 controlP5;

int myCurrentIndex = 0;
String[] tokens;

void setup() {
  size(500,500);
  frameRate(10);
  controlP5 = new ControlP5(this);
  ListBox lst = controlP5.addListBox("myList", 20, 40, 80, 200);
  
  tokens = new String[10];
  tokens[0] = "Hello";
  tokens[1] = "Hi";
  tokens[2] = "Ca va bien?";
  lst.addItem(tokens[0], 0);
  lst.addItem(tokens[1], 1);
  lst.addItem(tokens[2], 2);
}

void controlEvent(ControlEvent theEvent) {  
  if (theEvent.isGroup()) {
    println("Event1");
    println(theEvent.getGroup().getValue() + " from " + theEvent.getGroup());
  }

  if (theEvent.isGroup() && theEvent.getName().equals("myList")) {
    println("Event2");
    myCurrentIndex = (int)theEvent.getGroup().getValue();
  }
}

void draw() {
  background(0);
  
  fill(255);
  if (myCurrentIndex >= 0) {
    text(tokens[myCurrentIndex], 200, 40);
  }
}
```


https://www.reddit.com/r/processing/comments/3qmcxx/need_help_with_listbox_in_controlp5_on_processing/
> I guess ListBox is also depreciated and they recommend you use scrollableList instead.

リンク先のリンク先のjavadocを見てもListBox がdepreciated というのは見つかってはいないが、scrollableList で代用できるのであればそれでいい。
技術英語 > to give property owners greater regulatory certainty [in exchange for] species protection.

@ LOE > June 20, 2003
http://www.loe.org/shows/shows.html?programID=03-P13-00025
> to give property owners greater regulatory certainty <font color=red>in exchange for</font> species protection. 

http://eow.alc.co.jp/search?q=regulatory&ref=sa
> 1. 〔活動などが正常になるように〕規制［制限］する

http://ejje.weblio.jp/content/in+exchange+for
> 対価として
> (…と)引き換えに, 交換に.

「種保存の対価として領地のオーナーにより規制的なcertaintyを与える」

certaintyは未消化。

<hr>
githubで検索すると以下のような文例が出てくる。

https://github.com/modernassembly/material
> 
A front-end alternative for traditional DOM manipulation, <font color=red>in exchange for</font> smooth & complex UIs.
dein.vimでslim-template/vim-slimのシンタックスハイライトが効かない問題


vimでslimを書く必要に迫られたのでプラグインを入れた時のお話。
どうも最近はNeoBundleじゃなくてdein.vimが主流らしいので、この有難い記事（["dein.vimのインストール自体にハマってしまったメモ"](http://qiita.com/DialBird/items/0a96910f13586d635dc0)）に従ってdein.vimでslim-template/vim-slimをインストール。


```vim:~/.vimrc
" Add or remove your plugins here:
"中略
call dein#add('slim-template/vim-slim')
```

そしてslimファイルを新規作成するとちゃんとハイライトされて喜んだのもつかの間、新規作成時にはちゃんとハイライトされるのに何故か既存ファイルを開くとハイライトが効かない問題に直面。この辺の情報（["How to Setup vim-slim Manually"](https://sephinrothcn.wordpress.com/2014/04/09/how-to-setup-vim-slim-manually/)、["ファイルの拡張子によって、vimに自動でインデント幅を変えてもらおう！"](http://qiita.com/mitsuru793/items/2d464f30bd091f5d0fef)）を参考にして、

```vim:~/.vimrc
autocmd BufRead,BufNewFile *.slim setfiletype slim
```

を追記して解決。ひとまずこれで使ってみる。
PowerShell使って最低限の知識でGUI作業を自動化をしてみた

# 独自形式の電子書籍が嫌い
CRC Pressで電子書籍の教科書を買ったら、まんまと独自形式だった。VitalSource Bookshelfとかいう専用アプリで読まなければならず、色々と不便。印刷が許されているので、そこからPDFにする事もできるのだけど、1回あたりの印刷で2ページしか印刷できない、とかいう制約付き。じゃぁ、スクリプトで自動化するか、と。

# AppleScriptで挫折
この手のGUIの自動化をしようと思ったらAppleScriptが便利っていう認識だったんだけど。印刷ダイアログから"Save as PDF"を選ぶのがうまくいかずに挫折。せっかくだからWindowsでPowerShellでも試してみるかな、という気分に。でも、あんまり真面目に勉強する気もない。

# Windows PowerShell ISE
AppeScript Editor的なやつ。ArduinoとかのIDEと似た感じで、適当にコード書いて再生ボタンを押せば実行できる。とりあえず最低限度の知識で必要最低限のスクリプトを組むのが目標。Windowsの場合、キーボードだけで大抵の操作には手が届くので

* 変数を使ってループを回す
* 変数からファイル名を生成する
* キーボード操作をエミュレートする
* タイミングをとる

ってくらいができれば問題なさそう。

# 基本処理の把握
## 変数を使ってループを回す

```ps1
for ($i = 1; $i -lt 250; $i += 2) {
}
```
なんかしらの言語知ってれば読めるような基本的なforループ。```-lt```が無駄に「俺Shellなんだぜ」感。これで1ページから2ページずつで250ページまでってループが回せる。

## 変数からファイル名を生成する
あとでまとめて1ファイルにする時に便利なようにソートしやすいファイル名をつけたい。

```ps1
$file = "file-" + $i.ToString("000") + ".pdf"
```

これで```file-001.pdf```みたいな名前が作れる。```000```はprintfで言うところの```%03d```。

## キーボード操作をエミュレートする
OS標準のGUIコンポーネント使ってれば、大抵はTABで選んでEnterで決定、Alt-*系のバインドでメニューにアクセスしてカーソルで選択……って感じでキーボードだけで用が足りる。この辺りは昔からWindowsのよく出来てるところ。

```ps1
[System.Windows.Forms.SendKeys]:: SendWait("{TAB}")
```

これでアクティブなウィンドウに対してTABキーのイベントが発生する。この手の特殊キーは```{}```で囲めば指定でき、```{ENTER}```とか```{DOWN}```など予想されるような文字列を入れればたいてい当たってる。
あと、Ctrlキーを押しながらは```^```を前につける。例えば印刷したければCtrl-Pなので```"^p"```を指定すれば良い。

## タイミングをとる
```ps1
Start-Sleep -s 10
```

10秒間待つだけの簡単な処理。```-s```の引数で待ち時間を指定できる。

# 印刷の自動化の実際
それ以外の複雑な指定、例えばプリンタの指定（Microsoft Print to PDFを選ぶ）や印刷の詳細設定は、ひとまず最初の1回を人力で行う事で指定する。使うプリンタや、Microsoft Print to PDFが出力する先のフォルダなどは一度選べばデフォルトになるので、スクリプトで指定する必要もなくなる。

```ps1
# ここで3秒待つ間に手動でBookshelfをアクティブウィンドウにする
Start-Sleep -s 3

for ($i = 1; $i -lt 250; $i += 2) {
    # 印刷ダイアログを開く
    [System.Windows.Forms.SendKeys]::SendWait("^p")
    Start-Sleep -s 2

    # 開始ページ指定までTABで移動
    [System.Windows.Forms.SendKeys]::SendWait("{TAB}")
    [System.Windows.Forms.SendKeys]::SendWait("{TAB}")

    # テキスト全選択した上で開始ページ$iで上書き
    [System.Windows.Forms.SendKeys]::SendWait("^a")
    [System.Windows.Forms.SendKeys]::SendWait("$i")

    # 終了ページやページ数は飛ばしても平気（事前に最終ページを指定しておければ、
    # 例えば1-100ページみたいな指定になっていても頭の2ページだけ印刷される）
    [System.Windows.Forms.SendKeys]::SendWait("{TAB}")
    [System.Windows.Forms.SendKeys]::SendWait("{TAB}")
    [System.Windows.Forms.SendKeys]::SendWait("{TAB}")
    # 印刷OK
    [System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
    Start-Sleep -s 2

    # プリンタ選択（Microsoft Print to PDF）
    [System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
    Start-Sleep -s 2

    # 出力するPDFファイル名を指定
    $file = "file-" + $i.ToString("0000") + ".pdf"
    [System.Windows.Forms.SendKeys]::SendWait("$file")
    [System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
    Start-Sleep -s 10
}
```

全くもって雑なスクリプトですが。これをISEに書いて再生、問題の電子書籍を開いてるBookshelfを3秒以内にアクティブにしてあげれば、あとはひたすら変換してくれる。GUIのレイアウトやらはOSのバージョンやインストールされてるドライバの差異なんかでも変わると思うので、キーボード叩く回数なんかは適当に環境に合わせて調整する必要があるかも。遅いマシンでは待ち時間も長めに。

ちなみに変換したPDFには毎ページ購入者のメールアドレスと著作権の警告文が入るので、悪いことには使えませんよ。
フルスクラッチでのプログラムの書き方(ryo_gridの場合)

ソースコードって実際のところどういうふうに書いていますか？
https://note.mu/ruiu/n/n1083b2a5d547

に触発されて、自分の書き方を記してみる。適当に書き殴るのでご容赦を。
上記記事では、既存コードをいじる場合だけど、この記事ではフルスクラッチで書く場合について。理由はそっちの方が記事として面白そうだから。

まず、プログラムの規模と構成を考える。

大した規模でなければ、あまり何も考えずに、コアな部分から書いていく。ちょっとしたスクリプトとか。そこから派生して必要な関数があれば順次書いていく。

続いて、それなりの規模かつコアな部分だけ、切り分けて開発可能な場合。この場合は、書いたことの無い処理が動くか、スニペット的な物を書いて、こう書けば動くというのを一通りためす。そして、それらを結合して、コアな部分を実装する。そこまでいけばあとは、それ以外のつまらない部分のコードを少しづつ肉付けするようにして書いていく。上記記事のように常に動くようにするというほど極端ではないけど、なるべく少し書いては動作テストができるように書いていく。で、そのうち、だんだん大きくなって完成。なお、ユニットテストは趣味プログラミングでは僕はあまり書かかないので、それを念頭にお読みください。

最後に、全部書かないと全然動かせないようなプログラムの場合。この場合は、スニペット的なものでほげほげというのは上と同様で、そのあとは、ひとまず、トップダウン(main関数からスタート)で、入出力と関数名だけ決まっている空の関数をどんどん書いていく（他の空の関数の呼び出しはもちろん書いてある）。この時、関数の中に「not implemented」みたいなコメントを書いておくと、そのコメントをディレクトリ内を網羅的にgrepするようなスクリプトでTODOリストが出せるから、それを一つづつ潰していけばプログラムが完成するので精神衛生上良い。おすすめ。まあ、そこまでやらなくても、とりあえず、空の関数を書いたあとで、一つ一つ書いていくと、プログラムが完成する。パチパチパチ。

あー、あとはあまり褒められたやり方ではないけど、本のサンプルコードとか、ネットで拾ってきたプログラムを改修していく形でつくるパターンは多い気がする（フルスクラッチじゃねー）。

まあ、多分、みんなこんな感じの書き方なのかなあと勝手に思ってるけど、そうでもないですかね？
もっとうまいやり方があるよ！という方がいたら教えて下さい！
あと、この手の記事で必読のやつがあれば教えて下さい！
他力本願寺！
CotEditorの各種設定ファイルの場所(Mac)


Syntax を設定していたら CotEditor が起動しなくなり、
設定中だった Syntax のファイルを削除したくなった。
その際に、各種設定ファイルの場所を調べたので記録として残しておきます。

## CotEditor 各種設定ファイルの場所

バージョンによって設定ファイルの場所が違います

### 2.2.0 以降

バージョン 2.2.0 以降は Sandbox 化されている

| ファイル | 場所 |
| :------- | :--- |
| Syntaxes | ~/Library/Containers/com.coteditor.CotEditor/Data/Library/Application\ Support/CotEditor/Syntaxes |
| Themes | ~/Library/Containers/com.coteditor.CotEditor/Data/Library/Application\ Support/CotEditor/Themes |
| Preferences | ~/Library/Containers/com.coteditor.CotEditor/Data/Library/Preferences/com.coteditor.CotEditor.plist |
| Scripts | ~/Library/Application\ Scripts/com.coteditor.CotEditor/ |

### 2.0.0 ~ 2.2.0 未満

バージョン 2.0.0 ~ 2.2.0 未満は Sandbox 化はされていない

| ファイル | 場所 |
| :------- | :--- |
| Preferences | ~/Library/Preferences/com.coteditor.CotEditor.plist |
| その他 | ~/Library/Application\ Support/CotEditor/ |

### 2.0.0 未満

バージョン 2.0.0 未満は bundle identifeir が com.aynimac.CotEditor

| ファイル | 場所 |
| :------- | :--- |
| Preferences | ~/Library/Preferences/com.aynimac.CotEditor.plist |
| その他 | ~/Library/Application\ Support/CotEditor/ |
Toppers/ASP for Renasas RXにfatfs用のSD Card RSPIドライバ(rspi_mmc)を追加しました。

# 更新内容
 今回の更新によりSDカードを対象にしてファイルの読み書きができるようになりました。
 rspi_mmcドライバはChaNさんが開発したFatFs(ファイルシステム)と合わせて使用してください。
ドライバはFatFsのサンプルソフトを元にコマンド転送管理をポーリングから割り込みへ、データ転送をCPUによる逐次転送からDTCによる転送に修正しています。
　また今回の更新に合わせてデバイスドライバのレイヤを追加しました。これについては後日に解説します。
# とりあえず使う
 とりあえずGR-SAKURAで使用できるようにします。初期状態ではFatFSとドライバは無効化されています。以下の手順で有効化してください。

## FatFsを有効にする
  FatFsのソースをMakefileのコンパイル対象に追加します。FatFsのMakefileはasp/middleware/Makefile.middlewareにあるので以下のように修正してください。

修正前

```mf:asp/middleware/Makefile.middleware
 MIDDLEDIR = $(SRCDIR)/middleware
 
 #include $(MIDDLEDIR)/fatfs_ff11a/src/Makefile.fatfs
```

修正後(有効化)
include文のコメントアウト(#)を削除してください。

```mf:asp/middleware/Makefile.middleware
 MIDDLEDIR = $(SRCDIR)/middleware
 
 include $(MIDDLEDIR)/fatfs_ff11a/src/Makefile.fatfs
```
## ドライバーを有効にする
### ドライバのソースをコンパイル対象にする
  ドライバのソースをコンパイル対象に追加します。asp/driver/rx_gcc/Makefile.driverを以下の手順で有効化してください。

修正前

```mf:asp/driver/rx_gcc/Makefile.driver
 DRIVER_COBJS =
 		
 #include $(DRIVERDIR)/Makefile.RSPI
 #include $(DRIVERDIR)/Makefile.mmc_rspi
 #include $(DRIVERDIR)/Makefile.mmc_gpio
 #include $(DRIVERDIR)/Makefile.DTCa
```

修正後(有効化)
include文のコメントアウト(#)を削除してください。

```mf:asp/driver/rx_gcc/Makefile.driver
 DRIVER_COBJS =
 		
 include $(DRIVERDIR)/Makefile.RSPI
 include $(DRIVERDIR)/Makefile.mmc_rspi
 include $(DRIVERDIR)/Makefile.mmc_gpio
 include $(DRIVERDIR)/Makefile.DTCa
```

### ドライバとハードウェアを関連づける
  ドライバのターゲット依存部はasp/target/sakura_gcc/target_device以下にあります。asp/target/sakura_gcc/target_device/use_device.hを以下のように修正してください。

修正前

```c:asp/target/sakura_gcc/target_device/use_device.h
  #ifndef TARGET_USE_DEVICE_H
  #define TARGET_USE_DEVICE_H

  //#define USE_RSPI_0
  //#define USE_MMC_RSPI_0
  //#define USE_MMC_GPIO_0
  //#define USE_DTCA_0

  #endif

```

修正後(有効化)
define文のコメントアウト(//)を削除してください。

```c:asp/target/sakura_gcc/target_device/use_device.h
  #ifndef TARGET_USE_DEVICE_H
  #define TARGET_USE_DEVICE_H

  #define USE_RSPI_0
  #define USE_MMC_RSPI_0
  #define USE_MMC_GPIO_0
  #define USE_DTCA_0

  #endif
```

## ユーザ定義パラメータの定義
　FatFsの物理デバイス番号とデバイスドライバを関連づけます。アプリケーションのどこかで以下の配列を定義してください。
FatFs用のサンプルでは定義済みです。

```c:
const dnode_id pdrv_to_dev[1] = {
  DEV_MMC_RSPI0 //drive 1 is mmc_rspi
};
```

# サンプルを動かしてみる
FatFsのサンプルはsample/middleware/fatfsにあります。サンプルのディレクトリで以下のコマンドを実行すればコンパイルができます。
GR-SAKURAのSDカードスロットにカードを挿入して実行してください。

```bash:
(aspのディレクトリ)/configure -T sakura_gcc -A fatfs_sample
make depend
make
```
ビューコントローラの生成から表示までのライフサイクルと、タイミングごとに適した処理まとめ 

##記事起こしのきっかけ
書籍「[よくわかるAuto Layout](http://www.ric.co.jp/book/contents/book_1032.html)」を1周しました。
メモリにとって効率の良いビューの取り扱い方などなど
あれこれ目から鱗の情報があった中でも、特に今までもやもやしてたことがすっきりした気分になった
ビューコントローラが表示されるまでのライフサイクルと
各タイミングで行うのに最適な処理について咀嚼した結果を書き残しておきます。
なお、解釈がずれてるなどおかしな点がございましたらご指摘いただけると嬉しいです。



##ViewController生成～読み込み(1回しか呼ばれない)
### loadView()
　ビューをメモリに載せつつ、**メモリの載せた先(ポインタ)とビューの情報を関連付ける**メソッド。
　Storyboardを使用している場合は、Storyboad上で設定しているレイアウト以外に
　何か特別な初期処理をしなくてはいけない場合以外はオーバーライドする必要がない。
　もしソース上でビューを生成する場合はこれをオーバーライドして処理を書くが、
　普段通りオーバーライドするノリで`super.loadView()`を呼ぶと
　`self.view`が余分に1個生成されてしまうので呼ばない方がメモリを食わない。


###viewDidLoad()
　 上記の`loadView()`完了時に呼ばれる、~~**ビューコントローラが生成された直後に呼ばれる**メソッド~~。
　オーバーライドして利用。

※上記、正しくは「**ビューがロードされた直後に呼ばれる**」でしたので、訂正いたします。
　なお、書籍にもビューが読み込み完了後に呼ばれると記載があったので、私個人の解釈が誤ってました。
　[生成後とロード後の違いの解説も含め、dokunekoさんよりご指摘いただきました。](http://qiita.com/m-yamada1992/items/a8c329319cd3f2e1973d#comment-54bb8a1bd2c7589aed71)
　感謝感謝です。ありがとうございました。

最適な処理の例：

- 生成済みのラベルやビューのプロパティに画面表示時に最初に表示したい値を入れる
- クラス内で使う変数の類を初期化

##表示・レイアウト(条件を満たせば何度でも呼ばれる)

###viewWillApper()
　初回には`viewDidLoad()`の後に呼ばれる、**ビューが画面に表示される直前に呼ばれる**メソッド。
　オーバーライドして利用。
　メモリに表示済みの自ビューがあって、その自ビューが画面に表示される直前であればいつでも呼ばれる。
　初回以外にもホーム画面にいって戻ってくるなどのバックグラウンドから画面を復帰して再表示した際や
　UITabControllerのタブ切り替えで戻ってきた際、遷移先の画面から戻ってきた際などに呼ばれる。
　もろもろの表示のための処理が呼ばれる前のタイミングなので、
　動的な値を設定する処理を書くのに向いている。

最適な処理の例：

- UI~の内容(.textプロパティや.imageプロパティなどなど)を更新し、表示を最新の情報に保つ
- テーブルビューやコレクションビューの内容を更新(`reloadData()`)し、表示を最新の情報に保つ
　

###viewWillLayoutSubviews()
　初回には`viewWillApper()`の後に呼ばれる、**ビューのレイアウトが開始するときに呼ばれる**メソッド。
　オーバーライドして利用。
　初回以外に端末の回転やビューが画面に再表示されたタイミングなど、
　ビューが新しい大きさに変更されたときに必ず呼ばれる。
　表示中一番上の親ビュー(`self.view`)から見て子ビューのレイアウトが確定していないものの、
　画面の回転方向は確定したタイミング。
　レイアウトについて、このメソッドが呼ばれるタイミングで以下の処理を順番に行なう。

　　1. Storyboardなどで設定したマージンや幅・高さ、
　　　ラベルやテキストの内容などの制約(Constraits)情報を更新する
　　　(UIViewContollolerの`updateViewConstraitos()`を呼ぶ)

　　2. 1で更新した制約を元に、親ビューから子ビューへ階層順にUIViewの`updateConstraits()`を呼んで
　　　表示するビューすべてに制約の更新を行き渡らせる

　　3. 1,2で更新された制約を元に、フレーム(実際に画面上に表示される見た目の情報)を更新する
　　　(親ビューから子ビューへ階層順にUIViewの`layoutSubviews()`を呼ぶ)



最適な処理の例：

- ユーザー操作により変更された表示中の値を反映後の状態を元に画面全体のレイアウトを更新する

　※画面全体に何かしたい場合以外は用事がない気がする。
　　特定のビューだけ更新したい場合は、その更新したいビューだけ指定して
　　`updateViewConstraitos()`や`layoutSubviews()`を活用すれば良いのだろうなと思った。

　※回転後にレイアウト再設定の処理もここに書くこともできなくはないが、
　　何せ回転時以外にもたくさん呼ばれるメソッドなので回転時のデリゲートメソッドに仕掛けた方が良い。


###viewDidLayoutSubviews()
　`viewWillLayoutSubviews()`の後に基本セットで呼ばれる、
　**ビューのレイアウトが完了したときに呼ばれる**メソッド。
　オーバーライドして利用。
　生成したビューコントローラ内すべてのレイアウトが確定し、
　レンダリング(画面への描画処理)する準備が整うタイミング。

最適な処理の例：

 書籍に例の記載もなく、特に思いつかなかったので見つかれば更新するかも


###viewDidApper()
　`viewWillApper()`と必ずセットで呼ばれ、初回の場合は`viewDidLayoutSubviews()`の後に呼ばれる
　**ビューが表示された直後に呼ばれる**メソッド。
　オーバーライドして利用。
　`viewDidLayoutSubviews()`で確定したレイアウト情報を元にレンダリングが完了したタイミング。
　ユーザーに見せるための処理はすべて完了しているので、
　アプリが提供するユーザー体験に直接影響のない処理を書くのに向いている。


最適な処理の例：

- ログの送信
- Analyticsのタグ情報を送信
- レビューにご協力お願いします～なポップアップメッセージの表示
- 最新のバージョンのアプリにアップデートお願いします～なポップアップメッセージの表示
Angularjsの$httpでポート指定

実は下記の通り、urlの項目に`:ポート番号`と直接追記するだけ。

`$http.post('http://localhost:8888/index.php')`

使用例

```js:controller.js
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $http) {
  $http.post('http://localhost:8888/index.php');
});
```

js STUDIOには\$httpではなく$resourceの項目にポート指定の方法が書いてあった。
http://js.studio-kingdom.com/angularjs/ngresource_service/$resource
Dockのアプリが終了せず再起動もシステム終了も永遠に始まらないので強制的にログアウトする方法

## ネタ元
- http://apple.stackexchange.com/questions/126761/way-to-logout-a-user-from-the-command-line-in-os-x-10-9

### シナリオ
例えば Battle.net の Launcher を終了させても Dock から消えず、プロセスを殺そうとしてもどこにも現れず、強制終了させようとしても終了してくれず、その状態で再起動やシステム終了を行うとそのままの状態で何も起きないときなどに使う

### 方法
1. `sudo pkill loginwindow` でログアウト
2. 再度ログインして再起動とかシステム終了をする

### 補足
El Capitan にアップグレードしたらこういう旧世紀の Windows みたいな現象が発生するようになった。

### 補足2
こっちはログアウトせずに状況を改善する方法が書いてある。こっちの方が楽だ。

- http://qiita.com/tetsuo_jp/items/e896e4639ff12fe82eb1
- `sudo killall launchservicesd && killall Dock`
TensorFlow入門 - Machine Learningの用語・概念説明

自分なりに勉強したMachine Learningの用語について整理してみました。


------

#Machine Learnnig(機械学習)とは

今までのプログラミングは人間が明示的にパソコンに命令を出して
プログラムを制御してました。
これのことをexplicit learning（明示的学習）と呼びます。


この手法は限界があり、例えばスパムフイルターのような数多いパータンの
スパムを人間が全て明示的にロジックし100%防ぐことは難しいです。（つらいし）
ので「人間がいちいちプログラミングせずにあるデータ＆現象からプログラムが自律的にデータを学習してロジックをつくろうと」1959年Arthur Samuelという方が考案した概念が機械学習というものです。



機械学習の手法には大きく二つのLearning方法があります。

・Supervisored Learning
・Unsupervisored Learning


#Superviored Learning（教師あり学習）とは

事前に学習データがあり、それをガイドに学習を行うこと
学習するデータのことをTraning Data Setと呼びます。

Supervisored Learningの例としては
数億件の囲碁の棋譜データを学習をしxの値に関して最適の一手を打つことができるAlpha goがありますね、

流れをまとめると

> xという値を渡す
> ↓ 
> 事前にセットしたデータをみて学習を行ってaと学習したデータを比較して結果を予測する
> ↓
> 学習して得た結果を返す

例） Aは7時間勉強した -> 学習データを利用して点数を予測　-> Aの75点数を取るはず！と予測する

こんな感じかと思います。


さらにSuperviored Learningにも大きく3週類に分けられます。

・Regression
・Binary classification
・Multi-label classification 


##Regression（回帰）

予測の範囲が広い結果を予測すること

例）勉強した時間を見て何点(0~100)を取るか予測する



##Binary classification（二値分類）

データを学習してtrue/false的な結果を分類すること

例）勉強した時間を見て試験に合格するか不合格するかを予測する
Supervisored Learningの中でも最もシンプルなラーニング方法だと思います。

##Multi-label classification 

データを学習して複数の結果を分類すること

例）勉強した時間を見てA,B,C,D,E,Fなどの単位を予測する


#Unsupervised Learning（教師なし学習）とは


事前に学習データを持つことができずにリクエストの値から学習することです。


Unsupervised Learningの例をあげますと、自律的に類似な記事をグルーピングしてくれるGoogle Newsがあります。
これは事前に類似の記事を予想してデータセットを作ることは難しいので
その都度記事内容をみてデータを学習して類似な記事を表示することになります。



---------

次回はSuperviosrd Learningの中でLinear　Regressionについてまとめたいと思います。
Selenium - node.jsで動かしてみた

# 動かすまでにやった事

1. npmアップデート(参考文献1)
1. nodistインストール(参考文献2)
1. node.jsアップデート(参考文献2)
1. selenium-webdriverインストール(参考文献3)
1. mochaインストール(参考文献3)
1. expect.jsインストール(参考文献3)
1. Selenium Serverダウンロード(参考文献3)
1. Selenium GoogleChrome Driverダウンロード(参考文献3)

# 参考文献
1. [npmのアップデート](http://qiita.com/sugarshin/items/a0a3690508256f3d6895)
2. [Windows10にnodist v0.8.0とNode.jsをインストール](http://okakacacao.wpblog.jp/technology/install-nodist080)
3. [UIテストの自動化！Node.jsとSeleniumでWebアプリのUIテスト環境構築](https://ics.media/entry/5759/2)
Octaveでplotできない -> printしたpngが真っ黒問題を解決した時のメモ

#octaveでplotしようとするとエラーが出る
```
t = [0:0.01:0.98];
y1 = sin(2*pi*4*t); 
plot(t,y1);
```
と簡単なplotテストをしようとすると、terminalにaquaなんてないよ、みたいなエラーメッセージが出てplotできなかったのでgnuplot関係かと思い当たる。
以前gnuplotあたりの設定をいじったり、変な方法でoctaveをインストールした覚えがあるので…

#gnuplotのインストール、というかリンク
そこでterminalからgnuplotを立ち上げようとするも立ち上がらない。
```brew install gnuplot```
すると、もう5.0が入ってて、リンクできてないだけだと言われる。

```brew link gnuplot```
すると、一部のpsファイルがwritableだと言われる。

```sudo chmod o+w```
をするも最初は広く指定しようとしてうまくいかず。
当該ファイルのみに対してchmodしていくとうまくいった。

brew link gnuplotでエラーが出なくなったところで、きちんとインストールできた！

#しかし今度はOctaveでprintができない
```
warning: print.m: fig2dev binary is not available.
Some output formats are not available.
```
というエラーメッセージが出る。
fig2devってなんぞや -> http://android.ohwada.jp/archives/6523
ということでtransfig内に入ってるらしいので
```brew install transfig```
をする。
<img width="450" alt="スクリーンショット 2016-07-18 0.33.41.png" src="https://es-project.qiita.com/files/cf77a3df-901e-9274-a641-66ac5a927439.png">
エラーメッセージも出つつ、homebrew/science/transfig自体ははインストールできた模様。
Octaveでのprintもできるようになった！

#しかしOctaveでprintしたpngは真っ黒
<img width="500" alt="スクリーンショット 2016-07-18 0.09.48.png" src="https://es-project.qiita.com/files/87075775-078c-20ce-954e-41e54eaf82e9.png">

pngにprintしようとするとなぜか真っ黒。
gnuplot上ではできてるのにー

で、調べると
http://stackoverflow.com/questions/28133022/octave-on-osx-yosemite-print-outputs-doc-but-graph-is-solid-black
gnuplotの旧verに戻すと解決されるらしい。

しかし
```brew switch gnuplot 4.6.6```
とかやっても

```
Error: gnuplot does not have a version "4.6.6" in the Cellar.
Versions available: 5.0.0, 5.0.3
```
と言われる。

そこで、
http://qiita.com/ryam/items/066818fd149e68a98797
を参考に
```
brew tap homebrew/versions
brew search gnuplot
brew install gnuplot4
```
でインストールでけた。

```brew link --overwrite gnuplot4```
すると…

<img width="450" alt="スクリーンショット 2016-07-18 0.40.15.png" src="https://es-project.qiita.com/files/a1519288-cabe-ad81-3e04-113bd24e1ee6.png">
Octaveでpngにprintできた！