OmniAICreator/Qiita-1.07M huggingface dataset:
Vagrantで手軽にLaravel開発環境をつくる（Scotch Boxを使用）

VagrantのScotchboxをつかって、ごくごく簡単なLaravelの開発環境を作ったのでメモです。

（2016-06-16追記あり）
メモリの割当ですが、当初はubuntuのスワップ領域を割り当てる方法で記述しておりましたが、Vagrantfileでメモリ割り当てられることがわかりましたので追記しました。

#前提
* Vagrantインストール済み
* LaravelをComposer Create-Projectでインストールする方法です。（インストーラー使うと簡単にできそうなんですが、どこかにCreate-Projectの方がよいって書いてあったので・・・）
* エラーメッセージとか見ながら場当たり的に解決してきたので、もっと良い方法あるかも？

#ScotchBoxをインストール
VagrantでScotchBoxを構築します。

```
$ git clone https://github.com/scotch-io/scotch-box.git my-project
$ cd my-project
$ vagrant up
```

* git clone した後にプロジェクトフォルダにVagrantfileができますので、必要があれば適宜変更してください。
* プロジェクトフォルダにできる publicフォルダが公開フォルダになります。

#ScotchBoxのUbuntuにスワップ領域を作成

*こちらの作業は下記に追記したVagrantfileの編集作業を行う場合は必要ありません。*

インストールしたScotchBoxでそのままcomposer Create-Project するとメモリ不足ってでてエラーになりますので、スワップ領域を設定します。

`$ vagrant ssh`
で、ScotchBox環境にログインしてから下記を実行

```
$ sudo mkdir /var/swap/
$ sudo dd if=/dev/zero of=/var/swap/swap0 bs=2M count=2048
$ sudo chmod 600 /var/swap/swap
$ sudo mkswap /var/swap/swap0
$ sudo swapon /var/swap/swap0
```
スワップ領域の容量は適宜で。
この分野があまり詳しくないので下記に記しますが参考にした情報をそのまま使いました。

`$ sudo vi /etc/fstab`

最後に、Ubuntu起動時に自動的にスワップ割り当てるようにします。

# （追記）スワップ領域の割当をしなくても、Vagrantfileでメモリ割り当てられることがわかりました。
割当メモリの増強ですが、上記のスワップ領域の作業をしなくても、Vagrantfileの編集で可能でした。こちらの作業の方がvagrantの機能に沿っているのでオススメかと思います。

デフォルトのVagrantfileに以下のように追記します。

```
Vagrant.configure("2") do |config|

    config.vm.box = "scotch/box"
    config.vm.network "private_network", ip: "192.168.33.10"
    config.vm.hostname = "scotchbox"　#　ホスト名になりますので、適宜書き替え
    config.vm.synced_folder ".", "/var/www", :mount_options => ["dmode=777", "fmode=666"]
    
    #　ここから
    config.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--memory", "2048"]
    end
    #　ここまでを追記
end
```

上記で、vagrant up すれば、割当てられるメモリの容量が増えます。
２０４８のところは適当に増やしたり減らしたりしてください。
これをやっておけば、スワップの割当作業は必要ありません。

# Laravelのインストール
上記までやったら、インストールできます。

ScotchBoxにログインした状態で

```
$ cd /var/www/public
$ $ composer create-project laravel/laravel --prefer-dist
```

* /var/www/public はScotchBoxのデフォルトの公開フォルダです。Vagrantfileを変更している人は適宜変更してください。

# phpMyAdminのインストール

開発環境なのでphpMyAdminもインストールしておくと便利です。

```
$ sudo apt-get install phpmyadmin
$ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
$ sudo a2enconf phpmyadmin
$ sudo /etc/init.d/apache2 reload
```

Ubuntu公式のphpMyAdminインストールのところのままでインストールできました。参考までに。


#参考とさせていただいたサイト
https://box.scotch.io/
http://qiita.com/niiyz/items/cbd503398299818a9e8a
https://help.ubuntu.com/community/phpMyAdmin
http://protean.cc/vagrant-scotch-box
http://qiita.com/scleen_x_x/items/f3fc492bcbf0f6c2896c

#さいごに
以上です。いつもお世話になっているQiitaなので、記事を提供したいと思って書きました。
Laravelの開発環境が手軽につくりたくて、やってみた事を備忘録に記しました。
個人ブログにまとめてたんですが、せっかくなので、まとめて記事にしてみました。

英語が得意ではなくてScotchBoxのドキュメントとかコミュニティとかに、もっと良い方法載っている気がするのですが。。。
技術英語 > [I assure you] I am telling you the truth. 

@ Star trek Voyager > エピソード Eye of the needle.

なかなか信用しない相手に対して、ジェイウェイン艦長が言った言葉
> I assure you I am telling you the truth.

<hr>
http://ejje.weblio.jp/content/assure
> 〈人に〉〔…を〕保証する，請け合う 

<hr>
https://github.com/timroes/aXMLRPC
> A lightweight Java XML-RPC client for the use with Android. Since there is absolutely no dependency to any android specific library (and <font color=red>I assure, that</font> it never will have any),
mosquitto_sub -d でデバッグログにタイムスタンプ欲しい場合


<a href="https://github.com/shirou/mqttcli">mqttcli</a>で-dオプション使うのが吉かと思いますが、、、

## loggerを使ってみた

```
$ mosquitto_sub -h ブローカー -u ユーザー名 -P パスワード -t "トピック" -d | while read line
> do
>   logger -i $line
> done
```

## 出力されるログ

```
Jul 31 05:46:58 hostname username[19270]: Client mosqsub/19179-hostname sending CONNECT
Jul 31 05:46:58 hostname username[19271]: Client mosqsub/19179-hostname received CONNACK
Jul 31 05:46:58 hostname username[19272]: Client mosqsub/19179-hostname sending SUBSCRIBE (Mid: 1, Topic: topicprefix/device/#, QoS: 0)
Jul 31 05:46:58 hostname username[19273]: Client mosqsub/19179-hostname received SUBACK
Jul 31 05:46:58 hostname username[19274]: Subscribed (mid: 1): 0
Jul 31 05:46:58 hostname username[19275]: Client mosqsub/19179-hostname received PUBLISH (d0, q0, r0, m0, 'topicprefix/device/spam/keepalive/', ... (0 bytes))
Jul 31 05:46:58 hostname username[19276]: Client mosqsub/19179-hostname received PUBLISH (d0, q0, r0, m0, 'topicprefix/device/spam/beacon/Ham', ... (33 bytes))
Jul 31 05:46:58 hostname username[19277]: f3
```
Ruby on Rails 基礎編ノート

Progateの学習資料が秀逸だったのでメモ

＊フレームワーク＝雛形 作業を大幅に省略できる

＊ターミナル＝コマンドでパソコン操作できる場合のツール

＊Rails new XXX アプリケーション作成=たくさんのフォルダとファイルを自動生成

＊基本的にappというフォルダを中心に編集する

＊コントローラ：URL(リクエスト)に応じて処理をするためのアクションを書く

＊ビュー：ブラウザに表示するHTMLを書く

＊アドレスバーにアドレスを入力＞enter=リクエスト>コントローラの1つのアクションに送信され、そこで処理が行われる。アクションは対応するビューを探し出しブラウザにビューの内容を送信

＊rails generate controller コントローラ名 アクション名 > コントローラ自動生成・対応したビューのファイルの自動生成

＊コントローラのhome_controller.rbには、リクエストに対応するアクション(処理)が書かれている。def top end = アクション ビューのtop.html.erb には、topページに表示されるHTML

