OmniAICreator/Qiita-1.07M huggingface dataset:
SQL*PlusをMacOSX Marvericsにインストール



http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html

上記のリンク先から以下をダウンロード

- instantclient-basic-macos.x64-11.2.0.4.0.zip
- instantclient-jdbc-macos.x64-11.2.0.4.0.zip
- instantclient-sqlplus-macos.x64-11.2.0.4.0.zip
- instantclient-sdk-macos.x64-11.2.0.4.0.zip


適当な場所にディレクトリを作成して、解凍したファイルを一箇所に格納する。

```
mkdir ~/bin/sqlplus
```

```
unzip instantclient-basic-macos.x32-11.2.0.4.0.zip -d ~/bin/sqlplus/
unzip instantclient-jdbc-macos.x32-11.2.0.4.0.zip -d ~/bin/sqlplus/
unzip instantclient-sdk-macos.x32-11.2.0.4.0.zip -d ~/bin/sqlplus/
unzip instantclient-sqlplus-macos.x32-11.2.0.4.0.zip -d ~/bin/sqlplus/
```


下記の通り、パスを通す。

```
vim ~/.bash_profile

## oracle client
export ORACLE_HOME=~/bin/sqlplus/instantclient_11_2
export PATH=$ORACLE_HOME:$PATH
export DYLD_LIBRARY_PATH=~/bin/sqlplus/instantclient_11_2
export NLS_LANG=American_America.AL32UTF8

```

```
source ~/.bash_profile
```


## rlwrapのインストール

sqplusは、素のままだと↑↓での履歴が出せなかったりするので、rlwrapをインストールする。


```
meganii-air:oracle meganii$ brew install rlwrap
==> Installing rlwrap dependency: readline
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/readline-6.3.8.mavericks.bottle.tar.
######################################################################## 100.0%
==> Pouring readline-6.3.8.mavericks.bottle.tar.gz
==> Caveats
This formula is keg-only, which means it was not symlinked into /usr/local.

Mac OS X provides similar software, and installing this software in
parallel can cause all kinds of trouble.

OS X provides the BSD libedit library, which shadows libreadline.
In order to prevent conflicts when programs look for libreadline we are
defaulting this GNU Readline installation to keg-only.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/readline/lib
    CPPFLAGS: -I/usr/local/opt/readline/include

==> Summary
?  /usr/local/Cellar/readline/6.3.8: 40 files, 2.1M
==> Installing rlwrap
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/rlwrap-0.42.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring rlwrap-0.42.mavericks.bottle.tar.gz
?  /usr/local/Cellar/rlwrap/0.42: 29 files, 312K
```

これで、`rlwrap sqlplus`とすれば、履歴も出せるようになる。


