OmniAICreator/Qiita-1.07M huggingface dataset:
Railsでlibv8/therubyracerがMacOSX(Yosemite)でインストールできない問題対策


## 動機と問題
やりたいことはRailsの開発環境をMacOS上に構築することです。もう少し具体的にすると、

* RailsアプリケーションはLinuxサーバで公開する（nginx, unicornで動作させる）
* 開発環境（手元のmac）では動作確認はしたいけど`rails server`(WEBrick)で十分
* git, chefで管理したいのでコードはできるだけ共通にしたかった

です。`rails new`したあとのGemfileのコメントを外してunicornを使えるようにしておきます。

```ruby:app/Gemfile
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.7'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer',  platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring',        group: :development
# Use unicorn as the app server
gem 'unicorn
```

ここで問題となるのが、OS X Mavericks以降(?)で確認されているらしい問題で、Mac上で`bundle install`するときに`libv8`、`therubyracer`のインストールが失敗してしまいます。`bundle install`したときのエラーはこのような感じ。

```
An error occurred while installing therubyracer (0.12.2), and Bundler cannot
continue.
Make sure that `gem install therubyracer -v '0.12.2'` succeeds before bundling.
```

どうやらMacの環境と相性があるらしく、それぞれに合うバージョンを入れる必要があるようです。

```
$ bundle config build.libv8 — –with-system-v8
$ bundle config build.therubyracer — –with-v8-dir
```