＊ルーティング：ページを表示するためには、コントローラ＋ビュー＋ルーティング(経路選択）が必要
URLリクエストに応じて、どのコントローラのどのアクションで処理するかを決める仕組み

＊ルーティング設定：config/routes.rb get 'URL' => 'コントローラ名#アクション名' で指定したURLが、ユーザーの入力したURLと一致した場合=>で指定したコントローラのアクションにリクエストが送信される

＊ブラウザ＞ルーティング＞コントローラ(アクション)>ビュー>ブラウザ

＊Gatebookのaboutページ > localhost:3000/about

＊Railsでは、アクションはファイル名を手掛かりにビューを探すので、ビューのフォルダ名とファイル名は非常に重要。ビューのフォルダ名とファイル名は、それぞれコントローラ名とアクション名とに対応させる必要がある。 つまり フォルダ名＝コントローラ名 ファイル名＝アクション名

＊ルーティングファイル
 Rails application.routes.draw do
get '/about' => 'home#about'
end

＊ブラウザ＞localhost:3000/top > ルーティング get'top'=> 'home#top' > homeコントローラ def top end > home/top.html.erb
Ruby - 呼び出されているmethod名を検知してrefactoring

#やりたいこと

- 呼ばれているメソッド名を検知して、それをメソッド内部のリファクタリングに利用したい。

#メソッド名検知

- [`__method__`](http://ruby-doc.org/core-2.2.2/Kernel.html#method-i-__method__): メソッド名をシンボルとして返す。
- [`__callee__`](http://ruby-doc.org/core-2.2.2/Kernel.html#method-i-__callee__): エイリアスメソッド名をシンボルとして返す。

#Refactoring例

- 複数の類似メソッドを[alias_method](http://apidock.com/ruby/Module/alias_method)を利用して一つにまとめる。
- 呼ばれたメソッド名に応じて内部の処理を微調整する。
- [Devise+OmniAuthで複数プロバイダ認証(Qiita風)](http://qiita.com/mnishiguchi/items/e15bbef61287f84b546e#omniauth_callbacks_controller)を実装する際にうまく活用できた。

## Before

```rb
class OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def facebook
    user = User.from_omniauth(request.env["omniauth.auth"])
    if user.persisted?
      set_flash_message(:notice, :success, kind: "Facebook") if is_navigational_format?
      sign_in_and_redirect user, event: :authentication
    else
      session["devise.user_attributes"] = user.attributes
      redirect_to new_user_registration_url
    end
  end

  def twitter
    user = User.from_omniauth(request.env["omniauth.auth"])
    if user.persisted?
      set_flash_message(:notice, :success, kind: "Twitter") if is_navigational_format?
      sign_in_and_redirect user, event: :authentication
    else
      session["devise.user_attributes"] = user.attributes
      redirect_to new_user_registration_url
    end
  end
end
```

## After

```rb

class OmniauthCallbacksController < Devise::OmniauthCallbacksController

  def callback_for_all_providers
    provider = __callee__.to_s  # エイリアスメソッド名を読みこみ、文字列として利用。

    user = User.from_omniauth(request.env["omniauth.auth"])
    if user.persisted?
      sign_in_and_redirect user, event: :authentication
      set_flash_message(:notice, :success, kind: provider.capitalize) if is_navigational_format?
    else
      session["devise.user_attributes"] = user.attributes
      redirect_to new_user_registration_url
    end
  end

  alias_method :twitter, :callback_for_all_providers
  alias_method :facebook, :callback_for_all_providers
end
```
The Matrix

以下の投稿をもとに制御文字も出力するようにしてみました。

Windows でもマトリックスごっこがやりたくて
http://qiita.com/opengl-8080/items/c4d780927d4ad44dd3e1

```bat:matrix.bat
@echo off

set SELF=%~n0

setlocal enabledelayedexpansion
  if not exist ".\%SELF%.txt" (
    >&2 echo %SELF%: file not found: %SELF%.txt
    exit /b 1
  )
  
  set i=0
  for /f "tokens=*" %%i in (.\%SELF%.txt) do (
    set v[!i!]=%%i
    set /a i+=1
  )
  
  color 02
  
  :BOL
    set /a i=%RANDOM%%%256
    call set /p t=%%v[%i%]%% < NUL
  goto BOL
endlocal
```

なお、 Linux のシェルなどを利用してあらかじめ <font color="#ff0000">matrix.txt</font> を作成しておく必要があります。

```
$ for i in {0..255}; do echo -e "\\x`printf '%02X' ${i}`" >> matrix.txt; done
```

matrix.txt を作成したらエディターなどで開き、 cmd.exe が処理できない文字（NULL，<，=，>，|，0x81 ... 0xA1，0xE1 ... 0xFF）は半角空白に置換しておきます。

実行結果は以下をご覧ください。

![matrix.png](https://qiita-image-store.s3.amazonaws.com/0/29814/35414e4f-b93c-cf3c-afbf-0ba7fe47a262.png)
deployd REST API覚書

#前提条件
* エンドポイントは`http://localhost:9999/data`
* dateフィールドにエントリの登録日時が文字列で入っているものとする

#REST API
* ソート(昇順) http://localhost:9999/data?{ "$sort" : { "date" : 1 } }
* ソート(降順) http://localhost:9999/data?{ "$sort" : { "date" : -1 } }
* 先頭から3件取得 * ソート(昇順) http://localhost:9999/data?{ "$limit" : 3 }
RevelのTemplateで時間の分を扱う

DBで時間の分をintで保持している想定で、値の処理を考える
Formの値をintで持つと、FlashはStringで値を返すので`with field`は使わず`option`タグを普通に書く必要がある

```
type Time struct {
	Hour int
	Min  int
}
```

```
time := Time{}
time.Min = 10
mins := []int{0,5,10,15,20,25,30,35,40,45,50,55}
```
```
<select name="time.Min">
{{range $index,$element := .mins}}
  <option value="{{$element}}" {{if eq $element $min}}selected{{end}}>{{$element}}分</option>
{{end}}
</select>
```
Flashした時はstringで返ってきた値をintに戻す必要がある
`time.Min, _ = strconv.Atoi(c.Flash.Data["time.Min"])`


# 別の提案

Flashの処理が必要。。FORMでは最初からStringで扱う用の構造体を用意するのはどうか？
そうすればwithでFiledを扱うこともできるはず。。

```
type Form struct {
	Hour int
	Min  int
}
```

```
form.Min = fmt.Sprint(time.Min)

minsString := []string{"0","5","10","15","20","25","30","35","40","45","50","55"}
```

withの中でrangeを扱うには。。$に入れたらいいじゃないか

```
{{$minsString := .minsString}}
{{with $field := field "form.Min" .}}
<select name="{{$field.Name}}">
  {{range $index,$element := $minsString}}
  {{option $field $element $element}}
  {{end}}
</select>分
{{end}}
```

withだとプルダウンの中に「○分」と書けないな。。optionタグを普通に書くべきか。。

# ならば

stringで扱いつつoptionで書けばスマートか？

```
{{$minflash := index .flash "form.Min"}}
{{$min := firstof $minflash .form.Min}}
<select name="form.Min">
{{range $index,$element := .minsString}}
  <option value="{{$element}}" {{if eq $element $min}}selected{{end}}>{{$element}}分</option>
{{end}}
</select>
```

## メモ
* firstof .. ドキュメントには書いてないがコミュニティで議論されて実装としてはある
  * 値がある場合はそっちを使うという三項演算子みたいなやつ
* Flashの値はindexで取り出せる


# 結論

書きにくい。
新しく型を用意するのも面倒なので最初のFlashした値をintにさえ戻しておけばいいのではなかろうか？

色々試してみた結果、Templateではwithやrangeで扱えないと思っていた値も結構いけることがわかった。
【Mac】たくさんある特殊記号まとめ


# Macの特殊キーの記号たち
Macにはたくさんの特殊キーがある。覚えるためにも一回まとめておく。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/85825/61318619-75ad-ffb6-c182-fbaaf07ff8d2.png)

## まとめ
|Symbol|Name|
|:---:|:---|
|⌘|command|
|⇧|shift|
|⌥|option|
|⌃|control|
|⇪|caps|
|⎋|esc|
|↩|return|

これで全部じゃないはず…

## Unicodeで存在する
これらの記号はUnicodeで存在して、HTMLの特殊文字でも表現できる。

|Symbol|Name|Unicode|HTML Special Characters|
|:---:|:---|:---|:---|
|&#x2318;|command|0x2318|&amp;#x2318;|
|&#x21E7;|shift|0x21E7|&amp;#x21E7;|
|&#x2325;|option|0x2325|&amp;#x2325;|
|&#x2303;|control|0x2303|&amp;#x2303;|
|&#x21EA;|caps|0x21EA|&amp;#x21EA;|
|&#x238B;|escape|0x238B|&amp;#x238B;|
|&#x21a9;|return|0x21a9|&amp;#x21a9;|

## Unicode本
<a href="http://www.amazon.co.jp/gp/product/477414164X/ref=as_li_ss_il?ie=UTF8&camp=247&creative=7399&creativeASIN=477414164X&linkCode=as2&tag=barth0l0mew-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=477414164X&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=barth0l0mew-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=barth0l0mew-22&l=as2&o=9&a=477414164X" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
【Sublime Text】常にWordWrapをoff or onにする(改行させない or させる)設定

# Sublime Textを起動した時自動でWordWrapを設定する方法
テキストファイルを開いた時、ウィンドウの端で改行するかしないかを設定するWordWrapという項目がある。

Sublime Textではこれの初期値(起動時の設定)として次の3つが設定できる。

- どんなファイルもon (改行する)
- どんなファイルもoff (改行しない)
- ファイルの種類(拡張子)によって判断する

## 設定方法
Sublime Textのユーザ設定で行う。
*⌘(Command)* + *,* を押すと「Prefernces.sublime-settings」というテキストファイルが開かれる。

自分の希望する設定方法に応じて、このテキストファイルに次のように追記する。

### 常にon (改行する)
```
{
    "word_wrap": true
}
```

### 常にoff (改行しない)
```
{
    "word_wrap": false
}
```

### ファイルの種類(拡張子)によって判断する
```
{
    "word_wrap": "auto"
}
```

## Tips
この設定ファイルで、様々な項目が設定できる。
形式はJSON形式モドキである。

「モドキ」と言っているのは、「//」でコメントが記述できるからである。本来のJSONではコメントは許されていない。
また拡張子も「.sublime-settings」である。
Kefir.jsで加算減算するStreamから値を得る


いわゆる入門。

よくあるincイベントとdecイベントを合成させて現在の値を取るってやつ。

[rpominov/kefir](https://github.com/rpominov/kefir "rpominov/kefir")

ブラウザ立てるのめんどいので、coffeeでnode環境でイベントソースはEventEmitter。

```coffee
Kefir = require 'kefir'
{EventEmitter} = require 'events'
emitter = new EventEmitter
inc = Kefir.fromEvents emitter, 'inc'
dec = Kefir.fromEvents emitter, 'dec'

Kefir.merge([
  inc.map(-> 1)
  dec.map(-> -1)
])
.scan ((acm, v) -> acm + v), 0
.onValue (i) -> console.log i

emitter.emit 'inc'
emitter.emit 'dec'
emitter.emit 'dec'
emitter.emit 'inc'
emitter.emit 'inc'
emitter.emit 'inc'
```

結果
```
0
1
0
-1
0
1
2
```

参考: [Kefir.jsを使ってnehan.jsなビューアーをReactiveに作る - anti scroll](http://tategakibunko.hatenablog.com/entry/2015/03/09/124409 "Kefir.jsを使ってnehan.jsなビューアーをReactiveに作る - anti scroll")
Raspberry Pi2にdeploydをインストールする

#Node.jsのインストール
ソースからでは時間がかかるためRaspberyPi用のパッケージからインストール
配布先：[node-arm](https://node-arm.herokuapp.com/)

```bash
wget http://node-arm.herokuapp.com/node_latest_armhf.deb
sudo dpkg -i node_latest_armhf.deb
```

#deploydをグローバル環境へインストール
```bash
npm install deployd -g
```

#プロジェクトの作成、モジュールのlink
参考：[オープンソースMBaaS「deployd」を使ってみる](http://qiita.com/stomita/items/b8d1ca8af870ea58cfcc)
```bash
dpd create test
cd test
npm link deployd
```

#Node.jsモジュールとして起動させる
上記のディレクトリで`dpd -d`することで起動できるが、バックグラウンドで起動できるよう、nodejs経由で起動させる
test.jsファイルに以下を記載して保存

```javascript
require.main.paths.push('/usr/local/lib/node_modules');
var deployd = require('deployd');

var server = deployd({
    port: 9999,
    env: 'deployment',
    db: {
        host: 'localhost',
        port: 27017,
        name: 'data'
    }
});
server.listen();
```

##起動
```bash
cd test
node test.js
```
Unity+iOS+UnityNativeDialogPluginでエラーが出たら

ARC を無効化する必要がある
-fno-objc-arc


プロジェクトの "TARGET" を選択したら、そこの "Build Phases" から "Compile Sources" を選択します。
UnityNativeDialogPluginのソースコード(UNDialogManager.mmかな)に-fno-objc-arcフラグをつける。

これだけ


参考
http://program.station.ez-net.jp/special/objective-c/llvm/arc/enable-file.asp
Unity+iOS+iOS Native(アセット)

##iOS Native($20)
https://www.assetstore.unity3d.com/jp/#!/content/7421
$20でこれだけのことができる。すごい。
けど、使い方に癖があって複雑？なことをすると面倒くさい。
基本的に日本語の情報がない。
ドキュメントは割と分かりやすい。

##iOS Nativeできること

###課金In-App purchases (Cons. / Non-Cons.)
* Transaction Events 
* Purchase States (Purchased, Failed, Deferred, Restored) 
* Restore purchases implementation
* Transactions Validation

###SNS連携
* Facebook Post 
* Twitter Post 
* Native Sharing Dialog 

###iCloud連携
* Availability check 
* Set data for key 
* Get data for key 
* Data change events 
* Supported types: float, string, byte[] 
 
###iAd App Network 
* Banners 
* Interstitials 
* 9 Gravity Options supported 
* Ability to set Custom x, y banner point 
 
###Camera And Gallery :超手軽にスクリーンショットを保存できるからおすすめ
* Taking Photo from Camera 
* Loading Texture from Gallery 
* Saving Texture to Gallery 
* Saving Screenshot to Gallery 

###Game Center 
* Show leaderboards UI 
* Show UI leaderboard by ID 
* Retrieve leaderboard score by ID 
* Report leaderboard score by ID 
* Show Achievements UI 
* Reporting Achievements 
* Get All Achievements info 
* Retrieve data for your custom leaderboard UI 
* Load GameCenter user names and avatars 
* Load Friends list 
* Challenge Friends
* Multiplayer Peer-to-Peer (with game example)
* Multiplayer Example Video Preview     
 
###More features 
* Play Video via web URL 
* Play Video via YouTube app 
* Local / Push Notifications 
* Banner Notification  
* Date Time Picker 
* Shared App API 
* Rate Pop-up 
* Dialog Pop-up 
* Message Pop-up 
* Native Preloader
* Date Time Picker UI
* iOS Native Events
* Flash-like Events as gift
 

##セットアップはここを見ればおk
StoreKit.framework
Accounts.framework
Social.framework
MessageUI.framework
MediaPlayer.framework
MobileCoreServices.framework 
GameKit.framework 
を導入する必要がある
https://unionassets.com/iosnative/plugin-set-up-2
とりあえずCentos6.5にWPをインストールする

## About
とりあえずWPをさわろうと思ったので、やってみた。

## Environment
Centos6.5(vagrantで起動）

## 前提パッケージを入れる

```
$ sudo yum -y httpd mysql-server php php-mysql wget
$ sudo service mysqld start
```
## DBの設定をする

```
mysql> update mysql.user set password=password('password') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit;
```

```
mysql> create database wp;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on wp.* to wp@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
```

## Apacheの設定をする
```
$ cd /var/www
$ sudo wget https://ja.wordpress.org/wordpress-4.0-ja.tar.gz
$ tar zxf wordpress-4.0-ja.tar.gz
$ sudo chown -R apache.apache wordpress
```

```:/etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/wordpress"
```

```
$ sudo service httpd configtest
$ sudo service httpd start
```

## WPをインストールする
* ブラウザでアクセス
http://<VMのIP>/wp-admin/setup-config.php

```
データベース名        wp
ユーザ名             root
パスワード           password
データベースのホスト名 localhost
接頭辞               wp_
```

出来た！とりあえず導入しただけなので、細かな設定は他のサイトをご確認下さいm(_ _)m

## link
http://qiita.com/bird_nitryn/items/6d7e6a33b3eca7af5c76
Unity5+Androidでスクリーンショットをギャラリーに追加する

このアセットを使う($2)
ScreenShot Plugins for Android Phones
https://www.assetstore.unity3d.com/jp/#!/content/25150

安い分致命的なエラーがあるけれどちょっとだけソースをいじればちゃんと使える。

インポート後、
ScreenShotBridge.csファイルを編集する

```lang:ScreenShotBridge.cs(13行目くらい)
Application.CaptureScreenshot (fileName + ".png");
yield return  new WaitForSeconds (1f);//この行を追加
```

これだけでおk。
このアセットでは、
Application.CaptureScreenshot で画面を保存して、そのあとギャラリーに追加しようとしてるけど、
Application.CaptureScreenshotで保存し終える前にギャラリーに追加しようとうするため
空ファイルもしくは前回キャプチャーした画像をギャラリーに追加するようになってる。
そのためキャプチャー後に1秒ほど待って保存し終えたのを確認させることが必要になる。
MacOSX+CH340G搭載Arduino互換ボードの動作メモ



# CH340Gとは

安いArduino互換ボードでは、USBシリアル変換チップとしてFTDI社FT232RLの代わりにCH340Gが使われていることがあります。これは中国「[江苏沁恒股份有限公司](http://wch.cn/)」の製品で、安価なUSBシリアル変換チップとして知られています。

# CH340G MacOSX用ドライバのインストール

MacOSXでCH340Gを利用する場合、ドライバのインストールが必要です。安い分ちょっと面倒ですね。

- http://www.wch.cn/download/CH341SER_MAC_ZIP.html

上記URLからzipファイルをダウンロードし、中に含まれる「ch34xInstall.pkg」からインストールします。OS再起動後に問題のデバイスをUSB接続してみると、下記のように対応するデバイスファイルが現れました。

```
$ ls -la /dev/*seri*
crw-rw-rw- 1 root wheel 18, 5  7 31 00:07 /dev/cu.wchusbserial1420
crw-rw-rw- 1 root wheel 18, 4  7 31 00:07 /dev/tty.wchusbserial1420
```

この動作確認はMavericksで行いました。MacOSX Yosemite以降ではもう一手間必要らしいですが、自分では試せていません。下記URLをご参照ください。

- http://kiguino.moos.io/2014/12/31/how-to-use-arduino-nano-mini-pro-with-CH340G-on-mac-osx-yosemite.html

# Arduino互換ボードの動作確認

CH340G搭載のArduino Nano互換ボードについて、実際に試してみました。

上記デバイスファイルが認識されていることを確認した上で、Arduino IDEから「ツール」「ポート」でCH340Gに対応するデバイスファイルを選択します。この状態で、サンプルスケッチの「Blink」が問題なく動きました。
PostgreSQLにJDBC APIのPreparedStatementでクエリを実行するときの注意点

PostgreSQL JDBC Driverを使ってクエリを投げる際に過去にハマった点をメモしておきます。

# PreparedStatementの性能傾向が変わる？

PreparedStatementオブジェクトを作ってクエリを繰り返し実行していると、ある時点から急にクエリ性能が良くなる場合があります。

これは、PostgreSQL JDBC Driverの仕様で、一定回数以上同じPreparedStatementオブジェクトでクエリ実行を繰り返すと、PostgreSQLサーバ側にクエリがキャッシュされてさらに高速化されるためです。

つまり、PostgreSQL JDBC Driverを使っている場合、PreparedStatementによるクエリ実行の最適化には2段階あって

1. クライアント側の最適化
2. クライアント側 + PostgreSQLサーバ側の最適化

となっています。
特に、PostgreSQLサーバ側の最適化の影響が大きく、これによりSQL文のパースや実行計画作成がスキップされるため、2.の段階になった瞬間に性能が向上しやすくなります。

で、1.から2.にグレードアップするのがデフォルト設定では5回目からです。このしきい値は変更可能です。

* PostgreSQLの接続URLにてパラメータ`prepareThreshold = int`で指定する。クエリ全体に影響。
* PreparedStatementオブジェクトごとに```void setPrepareThreshold(int threshold)```メソッドで指定する。

詳細は、ドキュメント参照のこと。
https://jdbc.postgresql.org/documentation/head/server-prepare.html
https://jdbc.postgresql.org/documentation/head/connect.html

# PreparedStatementって？

ややこしいことにPostgreSQLサーバ側のクエリキャッシュ機構もPrepared statementと呼ばれています。

そのため、PostgreSQL → JDBCの順で勉強していると、

(JDBC APIの)PreparedStatementを使ってクエリを投げているのに(PostgreSQLの)Prepared Statement機能が使われていない（ ；д；）...

というポルナレフ状態になります。

自分はこちらのハマり方をしました。。。

PostgreSQLのPrepared Statement機能もこれまた予想外の挙動をする時があってハマりやすいのですが、それはまた別途書きます。
Unity初心者が5分でGoogle Cardboard SDKを試してみた


これからはVRが熱いらしいです。Unity歴が実質1週間ちょっとのミジンコ並みな僕ですが、流行には乗る権利ぐらいはあるはず・・・。
というわけで、Google Cardboard SDKを使ってみることにしました。まあ **Cardboardもハコスコも持ってない**んでとりあえず二眼カメラを置いて満足することにします。

# 開始！
とりあえず公式サイトへ行ってSDKを落とします。
https://developers.google.com/cardboard/unity/download

英語だらけで健康優良日本男児の僕にはよくわかりませんが、「>direct link to unitypackage」とかいうそれっぽいリンクをクリックすれば大丈夫でしょう、多分。

# 1分経過
とりあえずUnityプロジェクトを作ります。名前は漢らしく「Test」で良いでしょう。

![cardboard1.png](https://qiita-image-store.s3.amazonaws.com/0/76172/e1e11c27-ffeb-d9a1-5a0a-a47e0f90cff8.png "cardboard1.png")

# 2分経過
プロジェクトが出来たら早速さっき落としたunitypackageをダブルクリックしてインポートしてしまいましょう。
よくわかりませんが「Legacy」って書いてあるフォルダは未来に生きる我々にはいらんでしょう。チェック外しておきます。

![cardboard2.png](https://qiita-image-store.s3.amazonaws.com/0/76172/41cf822a-3e46-e739-88a5-98e24762676f.png "cardboard2.png")

# 3分経過
地面が欲しいので適当にTerrain敷いときます。殺風景なのも嫌なので好きなテクスチャでも貼っておきましょう。
僕は迷ったらStandard Assetに含まれているGrassHillAlbedoを貼ってます。

![cardboard3.png](https://qiita-image-store.s3.amazonaws.com/0/76172/18d23861-eb47-db95-1f06-ab41874dcf66.png "cardboard3.png")

Main Cameraは多分いらなくなるので、消しちゃいましょう。

# 4分経過
いよいよ二眼カメラを置きます。使ったことないパッケージを使うときはとりあえずPrefabフォルダ内を見てみます。
「CardboardMain.prefab」ってのを見つけました。きっとこれでしょう。

![cardboard4.png](https://qiita-image-store.s3.amazonaws.com/0/76172/b72c5062-ef2c-2ae3-d7b9-25e604bd53c4.png "cardboard4.png")

地面以外何もないのも寂しいので適当にCubeでも蒔いときましょう。

![cardboard5.png](https://qiita-image-store.s3.amazonaws.com/0/76172/55b15982-2fba-57e5-b211-0fc8ca37a8c7.png "cardboard5.png")

さあ、再生ボタンを押しましょう。

# 5分経過

やった！映った！これで僕も流行に乗れたぞ！

![cardboard6.png](https://qiita-image-store.s3.amazonaws.com/0/76172/72def96b-33ae-c8d5-d31d-7b8dca1245cc.png "cardboard6.png")

＿人人人人人人人人＿
＞　でも動けない　＜
￣Y^Y^Y^Y^Y^Y^Y￣

# ロスタイム
ちょっとずるい気もしますが、Hierarchy内のCardboardMainにCharacterControllerを追加して、キーボード操作を受け取るスクリプトを書いてしまいましょう。

```csharp:CardboardMain.cs
using UnityEngine;
using System.Collections;

public class CardboardMain : MonoBehaviour {
    float verocity = 5.0f;
	CharacterController controller;

	void Start () {
		controller = GetComponent<CharacterController>();
	}

	void Update () {
        Vector3 moveVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        moveVector *= verocity;
        controller.Move(moveVector * Time.deltaTime);
	}
}
```

![cardboard7.png](https://qiita-image-store.s3.amazonaws.com/0/76172/03cbb22b-e779-d75f-62c3-9ad587be3230.png "cardboard7.png")

![cardboard8.png](https://qiita-image-store.s3.amazonaws.com/0/76172/bc1e926f-8293-f088-f218-532f644b9e36.png "cardboard8.png")

![cardboard9.png](https://qiita-image-store.s3.amazonaws.com/0/76172/dcb26ede-360f-ee5c-7749-f5056c900f44.png "cardboard9.png")

いい感じに左右の視差が見てとれますね！

# 感想
とりあえず今回はお試しということでカメラを置いただけですが、特に詰まることも無くVRが実現できましたね。
オブジェクトの配置は普通のプロジェクト同様に出来るとして、後は視点を利用した操作のやり方さえ判れば簡単なVR操作のアプリケーション作りが出来てしまいそうです。

Cardboardは先ほどAmazonでポチったので、届いたらもう少し色々と試してみようと思います。

# 余談
アプリケーションは5分で出来ましたが、記事を書くのには50分かかりました（＾p＾）
PBOXバージョンアップ情報

PBOXが９月にバージョンアップします。
変更点などまた後日詳しくレポートしますが、今回はWEB画面を少しだけお見せいたします。


[SoftLayer Bluemix Summit](2015http://softlayer-bluemix-summit.jp/)で展示します。
お時間ある方はぜひご来場ください。

![pbox_new.jpg](https://qiita-image-store.s3.amazonaws.com/0/57909/4a4a4d51-8588-4122-45af-52a2d9070f2d.jpeg)

オレンジを基調としたデザインにリニューアルいたします。
ロゴは自社ロゴ等への変更可能です。

この機会に是非導入をご検討ください！
.each() jquery

.each()を使ってそれぞれの【　ul　】の子要素の一番目の【　li　】に " select " というクラスを追加してみます


```html:HTML

<ul>
 <li>コンテンツ</li>
 <li>コンテンツ</li>
 <li>コンテンツ</li>
</ul>

<ul>
 <li>コンテンツ</li>
 <li>コンテンツ</li>
 <li>コンテンツ</li>
</ul>

```

```js:jquery

$('ul').children('li').eq(0).addClass('select');

```

この場合、【　全てのul　】の中の子要素の一番目の【　li　】に【 class="select" 】が追加されてしまい
以下のような結果になります。

```html:HTML

<ul>
 <li class="select">コンテンツ</li>     <!-- eq(0) --> 
 <li>コンテンツ</li>                    <!-- eq(1) -->
 <li>コンテンツ</li>                    <!-- eq(2) -->
</ul>

<ul>
 <li>コンテンツ</li>                    <!-- eq(3) -->
 <li>コンテンツ</li>                    <!-- eq(4) -->
 <li>コンテンツ</li>                    <!-- eq(5) -->
</ul>

```

これでは駄目なのでjqueryを以下のように書き直します

```js:jquery

$('ul').children('li').each(function(){
  $(this).eq(0).addClass('select');
});
```

するとこのような結果になります


```html:HTML

<ul>
 <li class="select">コンテンツ</li>     <!-- eq(0) --> 
 <li class="select">コンテンツ</li>     <!-- eq(0) -->
 <li class="select">コンテンツ</li>     <!-- eq(0) -->
</ul>

<ul>
 <li class="select">コンテンツ</li>     <!-- eq(0) -->
 <li class="select">コンテンツ</li>     <!-- eq(0) -->
 <li class="select">コンテンツ</li>     <!-- eq(0) -->
</ul>

```

これでは【それぞれのli(ul直下の子要素li)】を一つ一つ見て回るので
それぞれのindexが全て0になってしまいます。
なので、【それぞれのul】を見て回ってその子要素liの一番目にクラスが当たるように設定します。

```js:jquery

$('ul').each(function(){
  $(this).children('li').eq(0).addClass('select');
});
```

するとこのような結果になります


```html:HTML

<ul>
 <li class="select">コンテンツ</li>     <!-- eq(0) -->
 <li>コンテンツ</li>                    <!-- eq(1) -->
 <li>コンテンツ</li>                    <!-- eq(2) -->
</ul>

<ul>
 <li class="select">コンテンツ</li>     <!-- eq(0) -->
 <li>コンテンツ</li>                    <!-- eq(1) -->
 <li>コンテンツ</li>                    <!-- eq(2) -->
</ul>


```

以上、まわりくどい解説でした！
CentOS7.1でdocker 1.8を使用する

docker 1.8がリリースされました。何が変わったかは、[Announcing Docker 1.8: Content Trust, Toolbox, and Updates to Registry and Orchestration](http://blog.docker.com/2015/08/docker-1-8-content-trust-toolbox-registry-orchestration/)に書かれています。

日本語では、[Docker 1.8 リリースのまとめ](http://qiita.com/Arturias/items/ee1691e38fd1d912fff8)が参考になります。

## CentOS7では
CentOS7では、ようやく8/10にDocker 1.7.1がリリースされています。
Docker 1.8では、セキュリティの強化としてTUF以外にも、以下のような機能強化が行われています。

* ホストからコンテナ内へのファイルコピー
* Dockerデーモンのコマンド
* docker ps コマンドの出力のカスタマイズ

特に、ホストからコンテナ内へのコピーなどは非常に使えると便利です。

## Docker 1.8を使用しよう
簡単に利用する方法があります
Docker社が提供するyumリポジトリがあります。詳細はこちらを見てください。[New Apt and Yum Repos](https://blog.docker.com/2015/07/new-apt-and-yum-repos/)。

※一度、CentOSのリポジトリからdockerをインストールし削除してから、Docker社のリポジトリでインストールした方がよいです。

```
# yum install docker -y
# systemctl start docker.service
# systemctl stop docker.service
# yum remove docker

# cat >/etc/yum.repos.d/docker.repo <<-"EOF"
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

# yum install docker-engine
```

あとは、いつも通りの操作で大丈夫です。
PBOX操作マニュアル

PBOXの使い方についてまとめました。

以下の内容を参考に使ってみてください。

![削除ファイル.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/b7724716-cf08-f579-9a7d-65a13db13d0e.png)
# クライアントのセットアップ
1 pboxをダウンロード
2 pboxを起動　→　Preferenceをクリック　
3 Authから始まるURL 　 http://*hostname*/api/auth　認証用URL入力
4 Username　 pboxに登録したユーザ名
5 パスワード　pbox登録したパスワード

![login.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/27946252-177b-fbf6-9d35-6dcbcbb57901.png)




# 共有リンク（pbox Web画面から共有したいファイルへのリンクURLを作成する）
1 Webのpbox履歴画面からギヤマークをクリック
![無題.jpg](https://qiita-image-store.s3.amazonaws.com/1666/81114/8f1a6641-280f-89a6-89a3-ce06ec62312c.jpeg)

2 共有URL生成
![無題.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/245b3fea-7445-e9c6-ea8b-f39db22bfd0d.png)

4 共有URL生成 →　保存
![共有リンク生成.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/83f7c1c0-1741-18ff-0502-80b5a6fde08f.png)

>FileのリンクしたURLへアクセスし、ファイルがダウンロードできる。
 外部の人もURLからファイルをダウンロードできる。

# Fileアップロード
1 webのpbox履歴画面入ります
![ギヤマーク.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/1bc22075-8bfd-78f4-1206-881b228cb020.png)

2 pboxの履歴画面から、
3 新しいファイルをファイル選択
4 ファイルディレクトリを選択→アップロード
![ファイルアップロード.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/4b79a8da-35ed-f22a-d8b4-566e3604f6e5.png)


　
# 複数ファイルのアップロード（予定機能)
1 複数選択する機能も追加予定。
2 Fileを画面にドラッグ&ドロップで
  アップロードできるようにする 予定。

# バージョン管理（画面の操作履歴がバージョンで管理されています）
1 webのpbox履歴画面に入ります
2 pboxの履歴画面から、履歴をクリック
3 fileの操作履歴が表示される。
![バージョン履歴.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/af5d024e-99f6-b7dc-6050-3b62b675df32.png)


4 バージョンをクリック
5 クリックしたバージョンのファイルがダウンロードされる。

6 履歴はファイル操作のたびに残る。

# 削除ファイルの復旧
1 バージョン履歴を参照　
![Web pbox 履歴画面.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/fa21e86c-6398-c58e-a0d7-ad6e47ed3611.png)

2 復元したいファイルの復元をクリックし保存
![復元.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/a187ee89-0057-f81b-8b9d-8c960de31736.png)


>‐ファイルの削除方法
　削除方法には2段階あり、一度削除してさらに完全削除すると復元はできません。
1 削除ファイルを表示をクリック
　![削除ファイル.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/2860bdd4-a7da-2eb9-6847-b62c517a9b15.png)


2 ホーム下のダイアログから　削除　完全削除　復元　を選択
![削除　完全削除　復元を選択.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/89d76915-837c-0bbf-7d6b-a2ef8b4f4f89.png)


3 チェックボックスをクリック。

![チェックボックス.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/eead3de9-303f-06b8-9391-7b5f63cf2a34.png)

4 チェックを入れて実行。

# ユーザ登録方法
1　管理画面からのみ。（管理者のみ）
2　機能追加予定。

# アクセス権限の設定（変更予定あり）作成中
　webのpbox履歴画面から、ギヤをクリック。
>グループからユーザそれぞれに対して権限付与。
・権限なし。（ファイルしかみれない）None
・読み込みのみ　Read
・読み込み、書き込み　Write
![権限.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/7b2044cb-86d7-9b9b-2525-b900141e8564.png)


・グループに対してアクセスできるユーザを個別に追加できるようにする予定

# ユーザー登録のCSV対応。
ユーザー登録に一括で登録する画面をつくる予定。

# その他の機能
>所有者　メールアドレスで管理
グループ　グループ名で管理



# 別機能としてグループ権限を設定可能
>ユーザの追加、削除、
グループの削除　ができる。
グループ名の変更ができる。
![グループ名変更.png](https://qiita-image-store.s3.amazonaws.com/1666/81114/0e4da3f6-7ace-d520-d63c-cfc98c9f9c97.png)

>設定条件
マネージャ削除はできない。　
オーナはすべてできる。
メンバーはグループに対して編集ができない。
 
検索は機能追加の予定
C言語でテキストファイルを読み込みたい時

C言語でテキストファイル読み込みたい！と思っててきとうに書いたらエラージゴックになってようやくエラーなくなったのでまとめときます。
備忘録備忘録だいじね。

# C言語でのコマンドライン引数の取り方

```c
#include <stdio.h>
#include <stdlib.h> //exitを定義?

int main(int argc, char *argv[]) { 
// int argcは引数の個数 char *argv[]は引数の文字列を指すポインタ型配列
// printf("引数の個数は%d個です。\n", argc-1);
// こんな感じで引数の個数わかります
//printf("%s\n", argv[1]);
//これでファイル名が拾えます

  FILE *file;
  char buffer[1000];

  if(argc!=2){
  	printf("コマンドの後に１つファイルを指定してください。\n");
  	printf("使用法： ./output_file <ファイル名>\n");
  	exit(1);
  }
  
  if ((file = fopen(argv[1], "r"))==NULL) {
  	printf("ファイルを開くのに失敗しました\n");
  	exit(1);
  }
  printf("--------\n");
  while((fgets(buffer, 100, file))!=NULL) {
  	printf("%s", buffer);
  }
  printf("\n");

  fclose(file);

  return 0;
}
```

C言語はやっぱレガシー感やばいですね。
ファイルの中身とってくるのに資料調べながら１時間くらいかかってしまいました...w

argv[0]にそもそも実行コマンド名が入ってきてうおおっっ！！てなってしまったんですが、自分だけですか？普通配列一番目は対称引数の１番目じゃないんですか！？と...

FILE型はサイズや位置などの様々な情報が入った構造体です。構造体は変数の集まりみたいなものですね。

`fopen()`で開く事によって、構造体へのポインタを返してくれます。なので上記のファイルではFILE型ポインタ変数?（合ってるのか？）に代入して取り扱ってます。
なのでアドレスとかは再代入で変えないようにしましょうね！

C言語ではファイルを開いた状態(ストリームといいます)にしてから、その中の情報にアクセスします。

`fgets()`関数は文字列１列ずつを文字列ポインタとして返してくれます。
この関数ですが、文字列をブチ込むポインタ、格納する文字列のバイト数(たぶん)、ストリームポインタの３つを引数に取る関数なのでまたこれが使いにくいです。

![image](https://qiita-image-store.s3.amazonaws.com/0/80075/4235e8e2-769c-e15a-c122-1c8a1c990144.png)
fgets関数に関しては参照に貼ったリンク先で詳細が説明されています。

テキストファイル読み込んだ結果、成功です。
かしこまっ！
![image](https://qiita-image-store.s3.amazonaws.com/0/80075/478d281b-7659-df42-a04b-9ddfd57faa05.png)

ポインタにやっと慣れ親しめてきたかな？もっとガシガシ書いて体にしみ込ませよう :persevere: 

そういやmain関数以外ではコマンドライン引数取って来れないのかな？？

## 参照
http://simd.jugem.jp/?eid=47
Windows 裏技

#開発者向けに用意された隠し機
Windowsの各種設定にまとめてアクセスできる「ゴッドモード」
##設定方法
フォルダーを作成し、フォルダー名を「GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}」にする、確認したら「ｘｘ.{ED7BA470-8E54-465E-825C-99712043E01C}」でも大丈夫（ｘｘは半角でなくても大丈夫みたい）.{…省略…}が付いてればなんでもいいみたい。
フォルダを開くと、237種類の機能が一覧表示されます。
![gotmode.jpg](https://qiita-image-store.s3.amazonaws.com/0/54159/ceafc05d-b04c-af86-0dc1-125d287eb8fd.jpeg)

##確認記録

* 日付　2015/8/19
* OS　windows7
* その他<br>



#参照
[Windows 10でも「ゴッドモード」が用意されていた！](http://ascii.jp/elem/000/001/037/1037911/?crank)
CentOSのすべてのイメージをダウンロードする

一度にいろんなバージョンをダウンロードした場合は、以下のコマンドを打ちます。

```
# docker pull -a centos
...
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.io/centos    centos6             a005304e4e74        8 weeks ago         203.1 MB
docker.io/centos    6                   a005304e4e74        8 weeks ago         203.1 MB
docker.io/centos    centos7             7322fbe74aa5        8 weeks ago         172.2 MB
docker.io/centos    latest              7322fbe74aa5        8 weeks ago         172.2 MB
docker.io/centos    7                   7322fbe74aa5        8 weeks ago         172.2 MB
docker.io/centos    5.11                223843a319ca        3 months ago        284.1 MB
docker.io/centos    centos5.11          223843a319ca        3 months ago        284.1 MB
docker.io/centos    centos6.6           8b44529354f3        3 months ago        202.6 MB
docker.io/centos    6.6                 8b44529354f3        3 months ago        202.6 MB
docker.io/centos    centos7.0.1406      feb2761601e7        3 months ago        210.2 MB
docker.io/centos    7.0.1406            feb2761601e7        3 months ago        210.2 MB
docker.io/centos    7.1.1503            f1dade627e25        3 months ago        212.1 MB
docker.io/centos    centos7.1.1503      f1dade627e25        3 months ago        212.1 MB
docker.io/centos    5                   9069226e092e        3 months ago        284.1 MB
docker.io/centos    centos5             9069226e092e        3 months ago        284.1 MB
```

となります。
タグを調べる機能があればよいと思うのですがないので、タグを調べるには、[Docker Hub CentOS](https://hub.docker.com/_/centos/)を見て調べるしかありません。
調べるくらいならすべてダウンロードすればよいということでこのコマンドでした。
DNS系備忘録

# /etc/resolv.confの仕様を調べる
`man 5 resolver`
`man 5 resolv.conf`


# /etc/resolv.confは、編集しても上書かれることが多い
ubuntuでは、
http://qiita.com/uchiko/items/eb0665f528e2bb792f47
のように、`/etc/network/interfaces`で設定する。
macでは、システム環境設定で設定する。

# getaddrinfoの優先順位設定
/etc/gai.conf
`man 5 gai.conf`

# nsswitch.conf で名前解決の優先順位設定

```/etc/nssitch.conf
hosts: files myhostname dns
```
のように設定
files : /etc/hostsの設定
myhostname : これいれとけば、/etc/hostsに自分のHostの名前いれなくていい
dns : /etc/resolv.confで設定したdnsに聞く

`man nsswitch.conf`で仕様確認できる。

注意事項としては、nsswitch.confを変更しても、nslookupやhost、digの動作はかわらない（らしい）ということ。

これらのツールでデバッグするとハマる。

gethostbyname()やgetaddrinfo()の動作は、nsswitch.confで変わる。
しかし、nslookupやhost,digはこれらのAPI使わず直接DNS確認している模様。


# /etc/host.conf
現在は、/etc/nsswich.confに置き換えられているらしいが、どちらが使われているかをどうやって調べればよいのかは不明。 

http://piyopiyocs.blog115.fc2.com/blog-entry-678.html

# AAAAレコードの確認
`nslookup -type=AAAA www.kame.net`
`dig www.kame.net AAAA`


# その他参考文献
http://docstore.mik.ua/orelly/networking_2ndEd/dns/ch15_02.htm
ネットワーク観察用コマンドいろいろ(mac、linux)

ネットワーク確認などに使うコマンドたち

`arp -a`
ARPキャッシュ確認。というより、周りの機器のMAC調べるとき。

`telnet <server名> <port>`
サーバーに接続して簡単なテストするとき。

`traceroute <server名>`
経路しらべるときだが、ルーターにはじかれて使えないことが多い

`netstat -rn`
ルーティングテーブルをみるとき。

`tcpdump -i <interface名>`
普段はWireshark使っちゃうので出番ないけど。

`netstat -a -n -f inet`
listen中も含めてTCP/UDPのエンドポイントのレポートをみる。
-aつけないとlisten状態のものが見えない。

`ping <サブネットでブロードキャスト>`
近所のマシンからのping応答をまとめてみる。


`netstat -in`
インターフェースの情報リスト。
普通は`ifconfig`でよいと思うが。

`host <server名>`
DNSの応答みる

`nslookup <server名>`
DNSの応答みる

`dig <server名>`
DNSの応答みる
ソースコードからの Docker のコンパイル

# 概要
Docker のソースコードから、Docker Engine のバイナリをコンパイルする手順をまとめてみました。これで正式版リリースを待たずに最新機能を試すことができるようになります。

##コンパイルに必要なもの

* Docker
* git
* make

Docker をコンパイルするには Docker が必要です。コンパイル環境を Docker コンテナ内に構築するためです。なので、Linux ホストに現行版の Docker をインストールすることから始めます。

なお、今回試した環境は以下の通りです。

* ホスト： CentOS 7 (AWS EC2 上)
* ホストにインストールする Docker ： 1.8.1

# 手順
まず、CentOS 上に Docker をインストールします。現時点(2015/08/19)での最新の正式版である 1.8.1 をインストールしました([インストール手順はここを参照](http://qiita.com/Arturias/items/6c16ef4fd22e7ea4e7c3))。

```bash
# システムの最新化
$ sudo yum update -y

# Docker 最新版のインストール
$ curl -sSL https://get.docker.com/ | sh

# Docker デーモンの開始
$ sudo systemctl start docker.service
```

他に必要となる git と make をインストールしておきます。

```bash
$ sudo yum install git make -y
```

次にソースコードをダウンロード。

```bash
$ git clone https://git@github.com/docker/docker
$ cd docker
```

そして、make build でコンパイル環境を構築。

```bash
$ sudo make build
mkdir bundles
docker build -t "docker-dev:master" .
Sending build context to Docker daemon 93.29 MB
Step 0 : FROM ubuntu:14.04
(以下略)
```

make build は、ソースコードのルートディレクトリある Dockerfile から、コンパイル用の Docker イメージを生成します(この make build が完了するまでには10～15分程度かかる)。

make build 完了後には、イメージが追加されていることが確認できます。

```bash
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
docker-dev          master              add7b7c650cf        About a minute ago   1.902 GB
ubuntu              14.04               8251da35e7a7        11 days ago          188.3 MB
```

最後にコンパイルを実行。

```bash
$ sudo make binary
```

make binary はコンパイル用の Docker コンテナを生成し、そこでコンパイルが実行されます。このコンテナにはホスト側の &lt;ソースコード&gt;/docker/bundles ディレクトリがマウントされ、コンテナ内でコンパイルされたバイナリはそこに出力されます。

```bash
$ ls -l /home/centos/docker/bundles/latest/binary/
total 21124
lrwxrwxrwx. 1 root root       16 Aug 19 13:17 docker -> docker-1.9.0-dev
-rwxr-xr-x. 1 root root 21622150 Aug 19 13:17 docker-1.9.0-dev  ★★これがdockerコマンド★★
-rw-r--r--. 1 root root       51 Aug 19 13:17 docker-1.9.0-dev.md5
-rw-r--r--. 1 root root       83 Aug 19 13:17 docker-1.9.0-dev.sha256
```

動作確認をしてみると。たしかに Docker 1.9.0(の開発版)が動作しています。

```bash
# 実行中の Docker デーモンを停止
$ sudo systemctl stop docker.service

# インストール済みの docker コマンドをリネーム
$ sudo mv /usr/bin/docker /usr/bin/docker-1.8.1

# コンパイルした docker コマンドを /usr/bin/docker としてコピー
$ sudo cp /home/centos/docker/bundles/latest/binary/docker-1.9.0-dev /usr/bin/docker

# Docker デーモンを開始
$ sudo systemctl start docker.service

# バージョンを表示させてみる。
$ sudo docker version
Client:
 Version:      1.9.0-dev
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   3dc30d4
 Built:        Wed Aug 19 13:16:55 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.0-dev
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   3dc30d4
 Built:        Wed Aug 19 13:16:55 UTC 2015
 OS/Arch:      linux/amd64
```

# 参考サイト
* [Setting Up a Dev Environment](https://docs.docker.com/v1.5/contributing/devenvironment/)
Angularjsのng-repeatを描画完了してから処理したい時

angularjsの超初心者向けの内容になってますので上級者は戻るボタン推奨です(^q^)

ng-repeatでループを終了させたタイミングで処理をしたい時ってありますよね。
そんな時に役立つディレクティブを紹介します。

```js
angular.module("myApp", [])
  .directive("repeatFinished", function(){
    return function(scope, element, attrs){
      if (scope.$last){
        //ループが最後である時呼ばれます
        scope.$emit("repeatFinishedEventFired"); //ファイヤー!!
      }
    }
  });
```
あとは着火したイベントを見張る

```js
$scope.$on('repeatFinishedEventFired', function() {
  //何かする。転職するとか...
}
```
しかし、これは確かにループ終了後なのですが描画が完了したタイミングではありません。
jQueryなどの外部ライブラリとの連携をするにはDOMが描画完了したタイミングで処理したいですよね。

そこで

```js
angular.module("myApp", [])
  .directive("repeatFinished", function($timeout){
    return function(scope, element, attrs){
      if (scope.$last){
        //魔法の言葉を付け加える
        $timeout(function(){
          scope.$emit("repeatFinishedEventFired"); //イベント着火！
        });
      }
    }
  });
```
魔法の言葉 `$timeout` って何ですんの？
って話ですが、`$timeout`には`setTimeout`と`scope.$apply`がセットになっております。

別のエントリでも書きましたが、TypeSciptだと一工夫必要なの一応載せておきますね

```ts
class repeatFinished implements ng.IDirective
{
  static timeoutService : ng.ITimeoutService;

  public constructor($timeout : ng.ITimeoutService){
    repeatFinished.timeoutService = $timeout;
  }

  public link(scope: ng.IScope, element: ng.IAugmentedJQuery, attrs : ng.IAttributes){
    if (scope.$last){
      repeatFinished.timeoutService(() => {
        scope.$emit("repeatFinishedEventFired");
      });
    }
  }
}
//前回はfactoryにしましたが、今回は呼び出し元でクロージャ
angular.module("myApp", []).directive("repeatFinished", ($timeout: ng.ITimeoutService) => {
    return new MyDirective($timeout);
});
```
Angularjsって何だよ。って人には良い事しか書いてないブログもあるのでどうぞ
[Angularjs超入門。最高のJavaScriptフレームワークを紹介します](https://www.axesor.co.jp/js/angularjs)
UIWebViewのloadRequestが動かなかったのでメモ (Xcode 6.3.2)

(15/8/19 : 内容に誤りがありましたので全面的に訂正しました)

---
ただいま [Android開発者のためのSwift入門](http://www.amazon.co.jp/dp/B00ZI78PA2/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1) でiOSアプリ開発を入門中なのですが、UIWebViewにURLを読み込ませる際にプチハマりをしたのでメモです。

# リスト6.2 - 6.6のコード

``` ViewController.swift
import UIKit

class ViewController: UIViewController {

    let url = NSURL(string: "http://map.yahoo.co.jp/mobile") 
```

本に従って写経していき、さぁSimulatorを起動して動作確認だーーー

# ところが…

WebViewに何も表示されない…（真っ白）。

Delegateプロトコルを実装してerrorメッセージを確認してみたところ、HTTP通信がそもそも失敗しているみたい。iOS8.3と7.1のどちらで試してもダメ。

# どうやら

PCにインストールしてあるウイルスバスターが悪さをしていたらしい…。下記のブログを参考にさせて頂きました (超感謝)。

[iOSシミュレータでiOS8.1だとHTTP通信がエラーに](http://betahikaru.hatenablog.com/entry/2015/01/19/011623) 

# 対処

下記サイトからパッチをダウンロードし、インストール。Simulatorを再起動したら動くようになりました。

[ウイルスバスター for Mac（Ver 5.0）がインストールされた環境において、Xcode の iOS8 Simulator のネットワーク接続が切れてしまう問題が発生する](http://esupport.trendmicro.com/support/vb/solution/ja-jp/1106521.aspx)


# Links
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/index.html
Support design libraryのTabLayoutをタブレットで使用するときの注意点

AndroidのSupport design libraryで登場したTabLayoutをTabletで使用するとき下記のようなコードで普通に実装すると文字サイズに合わせてタブが表示され左右に大きなマージンができてしまう。

```xml
<android.support.design.widget.TabLayout
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"/>
```

下記のように書くとマージンが消えてタブが画面幅に合うようになる。

```xml
<android.support.design.widget.TabLayout
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:tabMaxWidth="0dp"
    app:tabGravity="fill"
    app:tabMode="fixed" />
```

すごくめんどくさい。。。
Crystal: 64ビット整数や符号なし整数を定義したい


Crystalには4つの整数型があります: Int8, Int16, Int32, Int64
それぞれ8, 16, 32, 64ビットの数を表現することができます。
また、4種類の符号なし整数型があります: UInt8, UInt16, UInt32, UInt64

```rb
puts 1.class      # Int32

puts 1_i8.class   # Int8
puts 1_i16.class  # Int16
puts 1_i32.class  # Int32
puts 1_i64.class  # Int64

puts 1_u8.class   # UInt8
puts 1_u16.class  # UInt16
puts 1_u32.class  # UInt32
puts 1_u64.class  # UInt64

puts +10    # Int32
puts -20    # Int32

puts 2147483648.class          # Int64
puts 9223372036854775808.class # UInt64
```

ちなみに、アンダースコアをつけることで、整数の可読性が上がります。

```
puts 1_000_000 # better than 1000000
```
[Unity]ＬＡＮ専用の機器構成で有効なＵＤＰ通信のUnityサンプル


イベント展示用などで機器構成が限定されている場合です。
ルータを用意してＬＡＮを構成して複数機器を接続し、なおかつ

* 中央のマシンからは信号を送るだけ
* 周辺のマシンは受け取るだけ
* 周辺のマシンは複数台（かもしれない）

という状況に限定した場合、コネクションを確立するネットワーク接続（いわゆるTCP）よりもUDPパケットを投げっぱなし、のほうがはるかに簡単で、運用も楽になります。

![Network Diagram (1).png](https://qiita-image-store.s3.amazonaws.com/0/90046/f9d721bb-5b75-fdb5-d1c7-9642a745baa2.png "Network Diagram (1).png")

サンプルプロジェクトには sender と receiver のスクリプトがあるので、送信側に sender 、受信側に receiver のスクリプトを置きます（そういうオブジェクトを置きます）。

https://github.com/dsedb/UDPSampleForUnity.git

たいしたことはなにもしていなくて、System.Net.Sockets.UdpClient の非同期対応のサンプルを Unity 風に書いただけです。ブロードキャストアドレスを使えば、同じネットワーク上のすべての機器に指示を送れるので、複数台にメッセージを送信することができます。

簡単で運用も安定するので、用途が合えばとても便利でしょう。もしかしたらルータの設定によってはブロードキャストが許可されない可能性もあるので注意ですね。
Visual Studio 2013 で FFmpeg をビルド

#はじめに
FFmpeg は様々な動画形式を扱うことのできる動画ライブラリです
https://www.ffmpeg.org/

Windows に対応したバイナリは以下の URL からダウンロードできるようになっています
http://ffmpeg.zeranoe.com/builds/

しかし、上記バイナリを Visual Studio から使う場合は注意が必要です

lib をリンクした際に

> LNK2026: モジュールは SAFESEH イメージには安全ではありません。

といったエラーが出るためです

SAFESEH を指定しないでビルドをして回避する手段もありますが、今回は SAFESEH イメージに安全なバイナリを作成する手段で回避をすることにします。

今回の基本的な流れは公式サイトのここを参考にしています
https://www.ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows

#準備
下記 URL から Git クライアントをインストールします(これ以外の Git クライアントでも可)
https://desktop.github.com/
下記 URL から Chocolatey をインストールします
https://chocolatey.org/

Chocolatey をインストールしたら、下記コマンドで mingw-get と yasm をインストールします

```
cinst mingw-get
cinst yasm
```

コマンドプロンプトを立ち上げ、 mingw-get が見える場所に移動します(パス設定でも可)

```
cd C:\tools\MinGW\bin
```

mingw-get で mingw32-base と msys-base の両パッケージをインストールします

```
mingw-get install mingw32-base
mingw-get install msys-base
```

pkg-config を下記 URL からダウンロードし、msysから見える場所（今回はC:\tools\MinGW\bin\) に入れインストールします
http://www.gtk.org/download/win32.php
また、GLib も必要になるため、同上のサイトから同上の手順でインストールを行います

Git クライアントを立ち上げ、下記コマンドで改行コードが勝手に書き換わるのを防止してからクローンします

```
git config --global core.autoCRLF false
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
```

%VS120COMNTOOLS%VsDevCmd.bat からコマンドプロンプトを起動し、

```
C:\tools\MinGW\msys\1.0\msys.bat
```

と入力し、シェルを立ち上げます
クローンした FFmpeg のフォルダへ行き、下記コマンドを入力(今回は dll が欲しかったため --enable-shared を指定)

```
./configure --toolchain=msvc --enable-shared
make
```

とすることでバイナリができます。
LPIC:『OpenStack技術者認定資格（仮）ベータ試験』受験参加募集

今日は、お知らせ。

1年前からアナウンスされていた、OpenStack技術者認定資格がいよいよ開始されるようです。
CloudStackが先にスタートしましたが、ベータ試験が、2015年9月12日（土）、2015年9月13日（日）、2015年9月14日（月）で実施されます。

詳しくは、[『OpenStack技術者認定資格（仮）ベータ試験』受験参加募集（2015年9月12日（土）、2015年9月13日（日）、2015年9月14日（月））のお知らせ](http://lpi.or.jp/news/event/page/openstack201509/)で確認してください。

紹介PDFは、[こちら](https://opcel.org/OpenStack_FIYER_201507_UP.pdf)。

受験料は、3,000円です。

試験範囲については、[出題範囲](http://wiki.openstack-exam.org/index.php?title=OpenStack_Objective_V1%28JA%29)です。

各日20名と狭い人数になっているので、早めの申し込みが必要です。

以上です。
Centos7 + MariaDB10.X (たぶんMySQL5.Xでも同じ) + SELinux で躓いた話

# 何をして何がおきたか？
## 発生した現象
サーバにHDDを増設した後，DBの保管場所をそちらに切り替えようと思い，

```shell-session:
 # cp -pR /var/lib/mysql /mnt/新しいHDD/var/lib/mysql
 # mv /var/lib/mysql /var/lib/mysql_old
 # ln -s /var/lib/mysql /mnt/新しいHDD/var/lib/mysql /var/lib/mysql
```

などとして，適当に移動してみたところ，SELinuxが動いている状態では phpMyAdmin などからの接続が不能に
 
## 原因
当然ながらSELinuxが原因で，

```shell-session:
 # setenforce 0
```

で，SELinuxを停止すると動く
このままSELinuxを稼働させないようにして運用する手もあったが，
せっかくなのでSELinuxも稼働させつつ使えるようにがんばった記録

# 解決までの道のり
## 環境など
* OS: CentOS 7.X
* DB: MariaDB 10.X
* httpd: Apache 2.X

## 使ったコマンド類
semanage, restorecon, setroubleshoot-server
（ちなみにどれも入っていましたし，yumで簡単に入れられます． ）

## 具体的な道のり
まず，SELinuxをpermissiveモードで起動するために， /etc/sysconfig/selinux を書き換えて再起動．

下記，参考サイトに従って， `# less /var/log/messages` でログを確認
コピーした先のファイルに適切なSELinuxのファイルタイプが設定されていないのが原因であることが判明

ログの方の最後の方に以下のメッセージ

> allow this access for now by executing:
>  # grep mysqld /var/log/audit/audit.log | audit2allow -M mypol
>  # semodule -i mypol.pp

素直にコピペ（戻って来るまで10secぐらい待つ）

`# systemctrl restart mysql.service`で，デーモン再起動
下記，参考サイトに従って， `# less /var/log/messages` でログを確認
まだ怒られていた，mysql.sock のファイルタイプに問題があるらしい

オリジナルの方（ /var/lib/mysql_old ）に移動して，`ls -Z` でファイルタイプなどを確認し，
以下のように設定

```shell-session:
 # semanage fcontext -a -t mysqld_db_t -f s '/mnt/新しいHDD/var/lib/mysql/mysql\.sock'
 # restorecon -RFv /var/lib/mysql
```
`# systemctrl restart mysql.service`で，デーモン再起動
下記，参考サイトに従って， `# less /var/log/messages` でログを確認
今度は良い感じ．

` # setenforce 1` にしてみても問題なく稼働

おしまい！

## 注意事項
mysql.socket は mysqld が使う ＆ 一つのファイルに複数のSELinuxファイルタイプは難しそう…
ということで，事前に `# setsebool httpd_can_network_connect_db on` はしてあり，
phpMyAdminはローカルホスト（127.0.0.1）と無駄にTCPでやりとりしています

## 参考にしたサイト
[「SELinuxのせいで動かない」撲滅ガイド](http://qiita.com/yunano/items/857ab36faa0d695573dd)
dockerで<none>なrepositoryを消す

dockerでイメージをビルドしたり使ったりしていて、docker imagesすると、大量の<none>というrepositoryができていました。なんなのでしょう?
使っていないので消しちゃてもいいような気がします。なので、次のスクリプトで一気に消します。

```bash
docker rmi $(docker images | awk '/^<none>/ { print $3 }')
```

これで、ある程度は消えてくれるのですが、「because the container xxxxx is using it」とメッセージがでて、消せないイメージもあります。docker ps -a -q で確認すると、大量にコンテナがいます。コミットもしないので、もう、いらないコンテナたちなので消しちゃってもいいはずです。

```bash
docker rm $(docker ps -a -q) 
```

でコンテナを消してからdocker rmiすると、<none>のrepositoryは全部消えてくれます。
【C#】和暦変換する



和暦変換するってこんなめんどくさいの。。。

```lang:C#
CultureInfo culture = null;
DateTime now = System.DateTime.Now;
CultureInfo culture = (CultureInfo)(Thread.CurrentThread.CurrentCulture.Clone());
Calendar jpCal = new System.Globalization.JapaneseCalendar();
culture.DateTimeFormat.Calendar = jpCal;

string d = now.ToString("F", culture);

```






参考
http://uchukamen.com/Programming/DateFormat/