## 参考
[Mac OSXに64ビット版sqlplus(11.2)をインストールしてAmazon RDS for Oracleに接続 - yoshidashingo](http://yoshidashingo.hatenablog.com/entry/2014/08/08/165311)
rails4.1.1でdate_select使う時の注意

### はじめに

* rails4.1.1
* ruby2.1.2
* date_selectを使う時にエラーが出て困ったのでメモ

### 現象

* 以下のコードをviewに書いたらエラーメッセージが出た

`<%= date_select :a, :b %>`

`undefined method 'map' for "translation missing: ja.date.order":String`

* どうやら辞書ファイルがないとかそんな感じのエラーっぽい

### 解決策

`config/locales/ja.yml`に以下を追記

<pre>
  date:
    month_names: [~, 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月]

    order:
      - :year
      - :month
      - :day
</pre>

* 無事日付のセレクトボックスが表示されました、良かった良かった

![スクリーンショット 2015-02-11 22.39.34.png](https://qiita-image-store.s3.amazonaws.com/0/67471/203fc755-50ae-fc9a-43b7-4f888ad2a295.png)



### 参考

> http://akinov.hatenablog.com/entry/2014/09/01/090226
Ruby環境構築

# Ruby環境構築のための手順
## 構築環境
* Mac OS X 10.10.2
* Homebrew インストール済み

## rbenv
**複数バージョンのrubyを使えるようにする**

```
$ brew install rbenv ruby-build
$ echo eval "$(rbenv init -)" >> ~/.zshrc

$ rbenv install --list
$ rbenv install 2.2.0
$ rbenv global 2.2.0
```

## bundler
**Gemをプロジェクトごとに管理するのに使う**

```
$ rbenv exec gem install bundler
$ rbenv rehash
```
gemをインストールする場合は、Gemfileに記載し、`bundle install`を実行する


## Railsのローカルインストール
**Gemfileを作成**

```text:Gemfile
source "http://rubygems.org"
gem "rails"
```

**bundle install実行**
 
```
$ rbenv exec bundle install --path vendor/bundle
```

* --pathを付けることでローカルにインストールできる。  
* 一回 pathを指定すると、その後はpathを指定しなくてもローカルにインストールされる。

## Bundle exec の省略
**binstubsプラグインをインストール**
 
```
$ cd ~/.rbenv/plugins
$ git clone git://github.com/ianheggie/rbenv-binstubs.git
```

**.zshrcにパスを追加**

```zsh:~/.zshrc
export PATH=./vendor/bin:$PATH
```

## 補足
* bundle install --path xxxx のパスを戻す場合

```
$ bundle install --system
```

* bundlerでインストールしたgemがコマンドで見つからない場合

```
$ rbenv rehash
```
Boot2docker on Windowsの環境構築メモ

最近Dockerが流行っているが、手元のWindows PCで手軽にテストできるようにするための、[Boot2Docker](http://boot2docker.io/)というものがあると最近知ったので、ためしに自分のPCに入れてみた。
ただインストールしても面白くない、と思ったのですが、意外と情報が少なくハマった時の調査方法のヒントになればと思い、メモとして残すことにしました。
環境は以下の通りです。

- Windows 7 64bit　on MacBookAir (BootCamp)
- boot2docker
- WordPress 4.0.1

# 1. Boot2Dockerのインストール

[Boot2Dockerの本家サイト](http://boot2docker.io/)からたどってWindows用のインストーラーを入手します。2015年2月11日時点ではv1.5.0が最新のようです。
インストーラーを実行したら、あとはウィザードに従ってインストールを行います。この際、VirtualBoxがインストールされますので、仮想環境やHyper-Vホストでインストールする際はエラーになるかもしれません。ご注意ください。


インストールが完了すると、デスクトップに「Boot2Docker Start」というリンクが作成されますので、そちらを実行します。デスクトップに無い場合、スタートメニューの中にもあります。
実行するとコマンドプロンプトが起動し、VirtaulBoxの起動、Dockerが動くUbuntu仮想マシンの起動、IPの割り当て、SSH接続までが自動で行われます。なお、初回起動時は初期化処理などで結構時間がかかりますので、忍耐強く待ちます。

# 2. Boot2Docker起動に関するトラブルシューティング

もし、正常にプロンプトが表示されない、もしくは一度開いても勝手に閉じてしまうなどの事象が起きた場合は、Windows端末のリソース不足などでDocker仮想マシンが起動できないことが原因の場合があります。その場合は、VirtualBoxの管理画面を開き、手動で仮想マシンの電源をONにしてみてください。エラーが表示されれば解決の糸口になるはずです。
![virtualbox.png](https://qiita-image-store.s3.amazonaws.com/0/60048/e230aefe-a7b9-3adb-fa45-15e43986ba44.png)

逆にリソースが潤沢にある場合は、この画面で仮想マシンに割り当てるリソースを増やすことで動作が快適になります。

また、VirtualBox上の仮想マシンとWindows端末との間はHostOnlyな仮想NICで通信するのですが、何かの拍子にNICが無効化されているせいで仮想マシン起動に失敗することもありました。

# 3. Boot2Docker操作環境のカスタマイズ

Boot2Dockerの起動がうまくいくと、以後はコマンドプロンプトでDockerの操作を行いますが、画面サイズ、文字サイズ、行数などが気に入らない場合があります。その場合は、ウィンドウ左上のアイコンを右クリックし「プロパティ」をクリックします。次の画面で「レイアウト」タブにてウィンドウサイズ、バッファサイズ（履歴数など）の変更が可能です。
![property.png](https://qiita-image-store.s3.amazonaws.com/0/60048/c5014561-0075-2a77-398b-244830339c5d.png)

また、私はまだ試していませんが、[インストール手順の解説サイト](http://docs.docker.com/installation/windows/)にSSH接続するための手順も記載されています。（「Login with PUTTY instead of using the CMD」セクション）コマンドプロンプトが気に入らない方はどうぞこちらを・・・

# 4. Boot2Dockerのバージョンアップ

Dockerが頻繁にバージョンアップされていくのと同じく、Boot2Dockerもバージョンアップされていきます。そこで、Boot2Dockerを最新の1.5.0にバージョンアップしてみた際の手順を記載します。

- 事前にVirtualBoxの管理画面からBoot2Docker用VMを含むすべての仮想マシンを停止しておく
- 最新版Boot2Dockerインストーラーを実行しBoot2Dockerや（必要や好みに応じて）VirtualBoxなどのインストールを実施
- この際、VirtualBoxのインストール（バージョンアップ）にチェックをつけていた場合、一度Windows端末の再起動を実施
- インストール完了後、Windows端末のコマンドプロンプトから以下のコマンドを実行し、Docker実行仮想マシンのバージョンアップを実施

<pre><code>
> boot2docker stop
> boot2docker upgrade
> boot2docker up
</code></pre>

最後の<code>boot2docker up</code>の実行時には、バージョンアップ後の初期化処理に時間がかかります。ここでも忍耐強く待ちます。


以上で、Windows上でのBoot2Dockerのインストールに関するメモは終わります。このメモは2015年2月11日時点の情報をもとにしているので、最新情報は常に本家サイトで確認するようにしてください。
RedisCloudにTerminalで接続

# redis-cliでリモートサーバに接続する方法

```
redis-cli -h REDIS_REMOTE_HOST -p REDIS_REMOTE_PORT -a PASSWORD
```

- REDIS_REMOTE_HOSTとREDIS_REMOTE_PORTとPASSWORDは各自のパラメータで。
- PORTは指定なかったらデフォルトを使う模様
- PASSWORDはある場合に指定。

# herokuのredisCloudで使う場合
- 管理画面のEndpointからホスト名とポートを取ってくる
- パスワードはredis passwordの項目から確認すれば良い
DOMDocumentの書き方 : DOCTYPEの記述, createAttribute(), createElement(), appendChild()

# 概要
PHPを使ってiPhoneのiPhone構成ユーティリティを作成する機会があった。
中身はxml形式なので、DOMImplementation()を使ったが、DOCTYEPの追加や要素(ここでは`<plist version="1.0"/>`の部分)で迷ったため、ここでまとめ。


## 事前準備
PHPのみ

## 目的
Doctypeのあるxmlファイルを出力する
  
## ソース

```php
	$filename = 'output.xml';

	$imp = new DOMImplementation();
	# createDocumentType(作成されるドキュメント型の修飾名, 外部サブセットの公開 ID , 外部サブセットのシステム ID )
	$doctype = $imp->createDocumentType('plist', '-//ABC//DTD PLIST 1.0//EN', 'http://www.hogehoge.com/DTDs/PropertyList-1.0.dtd');
	$profile = $imp->createDocument("", "", $doctype);
	$profile->formatOutput = true; # xmlを整形。アウトプットのインデントが揃う
	$profile->version = '1.0';
	$profile->encoding = 'UTF-8';

	$plist_elm = $profile->createElement('plist');
	$plist_attr = $profile->createAttribute('version');
	$plist_attr->value = '1.0';
	$plist_elm->appendChild($plist_attr);
	$profile->appendChild($plist_elm);
	$fuga_elm = $profile->createElement('fuga');
	$profile->appendChild($fuga_elm);
	$fugafuga_elm = $profile->createElement('fugafuga', 'foo');
	$fuga_elm->appendChild($fugafuga_elm);

	$profile->save($filename); # xmlファイル形式に出力

	print "output complete ! "; # 終了通知

```


## 出力結果

```xml:output.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//ABC//DTD PLIST 1.0//EN" "http://www.hogehoge.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"/>
<fuga>
  <fugafuga>foo</fugafuga>
</fuga>
```
短期間限定でブラウザで認証されるSSL証明書を無料で使う方法

# これは何？
* SSLの証明書を短期間のみ使用したい場合、無料で利用する方法が無いか検討した結果をまとめたもの。

# 結論
* 試用期間をうまく利用する。（14日〜30日間無料）

# 利用サービス

すぐ取得して、試したいので **即日（即時、15分以内に）発行されるものに限り** ます。

| サービス名 | 無料期間 | ブラウザ認証（※1） |申請方法|
|-----------|------------|------------|------------|
| [digitrust](https://www.digitrust.jp/source/product/trial.shtml) | 30日間 |     ｰ | HPのSTEP1のリンクから |
| [Symantec](http://www.symantec.com/ja/jp/page.jsp?id=ssl-trial)| 14日間 | ×（ブラウザにルート証明書をインストールしないとダメな模様） | HPのページ中間のバナーより |
| [ecocert](https://www.ecocert.jp/index.php/product/product_trial)|30日間|○（タイミングによって認証エラーが出ることがありました）|HPの申し込みボタンから|
※1 : ブラウザ認証とは、Chrome / Firefox / Safariでアクセスした際に証明書でエラーが出ずに、利用出来るかどうか。（正式な呼び方がありましたら教えて頂けると幸いです）

# その他
* 無料SSLがあるようですが、色々と手続きが複雑だったので上のサービスを利用しました。
参考サイト：http://qiita.com/k-shogo/items/870b6d3939dd08da2de4
* SSLの鍵の作り方は、[Elastic Load Balancing の SSL 証明書](http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html)を参考にしました。
小さなお友だちの為の　MacOsXでBASIC #12 媒介変数でリサージュ曲線


#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#BASIC
名前は「beginner's all-purpose symbolic instruction code」（「初心者向け汎用記号命令コード」を意味する）の頭字語である。

18歳以上はLinux,Macでc,Javaやりましょう。GCCを使えるようになりましょう。
14歳から18歳はOS問わず、IDEを使って、言語は何でもいい。
10歳から14歳は lua or BASIC おまけでscratch
10歳未満はコンピュータなんかやらんで良し。言語能力、身体能力を鍛えましょう。

#前提
http://qiita.com/ggggnonaka/items/8cf3b069594e684f9c0e
を御覧ください。

#リサージュ曲線の媒介変数表示
まずはこんな感じ。結構簡単ですね。
x=cos(t)
y=sin(2*t);

##12.BAS
```bas:12.BAS
SET WINDOW -8,8,-8,8
DRAW GRID
FOR t=-8 TO 8 STEP 0.001
   PLOT LINES: 4*cos(t), 4*sin(2*t);
NEXT t
END
```


##実行結果
おお！きれいに描画できてます。
![kobito.1423659335.874087.png](https://qiita-image-store.s3.amazonaws.com/0/33317/9b6ac7d7-2762-d774-a758-3c39ab3d6673.png "kobito.1423659335.874087.png")
FuelPHPとSails.jsのHTTPメソッド毎処理について

タイトルほど内容はヨクナイです。。。

業務でFuelPHPを使い始めて、意外と簡単にAPIっぽいものが作れるなあと思い、Nodeでも「わかりやすい」FWを使えるようにしようと思い、Sailsを触り始めた際のメモ。(MEAN.ioはVerUPを機にそっとしてます)

# 大前提
FeulPHPは「規約より設定」、Sails.jsは「設定より規約」と、思想が真逆ですよ。

# HTTPメソッド毎の制御について
FuelPHPはわかり易くて個人的には良いと思ってますが、Sails.jsでは明示的に設定してやらないといけないっぽい？(そういう規約だから規約にしたがって設定しなさいね、って理解してる)
恐らく次のようなコントローラの書き方になっていくはず。

##http：//hogehoge.com/test/にアクセスした際
###HTTPメソッドに関係なく処理
※前後のおまじないは省略してます。

```Fuel.php
public function action_index(){
  return $this->response('hello');
}
```

```Sails.js
function(req, res){
  return res.send('hello');
}
または
index: function(req, res){ 略 }
```

###HTTPメソッド毎に処理を分ける
```Fuel.php
public function post_index(){
  return $this->response('posty');
}
public function put_index(){
  return $this->response('puty');
}
または
routeコンフィグに書いて指定したりする
```

```Sails.js
function(req, res){
  index:
    switch (req.method.toUpperCase()){
      case 'POST':
        return res.send('posty');
        break;
      case 'PUT':
        return res.send('puty');
        break;
    }
}
またはrouteコンフィグでアクションを分けて指定する
'post /': 'TestController.index',
'put /': 'TestController.sample',
```

コントローラで都度判定いれるのはスマートじゃない気はするけど、単純な判定だけなのでFuelPHPより処理は早いんだとは思うので、悩ましい。routeコンフィグにひたすら書いていくのは個人的にイマイチだと思うので前者でしていくのかなあ。。。

##ルーティング動作の違い
FuelPHPの場合はURLのエイリアス的なイメージで使えるのに対してSails.jsはスタティックな動作しかしないっぽい？

http：//hogehoge.com/test/の処理をsampleコントローラで処理させる場合

```Fuel.php
'test' => 'sample'
```

```Sails.js
'/test': 'SampleController.index'
他
```

Sails.jsは他にも書き方があるっぽいのですが、アクションは指定しないといけないようです。
FuelPHPの場合はコントローラ内でメソッド判定可能なので、上記設定でsampleコントローラで各メソッドを扱えるようになります。Sails.jsではやっぱりアクションで判定処理をいれてやる必要があります。

なので、FuelPHPチックにメソッド毎に制御したい場合は鼻からコントローラ(アクション)内で判定させておくのが吉っぽいです。
しかし、判定いれない限り(オプションで自動判定？をオフにしない前提)GETだろうがPOSTだろうがindex.html返せちゃうってのを気持ち悪いと思うのは自分だけでしょうか・・・
Raspberry Piで温度計を作る、あとブラウザで見れるようにする　第2回






#単体での動作

##SDカードのフォーマット
マックなので、横のスロットに突っ込んで、ディスクユーティリティーからフォーマットを実施する。

##ブートメディアの作成
http://www.raspberrypi.org/downloads/
からダウンロード。
チュートリアルを探るとRASPBIANを使用しているが、
NOOBSを選択する。
たぶんHDMIを使用するならこっち使え、な気がする。

解凍したらSDカードに解凍した全てをコピーする。
起動時にインストーラーが起動するわけです。

##OSの起動
従って、以下が必要になる
 
1.HDMIケーブル
 2.モニタ
 3.MicroUSBケーブル

とりあえず全部パイラズに刺したらUSB電源供給を開始（パイラズのブートは電源供給）
OSのセットアップのアレが起動する。
ここで以下が必要になる。
1.USBマウス

インストールはよくわからんからRASPBIANだけにする。
左上のinstallで開始。
ちなみにNOOBSは起動時shiftおしながらで再度入れる

およそ２０分で終了

インストールの終了後、キーボード入力を求められる
心が折れる。
やっすいUSBキーボードを買いに行く。
その前にクラムボンのフリーライブを見て怒りを鎮める。

##OSの初期設定
初回起動時にコンフィギュレーション画面がでるのでいかの設定を....しません。
速攻Finish選択して終了
rubyとpythonがデフォってるのは確認。バージョンは2.7と1.9やっぱ安定版
キーボードが英語版なのでそのうち直す、、と思う。

##無線LANでの接続
とりあえず、無線LANのアレをUSBポートに差し込む

```console
$ sudo lsusb
```
デバイスがあることを確認、ドライバとかいらんのだね。

```console
$ ip link show
```
自動で認識しているけどIPが割り振られてない。
どこのwifiに繋がるか決めてないから当たり前やで
設定するんやで。

ゆとり世代はコンソールなんて使わない。GUIでどうにかする。

```console
$ startx
```

Menu→Preferences→Wifi Configurationを選択
ダイアログが出るので、メニューからNetwork→Addを選択
設定ダイアログが出るので自宅wifi設定を打ち込む。
Menu→internet→WebBrowserを選択。

アドレスバーにグーグルのアドレスでも突っ込む。（www.google.co.jp）
グーグルが見れる。やっぱちと重いかもしんまい

【今日のラズパイさん】
![IMG_1327.jpg](https://qiita-image-store.s3.amazonaws.com/0/51009/541d5b91-051b-1337-b713-931097638925.jpeg "IMG_1327.jpg")

５穴攻めですね

##本日の反省
 + model B+の性能は必要なかった（今USB三発使ってるけど）
 + 本体はAmazonより公式もしくは秋葉原のが安いと思う
 + 画面は必要とないシステムを作るのでリモートアクセス環境を作った方が楽(負担額の軽減にもなる。)
 + どっか転職させてください。
 + クラムボンて最高ですよ。
VideoLan DotNet を使う

以前から、ActiveXを使いVLCで再生をしていたが、[VLC on WPF](http://qiita.com/Gnico/items/5ecd8a6f66fa98e3e91c)を試してみた。
WinFormはあまりよい動きではないが、WPFは良い感じで動く。
しかし、位置指定をさせようとするとできなかった。
WPFはまだハードルが高くWinFormで試したが、[CodePlex](http://vlcdotnet.codeplex.com/wikipage?title=Wpf)にあるVideoLan DotNetはPositionがあり、位置指定できる。
良く調べると、CodePlexのほうが、ActiveXと同じようなことができることが分かった。多少、GitHubの方より面倒だが、安定しかも多機能のようだ。
実際CodePlexのVideo DotNetとAcitiveXを置き換え、気が付いた点を列記する。

## Length
LengthはDotNetには見当たらなかったので、DurationというTimeSpanのプロパティがありこれをLengthに変換した。
TimeSpanをTickes変換して、10000で割るとActiveXのLengthと同じになる。
## PlayListIndex
再生位置を取得するものを見つけられなかったので、Mediasから取得するものを作成した。
下記のような拡張メソッドを作成した。

```csharp
public static int ToPlaylistIndex(this VlcControl con)
{
    for (int i = 0; i < con.Medias.Count; i++)
    {
        if (con.Medias[i].State == Vlc.DotNet.Core.Interops.Signatures.LibVlc.Media.States.Playing)
            return i;
    }
    return 0;
}
```
## PlayListの移動
下記のような拡張メソッドを作成した。

```csharp
public static void NextPlaylist(this VlcControl con)
{
    con.Next();
}

public static void PrevPlaylist(this VlcControl con)
{
    con.Previous();
}

```

## 動作の安定
サンプルの通り、Program.csで Dllのパスを指定していたが、何度か繰り返し実行すると不安定になった。
そこで、動画を表示するWindowのコンストラクタでライブライの指定と初期化を行うことにして、Windowを閉じるタイミングで、VlcContext.CloseAll()を実行するようにした。FormClosingでCloseAllするだけではだめで、DialogResultにセットする前で、CloseAll()を実行することで安定した。
PythonでmW <-> dBmを計算する

# 概要
python でmW <-> dBm変換が出来る計算式

## 事前準備
使用するのはmathのみなので、Pythonが入っていれば、特になし

## ソース


```py

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import math

#mW -> dBmへ変換
def mw_to_dbm(value):
    return 10 * math.log10(value)

#dBm -> mWへ変換
def  dbm_to_mw(value):
    return math.pow(10, value/10)


# test_code
test_mw = 50 #mw
print str(mw_to_dbm(test_mw)) # => 16.9897000434


test_dbm = 16.9897000434 #mw
print str(dbm_to_mw(test_dbm)) # => 50.0000000005


```
protractorでFirefoxのプロファイルを指定する

```js
const PATH_TO_PROFILE = 'PATH_TO_YOUR_FIREFOX_PROFILE'; // Don't use `~/`, `$HOME` or such.

const FirefoxProfile = require('protractor/node_modules/selenium-webdriver/firefox/profile').Profile;
const firefoxProfile = new FirefoxProfile(PATH_TO_PROFILE);

const config = {
  capabilities: {
    // 'firefox_binary': PATH_TO_FIREFOX_BIN,
    'firefox_profile': firefoxProfile
  }
};

module.exports.config = config;
```
Ruby でちゃんとオブジェクトの型チェック ( 整数 ) してみた

最初、引数の数字 (整数) チェックを下記みたいに `integer?` を使ってたけど、 `nil` とか `String` とか渡ってきたら、
`NoMethodError` なっちゃうことに気付き、ちゃんとチェックしてみた。

```rb
def hoge(sample_number)
  if sample_number.integer?
   # hogehoge
  end
end
```

`is_a?` や、`instance_of?` を使えば型チェックできる。

違いは、`is_a?` はレシーバが属するクラスの親クラスやインクルードしているモジュールを klass に指定しても true が返るけど、
`instance_of?` はレシーバが直接的に属するクラスを指定したときだけ true を返す

数値型のクラス構成は下記のようになっている

```
Numeric        # 数値クラスの親クラス
  ├ Integer    # 整数の親クラス
  │   ├ Bignum # 大きな整数
  │   └ Fixnum # 整数
  └ Float      # 浮動小数点数
```

上記を踏まえて、console で実行してみる

```
1000.class
=> Fixnum < Integer

# is_a?
1000.is_a?(Integer)
=> true
1000.is_a?(Fixnum)
=> true
1000.is_a?(Bignum)
=> false

# instance_of?
1000.instance_of?(Integer)
=> false
1000.instance_of?(Fixnum)
=> true
1000.instance_of?(Bignum)
=> false
```

今回は単純に整数値をチェックしたかったので、`is_a?(Integer)` を使うことにした。

ちなみに、`is_a?` は `kind_of?` というエイリアスがあるので、もし `kind_of?` のメソッドを知らなくても、
メソッド名からオブジェクトの種類をチェックしているのかと予想がつくので、そっちを使う方がいいかも。

```rb
def hoge(sample_number)
  if sample_number.kind_of?(Integer)
   # hogehoge
  end
end
```

参考URL
[is_a?,kind_of?](http://ref.xaio.jp/ruby/classes/object/kind_of)
[instance_of](http://ref.xaio.jp/ruby/classes/object/instance_of)
[Bignum、Fixnumの境界値](http://jampin.blog20.fc2.com/blog-entry-124.html)
LaravelでMAMPのMySQLに接続する

Laravelをローカルで起動した時にMAMPのMySQLに接続できなくてはまった。

## 起動している環境情報の確認
localかproductionか確認する。
```
php artisan env
```

## データベース接続情報を設定する
localであればapp/config/local/database.phpを
productionであれば、app/config/database.phpを編集する。

これをconnections=>mysqlに追加する。

```
'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
```

下記のように追加。

```
'connections' => array(
		'mysql' => array(
			'driver'    => 'mysql',
			'host'      => 'localhost',
			'database'  => 'forge',
           'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
			'username'  => 'forge',
			'password'  => '',
			'charset'   => 'utf8',
			'collation' => 'utf8_unicode_ci',
			'prefix'    => '',
		),
	),
```
ERUTASOをcentosで

https://github.com/sgymtic/sl これを CentOS 6.5 で動かしたときのメモ。

```bash:
$ sudo yum -y install ncurses-devel

$ git clone https://github.com/sgymtic/sl.git

$ cd sl

$ make

$ ./erutaso
```

**参考**

- [curses.hが無い - どうでもいい情報置き場](http://d.hatena.ne.jp/hiroshi128/20110620/1308551814)
- [備忘録 - Android PlatformをCentOSでビルド - キノコの自省録](http://d.hatena.ne.jp/kinokorori/20101109/1289313616)
MacでComposerのインストールからLaravelのインストールまで

## Composerのインストール
Composerのダウンロードしてパスを通す

```
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/bin/composer
```

## Mcryptをインストール
```
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew install mcrypt php55-mcrypt
```

## Laravelのインストール
プロジェクトを作成したいディレクトリに移動し、下記コマンドを実行する

```
composer create-project laravel/laravel プロジェクト名 --prefer-dist
```

## 起動確認
```
cd プロジェクト名
php artisan serve
```
swift勉強しててふむふむ思った事３【closure】

ふむふむ２
http://qiita.com/jumbOS5/items/517c4f7e24a9d43bd43d#comment-b8ff365f19cec5bb8d7c
takabosoft さん、worthmine さん
ご指摘いただきありがとうございました！

## クロージャ
javascriptを書いていたときに本当に理解できなくてつらかった思い出の品。
今の理解としてはクロージャとは・・・
>クロージャとは、関数内のローカル変数以外の名前解決が、呼び出し時のスコープではなく宣言時のスコープによって行われるもの。またそのような機能を持った関数

という説明が一番しっくり来る。

### swiftでの記法
これは最初見たとき違和感しかなかった・・・
でも慣れるとjsよりはマシとも思うようになった。

```
{ (パラメータ,..) -> 戻り値の型 in
    文
}
```

### サンプルコード

```
// １ 引数にクロージャを渡す例
func hikisuuGaClosure(a:Int,b:Int,clousure:(Int,Int)->Int){
    println(clousure(a,b))
}
var kaeritiGaTasu:(Int,Int)->Int = { (a : Int , b : Int) -> Int in
    return a + b
}
var kaeritiGaKakeru:(Int,Int)->Int = { (a : Int , b : Int) -> Int in
    return a * b
}
hikisuuGaClosure(3, 3, kaeritiGaTasu)
hikisuuGaClosure(3, 3, kaeritiGaKakeru)

// ２ よくあるjavascriptのサンプルで良く見るクロージャ的な使い方、
// グローバルスコープのように扱える
func closureSample(a:Int)->( )->Int{
    var ans = 1
    return { ( ) -> Int in
        ans += 1
        return ans
    }
}

var f = closureSample(2)
println(f()) // 2
println(f()) // 3
println(f()) // 4

```

swiftでよく出てきそうなのは上の二つだと思う。

あと[Alamofire](https://github.com/Alamofire/Alamofire/blob/master/Source/Alamofire.swift#L606)や[Spring](https://github.com/MengTo/Spring/blob/0464f5562a2b1126865ab6d48052f34d6e90e1de/Spring/Misc.swift#L44)のコードを見ているとclosureをちょいちょい使っている。
まねできる部分を探そう・・・


## 参考記事
[Swift のクロージャが面白い](http://qiita.com/uasi/items/0a72bb444002471d832f)
[[JavaScript]　猿でもわかるクロージャ超入門　１　問題](http://dqn.sakusakutto.jp/2009/01/javascript.html)
[JavaScriptでクロージャ入門](http://qiita.com/takeharu/items/4975031faf6f7baf077a)
[swift closure - codable](http://blog.codable.co.jp/entry/2014/11/11/221844)
gitのブランチ名を時間順(新しい順)に並べて一覧する

[参考: Show git branches by date - useful for showing active branches](http://www.commandlinefu.com/commands/view/2345/show-git-branches-by-date-useful-for-showing-active-branches)

上のサイトのものをアレンジして、aliasに登録

```git:.gitconfig
[alias]
  brt = "! f() { for k in $(git branch -r $@ | sed 's/^..//; s/ .*//'); do  echo "$(git log -1 --pretty='%Cgreen%ci %Cblue(%cr)%Creset ' $k) $k" ;  done | sort -r; }; f"
  blt = "! f() { for k in $(git branch $@ | sed 's/^..//; s/ .*//'); do  echo "$(git log -1 --pretty='%Cgreen%ci %Cblue(%cr)%Creset ' $k) $k" ;  done | sort -r; }; f"
```

#### 実行結果

リモートのブランチ一覧 (brt)

```
$ git brt
2015-02-11 11:21:00 +0100 (43 minutes ago) origin/master
2015-02-11 11:21:00 +0100 (43 minutes ago) origin/HEAD
2015-02-11 08:41:44 +0100 (3 hours ago) origin/4-2-stable
2015-02-11 01:46:58 -0800 (77 minutes ago) origin/use-kwards-in-benchmark
2015-02-10 08:56:38 -0700 (19 hours ago) origin/4-1-stable
2015-01-29 14:38:45 -0200 (13 days ago) origin/3-2-stable
2015-01-18 23:36:57 -0500 (3 weeks ago) origin/better_minitest_runner
2015-01-10 16:00:17 -0800 (4 weeks ago) origin/fix_nested_transactions_for_realz
2015-01-06 17:09:25 -0300 (5 weeks ago) origin/4-0-stable
```

ローカルのブランチ一覧 (blt)

```
$ git blt
g blt
warning: refname 'v3.2.14' is ambiguous.
2015-02-11 11:21:00 +0100 (49 minutes ago) master
2013-07-22 12:05:41 -0300 (1 year, 7 months ago) v3.2.14
```

---

類似の投稿
http://qiita.com/yocifico/items/6e58480baa2bf696148d
http://qiita.com/quoth/items/b9542e8f4892d419bdfd

alias名は brt -> branch remote time, blt -> branch local time のつもり

自分のところでは問題なく動くが、.gitconfig内のダブルクォートが少し気になる。
shellの種類や設定によっては動かないかも。
LaravelのビルトインサーバーをプライベートIPアドレスで起動する

ローカルエリアネットワーク（LAN）につながる他のパソコンやスマホから確認したい場合

```
php artisan serve --host=192.168.24.75 --port=8989
```
で起動すれば、

http://192.168.24.75:8989

でアクセスできるようになる。
小さなお友だちの為の　MacOsXでBASIC #11 log関数


#記述する動機
私、とある専門学校でPGを教えています。はや８年。いまだにSEもやってます。
学生さんたちに読んでもらうために書いているのですが、悩めるプログラマ、悩めるSE、悩める教育関係者にも何かのヒントにはなると思い、あえて公開していきたいと思います。全て実例です。個人名は秘密！！

#BASIC
名前は「beginner's all-purpose symbolic instruction code」（「初心者向け汎用記号命令コード」を意味する）の頭字語である。

18歳以上はLinux,Macでc,Javaやりましょう。GCCを使えるようになりましょう。
14歳から18歳はOS問わず、IDEを使って、言語は何でもいい。
10歳から14歳は lua or BASIC おまけでscratch
10歳未満はコンピュータなんかやらんで良し。言語能力、身体能力を鍛えましょう。

#前提
http://qiita.com/ggggnonaka/items/8cf3b069594e684f9c0e
を御覧ください。

#log
対数
BASICには，
10を底とする対数関数LOG10(x，
2を底とする対数関数LOG2(x)
e =2.71828…を底とする対数関数LOG(x)が用意されています。

##11.BAS
```bas:11.BAS
10 DEF f(x)=log(x)
20 SET WINDOW -8,8,-8,8
30 DRAW GRID
40 FOR x=0.01 TO 8 STEP 0.001
50    PLOT LINES: x,f(x);
60 NEXT x
70 END
```


##実行結果
おお！きれいに描画できてます。
![スクリーンショット 2015-02-11 20.10.32.png](https://qiita-image-store.s3.amazonaws.com/0/33317/3aac9ffc-aafb-c08f-a226-8b70a92b57cb.png "スクリーンショット 2015-02-11 20.10.32.png")
Ruby でクレジットカード番号をチェックをする

決済を扱うシステムで、クレジットカードを扱うことがあるけど、カードの有効性チェックは
どの会社も、数円/1件とかで処理料がかかってしまう。

なので、ユーザーが入力したクレジットカード番号を、そのまま連携先の決済会社に
オーソリ ( 有効性チェック ) を流してしまうと、デタラメな (あるいは入力ミスした)番号分、
余計に処理料がかかるので、カード番号のチェックを入れたかったので、チェックした。

これで不正な番号は防げる！
ただし、有効期限切れとか、カードが停止してるとかは決済会社にオーソリ投げないとわからないので、
あくまでも、変なカード番号分の処理料を減らすためだけ。

クレジットカード番号は、Luhnアルゴリズムというチェックサム方式を利用しているので、
そのロジックを ruby でちぇっくするだけ。

これを使って無駄なお金を使わないようにしよう！

### サンプルソース

```rb
  def valid_credit_card_number?(card_number)
    return false if card_number.blank?
    even = false
    sum = card_number.reverse.split(//).inject(0) do |s, d|
      d = d.to_i
      if even
        d = d * 2
        s -= 9 if d > 9
      end
      even = !even
      s + d
    end
    sum % 10 == 0
  end
```

ちなみに、@jnchito さんから教えていただきましたが、
自前でやらなくても、Gem があるみたいです。

https://github.com/tobias/credit_card_validator

かなりのスグレモノで、上記のクレジットカード番号のチェックだけでなく、カード番号からカード会社まで判別してくれます。
しかも CLI までついちゃってます。
DBにカード番号を登録するときに、一緒にカード会社も入れてたら後から使えるかも。
※ ただし、カードの仕向け先 ( 実際に決済処理を行う会社 ) は別なので注意

@jnchito さん、ありがとうございます。

### 参考URL
http://blog.panicblanket.com/archives/821
http://ja.wikipedia.org/wiki/Luhn%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
http://www.gizmodo.jp/2011/01/post_8367.html
テスト用のカード番号は下記で
http://www.webcreatorbox.com/tech/creditcard-test-numbers/
Ghost脆弱性対策


# 簡単な説明
- 最新のglibcを搭載したLinuxの新しいOSは、この脆弱性の影響を受けない
- glibc 2.2 から 2.17 までのバージョン：要対策
- `Amazon Linux (glibc-static-2.17-55.87.amzn1)`は未対策
- `Amazon Linux (glibc-static-2.17-55.93.amzn1)`は対策済み

▼参考記事
http://blog.trendmicro.co.jp/archives/10818
http://blog.serverworks.co.jp/tech/2015/01/28/glibc_ghost/

# 対策の流れ
## 1. glibcバージョン確認
```
$ yum list installed | grep glibc

glibc.x86_64                         2.17-55.87.amzn1             @amzn-main
glibc-common.x86_64                  2.17-55.87.amzn1             @amzn-main
glibc-devel.x86_64                   2.17-55.87.amzn1             @amzn-main
glibc-headers.x86_64                 2.17-55.87.amzn1             @amzn-main
```

バージョン`2.17-55.87`は要対策。
なお、updateによりタイムゾーンが書き換わる恐れがあるため、事前に「タイムゾーンの確認」をしておくと安全。

```
$ cat /etc/localtime
TZif2UTCTZif2UTC
UTC0

$ cat /etc/sysconfig/clock
ZONE="UTC"
UTC=true
```

## 2. glibcアップデート

```
$ yum clean all
$ sudo yum -y update glibc
```

- `yum clean all`により事前にキャッシュ削除する
- update後は、「glibcバージョン確認」＆「タイムゾーン確認」

```
$ yum list installed | grep glibc

glibc.x86_64                         2.17-55.93.amzn1             @amzn-updates
glibc-common.x86_64                  2.17-55.93.amzn1             @amzn-updates
glibc-devel.x86_64                   2.17-55.93.amzn1             @amzn-updates
glibc-headers.x86_64                 2.17-55.93.amzn1             @amzn-updates

$ cat /etc/localtime
TZif2UTCTZif2UTC
UTC0

$ cat /etc/sysconfig/clock
ZONE="UTC"
UTC=true
```

- バージョンは上がっている。タイムゾーンは変化なし。

## 3. 脆弱性チェック
- 3-1. 脆弱性チェックプログラム作成
  - ファイル名：`GHOST.c`
- 3-2. コンパイル
- 3-3. 実行

### 3-1. 脆弱性チェックプログラム作成
```sh
cat > GHOST.c << EOF
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define CANARY "in_the_coal_mine"

struct {
  char buffer[1024];
  char canary[sizeof(CANARY)];
} temp = { "buffer", CANARY };

int main(void) {
  struct hostent resbuf;
  struct hostent *result;
  int herrno;
  int retval;

  /*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
  size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
  char name[sizeof(temp.buffer)];
  memset(name, '0', len);
  name[len] = '\0';

  retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);

  if (strcmp(temp.canary, CANARY) != 0) {
    puts("vulnerable");
    exit(EXIT_SUCCESS);
  }
  if (retval == ERANGE) {
    puts("not vulnerable");
    exit(EXIT_SUCCESS);
  }
  puts("should not happen");
  exit(EXIT_FAILURE);
}
EOF
```

### 3-2. コンパイル
```sh
gcc GHOST.c -o GHOST
```

### 3-3. 実行
```sh
./GHOST
```

- 実行結果が`not vulnerable`　→　脆弱性対策済
- 実行結果が`vulnerable`　→　要対策

~~※「glibcアップデート後、インスタンスの再起動を必ずすること」と色々なサイトに載っているが、上記プログラムの実行結果を見ると、再起動しなくても脆弱性対策がなされることが確認できた。~~

※OSの再起動をする際は、他に影響がないか事前に調べて行いましょう。
（例えばwebサーバであれば最低限ロードバランサから切り離した方がいい、など）
atom editorでstyle.lessを編集しても変わらない時にやってみること


割りと最近だとエディタ部分がShadow DOMなのでスタイルが効かないことがある模様

```style.less
::shadow{
  .line {
    .trailing-whitespace{
      background-color: #F92672;  
      color: white;
    }
  }
}
```

こんな具合で`::shadow`でくくってやると無事色がつく


##### 参考
https://github.com/atom/atom/blob/master/docs/upgrading/upgrading-your-ui-theme.md
Cassandraの内部的な処理の流れ


# 実行環境
```
$ cassandra -v
2.1.0

$ cqlsh --version
cqlsh 4.1.1
```

# 処理の流れ
Cassandraにinsert文でデータを入れる時、

```
insert into カラムファミリ名 (key名, カラム名1, カラム名2, ...) values (キー値, 値1, 値2, ...);
```

のようなクエリを書きます。この時内部的な処理の流れは、

- 1. クエリを解釈
- 2. 実行
- 3. SSテーブルを作る
- 4. SSテーブルを読み込み

となります。

- Cassandraが扱いやすいデータの形は「バイナリデータ」
- Cassandraが持っているバイナリデータ ＝ SSテーブル
- とあるデータ量のinsertにかかる時間
  - SSテーブル作成：1〜2時間
  - SSテーブル読み込み：数秒
- SSテーブル拡張子例：tar.gz
- クエリのinsertには時間がかかる
  - 予めSSテーブルを作成し、それを読み込ませるようにすればだいぶ高速化出来る
  - SSテーブルを読み込ませるツール：SSテーブルローダー
第八回 Unityもくもく会に参加してきました

何をするのも自由とのことでしたので、3DのMecanimを学習しました

* 最初にAssetStoreから[The Earthborn Troll](https://www.assetstore.unity3d.com/jp/#!/content/13541)をダウンロード
![AssetStore.png](https://qiita-image-store.s3.amazonaws.com/0/35973/f319a00c-3bb8-d0d5-8085-e849e996fa9f.png "AssetStore.png")

* ImportしたAssetは最初にRigをLegacyからHumanoidにすることでMecanimで扱えます
![Rig.png](https://qiita-image-store.s3.amazonaws.com/0/35973/53a26d7a-ac63-8a15-b89d-2cacfa0c22a7.png "Rig.png")


* トロルについているアニメーションをメカニムで設定したらこんな感じになりました

![mecanim.png](https://qiita-image-store.s3.amazonaws.com/0/35973/b7bcbe75-f95d-77b3-af5f-f85fa1f4977c.png "mecanim.png")

# 学習したことまとめ

* 「Any State」はジョーカーな役割で、繋いだStateは何処からでも呼び出せる。キャラが死んだ時やダメージのState変更に利用
* 「Sub-State Machine」は試してみたけどStateが隠蔽されるので今回利用はやめといた
* WalkからRunへの移行はBlend Treeを使いSpeedで変化するようにした
* Create -> Animator Override Controllerが便利で、作成した「Animator Controller」のAnimationをすげ替えて使える。下の画像にあるAnimation部分を差し替えることで共通化出来ます。

![AnimatorOverride.png](https://qiita-image-store.s3.amazonaws.com/0/35973/451e70b1-903f-8d42-78b8-d3c90dabf545.png "AnimatorOverride.png")


以上。結果報告でした。
MSBuild単体でWebApplicationをビルドする

CIサーバーなど、VisualStudioをインストールせずにMSBuild単体でビルドしたい。

MSBuild単体でWebApplicationをビルドするとエラーがでる。

```bash
$ msbuild WebApplication.sln

...

Build FAILED.

"C:\Users\TestUser\Desktop\WebApplication\WebApplication.sln" (default target) (1) ->
"C:\Users\TestUser\Desktop\WebApplication\WebApplication\WebApplication.csproj" (default target) (2) ->
  C:\Users\TestUser\Desktop\WebApplication\WebApplication\WebApplication.csproj(84,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.17
```

「Microsoft.WebApplication.targets が無い」と言っているので、VisualStudioがインストールされているPCからコピーしてやれば良い。場所は以下。

```
C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications
```

そうすると通る。

```bash
$ msbuild WebApplication.sln

...

Done Building Project "C:\Users\TestUser\Desktop\WebApplication\WebApplication\WebApplication.csproj" (default targets).
Done Building Project "C:\Users\TestUser\Desktop\WebApplication\WebApplication.sln" (default targets).

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.78
```

でもこれ・・・
ライセンスが必要なんじゃ？

http://azure.microsoft.com/ja-jp/documentation/articles/cloud-services-dotnet-continuous-delivery/
にも
「インストール済みの Visual Studio の Microsoft.WebApplication.targets ファイルをビルド サーバーにコピーします。」
とかあるけど。

参考
http://stackoverflow.com/questions/3980909/microsoft-webapplication-targets-was-not-found-on-the-build-server-whats-your
gnuplot でプロットに好きな色を使う

# 目的
`gnuplot` では出力するターミナルにもよりますが，個別に設定しなければプロットの色は自動的に選択されます．デフォルトで選択される色はいわゆる原色ばかりです．シアン `#00ffff`，黄緑 `#00ff00`，黄色 `#ffff00` などはディスプレイ上ではかなり視認性が悪くあまり使いたくありません．特にプレゼンテーションの資料などでこのような色を使うことは推奨されません．プロットの色は積極的に設定していきたいものです．<sup>[1](#1)</sup>

```gnuplot
set xrange [0:2*pi]
set sample 500
set key outside
plot for [n=1:7] sin(n*x/2.) t sprintf("sin(%dx/2)",n) lw 2
```

![default.png](https://qiita-image-store.s3.amazonaws.com/0/46396/80672ee5-8df7-ee18-0e64-b0fe4aaab5b0.png "デフォルトのカラー on wxt terminal")

# 方法
`gnuplot` (>4.2) ではプロットする色をかなり柔軟に設定できます．例えば以下のように入力することで，それぞれ `#ff0000` `#ff80ff` の色でプロットできます．

```gnuplot
plot sin(x) w line linecolor rgb "#ff0000", \
     cos(x) w line lc rgb "orchid"
```

あらかじめ定義されている色の名前については `show colorname` と入力することで一覧表を得ることができます．手元にインストールされている `gnuplot-4.6 patchlevel 6` では 112 の色が定義されていました．

色の設定をより簡単にするためには 16 進での入力より 10 進での入力をしたいところです．また，作成したプロット全体でカラーの統一感を出したい場合などは RGB よりも HSV で色を入力したくなります．`gnuplot-4.2` 以上であれば `sprintf` が使えると思われるので，以下のような関数を定義しておくと便利です．

```gnuplot:color.gp
### convert (r,g,b) to #RRGGBB
rgb(r,g,b) = sprintf("#%02x%02x%02x",r%256,g%256,b%256);
### convert (h,s,v) to #RRGGBB
hsv_hi(h) = floor((h%361)/60.)%6
hsv_f(h) = (h/60.)-floor(h/60.)
hsv_p(s,v) = floor(v*(1.-(s/255.))+0.5)
hsv_q(h,s,v) = floor(v*(1.-(s/255.)*hsv_f(h))+0.5)
hsv_t(h,s,v) = floor(v*(1.-(s/255.)*(1.-hsv_f(h)))+0.5)
hsv(h,s,v) = hsv_hi(h)==0?rgb(v,hsv_t(h,s,v),hsv_p(s,v)):\
             hsv_hi(h)==1?rgb(hsv_q(h,s,v),v,hsv_p(s,v)):\
             hsv_hi(h)==2?rgb(hsv_p(s,v),v,hsv_t(h,s,v)):\
             hsv_hi(h)==3?rgb(hsv_p(s,v),hsv_q(h,s,v),v):\
             hsv_hi(h)==4?rgb(hsv_t(h,s,v),hsv_p(s,v),v):\
             rgb(v,hsv_p(s,v),hsv_q(h,s,v))
###
```

この関数を使うと以下のようにプロットの色を変更できます．

```gnuplot
set xrange [0:2*pi]
set sample 500
set key outside
plot for [n=1:7] sin(n*x/2.) t sprintf("sin(%dx/2)",n) lw 2 \
     lc rgb hsv(180+15*n,200-20*n,255)
```

![hsv.png](https://qiita-image-store.s3.amazonaws.com/0/46396/c6840a50-ac38-0e8e-f7f2-e80a632f6615.png "HSV で指定したカラー on wxt terminal")

僕は上記の関数を `color.gp` という名前で `~/.gnuplot.d/` というフォルダに保存． `gnuplot` の起動時に読み込まれる `~/.gnuplot` に以下の記述を追加して毎回読み込まれるようにしています．

```gnuplot:.gnuplot
load '~/.gnuplot.d/color.gp'
```
毎回指定するのが面倒であれば `.gnuplot` に色指定を書き込んでしまうのも 1 つの方法です．

```gnuplot:.gnuplot
set style line 1 lc rgb "royalblue"
set style line 2 lc rgb "goldenrod"
set style line 3 lc rgb "dark-spring-green"
set style line 4 lc rgb "purple"
set style line 5 lc rgb "steelblue"
set style increment user
```

# 参考資料
- [Document of gnuplot 4.2](http://gnuplot.sourceforge.net/docs_4.2/gnuplot.html)
- [technotype- RGBとHSVの相互変換](http://www.technotype.net/tutorial/tutorial.php?fileId={Image%20processing}&sectionId={-converting-between-rgb-and-hsv-color-space})
- [GNUPLOT Version 5.0 Release Notes](http://gnuplot.sourceforge.net/ReleaseNotes_5_0.html)

<a name="1">[1]</a>: `gnuplot-5.0` では[デフォルトのカラーが変更になったようです．](http://gnuplot.sourceforge.net/ReleaseNotes_5_0.html)
virt-managerが動作するイメージを作成した

## 作った

* [tukiyo3/virt-manager](https://registry.hub.docker.com/u/tukiyo3/virt-manager/)

```bash:起動
docker run -it -d -p 5900:5900 tukiyo3/virt-manager
```

## boot2dockerで利用する場合

* portfowardに5900を追加。

![portforward.png](https://qiita-image-store.s3.amazonaws.com/0/25728/b97985ce-3333-c54e-6ed6-7f14ee5f593a.png)

```bash:
docker run -it -d -p 5900:5900 -v $HOME/.ssh:/opt/ssh tukiyo3/virt-manager
```

VNC接続を行い、.sshをコピーすると便利。

![cp_ssh.png](https://qiita-image-store.s3.amazonaws.com/0/25728/a7f91473-ba22-9a6c-2bac-285b7ff1cdea.png)

## VNCクライアントにて接続

![01.png](https://qiita-image-store.s3.amazonaws.com/0/25728/2fa7c56a-a771-41a1-a1bd-3946719b5ff9.png)

![1.png](https://qiita-image-store.s3.amazonaws.com/0/25728/587c1a76-4d7a-f704-f174-bdb7dfba79db.png)

![2.png](https://qiita-image-store.s3.amazonaws.com/0/25728/27ded61f-6b88-c717-cb5c-d5fcc816c69f.png)

* 接続先のサーバにてlibvirtdが起動済みであること

![3.png](https://qiita-image-store.s3.amazonaws.com/0/25728/61f3785f-81b6-0a0e-b96d-cc2ddd49a3b0.png)

![4.png](https://qiita-image-store.s3.amazonaws.com/0/25728/15bc28f9-8f97-5039-d0c9-2c1c08684a2a.png)

![5.png](https://qiita-image-store.s3.amazonaws.com/0/25728/ec048d2c-f4ec-adf1-9da9-83a6d12ea822.png)

![6.png](https://qiita-image-store.s3.amazonaws.com/0/25728/f36a39ed-6213-8d72-fca3-babcaf946837.png)

あとはいつも通り

## 経緯

* [WebVirtMgr](https://www.webvirtmgr.net/)が低機能なのとインストールがとても難しかった。
* [jeffreywildman/homebrew-virt-manager](https://github.com/jeffreywildman/homebrew-virt-manager)のビルドが通らなかった
  * [install error · Issue #9 · jeffreywildman/homebrew-virt-manager](https://github.com/jeffreywildman/homebrew-virt-manager/issues/9#issuecomment-73618720)を使えば通るかも
* [ehazlett/virt-manager](https://registry.hub.docker.com/u/ehazlett/virt-manager/dockerfile/)や[perlstalker/docker-virt-manager](https://registry.hub.docker.com/u/perlstalker/docker-virt-manager/dockerfile/)も微妙だった
* VNCサーバ内蔵の一個作っておきたいよねってところ。
Docker 1.5のstatsを使って、コンテナの名前で一覧を表示する



普通に```docker stats $(docker ps -q)```とかやるとコンテナのIDで表示されてしまうので、下記コマンドで名前から一覧を表示する。


```
sudo docker stats $(sudo docker ps -q | xargs -L1 sudo docker inspect | jq ".[0].Name" | sed 's/"//g' | sed 's/\///')
```
【Cassandra CQL・MySQL】コマンドマニュアル


# 1. 言葉の意味
CassandraとMySQLの言葉の対応関係は以下。

|Cassandra|MySQL|
|:--:|:--:|
|キースペース (keyspace)|データベース (database)|
|カラムファミリ (columnfamily)|テーブル (table)|

また、cqlshはCQLクライアントであり、cqlshを使うことでCassandraをSQLライクに使うことが出来ます。

- CQL：Cassandra Query Language
- SQL：Structured Query Language

# 2. キースペース作成/削除/選択
▼Cassandra

```
create keyspace キースペース名;
drop keyspace キースペース名;
use キースペース名;
```

▼MySQL

```
create database データベース名;
drop database データベース名;
use データベース名;
```

- Cassandra：`use キースペース名;`の`;`は省略不可
- MySQL：`use データベース名;`の`;`は省略可能

# 3. カラムファミリ作成/削除/確認
▼Cassandra

```
create columnfamily カラムファミリ名(key名 データ型 PRIMARY KEY, カラム名1 データ型, カラム名2 データ型, ...);
drop columnfamily カラムファミリ名;
describe columnfamily カラムファミリ名;
```

▼MySQL

```
create table テーブル名 (カラム名1 データ型, カラム名2 データ型, ...);
drop table テーブル名;
desc テーブル名;
```

- 確認コマンドのみ、MySQLの方が簡易

# 4. データの取得/挿入/更新

▼Cassandra

```
select カラム名 from カラムファミリ名;
insert into カラムファミリ名 (key名, カラム名1, カラム名2, ...) values (キー値, 値1, 値2, ...);
update カラムファミリ名 set カラム名1 = 値1, カラム名2 = 値2, ... where キー名 = キー値;
```

▼MySQL

```
select カラム名 from テーブル名;
insert into テーブル名 (カラム名1, カラム名2, ...) values (値1, 値2, ...);
update テーブル名 set カラム名1 = 値1, カラム名2 = 値2, ... where カラム名 = 値;
```

- Cassandra：where文で指定できるカラム名は、「key名」or「インデックス貼ったもの」のみ
- Cassandraでbetweenは使えない　→　`>=`と`<=`を併用してbetweenを作る

※下記、2015/06/21追記※
# 5. 一覧表示
▼Cassandra

```
describe keyspaces;
describe tables;
```

- `describe`は`desc`と省略可能

▼MySQL

```
show databases;
show tables;
```
あとからNULL制約をいれる


すでに作成してあるテーブルのカラムに、あとからNULL制約をつける際に若干はまってしまったのでメモ。

migrationファイルを追加して、

```ruby:db/migrate/20150210031823_change_status_of_diaries.rb
class ChangeStatusOfDiaries < ActiveRecord::Migration
  def self.up
    change_column_null :diaries, :status, false
  end

  def self.down
    change_column_null :diaries, :status, true
  end
end
```

実行すると、

```bash
% bundle exec rake db:migrate                                                                                                                                                                                                               
== 20150210031823 ChangeStatusOfDiaries: migrating ========================
-- change_column_null(:experiences, :status, false)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::NotNullViolation: ERROR:  column "status" contains null values
: ALTER TABLE "diaries" ALTER "status" SET NOT NULL/home/vagrant/test/db/migrate/20150210031823_change_status_of_diaries.rb:3:in `up'
ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR:  column "status" contains null values
: ALTER TABLE "experiences" ALTER "status" SET NOT NULL
/home/vagrant/test/db/migrate/20150210031823_change_status_of_diaries.rb:3:in `up'
PG::NotNullViolation: ERROR:  column "status" contains null values
/home/vagrant/tryjob/db/migrate/20150210031823_change_status_of_diaries.rb:3:in `up'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
```

MySQLを使っていたときはこれでいけた気がしたんだけどな。PostgreSQLだとこのあたり厳密なんですかね。

結局、`change_column_null`の引数の最後にデフォルト値を設定すればいけました。

```ruby:db/migrate/20150210031823_change_status_of_diaries.rb
class ChangeStatusOfDiaries < ActiveRecord::Migration
  def self.up
    change_column_null :diaries, :status, false, 0
  end

  def self.down
    change_column_null :diaries, :status, true, nil
  end
end
```
LPICレベル1 技術解説セミナー

## カーネルとは
* Linuxシステムはシェアハウス
	* カーネル・・・オーナー
	* カーネルによって外観、内装が決まる（一軒家やマンションなど
	* カーネルのアップグレードは機能が増えること（リフォーム
 	* Windowsはカーネルだけ入れ替えれない（完全リフォーム
	* Linuxはカーネルを変えるだけ
* シェアハウスを使用するユーザ
	* 管理人・・・スーパユーザ
		*  rootユーザ
		*  カーネルでも逆らえない（windowsはカーネルが一番上
		*  カーネルを変える事ができる
		*  何でもできるから一番やばい
		*  住人に指示をして必要な所だけrootがやると良い
	* 住人・・・一般ユーザ
	* 職人・・・特殊ユーザ
		* 住み込みで管理する人

## シェルとは
* シェルプロンプト
* ユーザがシェアハウスに対して何かしたい
	* この命令をシェルが受けとりカーネルに渡して実行
* シェルは事細かに記憶しサポートをする ⇒ 住人のマネージャのような振る舞い
	* ユーザの命令をカーネルに通達
	* ユーザーから見てカーネルを包んでいる貝殻(shell)のように見える事からそう名付けられた
* !!・・・直前
* !47・・・47番目の履歴にあるコマンド実行
* シェルをうまく使いこなす事でlinuxとうまく付き合える
* シェルはこのキーを押されたら何を返すかの一覧を持っている
	* bash
	* キーボードのコードをマッチしたものをシェルが返す
	* UNIXはキーボード一覧が違う・・・Cシェル

## コマンドとは
* Windowsにもshellが居る
	* マウスを使って実行する
* LinuxはサーバーOSと使われる率が99%
	* GUIとかは無いと思え
	* コマンドを使って命令をする
* コマンドが実行される順序
	1. lsと打ち実行
	2. シェルが受け止める
	3. シェルがlsというアプリケーションをシェアハウスに探しに行く
	4. シェルがlsを起こして仕事させる
	5. 見つからなければCommand not foundと愚痴ってくる
		6. 見つかりませんでした・・・探しに行ったけど見つからない
		7. なんで見つからなかったかを考える
		8. どこを探すのか伝える
		9. printenv PATH | sed -s "s/:/\n/g"
	* lsを例にコマンドを分解
		* コマンドはシェアハウスのどこかに潜んでいる
		* カレント・・・今居る部屋
		* 部屋になにがあるかリストアップ
		* linuxは真っ暗...電気がついていない部屋でlsでライトアップ!
		* GUIは目の前にある.linuxはシェルに確認してもらわないといけない
		* 少し違った命令を出すこともできる⇒オプション
		    * -から始まるもの
		    * 1字につき一つのオプション
		    * 引数を添えるものもある
		    * --2つ並ぶ・・・単語を意味する
		    * -1つでは何故単語は駄目なのか・・・一文字ずつ解説するから
	            * 疑問を持つ事で理解度が高まる
* コマンドの前に#があるのは、ルートの状態
* コマンドの前に$マークがあるのは、一般ユーザの状態

## ユーザとグループ
### グループ
* グループにはサブ、メインがある	
	* メイン・・・プライマリ
	* サブ・・・セカンダリ
	* 必ず一つのプライマリグループに属さなければいけない
* グループはスーパーユーザのみ作成可能	
* グループに属しているだけで違いは全くない
	* プライマリはフェイク(自分のみ)、グループ管理するのはサブのみ

### ユーザ
* まずは自分と同じ名前のグループが作られるので、他のグループはサブで管理して行く
* /etc/passwd
	* 7つの情報が区切られている 
	* name: x :1000:1000:Name Name:/home/name:/bin/bash
	* 利用者の名前:パスワードフィールド:ユーザID:グループID:コメント:ユーザのホームディレクトリ:ログインシェル（マネージャ）
		* パスワードフィールドはxになってるのは、このファイルにパスワードを記録しないという意味
		* 元々記録されていたがセキュリティのため2つのファイルに分けることになった
		* それがshadowパスワードシステム
			* passwdではなく、shadowファイルにパスワードが記録される
			* Redhat8ぐらいから導入された
		* ユーザID
			* 500番台は一般ユーザ
		* グループIDはプライマリのみ
* ユーザ登録
	* ユーザはスーパーユーザのみ作成可能
	* パスワード設定しながらuseraddできるが履歴に残るのでだめ
	* useradd -u 1500 uhuhu
		* 住人の番号を指定できる、次は1501になる.前の番号が空いていても1501
		* グループ番号も連動して1500になる
	* useradd -u 1200 -s /bin/sh nhunhu
		* ログインシェルを指定
			* マネージャ(キーオペレーション)で選ぶ
	* cat /etc/shadow ここにパスワード
		* !!はパスワード未設定
		* パスワード未設定はシェアハウスに入れない
		* passwd nhunhu
			* passwdはパスワードを追加ではなく、変更するコマンド
			* 8文字以上じゃないとだめ・・・暗号化の仕組みにより強度が増す
				* 1週間おきにパスワード変えるのがおすすめ
			* 暗号化された物同士で認証する
		* passwdコマンド
			* rootは全てのユーザ使える
			* 一般ユーザは自分のみ使える

## パーミッション
* ファイルとディレクトリのみに設定
* パーミッションは10文字で表現
	* 1文字目はファイルかディレクトリかリンク 
	* 最初の3文字所有者に対する権限
	* 2番目の3文字分はグループに対する権限
	* 3番目の3文字分は第三者に対する権限
* lsに色のオプションがデフォルトで組み込まれてしまっている
	* 無効にもできる・・・\ls
	* 色で覚えない方がいい
	* \ls -F や \ls -l で分かる
* r属性・・・読み込み属性
* w属性・・・書き込み属性
	* 削除権限も持つ
* x属性・・・実行属性
* chown・・・ファイルやディレクトリの所有者を変更する
* chgrp・・・ファイルやディレクトリのグループを変更する
* chmod・・・ファイルやディレクトリのアクセス権を変更する
* SELinux
	* 有効にするとトラブルシュートの妨げになるため、構築のときは無効がいい
	* タグをつけることでそのタグが使えるところでしか使用できなくなる
ExifToolでIllustratorファイルのバージョンを調べる方法

ExifTool は Illustrator ファイルのメタデータ抽出に対応していますが、デフォルトのままでは「保存バージョン」「作成バージョン」ともに必要な情報を取得できません。これをゲットできるようにする方法です。

##ExifTool のダウンロード
[http://www.sno.phy.queensu.ca/~phil/exiftool/](http://www.sno.phy.queensu.ca/~phil/exiftool/) 
インストーラーではなく、トップページ冒頭のリンクからダウンロードします。必要なものは「exiftool」と「lib」です。この 2 つが同階層にあれば exiftool は動作します。

##PostScript.pm を編集する
lib > Image > ExifTool > PostScript.pm をプレーンテキストエディタで開いて編集します。この記述を変更・追加することで、必要な情報をゲットできるようにします。

###Creator（保存バージョンの取得）
Creator タグで「保存バージョン」を取得します。デフォルトですでに取得可能なのですが、

```lang:PostScript.pm
Creator     => { Priority => 0, Writable => 'string' },
```
Illustratorのepsファイルは、v9以降からCreatorの記述が2箇所に出現し、保存バージョンは1番目ではなく2番目であることはよく知られています。デフォルトでは1番目の方を返してくるので、正確な保存バージョンを取得できません。そこで、`Priority => 0`を`1`に書きかえます。

```lang:PostScript.pm
Creator     => { Priority => 1, Writable => 'string' },
```
こうすることで、2箇所あった場合に2番目の方を返すようになります。

**追記**
検証の結果「epsファイルの2箇所にあるCreatorは2番目が保存バージョン」は誤りで、「1番目＝作成バージョン、2番目＝互換バージョン」と捉えた方が一貫性を持って混乱なく把握できることが分かりました。

なお、aiファイルのCreatorは1箇所のみで、互換バージョンです。これをそのまま保存バージョンと見なすのも不正確になります。

###AI8_CreatorVersion（作成バージョンの取得）
本当の作成バージョンが AI8_CreatorVersion タグにあることは、これもよく知られています。ExifTool はこのタグをデフォルトでは取得しません。そこで追記します。

```lang:PostScript.pm
Creator     => { Priority => 1, Writable => 'string' },
AI8_CreatorVersion     => { Priority => 0 },
```
これで AI8_CreatorVersion を返してくるようになります。

##exiftool コマンドの使い方
* **exiftool -s** 　　　　　　タグと値の一覧を取得できます
* **exiftool -T -Creator**　　Creator の値を取得できます
* **exiftool -T -AI8_CreatorVersion**　　AI8_CreatorVersion の値を取得できます

タグを複数並べると、一度で取得できます。値はタブ区切りで返ってきます。

* **exiftool -T -FileType -CreatorTool -Creator -AI8_CreatorVersion**
UIButtonの同時押し禁止

mikanのアプリで沢山ボタンがある画面にて、複数のボタンを同時に押すと大量の誤動作がありました。
UIButtonを複数使う時には、同時押しを禁止しておくと誤作動がなくなります。

同時押し禁止は、以下の１行を付けたすだけで出来ます。

```
// ボタン1, 2, 3 がある時
button1.exclusiveTouch = YES;
button2.exclusiveTouch = YES;
button3.exclusiveTouch = YES;

//Viewの中の全てのボタンについて
for (UIView * button in [myView subviews]) {
    if([button isKindOfClass:[UIButton class]])
        [((UIButton *)button) setExclusiveTouch:YES];
}
```

参考というかほぼ同じ：[UIButtonの同時押し禁止](http://blog.nodoa.info/?p=51)
[stackoverflow](http://stackoverflow.com/questions/24157900/objective-c-how-to-set-exclusive-touch-for-all-uibuttons-on-the-whole-app)
JavaのTOMLライブラリ比較


# 忙しい人のまとめ

今はまだ使わない方がいいかも。

# ライセンス等比較

|#|名前|作者|Mavenで依存性解決して使える（野良repo）|Maven Centralに上がってる|ライセンス|
|--:|:--|:--|:--:|:--:|:--|
|1|[jtoml](https://github.com/agrison/jtoml "jtoml")|@agrison|○|×|MIT|
|2|[jtoml](https://github.com/asafh/jtoml "jtoml")|@asafh|×|×|Apache2|
|3|[toml4j](https://github.com/johnlcox/toml4j "toml4j")|@johnlcox|×|×|Apache2|
|4|[toml4j](https://github.com/mwanji/toml4j "toml4j")|@mwanji|○|○|MIT|

同じ名前のが2つずつあってカオス。
この時点で4しか使う気になれんけど、一応全部試してみる。

# やること

TOML公式のTOMLのサンプルをファイルに保存して、それをパースして値を取ったりしてみる。
https://github.com/toml-lang/toml#example

検証コードはGroovy Scriptで実施。


## 各ライブラリ共通点

- TOMLを読み込んでgetStringやらgetDateやらで値を取り出す

```groovy
@Grab('com.moandjiezana.toml:toml4j:0.3.1')
import com.moandjiezana.toml.Toml

Toml toml = new Toml().parse(new File("sample.toml"))
println toml.getString("servers.beta.ip")
```

- Datetimeがうまく処理出来ない。公式サイトの説明では、RFC 3339形式となっているが、`1979-05-27T00:32:00.999999-07:00`はどのライブラリでもパースエラーになった。せめて公式サイトに載ってる例くらいは処理出来て欲しい


# 気になったところ

### toml4j(by mwanji) 

最初の比較表でも分かるとおり、Maven Centralに上がっている。これにコントリビュートするのが一番楽そう。

### jtoml(by agrison)

唯一シリアライズが出来るのが特徴。しかし、それを実行するとエラーになる。。

### その他

Datetime含んでいるだけでエラーになってつらい。

```groovy
@Grab('com.leacox:toml4j:1.0.0-SNAPSHOT')
import com.leacox.toml4j.Toml

println Toml.from('dob=1979-05-27T07:32:00-08:00').getAsString('dob')

// exception occurred!
```