[Railsでtherubyracerがインストールできない問題を解決](http://mintoa.hatenablog.com/entry/2014/05/27/202445)こちらの記事など参考になるかもしれません。

## それでもダメだった
それでもなぜ記事にしているかというと、半日戦ってダメだったからです（原因はよくわかりません…）。
つまり、上記のGemfileではMac上で`bundle install`が通らない、とはいえGemfileはひとつにしておきたいし`therubyracer`はサーバで必要なので消したくない状態です。

ということで、別の逃げ道を探します。

## 解決策
`therubyracer`が必要なのはサーバだけなので、ローカルではこれをインストール対象にしなければよさそうです。

具体的には、`gem 'therubyracer',  platforms: :ruby`の項目をグループにして、`--without`オプションをつけて`bundle install`します。

```app/Gemfile
group :production do
    # See https://github.com/sstephenson/execjs#readme for more supported runtimes
    gem 'therubyracer',  platforms: :ruby
end
```

毎回オプションをつけるのも面倒なので、configに追加しておきます。

```app/.bundle/config
BUNDLE_WITHOUT: production
```

これでMac上でも`bundle install`が通りました。
サーバではwithoutを設定せず通常通り`bundle install`して、`therubyracer`もインストールしてやります。

（この環境依存はどうにかならないものか…）
VSのC#コンパイラは通るけどUnity(Mono)のコンパイラは通らない謎のケース

#現象
Unityのバージョンは5.2.0f3で検証。

「VisualStadio上ではコンパイルが成功するが、Unityにコンパイルさせるとエラーを吐く」
というケースがあったので条件をまとめておく。
詳しい解説をしてくださる方が現れると嬉しいなーとかとか。

具体的には、以下の条件がそろっている時に、クラスAからB.Mにアクセスすると何故か「アクセス権が足りない」とエラーが出る。

- クラスAがジェネリッククラス
- クラスBがクラスAの子クラス
- メンバMがpublic event

```通らないケース.cs
using UnityEngine;

class TestParent<T>
{
    void Hoge()
    {
        var item = new Sub();

        item.eventHandler += (obj) => Debug.Log(obj);
    }

    class Sub
    {
        public event System.Action<Object> eventHandler;
    }
}
```
パッと見、問題はなさそうだが以下のエラーがUnity上で出る。
![image](https://qiita-image-store.s3.amazonaws.com/0/89863/8c5c981a-2de6-3f21-fb20-5cbcc5b70008.png)

上記コードを以下のように変更し、前述の条件から外れるとエラーは発生しなくなる。
##親クラスがジェネリックでない
```通るケース1.cs
using UnityEngine;

class TestParent
{
    void Hoge()
    {
        var item = new Sub();

        item.eventHandler += (obj) => Debug.Log(obj);
    }

    class Sub
    {
        public event System.Action<Object> eventHandler;
    }
}

```
##対象のメンバがeventではない
```通るケース2.cs
using UnityEngine;

class TestParent<T>
{
    void Hoge()
    {
        var item = new Sub();

        item.eventHandler += (obj) => Debug.Log(obj);
    }

    class Sub
    {
        public System.Action<Object> eventHandler;
    }
}
```
## アクセス対象のクラスが子クラスではない
```通るケース3.cs
using UnityEngine;

class TestParent<T>
{
    void Hoge()
    {
        var item = new Sub();

        item.eventHandler += (obj) => Debug.Log(obj);
    }

}

class Sub
{
    public event System.Action<Object> eventHandler;
}

```

#原因は何なのか
- 一見アクセス権にあまり関係ない部分の変更で挙動が変化する
- 同様のコードをVisualStudioのコンパイラでコンパイルするとエラーは出ない。
- (VSの).Netのバージョンを2.0まで下げても結果は変わらないので、C#自体の仕様が途中で変わった、というケースは薄そう。

という点から、単にUnityが利用しているMonoの不具合じゃないかなーと予想。
ただ、ちょっと条件が複雑なので自分の英語ググり力では同様の報告を見つけることができなかった...

調査が進展したら追記します。
grepで行番号を表示しました。

grepをしていると検索結果に行番号を表示したくなります。

# nオプションを付ける
grepに行数を表示するには`n`オプションを使用します。

```bash:行数を表示
grep -n "title" -R app/views/events/

app/views/events//_form.html.slim:15:      = f.label :title
app/views/events//_form.html.slim:16:      = f.text_field app/views/events//show.html.slim:4:  = @event.title
```
ファイル名の後ろに付いているのが行番号のようです。

# 参考
http://takuya-1st.hatenablog.jp/entry/20100316/1268739433
GoogleMapSDK環境構築でリンクエラー（swift）

GoogleMapとswift(Xcode7)で遊んでみようと思ったのですが、セットアップで思いっきりはまったので投稿します。

cocoapodを使用してGoogleMapsをインストール後、*.xcworkspaceからxcodeを起動し、ビルドすると、

以下のリンクエラーが発生します

```swift
error: linker command failed with exit code 1 (use -v to see invocation)
```

対処法は
プロジェクトの[TARGETS] - [Build Settings] - [Enable Bitcode]を[No]にすることでビルドエラーを解消できます。
CentOS6.6にPostgreSQL9.4をインストールする


## はじめに

CentOS6.6にPostgreSQL9.4をインストールする方法を記述します。

## 環境

* CentOS6.6
* PostgreSQL9.4

## リポジトリの追加

```shell
$ wget http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm
$ sudo yum localinstall pgdg-centos94-9.4-1.noarch.rpm
```

## インストール

```shell
$ sudo yum install postgresql94-server.x86_64 postgresql94.x86_64 postgresql94-libs.x86_64
```

## データベースの初期化

```shell
$ sudo service postgresql-9.4 initdb
データベースを初期化中:                                    [  OK  ]
```

## 起動

```shell
$ sudo service postgresql-9.4 start
postgresql-9.4 サービスを開始中:                           [  OK  ]
```

## パスワード設定

```shell
$ sudo su - postgres
-bash-4.1$ psql
psql (9.4.4)
"help" でヘルプを表示します.

postgres=# alter user postgres with password '*****';
ALTER ROLE
postgres=# \q
```

## ユーザ作成

```shell
-bash-4.1$ createuser -s admin
```

## データベース作成

```shell
$ createdb sample;
$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 sample    | admin    | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(4 行)
```

## テーブル作成

```shell
$ psql sample
psql (9.4.4)
"help" でヘルプを表示します.

sample=# \d
リレーションがありません。

sample=# create table test(id integer, name character varying(32));
CREATE TABLE
sample=# \d
          リレーションの一覧
 スキーマ | 名前 |    型    | 所有者
----------+------+----------+---------
 public   | test | テーブル | vagrant
(1 行)

sample=# \d test
        テーブル "public.test"
  列  |          型           | 修飾語
------+-----------------------+--------
 id   | integer               |
 name | character varying(32) |
```

## 参考

* [PostgreSQL RPM Building Project - Repository Packages] (http://yum.postgresql.org/repopackages.php)
[memo] 入門 GNU Emacs 第2版 (オライリー) 第5章

# dired

- `dired-do-compress` は compress と gzip にのみ対応する。
- `auto-compress-mode` というものがある。
- dired 内で diff を実行できる。(`M-=`)
- dired 内で unix command を実行できる。(`!`) このとき、 cursor 下の filename は「`*`」で表現できる。
- `revert-buffer` で更新する必要があるかないかに一貫性はない。
- `dired-unmark-all-files`
- `%m`, `$d` のあとに正規表現を入れれば、 filename が match する file に mark をつけられる。
- `dired-create-directory`
- `dired-do-query-replace` : markした file で文字列の確認置換。
- `dired-do-rename` は file 移動と filename 変更の両方に使える。`mv` がこの両方に使えるのと同様。
- `dired-next-dirline`

# dired 以外

- `manual-entry` : man page が読める。
- ~/.diary に予定を書いておけば calendar に表示できる。
- `calendar-phases-of-moon` で月の周期を表示できる。
Ruby-Processing 円軌道と上下運動の組み合わせ


円軌道をぐるぐる回りながら、かつ軌道上を上下に移動するサンプルです。
上下運動には、sin 関数を使っています。またそれぞれの円ごとに開始タイミングをずらしています。

![circular-motion3.gif](https://qiita-image-store.s3.amazonaws.com/0/1900/74f679bf-e000-e3d5-2f18-a40f39640a0a.gif "circular-motion3.gif")


## 最初のバージョン(失敗:先頭と末尾がつながっていない)

![circular-motion5.gif](https://qiita-image-store.s3.amazonaws.com/0/1900/70e942f1-f0b4-676d-ddbb-473292fac2da.gif "circular-motion5.gif")



上下運動の開始タイミングをずらしてみたところ、はじめと終わりの円がきれいに繋がらない問題に気づきました。はじめと終わりの円には、赤と緑で色づけしています。
きれいに繋がるようにするためには、ずらす値をいくつにすればよいか考える必要がありました。

はじめと終わりの円がきれいに繋がっていないプログラム:


```ruby
load_library :vecmath

R = 100 # 円の半径

def setup
  size 400, 400

  @vecs = []
  n = 24 # 円の数
  n.times {|i|
    v = Vec2D.new(R, 0)
    v.rotate!((i * (360.0 / n)).radians)
    @vecs << v
  }
end

def draw
  background 255
  translate width/2, height/2

  stroke 0xd4, 0xca, 0xf4
  line(-width, 0, width, 0)   # X 軸
  line(0, height, 0, -height) # Y 軸

  no_fill
  ellipse(0, 0, R * 2, R * 2)

  stroke 0
  @vecs.each_with_index {|v, i|
    f = frame_count - i * 4 # インデックスに応じて適当にずらす
    v.set_mag(R + 20 * sin(f * 0.1))
    v.rotate!(1.radians)

    if @coloring
      # 先頭と末尾の円には色をつける(境目の判断)。
      if i == 0
        fill 255, 0, 0
      elsif i == @vecs.size-1
        fill 0, 255, 0
      else
        no_fill
      end
    end
    ellipse(v.x, -v.y, 20, 20)
  }  
end

def key_pressed
  if key == ' '
    # スペースキーで、先頭、末尾の円に色をつける
    @coloring = !@coloring
  end
end
```

## 修正バージョン

![circular-motion.gif](https://qiita-image-store.s3.amazonaws.com/0/1900/f4f2afc2-4e37-b31b-2638-01d921f47307.gif "circular-motion.gif")


上下方向にずらす値を求めるのに、sin() を使っています。ちょうど `2 * PI` だけずれると元に戻りますので、`2 * PI` を円の個数で割って、その値だけずらすようにしたところ、今度ははじめと終わりの円がきれいに繋がってくれました。

はじめと終わりの円がきれいに繋がるように修正したプログラム:

```ruby
load_library :vecmath

R = 100 # 円の半径

def setup
  size 400, 400

  @vecs = []
  n = 24 # 円の数
  n.times {|i|
    v = Vec2D.new(R, 0)
    v.rotate!((i * (360.0 / n)).radians)
    @vecs << v
  }
end

def draw
  background 255
  translate width/2, height/2

  stroke 0xd4, 0xca, 0xf4
  line(-width, 0, width, 0)   # X 軸
  line(0, height, 0, -height) # Y 軸

  no_fill
  ellipse(0, 0, R * 2, R * 2)

  stroke 0
  @vecs.each_with_index {|v, i|
    f1 = frame_count * 0.1 # この値がベース
    d = 2 * PI / @vecs.size # 先頭と末尾のずれが一致するようにする
    f1 += d * i * 2
  
    v.set_mag(R + 20 * sin(f1))
    v.rotate!(1.radians)

    if @coloring
      # 先頭と末尾の円には色をつける(境目の判断)。
      if i == 0
        fill 255, 0, 0
      elsif i == @vecs.size-1
        fill 0, 255, 0
      else
        no_fill
      end
    end
    ellipse(v.x, -v.y, 20, 20)
  }  
end

def key_pressed
  if key == ' '
    # スペースキーで、先頭、末尾の円に色をつける
    @coloring = !@coloring
  end
end
```
LinuxでUSBマウスからスリープ復帰させないようにする方法のメモ

## 初期状態

```bash
$ cat /proc/acpi/wakeup | grep enable
EHC1	S3	*enabled pci:0000:00:1d.0
XHC	S3	*enabled pci:0000:00:14.0
PWRB	S3	*enabled platform:PNP0C0C:00
SLPB	S3	*enabled platform:PNP0C0E:00
LID0	S3	*enabled platform:PNP0C0D:00
```

## 設定の変更

```bash
$ sudo echo XHC > /proc/acpi/wakeup
$ sudo echo EHC1 > /proc/acpi/wakeup
```

## 結果

```bash
$ cat /proc/acpi/wakeup | grep "XHC\|EHC1"
EHC1	S3	*disabled pci:0000:00:1d.0
XHC	S3	*disabled pci:0000:00:14.0
```

「XHC」と「EHC1」が両方disabledになればおｋ
[memo] 入門 GNU Emacs 第2版 (オライリー) 第1章

- `find-alternative-file` : 間違った file を開いたときに使う。`kill-buffer` して `find-file` するのと同じ効果。
- `write-file` : 別名で保存。編集権限を与えられていない file に対し使うと便利。
- Flow 制御 character `C-s` を押すと Emacs が止まることがある。普段は問題なく `C-s` を使える端末でも、 rlogin や telnet では問題が出ることがある。とりあえずの解決は `C-q` を押すこと。長期的には `enable-flow-control` を実行すること。こうすると、 `C-s`, `C-q` の代わりに `C-\`, `C-^` を使えるようになる。
- "This terminal is not powerful to run Emacs" という error が出るのは、古代の端末を使っているときか、環境変数 TERM が正しくないとき。
ajaxのダウンロードでプログレスバー

コピペで済むかと思いきや、ajaxのダウンロードにプログレスバーを付けるソースが意外と転がってなかったのでメモとして。
jQueryとjQueryUIを使っています。


## 毎回表示されると邪魔
小さいデータをダウンロードする度に毎回一瞬プログレスバーが表示されるのも邪魔だったので、初回プログレスイベント時のダウンロード率でプログレスバーを表示するかどうか判断を入れる形にしました。

そもそも待ち時間をユーザに知らせる事がプログレスバーを付ける目的なので、一瞬プログレスバーが見えてもしょうがないなーという事です。

`speedThreshold` にプログレスバー有無の判断に使う初回ダウンロード率の閾値を設定しています。プログレスイベントが走るタイミングがブラウザや環境によって違いそうなので大まかにですが。
これも目的を考えると厳密さを求められる物じゃないという事で適当な実装を許してください。

デフォルトだと`0.1`になっていますがもっと大きい方がいいと思います。
これだと余程小さいファイル以外はプログレスバーが出てしまいますね。

## ソースはこんな感じ
```js:FileDownLoadProgress.js
var FileDownLoadProgress = {
  viewFlug:"firstTime",
  defaults:{
    url:"",
    type:"GET",
    dataType:"",
    success:function(){},
    error:function(){},
    speedThreshold:0.1
  },
  settings:{},
  loadFile:function(options){
    this.settings = $.extend({}, this.defaults, options);
    this.addProgressBar();
    $.ajax({
      url:this.settings.url,
      type:this.settings.type,
      context:this,
      success:function(data){
        this.settings.success();
        this.removeProgressBar();
      },
      error:function(data){
        this.settings.error();
        this.removeProgressBar();
      },
      xhr:function(){
        //passing ParentClass
        parentClass = this.context;
        //add event the Progress for XHR
        var xhr = $.ajaxSettings.xhr();
        xhr.addEventListener("progress",this.progress);
        return xhr;
      },
      progress:function(ev){
        //check speed at the first event
        if(parentClass.viewFlug == "firstTime"){
          parentClass.viewFlug = parentClass.checkProgressBarNecessity(ev);
        }
        if(parentClass.viewFlug){
          //change for value in progress
          $('#progress').progressbar('value',(ev.loaded / ev.total) * 100);
        }
      }
    });
  },
  addProgressBar:function(){
    $('body').append('<div id="progress">');
    $('#progress').progressbar({value:0,max:100});
  },
  removeProgressBar:function(){
    $('#progress').animate({opacity:0},500,function(){
      $(this).remove();
    });
    this.viewFlug = "firstTime";
  },
  checkProgressBarNecessity:function(ev){
    return ev.loaded / ev.total < this.settings.speedThreshold;
  }
}
```
```js:index.html
$(function(){
  FileDownLoadProgress.loadFile({
    url:"data/1m",
    dataType:"json",
    success:function() {
      console.log("success");
    },
    error:function() {
      console.log("error");
    }
  });
});
```
jqueryの`ajax()`にprogressイベントを書き足しているだけです。
追加したprogressイベントの中で自身のクラスを呼ぶ為に
`context:this` → `parentClass = this.context` → `parentClass`
という経路で渡しています。

ソースはgithubにも置いてあります。
https://github.com/pppp606/file_downLoad_progress

---

蛇足ですが余りにも英語力が無いので少し英語の勉強でもするかと適当な英語でコメントを書いてみる事にしました。割と酷い！
メソッド名や変数名の命名が苦手な人向けプラグイン

こんな人に役に立つのではないかと思ったEclipseプラグイン

- メソッド名や変数名の命名が苦手な人
- 命名の引き出しが少ない人

# Eclipseプラグイン「Codic」
URL:https://codic.jp/

日本語をもとに、関数名・変数名に提供してくれるツール(アカウント作成必要)

もともとは英和辞典や翻訳ツールのように
日本語を入力すると、それに訳した変数・関数の英語が返ってくる簡単なサイト。
そのときの名前は「デベロッパーのためのネーミング辞書」
エンジニア自身が「この時はこんな命名をした。」を登録していって、それを検索できるようにしたサイトでした。

こんな感じ
![codic1.PNG](https://qiita-image-store.s3.amazonaws.com/0/74613/89cba5db-b4de-51f7-9600-19a0b75b2be6.png)

それがいつのまにか、Eclipseのプラグインが登場

プラグインを入れると
Ctrl + Shift + Dで検索バーが出てその場で命名できる
キャメルケースやスネークケースなども選択可

![codic2.PNG](https://qiita-image-store.s3.amazonaws.com/0/74613/23c0fe07-f86e-6294-5f04-83b8e9aaada0.png)

もし「この命名よりも俺が考えた命名のほうが適している！！」となれば、
URL:https://codic.jp/ から追加することができる

※ただし検索した単語がどこに漏れているかわからないので、
　プロジェクト固有の単語とか入れてしまう危険があれば、
　職場での使用はおすすめできない。
　あくまで個人の開発のときに使うべきかと

いろんな単語を目にすることも命名力の向上になるのかなぁ。と思いました。
CentOS 7 インストール記録 2. windows とのデュアルブート


イントラネット環境下で、mac の launchctl と、共有フォルダの代替を検討するために。

1. windows の方ではパーティションを切った。
2. インストーラに従ってインストール。全部入りを。
3. CentOS 7 の方でしか起動出来ないので、素直にログイン。

# 一番最初にする事
## grub2
ブートローダーの設定。

別段特別な事をせずとも、以下の手順だけで、選択出来る様になった。

### 関連書類生成

```
# grub2-mkconfig 
```

### 40_custom の編集
```/etc/grub.d/40_custom
menuentry "Windows 7" {
    set root='(hd0,1)'
    chainloader +1
}
```

を末尾に追加

`'hd(0,1)'` は、 windows がパーティション 0 に入っている場合。

```
# grub2-mkconfig -o /boot/grub2/grub.cfg
```

して、編集結果を反映。

次回再起動時から自動的に選択肢が現れる、、、と。

## 設定
アプリケーション -> 設定 -> ネットワーク
で有線を ON
プロファイルの追加をクリックして、 IPv4 タブでアドレスなど設定

## マシン名変更
設定 -> 共有から変更しようとしても、グレーアウトしたまま、選択出来ない状態。
多分、他に設定出来る場所があるのだろうが、コマンドで済ます。

```
$ hostnamectl set-hostname 変更後のホスト名
```



## firewall/SELinux
イントラネットの中と言う事で、`firewall` と `SELinux` は切る。

### firewall の無効化



```
# systemctl list-unit-files | grep firewall
firewalld.service                           enabled
# systemctl disable firewalld.service
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
# systemctl list-unit-files | grep firewall
firewalld.service                           disabled
# reboot
```

### SELinux 無効化
```
# cd /etc/sysconfig/
# cp selinux selinux.bak
# diff selinux selinux.bak
7c7
< SELINUX=disabled
---
> SELINUX=enforcing
```

## なんかウザい
スマートカード関連のサービスらしいんだけど。

```
# systemctl status pcscd
# systemctl stop pcscd.server
# systemctl stop pcscd.socket
```
これで、止める事が出来たかと思いきや、 `./esc blur blur blur` ってコマンドがユーザ名で実行されてる。
ちょっとだけ調べたが、止める方法が判らん。
結局、面倒くさいから、長いものには巻かれる。

```
# yum remove esc
```
Amon2::Lite おさらい 5. launchctl


[4.](http://qiita.com/bunzaemon/items/bcf575655e7ccfd5e6aa)の続き

最後に。

折角なので、デーモンにして、自動起動にさせてみる。
と言っても、`launchctl` 用の `.plist` 書いて、 `/Library/LaunchDaemons` に置くだけなんだけど。
## .plist

リバースドメインは、 com.bunzaemon.XXXX にして、XXXX にはコマンド名が入る形に。


```xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>com.bunzaemon.bl2seq</string>
        <key>WorkingDirectory</key>
        <string>/PATH/TO/Example</string>
        <key>EnvironmentVariables</key>
        <dict>
            <key>PLACK_ENV</key>
            <string>development</string>
        </dict>
        <key>ProgramArguments</key>
        <array>
                <string>/PATH/TO/plackup</string>
                <string>-p</string>
                <string>4077</string>
                <string>-a</string>
                <string>app.psgi</string>
        </array>
        <key>StandardOutPath</key>
        <string>/tmp/com.bunzaemon.bl2seq.stdout.log</string>
        <key>StandardErrorPath</key>
        <string>/tmp/com.bunzaemon.bl2seq.stderr.log</string>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>
```

- /PATH/TO は適宜自分の環境に合せて変更を
- WorkingDirectory には、 app.psgi があるディレクトリの絶対パスを。
- EnvironmentVariables は、コード中にユーザー特有の環境変数がある時には、指定してやる。
	- 今回は必要無いのだけれど、例の為 PLACKUP_ENV を指定している。 key と string のセット
	- PERL5OPT や、PERL5LIB などを入れる事になるだろう。
	- 環境変数の $PATH を入れる時は追加書きではなく上書きである事に注意。
		- 普通に `:` で区切って複数登録
- で実際のコマンドは、ProgramArguments に配列として、スペース区切りをそれぞれ `<strings></strings>` 内に記載
	- plackup は、 -p でポートが変更出来る。ってのを書きたかっただけで、4077 にポート変更。
	- WorkingDirectory のパスを指定しなければ、 app.psgi は絶対パスで。
- stderr, stdout はとりあえず /tmp に置く

これを com.bunzaemon.bl2seq.plist として保存したら、

```
$ sudo mv com.bunzaemon.bl2seq.plist /Library/LaunchDaemons
$ cd !$
$ sudo chown root com.bunzaemon.bl2seq.plist
$ sudo chmod 0600 !$
```

これで、

```
$ sudo launchctl load com.bunzaemon.bl2seq.plist
```

してもいいし、mac の再起動でもいい。

後は、http://localhost:4077 へ。

停止は、

```
$ sudo launchctl unload com.bunzaemon.bl2seq.plist
```


以上で、 Amon2::Lite のおさらい終り。
unity > System.DateTime > 現在のmsecを取得する実装

```txt:動作確認
Unity 5.1.3-f1 on MacOS X 10.8.5
```

System.DateTimeを普通に使う限りはミリ秒の値は取れないようだ。

http://stackoverflow.com/questions/4016483/get-time-in-milliseconds-using-c-sharp
のJosua Schmidさんの投稿を元に実装してみた。
もともとはJan1St1970 を使っていたが、Nowから生成するnowMsec0を使えばよさそう。

```CheckMsec.cs
using UnityEngine;
using System.Collections;

using System;

public class CheckMsec : MonoBehaviour {

	long get_msec() {
		System.DateTime now = System.DateTime.Now;
		System.DateTime nowMsec0 = new DateTime (now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second);
		long TotalMsec = (long)((DateTime.Now - nowMsec0).TotalMilliseconds);

		return TotalMsec;
	}

	void Start () {
		StartCoroutine("WaitCoRoutine");
	}

	private IEnumerator WaitCoRoutine() {
		for (int idx=0; idx<4; idx++) {
			yield return new WaitForSeconds(0.3f); // every 300 msec

			long msec = get_msec ();
			Debug.Log ("msec=" + msec.ToString ());
		}
	}
}
```

コルーチンを使って300msecのwaitをつけている。

下記が実行例。
(552-236)msecで300msecプラスアルファの処理になっているのが分かる。

![Untitled_-_150913-nowMsec_-_PC__Mac___Linux_Standalone__Personal_.jpg](https://qiita-image-store.s3.amazonaws.com/0/32870/7d91df3b-9717-8ecb-78ea-a416677dc210.jpeg)
ATOKを使い始めたのでメモ

## 英数字とスペースは半角をデフォルトにしたい

  * 入力補助＞スペースバーで入力する空白文字の全角・半角
    * 常に半角・上記の逆
  * 半角全角変換＞英字・数字を半角に

## キーバインドをいじりたい

キー・ローマ字カスタマイザから頑張っていじる。データをエクスポートする機能はない？っぽいので以下の手順で移してみた。

  * 新しい設定を作る
  * `~/Library/Preferences/ATOK28/Styles`の中にできる`StUser0.plist`を上書きする

キーバインドは以下のサイトを参考にいじってみた。

  * [ATOKのキーバインドをEmacs風にする - ekurodaの日記](http://d.hatena.ne.jp/e-kuroda/20081121/1227251088)

ただし『カーソル前移動』などは『挿入ポイント前移動』という言葉になっているので注意。

## Emacsで色とかつける

バージョンが上がるたびに変える必要があるっぽい

```el
(mac-set-input-method-parameter "com.justsystems.inputmethod.atok28.Japanese" `title "あ")
(mac-set-input-method-parameter "com.justsystems.inputmethod.atok28.Japanese" `cursor-color "red")
```

## Google日本語入力にはあるけどATOKには無さそうな機能

  * SKK風のzから始まる変換（→とかいろいろ）
  * キーバインドの設定をエクスポートする機能

## ATOKのいいところ

  * 変換精度が圧倒的によい
    * うまく変換できないときは大体自分の日本語が間違えている印象
  * なんか便利そうな機能がたくさんついているので色々試したくなる
  * 安い月額で自分の複数台のMacに入れても問題ないライセンスを提供してくれているのはかなり太っ腹
動画広告基礎知識 - VMAPとは

# VMAPの概要

VMAPとはIABが定義した仕様で、『動画本編のどの位置に広告を差し込むのか、またその広告はどこから取得してくるのか』を定義するための仕様です。
例えば、尺が30分間のバラエティー番組があったとして、番組の始まる前（pre-roll）と14分20秒地点（mid-roll）と一番最後（post-roll）に広告の挿入箇所（AdBreakと呼びます）を設ける、といったことを定義するのに使います。


# VMAPを使うメリット

動画プレイヤーがVMAPに対応していると、本編がどのプレイヤー環境で再生されたとしても同じ位置にAdBreakを置くことが出来ます。
つまり、PC上のFlash Playerで本編を再生している場合でも、スマホのアプリ上で再生している場合でも、あるいはコンテンツのシンジケーション先の他社製プレイヤーで再生されている場合でも、同じ位置で広告が挿入されるようになります。

VMAPは主にプレミアムなコンテンツホルダーが利用することを想定しています。
例えば、ドラマやドキュメンタリーの場合、広告を挿入しても気にならない位置（場面が切り替わるところとか）があるかと思います。本編動画がどこで流れていようとも同じ位置で広告が挿入されることで、コンテンツホルダーはどの環境でも同じような本編の視聴体験をさせるようにコントールすることが出来ます。（サイトAではきちんとした場所で広告が挿入されるのに、サイトBは3分おきに広告が入るとかイヤですよね）


# VMAPとVAST3のAd Podsとの違い

VMAPはVAST3で定義されたAd Podsとよくごっちゃにされますが、『Ad Podsは1回の広告レスポンス内で複数の広告を返すための仕様』です。
VMAPでAdBreakの位置を定義し、各AdBreak内で複数の広告を連続して流す場合にはAd Podsを使う、というような使い分けをします。

Ad Podsが出てくる前は、1回の広告リクエストで返すことの出来る広告は1つに限られていました。そのため、1つのAdBreak内で複数の広告を流したい場合、広告サーバーに複数回リクエストする必要がありました。
Ad Podsでは複数の広告をまとめて返すことができるため、広告サーバー側で『45秒に収まるように複数広告を返す（例えば、15秒広告が3つ、あるいは30秒と15秒の広告が1つずつ）』といったことが実装しやすくなります。

# 実際のVMAPの例

VMAPは次のような形式のXMLです。
`<AdBreak>`で広告挿入箇所を定義し、その箇所に差し込む広告タグを`<AdTagURI>`または`<VASTAdData>`で記載します。

```xml
<vmap:VMAP xmlns:vmap="http://www.iab.net/videosuite/vmap" version="1.0">
  <vmap:AdBreak breakType="linear" breakId="mypre" timeOffset="start">
    <!-- timeOffset="start"はpre-roll -->
    <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="1">
      <!-- Adタグを書く場合はこのような形で -->
      <vmap:AdTagURI templateType="vast3">
        <![CDATA[http://adserver.example.com/get/preroll]]>
      </vmap:AdTagURI>
    </vmap:AdSource>
  </vmap:AdBreak>
  <vmap:AdBreak breakType="linear" breakId="mymid" timeOffset="00:14:20.000">
    <!-- 14分20秒地点にmid-roll -->
    <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="2">
      <vmap:AdTagURI templateType="vast3">
        <![CDATA[http://adserver.example.com/get/midroll]]>
      </vmap:AdTagURI>
    </vmap:AdSource>
  </vmap:AdBreak>
  <vmap:AdBreak breakType="linear" breakId="myend" timeOffset="end">
    <!-- post-roll -->
    <vmap:AdSource allowMultipleAds="true" followRedirects="true" id="3">
      <vmap:VASTAdData>
        <VAST version="3.0" xsi:noNamespaceSchemaLocation="vast.xsd">
          <!--VMAP内に直接VASTを埋め込むことも出来る-->
        </VAST>
      </vmap:VASTAdData>
    </vmap:AdSource>
  </vmap:AdBreak>
</vmap:VMAP>
```


# リファレンス

- [Digital Video Multiple Ad Playlist (VMAP) 1.0.1](http://www.iab.net/guidelines/508676/digitalvideo/vsuite/vmap)
FuelPHPでリレーション。JOINを試す。

http://qiita.com/ms2sato/items/d678997709e6a388149f
で簡単にFuelPHPを試してみました。

あと大事なことといえば下記らへんでしょうか。

- routesの変更の仕方
- リレーションとJOINのやり方。
- POSTされたデータの癖（これは確認すればOK）

# 今回はJOIN

どうやら下記の二種類の方法がある様子です。とりあえず先に有効にしていたORMを試すと良さそうだと考えました。

- Query_Builder_Select
- ORM

一次情報の翻訳は下記の様子です。これの後半に色々と例が載っています。
http://fuelphp.jp/docs/1.7/packages/orm/crud.html

# Modelの作成とMigration

雛形の作成

```terminal
oil g model comment body:text thread_id:integer
```

http://fuelphp.jp/docs/1.7/classes/database/dbutil.html#/method_add_foregin_key

このあたりを見つつ外部キーも入れてみました。編集したマイグレーションのファイルが以下です。

```php:fuel/app/migrations/003_create_comments.php
<?php

namespace Fuel\Migrations;

class Create_comments
{
	public function up()
	{
		\DBUtil::create_table('comments', [
			'id' => ['constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true],
			'body' => ['type' => 'text'],
			'thread_id' => ['constraint' => 11, 'type' => 'int', 'unsigned' => true],
		], ['id']);

		\DBUtil::add_foreign_key('comments', [
			  'constraint' => 'index_comments_to_thread',
		    'key' => 'thread_id',
		    'reference' => [
		        'table' => 'threads',
		        'column' => 'id',
		    ],
		    'on_delete' => 'CASCADE'
		]);
	}

	public function down()
	{
		\DBUtil::drop_table('comments');
	}
}

```

作ったらマイグレーションしてみます。エラー出ずに終了すればOK。

```terminal
oil refine migrate
```

エラー出なかったけど思った通り出来なかった時は下記を使って戻します。今回は試しながらやったので何度かdownしたりupしたりを繰り返しました。

```terminal
oil refine migrate:down
```

試しに`phpMyAdmin`でデータを作ってみたらちゃんと外部キー制約されたデータが作成できました（`thread_id`に存在しない`thread_id`を指定するとエラーでレコードは作成されません）。

# モデルのリレーション

リレーションをモデルに記すことで便利なメソッドが使えるようになります。

## Thread
http://fuelphp.jp/docs/1.7/packages/orm/relations/has_many.html

```php:thread.php
protected static $_has_many = ['comments'];
```

## Comment
http://fuelphp.jp/docs/1.7/packages/orm/relations/belongs_to.html

```php:comment.php
protected static $_belongs_to = ['thread'];
```


# リレーションしているデータを取得

http://fuelphp.jp/docs/1.7/packages/orm/crud.html
によると、relatedメソッドを使うと良さそうです。

```terminal
oil console
```

して試してみます。

```
Model_Thread::find('all', ['related' => ['comments']])
```

先にphpMyAdminで作成したコメントのデータがスレッドと一緒に取れました。バッチリです。

# Viewに表示する

先に試した方法で、findにオプションを付ければJOINされるとわかりましたので、下記のように取得部分を編集しました（デフォルトで作られるこの部分のコードってアンチパターンの気がします。if文の中で代入するのはやめるほうがいいと思うのですが）。

```php:thread.php
		if ( ! $data['thread'] = Model_Thread::find($id, ['related' =>['comments']]))

```

そしてViewを下記のようにすると無事にコメントが表示できました！

```html+php:thread/view.php
<p>
	<h3>Comments</h3>
	<?php foreach($thread->comments as $index => $comment ) { ?>
		<p><?php echo $comment->body ?></p>
	<?php } ?>
</p>
```

余談ですが、 `<script>alert('test')</script>`のようなテキストを入れてもちゃんと画面にサニタイズされているのですね。

今回の対応はこちら
https://github.com/ms2sato/fuelsample/commit/73466f771456ed4dbada09a1bff5ef8aa3a73cdc
Rasberry Pi 2 Mobile B を動かすまで

全部買い揃えると、安いものを選択していっても1万円弱くらいはみておいたほうがいい。

# 必要なもの
## Raspberry Pi
本体だけだと何もできない

## Micro USB
電源をこれで供給します。
Android使っている人なら、たぶん、電源アダプタがそのまま使える。

## Micro SD 
これにOSを焼いて使うことになる。
8G以上はあったほうがいいかも。自分は16Gを選択。
PCがMicro SDスロットを搭載してないことが多いと思うが、そういう場合はSDカードアダプタとかUSBアダプタがついているのを買うとよい。

## ケース(オプション)
本体を裸で使うのもありだけど、ケースはあったほうがよいと思う。
ホコリとかから守れるし、余計なところを触って本体を壊してしまうリスクが減る。

## キーボード
あまりがあるならそれを使うとよい。

## マウス
コマンドでしか作業しないならいらないけど、GUIで何かしたい場合は必要。

## HDMIケーブル
モニターを接続するのに必要。
SSHとかの設定をしてしまえば不必要になる。

## LANケーブル、無線LAN子機(オプション)
ネットにつなげる気がないなら必要ない。

# 動作準備
1. OSのダウンロード
[ここ](https://www.raspberrypi.org/downloads/)から好きなOSをダウンロードする。

2. OSのインストール
1でダウンロードしたOSをそのままMicro SDにコピーしてもそれだけでは動かないようなので、[ここ](http://sourceforge.net/projects/win32diskimager/)からツールを落としてMicro SDへOSを書き込む。

# 起動
Micro USBを接続すると自動で電源が入る。
デフォルトのユーザ、パスワードは
pi, raspberry

デフォルトでsshが起動していていたので、以降、sshでログインすればHDMIのケーブルとかキーボードは必要なくなる。
Unity 情報を確認する方法メモ

データを確認する方法のメモ。

## Debug.Logを使ってConsoleにログ出力する。  
一番手軽な方法。何かが実行されたかどうかを確認したいときなんかは便利ですね

```
using UnityEngine;

public class Test : MonoBehaviour 
{
	void Update ()
    {
        if (Input.GetKeyDown(KeyCode.Z))
        {
            Debug.Log("Zキーが押されました");
        }
    }
}
```

##  OnGUIで画面に出す
座標のようなリアルタイムに変化するデータを見るときはこっちのほうが便利かも。

```
using UnityEngine;

public class Test : MonoBehaviour
{
    void OnGUI()
    {
        string label = "現在の座標は" + this.transform.position;
        GUI.Label(new Rect(0,0,200,50) , label);
    }
}

```

##エディター拡張を使う
大量の情報を表示させたいときとかはこれが一番な気がします。

```
using UnityEngine;
using UnityEditor;

public class TestWindow : EditorWindow
{
    [MenuItem("EditorWindow/TestWindow")]
    static void Open()
    {
        GetWindow<TestWindow>();

    }
    void OnGUI()
    {
        EditorGUILayout.LabelField("時間" , Time.fixedTime.ToString());
        EditorGUILayout.LabelField("現在のシーン" , Application.loadedLevelName);
    }
}

```

##参考
Unity - マニュアル: エディターウインドウ
http://docs.unity3d.com/ja/current/Manual/editor-EditorWindows.html
CentOS7 chkrootkitが誤検知

自宅サーバー用CentOS7をインストールした物理マシンにセキュリティ対策のためchkrootkitを入れてチェックしたところ
`chkrootkit | grep INFECTED`
`Searching for Suckit rootkit... Warning: /sbin/init INFECTED`
ちょっと大騒ぎ！ぐぐってみるとすぐに解決。
**誤検知みたいだそうです。**
> rpm -V `rpm -qf /sbin/init`

として何も出なければOK！
` ..5....T. /sbin/init`
とでれば改ざんされているようなのでもっと大騒ぎしてください！

chkrootkitダウンロード先
[http://pkgs.fedoraproject.org/repo/pkgs/chkrootkit/chkrootkit-0.50.tar.gz/9e67dd56f835264d43aeb04944610b03/chkrootkit-0.50.tar.gz](http://pkgs.fedoraproject.org/repo/pkgs/chkrootkit/chkrootkit-0.50.tar.gz/9e67dd56f835264d43aeb04944610b03/chkrootkit-0.50.tar.gz)

参考：[chkrootkit のSuckit誤検知の修正](http://vogel.at.webry.info/201306/article_22.html)
ダブルクオートとシングルクオートの速度差は(ほぼ)ない


Perlでは、パフォーマンスを重視するなら、シングルクオートを使うことが通説らしい(5.8時点。最近は知らない)。
それ以来、シングルクオートが文字列になる言語では基本的にシングルクオートを使うようにしている。
が、こんな記事を見つけてしまった。

> Rubyのシングルクォートとダブルクォートは、実行速度には差が無い : /var/log/maeda.log
> http://vividtone.seesaa.net/article/84396945.html

ダブルクオートの式展開はコンパイル時に解決されるらしい。
これを実際に検証したブログはないようだったので、検証してみた(Ruby 2.0 on OSX 10.10)。
irb上でRubyVM::InstructionSequence.compile(...).to_aを使うとバイトコードを表示できるので、これを読めば良いということになる。

検証に使う文字列はこれにした。

```
%q(x=5;puts "aaa #{x**3}")
```

irbに読ませると`"x=5;puts \"aaa \#{x**3}\""`となり、展開はされていないことがわかる。

```
irb> RubyVM::InstructionSequence.compile(%q(x=5;puts "aaa #{x**3}")).to_a
=> ["YARVInstructionSequence/SimpleDataFormat", 2, 0, 1, {:arg_size=>0, :local_size=>2, :stack_max=>4}, "<compiled>", "<compiled>", nil, 1, :top, [:x], 0, [], [1, [:trace, 1], [:putobject, 5], [:setlocal_OP__WC__0, 2], [:trace, 1], [:putself], [:putobject, "aaa "], [:getlocal_OP__WC__0, 2], [:putobject, 3], [:opt_send_simple, {:mid=>:**, :flag=>256, :orig_argc=>1, :blockptr=>nil}], [:tostring], [:concatstrings, 2], [:opt_send_simple, {:mid=>:puts, :flag=>264, :orig_argc=>1, :blockptr=>nil}], [:leave]]]
```

確かにコンパイル時点で式が展開されている。

念のため、シングルクオート版も見てみた。

```
irb> RubyVM::InstructionSequence.compile(%q(x=5;puts 'aaa '+(x**3).to_s)).to_a
=> ["YARVInstructionSequence/SimpleDataFormat", 2, 0, 1, {:arg_size=>0, :local_size=>2, :stack_max=>4}, "<compiled>", "<compiled>", nil, 1, :top, [:x], 0, [], [1, [:trace, 1], [:putobject, 5], [:setlocal_OP__WC__0, 2], [:trace, 1], [:putself], [:putstring, "aaa "], [:trace, 1], [:getlocal_OP__WC__0, 2], [:putobject, 3], [:opt_send_simple, {:mid=>:**, :flag=>256, :orig_argc=>1, :blockptr=>nil}], [:opt_send_simple, {:mid=>:to_s, :flag=>256, :orig_argc=>0, :blockptr=>nil}], [:opt_plus, {:mid=>:+, :flag=>256, :orig_argc=>1, :blockptr=>nil}], [:opt_send_simple, {:mid=>:puts, :flag=>264, :orig_argc=>1, :blockptr=>nil}], [:leave]]]
```

`"aaa "`が:putobjectから:putstringになっているので若干速くなっている可能性があるが、逆に命令数が増えてしまった。

式展開がない場合でも、実行時点では、:putobjectと:putstringの差しかない。
というわけで、ダブルクオートとシングルクオートの速度差は体感できるほどではないことがバイトコードから理解できた。


追伸：
あくまでYARVが対象なので、Ruby 1.8ではどのような扱いなのかは依然としてはっきりしないが、もはや気にする必要はないと思われる。
「すくすくスクラム広島第13回「チームビルティング」」に参加したよ

https://sukusuku-scrum-hiroshima.doorkeeper.jp/events/30345

すくすくスクラム広島に参加しました。

今回は、手を動かすゲームもあって楽しかったです。
ゲームのあと、お互いが感じたことを確認するフェーズもきちんと設けられていて、進行が上手でした。

![20150913_scrum_teambuilding.png](https://qiita-image-store.s3.amazonaws.com/0/53620/f845e1e2-48a7-41b3-ed5b-583fd24ca998.png)

チームビルディングというタイトルでしたが、一番記憶に残った言葉は

* リーダーシップ

でした。

リーダーシップは能力／素質。チームメンバー全員がコミュニケーション力が必要であるように、リーダーシップも必要になることを改めて認識しました。
全員がリーダーというのはちょっと違和感がありました。
リーダーはロールだと思います。チームを構成するロールは、リーダー以外にもいろいろあると思います。
みんながリーダーではなく「みんながリーダーシップを発揮する」にしたほうが適切な気がしました。

アジャイルの勉強会に行くと「自立」「自律」というワードが出てきます。
リーダーシップは「自立」「自律」するために重要な能力／素質だなっと感じました。

リーダーシップの説明を聞いているとき、手を動かし、決定して、リスクをとって、みんなを導いて、意見を取りまとめて、プロセスを敷いて、目標を掲げ、、、これがすべてこなせる人は燃え尽きたりしないのだろうかっと思いましたが、、、

すぐにできるリーダーシップの例

* 電車の事故でタクシー待ちの行列があるとき、、、自分が乗るときに「◯◯方面に行きますが、一緒な方向の方いますか？」の一言をかける

とか、ちょっとしたことでリーダーシップを発揮できることの説明を聞いて安心しました。（あと２つ例があったのですが、忘れてしまいました。）

子どもには「相手の気持ちを考えて行動しないさい」っとよく言うのですが、それができればリーダーシップも発揮できそうな気がしました。
（子どもにいう前に自分が「相手の気持ちを考えて行動しないさい」を実践する必要があります）

これからの仕事では、リーダーシップを考えて取り組みます。
【しずおかアプリ部】活動ログ　第七回

![しずおかアプリ部2.jpg](https://qiita-image-store.s3.amazonaws.com/0/88105/57c2440c-c475-5490-f282-ecb9f6f75bb6.jpeg)


■タイトル
第七回

■開催日
２０１５年９月１２日（土）　１６：００～１８：００

■参加者
８名

■活動内容（概要）
・菅原プレゼン「Unityはじめるよ　～基礎２～」
・作曲家　仁科亜弓さんによるトーク
・保坂プレゼンの入り口「Cocos2d-xで作る物理演算ゲーム　～引っ張って飛ばす編～」

※活動内容（詳細）
【実演・プレゼン】
・「Unityはじめるよ　～基礎２～」

<A HREF="http://monolizm.com/sab/pdf/第七回_プレゼン資料(Unityはじめるよ　～基礎２～).pdf">第七回_プレゼン資料(Unityはじめるよ　～基礎２～).pdf</A>

　Unityの基本構造を紹介
　　GameObjectとコンポーネントの関係
　　スクリプティング
　　　スクリプトもコンポーネントの一種
　　　体験：空のGameObjectにコンポーネントを追加してCubeを表示できるようにする
　　　実行順の話
　　　コルーチンの話
　　　体験：Transformコンポーネントへのアクセス



・作曲家　仁科亜弓さんによるトーク
　紹介
　　静岡市出身の作曲家。多くのCM曲や、有名企業のサウンドロゴの制作に携わっている。
　　また、アーティストとしてサマソニへ参加した経験もある。
　　小さい時に、パソコンで音階のついたビープ音をならせることを知り、それがきっかけでそこから音楽にのめり込んでいく。
　　アーティストとしてレコード会社に自分を売り込み、認められるが、作曲家とアーティストが違うということを知り、作曲家としての道を選んだ。
　　今の仕事は、大学三年の時から続けていて、これからは、「忘れられない世に残る作品作り」を目指している。

　携わったアプリの紹介
　　「ネズミが題材のゲーム」
　　　　BGMに「ネズミ語で歌っている歌」を使った

　　「アラームアプリ」
　　　　綺麗な音色で心地よく目覚められる
　　　　発注者が求める曲数より多くの曲を提案

　　「知らない人とメールのやり取りができるアプリ」
　　　　開発者はすべて女性で、可愛い動物がたくさん出てくる
　　　　動物ごとに異なるサウンドは、動物の声を楽器にたとえて表現している。

　主に使用しているツール
　　MacBookProに「ロジックプロ」というソフト（Apple純正のソフト）をいれ、キーボード（音楽の方の）をつないで作曲
　　
　曲の作り方
　　まず、リズムトラックを作成し、ベースを加え、コード感のある楽器を加え、最後にメロディをつける手法が多い
　　だいたい一つの曲に、３０〜６０もの楽器を使っている　

　　職業的に、アーティストとして自分の感性を入れということより、発注側のイメージ通りに作るということに注力している
　　空気中にカプセルが浮いてて、それを掴むという感じで曲が浮かんでくる。

　　得意な曲調なら２時間くらいで作曲できる
　　アラームアプリの音は１５秒で３、４時間

　サウンドロゴについて
　　企業のイメージを間違って伝えるわけにはいかないので、
　　視聴者に想像力を働かせないような作りにする。
　　普通の曲は視聴者の想像力を利用する場合が多い　　
　

・「Cocos2d-xで作る物理演算ゲーム　～引っ張って飛ばす編～」
　　時間の都合により簡単に流れだけ紹介。
　　次回に繰り越しです。
RealmSwiftの使い方



## 事前準備
`cocoapods`を事前にインストールされていること。

## 環境
Xcode 6.4
swift 1.2
cocoapods 0.38.2
Realm 0.95.0　(2015/09/13現在の最新)


## インストール
以下のURLを参照。
https://realm.io/jp/docs/swift/latest/

まずはXcodeのプロジェクトを作成
ターミナルを起動して作成したプロジェクトのディレクトリへ移動

```
$ cd XXX(作成したディレクトリ)
```

移動後、cocoapodsのPodfileを作成

```
$ pod init
```

Podfileがプロジェクト直下に作成されるので
プロジェクトファイルを以下のように編集

```Podfile
platform :ios, ‘8.0’ ##プロジェクトで想定するiOSのバージョン(今回はiOS 8.0を想定)

use_frameworks! ##Swiftライブラリを使用するために必要な記述

target 'プロジェクト名' do
pod 'RealmSwift'
end

target 'プロジェクト名Tests' do
pod 'RealmSwift'
end

```

編集が完了したら、再びターミナルよりインストールを開始

```
$ pod install
Updating local specs repositories

Analyzing dependencies
Downloading dependencies
Installing Realm (0.95.0)
Installing RealmSwift (0.95.0)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `プロジェクト名.xcworkspace` for this project from now on.
Sending stats

```

CocoaPodsによって作られた.xcworkspaceファイルを開く
OpenShift v3 で アプリとデータベースの連携

OpenShift v3で、アプリケーションとDBを連携させる手順を紹介します。サーバーのセットアップと、簡単なHello Worldテスト手順は、[こちらの記事(Hello world, OpenShift v3)](http://qiita.com/nak3/items/7910f81ab00962e09db7)を参考にしてください。

また、今回の手順の詳しい解説は、[nekopさんの書いたハンズオン](https://github.com/nekop/openshift-sandbox/blob/wip/developer-handson.md#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A) にあります。ご参照ください。

アプリケーションとデータベースの接続
---

###1. データベースの作成

~~~
oc new-app mysql --env=MYSQL_USER=user --env=MYSQL_PASSWORD=pass --env=MYSQL_DATABASE=testdb -l db=mysql
~~~

これだけです。PodがREADYになればDataBaseのセットアップは完了です。

~~~
$ oc get pod
NAME                       READY     STATUS    RESTARTS   AGE
mysql-55-centos7-1-0ydzh   1/1       Running   0          22s
~~~~


###2. アプリケーションの作成

アプリケーションをソースコードからデプロイします。

~~~
oc new-app https://github.com/nak3/hello-php.git -l app=php
~~~

ポイントは、アプリケーションからの接続先の設定で、[index.php](https://github.com/nak3/hello-php/blob/master/index.php#L4)の4行目の環境変数だけです。DB接続先アドレスが、`MYSQL_55_CENTOS7` + `_SERVICE_HOST` となることにご注目ください。

php アプリケーションもREADYになったらOKです。

~~~
$ oc get pod
NAME                       READY     STATUS       RESTARTS   AGE
hello-php-1-build          0/1       ExitCode:0   0          3m
hello-php-1-gvqo7          1/1       Running      0          1m
mysql-55-centos7-1-0ydzh   1/1       Running      0          6m
~~~

ここで、hello-phpのアプリケーションに、DBのパスワード、ユーザー名、データベース名を教えてあげる必要があります。

~~~
$ oc env dc hello-php MYSQL_USER=user MYSQL_PASSWORD=pass MYSQL_DATABASE=testdb
deploymentconfigs/hello-php
~~~

設定した環境変数は、以下のコマンドで確認することができます。

~~~
$ oc env dc hello-php --list
# deploymentconfigs hello-php, container hello-php
MYSQL_USER=user
MYSQL_PASSWORD=pass
MYSQL_DATABASE=testdb
~~~

あとは、サービスIPを確認して、ブラウザからアクセスしてみましょう！(以下の場合、`172.30.130.26:8080`)

~~~
$ oc get svc hello-php
NAME        CLUSTER_IP      EXTERNAL_IP   PORT(S)    SELECTOR                             AGE
hello-php   172.30.130.26   <none>        8080/TCP   app=php,deploymentconfig=hello-php   20m
~~~

以上です。
window.locationを試してみよう

## はじめに

URLを解析して、クエリ文字列やハッシュを取得する方法を調べてみました。

- [ちょ〜、簡単にJavascriptを使ってURLをパースする。 - Qiita](http://qiita.com/johna1203/items/cef6826c1824228850a8)
- [Parsing URLs in JavaScript · A Beautiful Site](http://www.abeautifulsite.net/parsing-urls-in-javascript/)

window.locationでもクエリ文字列やハッシュを取得できそうだったので、それを試してみました。結果を先に述べると、locationでもクエリ文字列やハッシュを取得できました。

## HOW

ブラウザで確認しました。
確認しやすいようにラップしました。

```js
var href = location.href;
var hash = location.hash;
var host = location.host;
var hostname = location.hostname;
var port = location.port;
var pathname = location.pathname;
var protocol = location.protocol;
var search = location.search;
```

## まとめ

string.splitを使ってクエリ文字列やハッシュを取得するよりもシンプルですね。使えるならば、locationオブジェクトを使いたいですね。
BigIntegerFieldをauto incrementにする


忘れてしまいそうなので、自分用にメモ。
DjangoではAutoFieldというのがありますが、それで作成されるdatabaseのclumnはintになってしまいます。


bigint でauto incrementさせたい。
stackoverflowに親切な人がいた。

```Python
from django.db.models import fields
from south.modelsinspector import add_introspection_rules

class BigAutoField(fields.AutoField):
    def db_type(self, connection):
        if 'mysql' in connection.__class__.__module__:
            return 'bigint AUTO_INCREMENT'
        return super(BigAutoField, self).db_type(connection)

add_introspection_rules([], ["^MYAPP\.fields\.BigAutoField"])
```

southを使用しない人は

```Python
from django.db.models import fields

class BigAutoField(fields.AutoField):
    def db_type(self, connection):
        if 'mysql' in connection.__class__.__module__:
            return 'bigint AUTO_INCREMENT'
        return super(BigAutoField, self).db_type(connection)


```

これでいいみたいです。

#実験
まずテストのモデル用意
AutoIncrementを使用するときの注意としては、他のfieldで使用されてしまっていた場合

```Python
A model can't have more than one AutoField.
```
と出て怒られます。


```Python
from django.db import models
class test(models.Model):
	id = BigAutoField(primary_key=True)
```

```Python
python manage.py syncdb
```

#結果
![スクリーンショット 2015-09-13 16.58.14.png](https://qiita-image-store.s3.amazonaws.com/0/30193/da4f2d7c-1f39-1516-df1b-94d4b9daa8cf.png "スクリーンショット 2015-09-13 16.58.14.png")

auto_incrementになってました！

補足や間違いあれば、ご指摘お願いします。


参考：
http://stackoverflow.com/questions/2672975/django-biginteger-auto-increment-field-as-primary-key
Railsのルーティング早見方法 (peco)

# Railsのルーティング早見方法

Railsのルーティング自体は非常に便利です。`resources`などの簡潔な記述によって、キレイで開発者にもユーザーにもフレンドリなURLを生成してくれます。

しかしRoutes.rbが`resources`,`member`,`collection`やらでネストしてどんどんカオスな状態になっていった時、生成されたURLがわからなくなってしまう時があります。

そんなときに便利なのがpecoというツールです。
https://github.com/peco/peco

通常の`rake routes`だと結構見にくい出力になってしまいますが、pecoを導入することによって生成されたURLが整列されて表示、そして検索クエリも投げることもできます。

## Install
installはMacであればHomebrewの`brew install peco`でOK。

## 実行

`rake routes | peco`を実行してみましょう。

![image](https://qiita-image-store.s3.amazonaws.com/0/80075/5fb2be13-6fca-7d4d-79a9-bda83aa44e11.png)

生成されたルーティングでbooksが入っているものを知りたければ、`books`というクエリを投げるだけで使用できるルーティングが検索できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/80075/161bd765-d400-ee10-6c6a-3453507aee27.png)

それでは、快適なRailsライフを :)
FuelPHPではcreated_at、updated_atがintegerなので注意！ そして カラム変更のマイグレーションを試す

# はじめに

http://qiita.com/ms2sato/items/d678997709e6a388149f
で、簡単にFuelPHPを試してみたのですが、よく見たら`created_at`、`updated_at`の型がintegerでした。これは困るので修正をします。

# Migrationファイルが作成できない？？

migrationファイルをコマンドで作成してゴニョゴニョしたいと思ったのですが、generate出来ない問題にハマりました（未解決）。

```terminal
oil g migration rename_created_at_to_test_in_threads
Uncaught exception Exception: No migration could be generated. Please verify your command syntax.
Callstack: 
#0 [internal function]: Oil\Generate::migration(Array)
#1 /Users/ms2/dev/samples/fuelsample/fuel/packages/oil/classes/command.php(69): call_user_func('Oil\\Generate::m...', Array)
#2 /Users/ms2/dev/samples/fuelsample/oil(68): Oil\Command::init(Array)
#3 {main}
```

テーブルのcreate等はできるので、コマンドによるのでしょうか。どうもダメそうなので、雛形を作るのみにして、名前変更＆中身修正してしまいました。
http://fuelphp.jp/docs/1.7/packages/oil/generate.html#/magic_migrations が参考になるかと思ったのですが、create以外はエラーに成ってしまう模様。。

そして、migrationのファイルは`DBUtil`というクラスのメソッドを呼び出してやる様子なので、下記を参照。
http://fuelphp.jp/docs/1.7/classes/database/dbutil.html

# Migration

結局私のところでは下記のようなマイグレーションファイルを作成しました。

```php:fuel/app/migrations/002_created_at_and_updated_at_arrange_in_threads.php
<?php

namespace Fuel\Migrations;

class Created_at_and_updated_at_arrange_in_threads
{
	public function up()
	{
		\DBUtil::modify_fields('threads', [
    		'created_at' => ['type' => 'timestamp', 'null' => true],
    		'updated_at' => ['type' => 'timestamp', 'null' => true]
		]);
	}

	public function down()
	{
		\DBUtil::modify_fields('threads', [
    		'created_at' => ['constraint' => 11, 'type' => 'int', 'null' => true],
    		'updated_at' => ['constraint' => 11, 'type' => 'int', 'null' => true]
		]);
	}
}
```

あとは

```terminal
oil refine migrate
```

すれば無事にDBの内容は変更されました！Good！

# コードの変更

モデルも変更します。`'mysql_timestamp' => true` に揃えましょう。

```php
	protected static $_observers = array(
		'Orm\Observer_CreatedAt' => array(
			'events' => array('before_insert'),
			'mysql_timestamp' => true,
		),
		'Orm\Observer_UpdatedAt' => array(
			'events' => array('before_save'),
			'mysql_timestamp' => true,
		),
	);
```

これで修正は終わりです！ちゃんと`timestamp`で時刻が入ると思います！

# おしまいに

本当はmigrationのファイルを作成するときにオプションを指定するようです。うーん、この仕様は微妙な感じです。デフォルトで日時の型になるようにした方が良いと思うのですが。
http://fuelphp.jp/docs/1.6/packages/oil/generate.html#/timestamp_fields

```terminal
php oil g model thread title:varchar[255] body:text --mysql-timestamp 
```

今回の対応の内容はこちら。
https://github.com/ms2sato/fuelsample/commit/1adb83f034a2ccd705e8b6bf0ad02b7562b525c3
なぜ std::vector<> は noexcept でない move constructor を呼ばないのか

例外を投げない move constructor には `noexcept` を付ける必要があることを書いた記事はいくつか見つかります．

例えば「[C++ - ムーブコンストラクタを作って push_back してみる - Qiita](http://qiita.com/_meki/items/90f9815a1e899593daa3 "C++ - ムーブコンストラクタを作って push_back してみる - Qiita")」では，

> std::vector の push_back 時にコピーコンストラクタが呼ばれてしまう原因は、自作クラスのムーブコンストラクタに noexcept 修飾子を付けていなかったことが原因だったようだ。

のように move constructor に `noexcept` を付ける必要があることが示唆されています．
また `std::vector<>` がバッファの伸長時に `std::move_if_noexcept()` を使っているということも書かれています．

それではなぜ `std::move_if_noexcept()` を使うのでしょうか．`std::move` ではなぜだめなのでしょうか.

## 答え

ひとことで言うと例外安全性について強い保障をするためです．

`std::vector<>::emplace_back` や `push_back` のようなメンバ関数の強い例外安全性を保障するために，例外を投げる可能性のある move constructor を使うことを避けています．それを実現しているのが `std::move_if_noexcept` ということになります．

`std::vector<>::empalce_back` などで要素の追加をするとき，バッファが不足していると新たにバッファを確保し新しいバッファにもともとあった要素を copy construct または move construct します．このときに `std::move_if_noexcept` が使われます．

さて `std::move_if_noexcept` ではなく `std::move` を使い move constructor の中で例外が発生した場合どうなるかを考えてみます．

```cpp
void foo(std::vector<A>& vec) {
  vec.empalce_back();  // 1
}
```

上のコードの 1 の部分で `A` の move constructor が例外を投げると `vec` は不定な状態になります．いくつかの要素を move したあとでは，それらを確実にもとの状態に戻す方法が存在しないためです．確実にもとの状態に戻すには例外が投げられないことを保障する必要があります．

一方 move constructor の代わりに copy constructor を使っていれば元のバッファに戻すだけで強い例外安全を保障することができます．

例外を投げない move constructor の場合は，そもそも例外が投げられないので新しいバッファへ確実に移動することができます．

## まとめ

* `std::vector<>` はバッファの伸長時に `noexcept` でない move constructor は使用しません．
* `noexcept` がない move constructor は強い例外安全を保障するためには使えないことがあります．
* 例外を投げない move constructor には `noexcept` を付けることで最適化の可能性が高まります．

## 参考

* [noexcept specifier (since C++11) - cppreference.com](http://en.cppreference.com/w/cpp/language/noexcept_spec "noexcept specifier (since C++11) - cppreference.com")
    * Notes にこの記事で書いたようなことが言及されています．
LXCコンテナのCentOS7のsystemdでサービスを起動するときspawing: Permission deniedエラーの対処

proxmox4 beta2でCentOS7をLXCコンテナで動かした。
httpd, postfix, mariadbなどが起動に失敗する現象に遭遇。

## 現象

```bash:httpdが起動に失敗する
# systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: failed (Result: exit-code) since Sun 2015-09-13 09:26:53 JST; 15min ago
Process: 520 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=226/NAMESPACE)
Process: 480 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=226/NAMESPACE)
Main PID: 480 (code=exited, status=226/NAMESPACE)
CGroup: /lxc/361/system.slice/httpd.service

Sep 13 09:26:53 wwwc7 systemd[480]: Failed at step NAMESPACE spawning /usr/sbin/httpd: Permission denied
Sep 13 09:26:53 wwwc7 systemd[1]: httpd.service: main process exited, code=exited, status=226/NAMESPACE
Sep 13 09:26:53 wwwc7 systemd[520]: Failed at step NAMESPACE spawning /bin/kill: Permission denied
Sep 13 09:26:53 wwwc7 systemd[1]: httpd.service: control process exited, code=exited status=226
Sep 13 09:26:53 wwwc7 systemd[1]: Failed to start The Apache HTTP Server.
Sep 13 09:26:53 wwwc7 systemd[1]: Unit httpd.service entered failed state.
```

```bash:systemdを使わなければ起動する
# ps -ef | grep http
# /usr/sbin/httpd
# ps -ef | grep http
root 1800 1 0 09:42 ? 00:00:00 /usr/sbin/httpd
apache 1801 1800 0 09:42 ? 00:00:00 /usr/sbin/httpd
apache 1802 1800 0 09:42 ? 00:00:00 /usr/sbin/httpd
apache 1803 1800 0 09:42 ? 00:00:00 /usr/sbin/httpd
apache 1804 1800 0 09:42 ? 00:00:00 /usr/sbin/httpd
apache 1805 1800 0 09:42 ? 00:00:00 /usr/sbin/httpd
```

## 対処

* /usr/lib/systemd/system/httpd.service
* /usr/lib/systemd/system/mariadb.service
* /usr/lib/systemd/system/pdns-recursor.service
* /usr/lib/systemd/system/dovecot.service

```diff:
  [Service]
- PrivateTmp=true
+ PrivateTmp=false
+ NoNewPrivileges=yes
```

```bash:設定読み込み
systemctl daemon-reload
```

```bash:サービスの起動
systemctl restart httpd
systemctl restart mariadb
```

### 対処2

* /usr/lib/systemd/system/postfix.service

```diff:postfix
  [Service]
+ NoNewPrivileges=yes
```

```bash:
systemctl restart postfix
```