OmniAICreator/Qiita-1.07M huggingface dataset:
CentOS 6.6 に Guest Additions をインストールする

# CentOS 6.6 に Guest Additions をインストールする

**CentOS 6.6** で VirtualBox の**共有フォルダー**を利用するために **VirtualBox Guest Additions** をインストールする手順のまとめ。

## Guest Additions のインストール

### Guest AdditionsのCDイメージを挿入
メニューバーの「デバイス」メニューの「Guest Additions のCDイメージを挿入...」を選択。

### Guest Additionsのインストーラーの実行
```bash
$ yum install gcc perl kernel-devel
$ mount -r /dev/cdrom /mnt
$ sh /mnt/VBoxLinuxAdditions.run
```

## 共有フォルダーの設定

### 共有フォルダーの追加
「フォルダーのパス」は共有したいホストOS側のフォルダーを指定する。
「フォルダー名」はゲストOS側で指定する際に使うラベル名なので任意に指定する。
「自動マウント(A)」「永続化する(M)」にチェックを入れる。

### 自動マウントの設定
```bash
$ echo -e "\nmount -t vboxsf -o uid=\$(id apache -u),gid=\$(id apache -g) webroot /var/www/html" >> /etc/rc.local
```

### シンボリックリンクの作成許可
以下のコマンドをホストOS側で実行する。

```bash
$ vboxmanage setextradata VBoxInternal2/SharedFoldersEnableSymlinksCreate/webroot 1
```

## Apacheの設定
### Apache のメモリマッピングと sendfile サポートの無効化
**DocumentRoot** を共有フォルダとしてマウントすると、ファイルを更新しても反映されなかったり文字化けしたりすることがあるので、Apacheの設定を変更して無効化する。

```bash:Apache2.2
$ sed -i \
      -e '/#EnableMMAP off/s/^#//' \
      -e '/#EnableSendfile off/s/^#//' \
      /etc/httpd/conf/httpd.conf;
$ httpd -t
$ service httpd restart
```

#### EnableMMAP ディレクティブ
> NFS マウントされた DocumentRoot では、httpd がメモリマップしている間にファイルが削除されたり 短くなったりしたときに起こるセグメンテーションフォールトのために httpd がクラッシュする可能性があります。
http://httpd.apache.org/docs/2.2/mod/core.html#enablemmap
http://httpd.apache.org/docs/2.4/mod/core.html#enablemmap

#### EnableSendfile ディレクティブ
> ネットワークマウントされた DocumentRoot (例えば NFS や SMB) では、カーネルは自身のキャッシュを使ってネットワークからのファイルを送ることができないことがあります。
http://httpd.apache.org/docs/2.2/mod/core.html#enablesendfile
http://httpd.apache.org/docs/2.4/mod/core.html#enablesendfile

## SELinux の無効化

SELinux が有効になっていると403エラーが発生するので無効にする。
### SELinux の確認
SELinux が有効になっているか確認。 ```getenforce``` コマンドを実行して ```Enforcing``` が返ってきたら有効になっている。

```bash
$ getenforce
Enforcing

$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
```

```bash
$ setenforce 0
$ sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
```

### SELinuxの無効の確認

```bash
$ getenforce
Disabled

$ sestatus
SELinux status:                 disabled
```
JavaのHashMapクラスにキーと値を格納して表示させる方法

JavaのHashMapクラスは、キーと値のペアを格納できる。
下記のように実装する。

    HashMap hmap = new HashMap();
    String ss;
    String sss;
    hmap.put("aaa", "One");
    hmap.put("bbb","Tow");
    ss = (String)hmap.get("aaa");
    sss = (String)hmap.get("bbb");
    java.lang.System.out.println("ss: " + ss);
    java.lang.System.out.println("sss: " + sss);

コンソールには下記のように表示される。

    ss: One
    sss: Tow
[Facebookあるある]いいねボタンの吹き出しを出したくないとき

いいねボタンをクリックした時にコメントを入力できる吹き出し。

![イイネぼたんの吹き出し](https://qiita-image-store.s3.amazonaws.com/0/55103/555fde98-be85-b42a-96ce-f6d1c39a94dc.png)

コーディングするサイトのデザインによって、いいねボタンがwindowの右端やフッターにあるとこの吹き出しがページの幅・高さを押し広げてしまうことがあります。

そういうときはiframeのいいねボタンを使うと吹き出しが表示されません。
非推奨(すでに公式サイトではなくなっている)のでバッドノウハウに近いかもしれませんが。。。

```html
<iframe src="http://www.facebook.com/plugins/like.php?href=ページのURL&send=false&layout=button_count&width=120&show_faces=false&action=like&olorscheme=light&font=arial&height="20" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:120px; height:20px;" allowTransparency="true"></iframe>
```

念のため備忘録として残しておきます。
GitHub pull request builder plugin『Could not retrieve GitHub repository named xxxx/XXXX.git』の対処方法


[GitHub pull request builder plugin](https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin)というGithubのプルリクと連携するJenkinsのプラグインを導入した時に『Could not retrieve GitHub repository named xxxx/XXXX.git (Do you have properly set 'GitHub project' field in job configuration?)』というエラーが出てハマったので備忘録として残しておきます。

```log:Jenkinsのログ
Could not retrieve GitHub repository named xxxx/XXXX.git (Do you have properly set 'GitHub project' field in job configuration?)
java.io.FileNotFoundException: {"message":"Not Found","documentation_url":"https://developer.github.com/v3”}

```

ちなみに[GitHub pull request builder plugin](https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin)を使うと以下みたいにプルリクにビルド結果やテスト結果を表示できます。(便利!)

![ghpr02.png](https://qiita-image-store.s3.amazonaws.com/0/56178/c92e562b-d4dd-d9f6-d177-f490516246a3.png "ghpr02.png")

![ghpr01.png](https://qiita-image-store.s3.amazonaws.com/0/56178/7a10054d-1603-cbbe-721d-079655774d6a.png "ghpr01.png")

## 対処方法

https://github.com/janinko/ghprb/issues/50#issuecomment-96633442

> The problem is you have .git at the end of your url, I believe.


つまりURLに.gitがついているから起きるらしい。

**なのでジョブの設定のリポジトリURLの欄の.gitを消せばOK**

OKなパターン

![setting02.png](https://qiita-image-store.s3.amazonaws.com/0/56178/8a75144a-c7c7-50a8-57a0-23c39190eb11.png "setting02.png")

NGのパターン

![setting01.png](https://qiita-image-store.s3.amazonaws.com/0/56178/a2c57f57-5d6e-b97e-1901-41af8fd71aca.png "setting01.png")
dockerでbad interpreter: Text file busyが出るときの対処法

(下部に追記あり)
# 問題
DockerのDockerfileの中でRUNコマンドを使ってシェルスクリプトを実行しようとすると`bad interpreter: Text file busy`が表示されることがある。

* Dockerfileの一部

```
# Installing Xymon
ADD ./xymon-4.3.21.tar.gz /usr/local/src/
WORKDIR /usr/local/src/xymon-4.3.21
RUN /bin/bash configure --server #ここで落ちる
RUN make
RUN make install
```

* 実行結果

```
configure: /usr/local/src/xymon-4.3.21/configure.server: /bin/sh: bad interpreter: Text file busy
configure: line 21: /usr/local/src/xymon-4.3.21/configure.server: Success
The command '/bin/sh -c /bin/bash configure --server' returned a non-zero code: 1
```

# 原因
ググると色々な原因があるみたいだけど、私の場合はファイルに実行権限を与えたのが良くなかったみたい。

# 対策

```
RUN chmod 755 sample.sh
RUN ./sample.sh
```
等でファイルに実行権限を与えた後はsyncコマンドを実行することでエラーを回避できる事がある。

```
RUN chmod 755 sample.sh
RUN sync #追加
RUN ./sample.sh
```

今回の場合はXymonのconfigureスクリプトの中で実行権限を変更していたのが原因。

```
#!/bin/sh

# Configuration script for Xymon.
# $Id: configure 7474 2014-09-28 09:39:28Z storner $

BASEDIR="`dirname $0`"
TARGET="$1"
if test "$TARGET" != ""; then shift; fi

# Make sure that all shell-scripts are executable.
# Subversion has a habit of exporting without the
# execute-bit set.
chmod 755 $BASEDIR/configure* $BASEDIR/build/*.sh $BASEDIR/client/*.sh #コレが原因

case "$TARGET" in
  "--client")
        exec $BASEDIR/configure.client $*
        ;;
(略)
```

こういう場合はsedでシェルスクリプトを書き換えてしまおう。

```
# Installing Xymon
ADD ./xymon-4.3.21.tar.gz /usr/local/src/
WORKDIR /usr/local/src/xymon-4.3.21
RUN sed -i -e '/^chmod 755/a sync' configure #chmod 755の後の行にsyncを挿入
RUN /bin/bash configure --server
RUN make
RUN make install
```

configureスクリプトは次のように書き換わるはず。

```
#!/bin/sh

# Configuration script for Xymon.
# $Id: configure 7474 2014-09-28 09:39:28Z storner $

BASEDIR="`dirname $0`"
TARGET="$1"
if test "$TARGET" != ""; then shift; fi

# Make sure that all shell-scripts are executable.
# Subversion has a habit of exporting without the
# execute-bit set.
chmod 755 $BASEDIR/configure* $BASEDIR/build/*.sh $BASEDIR/client/*.sh
sync

case "$TARGET" in
  "--client")
        exec $BASEDIR/configure.client $*
        ;;
(略)
```

これでうまく動作しました。

# 参考リンク
* https://github.com/docker/docker/issues/9547

# 追記
DockerのStorage Driverがaufsの時に発生する現象のようです。devicemapper等に変更しましょう。
## Docker Machineを使ってVirtualBoxに仮想マシンを作る時の例
```
$ docker-machine create --driver virtualbox --engine-storage-driver devicemapper develop
```
SlackへiOSアプリのレビューを投稿するLaunchKit

#課題
アプリリリースしたけどユーザの声を簡単にキャッチアップできてないな。まずは、slackとiTunesレビュー投稿をつなげてみる。

#LaunchKit
1.LaunchKitへアクセス
前提としてログインしていること。
https://launchkit.io/login?redirect=%2Freviews%2Fdashboard

2.「Review Monitor」からモニタリングしたいアプリを入力する
「Flappy Bird」のところにアプリ名を入力して検索できるようになっている。
![Screen Shot 2015-07-10 at 13.19.20.png](https://qiita-image-store.s3.amazonaws.com/0/59560/f19cc6d0-7c51-cfe9-1bff-8b7925e9422d.png)


3.「Start Tracking」をタップするとモニターできるようになる。

4.あとはslackへつなげる導線があるのでそこから登録する。

5.下記のようにレビューが書かれたときにslackの登録したchannelに投稿されるようになる！
![Screen-Shot-2015-07-10-at-13.24.38.png](https://qiita-image-store.s3.amazonaws.com/0/59560/03f2e858-668d-929f-bd4f-6c558ee204ac.png)
【Swift】ユーザー認証APIを通した後、同一セッションとしてUIWebViewを表示する

WebViewベースのアプリを作るときにログインフォームをネイティブで作ってID・Passwordを入力し、その値をAPIに投げてユーザー認証を行う。その後に、認証を通したユーザーとしてログインした状態でWebViewを表示したいという場合があるかと思います。
Webブラウザでログインして次の画面に遷移したときに同一ユーザーとして認識されている状態を作る感じです。Googleにログインしたり、Pixivにログインしたり、ああいうやつです。

僕は最近こんな場面がありました。
ので、どんな流れかを備忘録も兼ねて書いていきます。

#Cookieの取得
同一セッションであることを証明する方法としてCookieを使う方法があります。
APIを投げた後、返ってきたResponse部にCookieが付加されているはずなのでそれをNSHTTPCookieに保持させます。
responseをprintlnで出力すると"Set-cookie" = "hogehoge"とか書いてあると思います。

今回は例としてAlamofireで取得した結果から取得します。

```
Alamofire.request(.POST, "http://hogehogeURL", parameters: loginInfo).
responseJSON(options: .AllowFragments, completionHandler: { (request, response, json, error) -> Void in

    let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response!.allHeaderFields, forURL: response!.URL!)
            
    for var i = 0; i < cookies.count; i++ {
        let cookie = cookies[i] as! NSHTTPCookie
        // ここで取得したCookieを保持
        NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookie)
    }
}
```


#WebViewに取得したCookieを渡す
NSMutableURLRequestを使用して接続先のURL情報に加えて、先ほど取得したCookieも付加してWebViewをロードします。
これを実行する前にwebViewのオブジェクトは生成しておいてあります。

```
func loadWebView() {
    // 接続先のURL
    let url     = NSURL(string: "http://fugafugaURL")

    // さっきPOSTを投げた認証するためのURL
    let authUrl = NSURL(string: "http://hogehogeURL")

    let request = NSMutableURLRequest(URL: url!)
    
    let cookies = NSHTTPCookieStorage.sharedHTTPCookieStorage().cookiesForURL(authUrl!)
    let header  = NSHTTPCookie.requestHeaderFieldsWithCookies(cookies!)
    request.allHTTPHeaderFields = header
    
    // webViewのロードを開始
    webView.loadRequest(request)
}
```

#まとめ
もしかするとこういうやり方をするのはそもそも設計段階で間違っているとか、もっと良いやり方があるのかもしれないです。何かツッコミ等あればどしどしください。

通信周りよくわかってなかったですが、実装にあたって調べる機会を持てたので良かったです。

#追記：2016/02/16 Alamofire(3.x系) + Swift 2.0対応

Alamofireが3.x系になってからクロージャの中のパラメータが結構変わったのが気になったので追記です。
あと気持ち程度のguard記述。
（若干強制的にキャストしてたり、強制アンラップしてたりする、、、よ、、、）

```
Alamofire.request(.POST, "http://hogehogeURL", parameters: ["loginInfo":"loginInfo"]).responseJSON { response in
    guard let r = response.response else { return }
                
    let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(r.allHeaderFields as! [String: String], forURL: r.URL!)
                
    for var i = 0; i < cookies.count; i++ {
        let cookie = cookies[i] 
        // ここで取得したCookieを保持
        NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(cookie)
    }
}
```
【Oracle】同じSQLなのに早かったり遅ったりする

同じSQLでも(厳密には違うのですが)
WHERE句の条件式に、リテラルで値を指定した場合 と バインド変数で値を指定した場合 とで
SQLの実行計画がかわる場合があります。

「同じSQLなのにプログラムから実行するとSQLの部分が遅いんです」という場合には、
おそらくSQL単体で(SQL実行ツールなどを介して)実行するときは、WHERE句の条件式にリテラルで値を与えたSQLを実行していて、プログラムで実行するときには、その部分をバインド変数に置き換えたSQLが実行されているということになっていると思います。（つまり、厳密には同じSQLで実行されていない。）

対処としては、統計情報を再取得することで実行計画が最適化されるようにするとか、SQLヒント句を利用して実行計画を固定するとかが必要となります。
理論から学ぶデータベース実践入門を読んだメモ

[理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL (WEB+DB PRESS plus) ](http://www.amazon.co.jp/%E7%90%86%E8%AB%96%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-~%E3%83%AA%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%8A%B9%E7%8E%87%E7%9A%84%E3%81%AASQL-WEB-PRESS-plus/dp/4774171972)

読んだので気になった点をいくつかメモ。

全体としては、
RDBのもととなっているリレーショナルモデルの解説と、
それを軸にRDBでよく起きる問題に対する解説がされています。

タイトル通り理論が中心で読み物っぽい印象。

肝心のリレーショナルモデルは書いてあることの意味はわかるんですが、
まだまだ実感をもってはら落ちするまでできなかったので、
いつかRDBで行き詰まった時に読み直してみたいです。

以下、気になった箇所メモ。

## インデックス

* インデックスは左端から順にソートされる
* 左端の文字からindexを作成していく
 * WHERE LIKE "a%" => index効く
 * WHERE LIKE "%a%" => index効かない
* 複合インデックスの場合も左端から順にソートされるので、カラムの並び順が重要

## パーティショニング

* 範囲やキーでパーティショニングを分割
* パーティショニングが適しているケース
 * キーのカーディナリティが低い場合
 * それ以外の場合はインデックスで十分な場合が多い
 * 最新のデータへのアクセスが多いアプリの場合、日付でパーティショニングするのは有効。パーティショニングごとにindexが作成されるので

* インデックスはクエリが決まってから検討する
* 下記の場合は、インデックスを貼らずにテーブルスキャンをしたほうがよいケースがある
 * 実行頻度が低い
 * テーブルのサイズが小さい
 * 検索結果が非常に多くの行にヒットする

## インデックスの付け方
* where句から
SELECT * FROM t WHERE col1 > 100 AND col2 = 'abc';
(col1, col2)の複合インデックスより、(col2, col1)のほうが効率がいい
col1 > 100 は膨大な数ヒットする可能性がある

* join,サブクエリでもインデックスは有効なので、joinする条件サブクエリのWHERE句からインデックスを検討する

## ソート

* WHERE col1 = 100 AND col2 = 200 ORDER BY col3
という条件なら、インデックス(col1, col2, col3)でインデックスだけで解決できる
インデックスはcol1　-> col2 -> col3の順でソートされ作成されているので、
WHERE col1 = 100 ORDER BY col3
になると遅くなる

## ORに対するインデックス
* WHERE col1 = 100 OR col2 = 200
の時は(col1),(col2)の２つのインデックスが必要。インデックスマージされ検索される

## インデックスはカラムの並び順が重要
* 同じカラムの組み合わせでも並び順が異なるインデックスを作る時がよい時もある

## カーディナリティ
* WHERE句でcol1,col2,col3が条件となっていても、col1,col2でカーディナリティが高ければ、(col1, col2)だけのインデックスで十分なケースもある。
 * インデックスが増えれば、更新時のオーバーヘッドが発生するため。

## インデックスは
 * どのカラムを含めるべきか、カラムのカーディナリティ、テーブルのサイズ、更新時のオーバーヘッド、クエリの実行頻度から総合して考える


やはりインデックスとかすぐに実践できる系のやつが気になっちゃます＞＜

<br />
<br />

感謝致します。
jenkinsの表示が真っ白になった、そんな時の解決法

ある日、jenkinsにアクセスしたら、表示が真っ白になりました・・・

テキストは表示されるのですが、css,imageが404になっておりレイアウトが崩れてました。

# 事象

- jenkinsの表示で、cssやimageが404になり、真っ白の表示になる

# 原因

- jenkinsのuiのファイルが、/tmp以下に作られるのでサーバーの設定によってファイルが削除されるため

# 対応方法

- 【取り急ぎ系】jenkins再起動すればuiファイルは作りなおされます
- 【根本解決】Javaのオプションでtmpファイルを作る場所を別に指定する必要があるようです


参考にさせて頂きましたm(_ _)m
[Jenkins 「WebUIが突然真っ白になった」のを解消させた！ ](http://snickerjp.blogspot.jp/2014/01/Jenkins-whiteout.html)


普通にJENKINS_HOMEの下に作ってくれればいいのに・・・



感謝致します。
OSS版 drone.io 用の docker イメージをビルドする

ハマったのでメモ。

## 問題

https://github.com/drone/images に build 用の Dockerfile などがおいてあるので、それをいじってビルドするのがてっとり早いようだ。

例えば ruby 2.1.1 のコンテナをビルドするには次のようにする

```
git clone https://github.com/drone/images
cd image
sudo docker build --rm -t bradrydzewski/ruby:2.1.1  builder/ruby/ruby_2.1.1/
```

ruby 2.2.2 の docker コンテナが欲しかったので、

```
cp -a builder/ruby/ruby_2.1.1 builder/ruby/ruby_2.2.2
sed -i 's/2.1.1/2.2.2/g' builder/ruby/ruby_2.2.2/rbenv.sh
sed -i 's/2.1.1/2.2.2/g' builder/ruby/ruby_2.2.2/Dockerfile
```

して、

```
sudo docker build --rm -t sonots/ruby:2.2.2  builder/ruby/ruby_2.2.2
docker push sonots/ruby:2.2.2
```

とやったらすんなりできた。と思ったら、**ハマった**。


## 原因と対処

どうも drone 内部で、bradrydzewski もしくは drone プレフィックスのついた docker コンテナの場合は、ubuntu ユーザとしてコマンドを実行するが、それ以外の場合は root ユーザとしてコマンドを実行するようで、期待通りの動作をせずにエラーになってしまった。

なので、sonots/ruby ではなく bradrydzewski/ruby という名前にすれば良いらしい．もちろんその名前では docker push できないが、ローカルにはイメージが残るのでそのまま drone からご利用頂ける。docker build し直しても良いが、sonots/ruby で docker pull して、docker tag で名前をつけるだけにするとよさそう。

というわけで `docker push` から続けて以下のコマンドを打って利用することにした。

```
sudo docker tag sonots/ruby:2.2.2 bradrydzewski/ruby:2.2.2
```

## その他

https://github.com/drone/images に依存せずに自前で root 前提の image を作る手もありそう。ただ、[Drone - サービスコンテナへのポートフォワーディングをどうしているのか読んでみた](http://qiita.com/udzura/items/221c03e19e5e122a0d54)の記事にあるように socat がどうとかこうとかあるので、drone 内部をちゃんと把握してないと難しそう。

drone の変更に追随するメンテナンスコストもかかりそうだ。

## おわりに

![image](https://qiita-image-store.s3.amazonaws.com/0/9641/f2934c23-fa36-443d-1d0b-394ab8bb689e.png)

とのことで将来的には全部 root で動かすようになって、結果ネームスペースの制限もなくなるとのこと。たぶん、0.3 じゃなくて 0.4 の話だと思うけど。

それまでは設定もできないとのこと。カスタムビルドすればいいんかなー。
fugitive.vim再インストール時に、.vimrcにfugitiveの設定が記載されている場合のエラー回避

.vimrcをgithubから拾ってきて再インストールしようとすると、fugitiveのfugitive#statusline()なんて関数はねえ！　と怒られる。

fugitiveとはvimからgitを操作するプラグインで、地味に役に立つので重宝しているんだが、上記エラーは、今の変更はどのブランチを操作しているかを表示する設定。

http://qiita.com/jnchito/items/5141b3b01bced9f7f48f
の記事を参考に書いたものなんだけど、以下の形に訂正することでエラー回避。

```
" ステータス行に現在のgitブランチを表示する
if isdirectory(expand('~/.vim/bundle/vim-fugitive'))
  set statusline+=%{fugitive#statusline()}
endif
```

ついでに設定は
call neobundle#end()
の外に括りだした。

諸々修正した後の.vimrcはこれ。
https://github.com/etmnk/dotfiles/blob/master/.vimrc

追記
http://stackoverflow.com/questions/5983906/vim-conditionally-use-fugitivestatusline-function-in-vimrc

見る限りだと
```
set statusline+=%{exists('g:loaded_fugitive')?fugitive#statusline():''}
```
でも良かった気がする。
HerokuでPHPを利用するときにハマったことのメモ

## メール送信
アドオン契約が必要
アドオンにてsendGridやmailGunなどを利用する。

## MySQLを利用する
アドオン契約が必要
ドキュメントルート以下にprocfileを作成
ファイル名Procfileで内容は
web: vendor/bin/heroku-php-apache2 public
こんな感じ
heroku configでデータベース接続情報を取得し、
phpのdb接続設定やmysqlコマンドの接続情報に利用する

## mb_convert_encodingが使えない
composer.jsonに次を記載

```lang:javascript
{
  "require": {
    "ext-mbstring": "*"
  }
}
```
インデントは半角スペースでタブを使うとverifyエラーとなる。

## date関数を利用する際の注意
デフォルトタイムゾーンを指定する。

```lang:php
date_default_timezone_set("Asia/Tokyo");
```

## push時にcomposerエラー
remote:  !     ERROR: Your 'composer.json' lists dependencies inside 'require',
remote:        but no 'composer.lock' was found. Please run 'composer update' t
remote:        re-generate 'composer.lock' if necessary, and commit it into you
remote:        repository. For more information, please refer to the docs at
remote:        https://devcenter.heroku.com/articles/php-support#activation

対策
php composer.phar update

これでできたcomposer.lockファイルをaddしてcommitして再度push
remote: Verifying deploy.... done.

vender/ ディレクトリはaddする必要は無い
Docker Upgrade 1.4.1 to 1.7 on Ubuntu 14.04


## Getting started Docker upgrade

These are docker release note between 1.4 to 1.7

- [Version 1.7](https://docs.docker.com/release-notes/)
- [Version 1.6](http://beta-docs.docker.io/v1.6/release-notes/)
- [Version 1.5](http://beta-docs.docker.io/v1.5/release-notes/)

Docker Install or Upgrade Document is here under 1.6 version
http://beta-docs.docker.io/installation/ubuntulinux/

However after 1.7, document(and that server) is renewal.
https://docs.docker.com/installation/

So if you want to upgrade docker version 1.7, you need new install steps. If you do not install docker yet, **please read new official document. DO NOT READ NON OFFICIAL PAGE.**

## Upgrade Steps

1. Uninstalling old Docker
2. Installing the latest Docker 1.7

Ref: http://linoxide.com/linux-how-to/install-upgrade-docker-1-7/

...

書こうと思ったけどいい感じの記事があったからそれのリンクだけ貼っておくことにするよ( ・ω・)
MacでASP.NET


環境づくりメモ。基本は[ここ](https://code.visualstudio.com/docs/ASPnet5)の通りやるだけ。

###前提
* brewを入れておく(brew update, brew upgradeをしておく）
* node.jsを入れておく（できれば最新版をインストールする）

###前提知識

####実行環境の構築
ASP.NETを実行するには、ランタイムが必要である。それはdnxという。それをインストールするためにdnvm(dot net version manager)というのをインストールする。

####ASP.NETのひな形取得環境を作る
ASP.NET(MVC)は0からゴリゴリ書くものではなく、ひな形をベースにする。WindowsならばVisualStudioが作ってくれるが、Macにはそんなものがないので、yeomanというひな形作成ツールをインストールする。
yeomanは、1つのツールではなく、grunt,bower,yoが組み合わさったものである。

####開発環境のインストール
MacでASP.NETの開発は、Sublime Textとかでも行えるが、ここでは、Visual Studio Codeを使う。


##いろいろインストール

###dnvmをインストール
dnvmは、dot net version managerで、vmのバージョンを管理するためのツール。

```bash
brew tap aspnet/dnx
brew install dnvm
```
```bash
dnvm list
```
とすることで、インストールされているバージョンを見ることができる。また、

```bash
dnvm upgrade
```
とするとこで、最新のバージョンが入る（はず）。

###yeomanをインストール

```bash
sudo npm install -g yo grunt-cli generator-aspnet bower
```
時が過ぎるとgenerator自体が古くなるが、generatorのupdateは、yoコマンドを実行すればその中のメニューから選べる。
但し、パーミッションエラーが起きる時があるので、その際は、

```bash
sudo chown -R /usr/local
sudo chown -R ~/.npm
```
とする。

###せっかくなのでVisual Studio Code (VSC)をインストール

ダウンローどして、展開するだけ。

###環境設定

.bash_profileに以下を追加

```bash
#for dnvm
export MONO_GAC_PREFIX="/usr/local"
export MONO_MANAGED_WATCHER=false
source dnvm.sh

#for vsc
vsc () {
    if [[ $# = 0 ]]
    then
        open -a "Visual Studio Code"
    else
        [[ $1 = /* ]] && F="$1" || F="$PWD/${1#./}"
        open -a "Visual Studio Code" --args "$F"
    fi
```
source .bash_profileを実行。
VSCの起動コマンドをcodeとしている人が多いけど、vscとする。
なお、現状、VSCを起動した状態でvsc . 等としても、ファイルを展開してくれないようだ。

##ASP.NETのプロジェクトを作って実行

###asp.net webapplicationのテンプレートを取得（作成）する。

```bash
yo aspnet
```

とすると、いろいろ聞いてくる。

* 最初の起動時の質問はYを選択。
* いろいろあるテンプレートからWebApplicationを選択する。
* プロジェクト名を聞いてくるので、WebAppとか適当に入れる。

yo aspnetは

```bash
yo aspnet:MvcController
```

等の、サブジェネレーターコマンドもある。詳しくは[ここ](https://github.com/OmniSharp/generator-aspnet)。

###dnu restoreでWebAppの実行に必要なものを取ってくる

実行したディレクトリにWebAppフォルダが作られるので、その中に移動し、dnu restoreを実行。
そうすると、いろいろ必要なものを取得してくれる。

```bash
cd WebApp
dnu restore
```
dnu restoreは、project.jsonのdependenciesを見てるみたい。なので、更新したら、再度 dun restore する必要があるのだと思う。

dnuには他にもいろいろと便利コマンドがある。詳しくは[ここ](https://github.com/aspnet/Home/wiki/DNX-utility)。

###VSCでプロジェクトを開く

```bash
vsc .
```
とすることで、VSCでプロジェクトが開ける（ただ、カレントを開いてるだけですが）。
本当はここでいろいろと編集。

###プロジェクトを実行

VSCでshift + command + pでVSCのコンソールを表示させ、kestrelとうつ。それか、普通のコンソールで、

```bash
dnx . kestrel
```

とする。kestrelは、dnx上で動くWebサーバ。チョウゲンボウに馴染みのある私にとってはいい名前。

localhost:5000とかを見ると、APS.NETのテンプレートファイルが表示されるが、このときのURL（ポート）は、プロジェクトの中のhosting.iniファイルの中で設定されている（大元はproject.jsonだが、外部ファイルを参照するようになっている）。

###その他の参考

*[http://www.dotnetcodegeeks.com/2015/06/develop-and-deploy-asp-net-5-apps-on-mac-os-x.html](http://www.dotnetcodegeeks.com/2015/06/develop-and-deploy-asp-net-5-apps-on-mac-os-x.html)
【備忘】CLIでリリース版APKを作成する

たまに使いたくなるのでメモ。
環境は Mac & Eclipceプロジェクト。


1. 無署名のリリースAPKを作成
-------------------------------

```bash
$ cd /path/to/android_project
$ ant release
```


2. KeyStoreの作成
-------------------------------

```bash
$ keytool -genkey -v \
    -keystore ${キーストアファイル名} \
    -alias ${エイリアス名} \
    -keyalg RSA \
    -validity ${有効日数}

# e.g.  約25年有効
$ keytool -genkey -v \
    -keystore test.keystore \
    -alias the_game \
    -keyalg RSA \
    -validity 9125
```


3. APKの署名
-------------------------------

```bash
jarsigner \
    -verbose \
    -sigalg MD5withRSA \
    -digestalg SHA1 \
    -tsa http://timestamp.digicert.com \
    -keystore ${キーストアファイル名} \
    ${署名対象のAPK} \
    ${エイリアス名}

# e.g.
jarsigner \
    -verbose \
    -sigalg MD5withRSA \
    -digestalg SHA1 \
    -tsa http://timestamp.digicert.com \
    -keystore test.keystore \
    the_game-release.apk \
    the_game
```


4. zipalignの実行
-------------------------------

```bash
$ zipalign -v 4 ${入力APKファイル} ${出力APKファイル}

# e.g.
$ zipalign -v 4 the_game-release.apk the_game.apk
```
Minecraftの起動時パラメータとか

現状以下のパラメータ渡して起動してる。

<pre>
[root@localhost ~]# cat /home/todanano/minecraft/scripts/run.sh
#! /bin/sh

cd /home/todanano/minecraft/server

screen -AmdS minecraft-server java \
-d64 \
-server \
-Dcom.sun.management.snmp.port=10161 \
-Dcom.sun.management.snmp.acl.file=/usr/java/jre1.8.0_45/lib/management/snmp.acl \
-Xmx6G -Xms6G -jar \
-XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M \
-XX:+AggressiveOpts -XX:+UseLargePages \
./minecraft_server.1.8.7.jar nogui

</pre>

動作しているサーバーのスペックは、
VMware ESX 5.5上の仮想マシン
・CPUクロック 2.53GHz 2ソケット2コアを割り当て
・メモリ 8GB
・CentOS 5.11

ついでに、起動スクリプトも書いてみる。

<pre>
[root@localhost ~]# cat /etc/init.d/minecraft_server
#!/bin/bash

#
# minecraft_server start script
#
#
# chkconfig: - 99 11
# description: minecraft_server start script

### BEGIN INIT INFO
# Provides: minecraft_server
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Short-Description: start and stop minecraft_server
# Description: minecraft_server
### END INIT INFO

# Source function library.
. /etc/init.d/functions

progname='minecraft_server.1.8.7.jar'

start() {
        ret=`status`
        if [ $? -eq 1 ]; then
                sudo -u todanano /home/todanano/minecraft/scripts/run.sh
        fi
        touch /var/lock/subsys/minecraft_server
        return $?
}

stop() {
        ret=`status`
        if [ $? -eq 0 ]; then
                pkill -f $progname
                sleep 1
                ret=`status`
                if [ $? -eq 0 ]; then
                        sleep 10
                        ret=`status`
                        if [ $? -eq 0 ]; then
                                pkill -9 $progname
                        fi
                fi
        fi
        rm -f /var/lock/subsys/minecraft_server
        return $?
}

status() {
        pgrep -f $progname
        return $?
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $prog
        ;;
  *)
        echo $"Usage: $0 {start|stop|status}"
        exit 2
esac
</pre>

chkconfig minecraft_server on

としておけば、再起動しても自動実行するはず。

2015/07/29 追記
前に書いた起動スクリプトだと、サーバー本体のシャットダウンやリブート時に、
minecraftが正常終了していなかったので修正。

/etc/init.d/minecraft_serverのstartの処理で、
/var/lock/subsys/minecraft_serverというファイルを作っておくことで、
サーバー本体のシャットダウン、リブートのときに、
/etc/init.d/minecraft_server stop
を実行してくれるはず。
Processingのライブラリpunktiertを使ったアニメーション

![tumblr_nqwf04DF4x1r1tpsmo1_500.gif](https://qiita-image-store.s3.amazonaws.com/0/84973/22b77033-a511-36a0-187e-7b6e617dccee.gif)
punktiertは、2D/3D空間上に有機的なアニメーションを搭載できるライブラリです。

http://www.lab-eds.org/punktiert

比較的短いスクリプトで様々な物理エンジンが利用できます。
exampleを見るとパーティクル系が多いです。
また、ドラッグでカメラ視点を変えられるpeasycamも今回使用しました。
こちらも3D作品の際には役に立つライブラリです。

http://mrfeinberg.com/peasycam/#about

```lang:p5.pde
import peasy.PeasyCam;
import punktiert.math.Vec;
import punktiert.physics.*;

VPhysics physics;

PeasyCam cam;

public void setup() {
  size(800, 600, P3D);
  smooth();

  cam = new PeasyCam(this, 800);

  physics = new VPhysics();

  for (int i = 0; i < 1000; i++) {

    Vec pos = new Vec(0, 0, 0).jitter(1);
    Vec vel = new Vec(random(-1, 1), random(-1, 1), random(-1, 1));
    VBoid p = new VBoid(pos, vel);
    p.setRadius(20);

    p.swarm.setCohesionRadius(80);
    p.trail.setInPast(3);
    p.trail.setreductionFactor(2);
    physics.addParticle(p);

    p.addBehavior(new BCollision());

    physics.addSpring(new VSpringRange(p, new VParticle(), 300, 400, 0.0005f));
  }
}

public void draw() {
  background(240);

  physics.update();
  for (int i = 0; i < physics.particles.size(); i++) {
    VBoid boid = (VBoid) physics.particles.get(i);

    strokeWeight(5);
    stroke(0);
    point(boid.x, boid.y, boid.z);

    if (frameCount > 400) {
      boid.trail.setInPast(100);
    }
    strokeWeight(1);
    stroke(200, 0, 0);
    noFill();
    beginShape();
    for (int j = 0; j < boid.trail.particles.size(); j++) {
      VParticle t = boid.trail.particles.get(j);
      vertex(t.x, t.y, t.z);
    }
    endShape();
  }
}
```
WordPressのカスタム投稿タイプの個別ページでページング

WordPressは通常の投稿であれば、次のテンプレートタグでページング（ページネーション）が可能です。

```php
previous_posts_link();
next_posts_link();
```

しかし、カスタム投稿タイプの場合、このリンクは利用できません。そこで、次のプラグインを導入します。

- [Ambrosite Next/Previous Post Link Plus](https://wordpress.org/plugins/ambrosite-nextprevious-post-link-plus/)

有効化したら、次のテンプレートタグでページングが可能になります。

```php
previous_post_link_plus(array('format' => '%link','link' => 'PREV'));
next_post_link_plus(array('format' => '%link','link' => 'NEXT'));
```

オプションがいろいろあるので、細かな調整も可能なようです。
unittest.TestCase を継承した class 内の yield は nose では動いてくれなかった (nose のバージョンによって?)

## 実験

```py:test_sample.py
# coding: utf-8
from unittest import TestCase
from nose.tools import eq_


class SampleTest(TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_sample(self):
        """
        テストサンプル
        """
        for i in xrange(3):
            yield eq_, True, False

```

しても、

```bash
$ nosetests -s -v test_sample.py
テストサンプル ... ok

----------------------------------------------------------------------
Ran 1 tests in 0.001s
```

みたいになって期待通りには動いてくれなかった。

下記のように修正、

```py:test_sample.py
# coding: utf-8
from nose.tools import eq_


def test_sample():
    """
    テストサンプル
    """
    for i in xrange(3):
        yield eq_, True, False

```

すると、

```bash
$ nosetests -s -v test_sample.py
テストサンプル ... FAIL
テストサンプル ... FAIL
テストサンプル ... FAIL

======================================================================
FAIL: テストサンプル
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/Cellar/numpy/1.9.2/libexec/nose/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
AssertionError: True != False

======================================================================
FAIL: テストサンプル
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/Cellar/numpy/1.9.2/libexec/nose/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
AssertionError: True != False

======================================================================
FAIL: テストサンプル
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/local/Cellar/numpy/1.9.2/libexec/nose/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
AssertionError: True != False

----------------------------------------------------------------------
Ran 3 tests in 0.011s

FAILED (failures=3)
```

みたいにちゃんと期待通りに動いた。

nose さん、さようなら。 pytest さんのところに行こうと思います…。
artigatougozaimashita.

## 資料

- [python - Nose Test Generators inside Class - Stack Overflow](http://stackoverflow.com/questions/6689537/nose-test-generators-inside-class)
- [Writing tests — nose 1.3.7 documentation](http://nose.readthedocs.org/en/latest/writing_tests.html#writing-tests)
ClickOnce アプリケーションがインストールされているか確認する方法

ClickOnce アプリケーションがインストールされているか確認するための API が提供されていないため、レジストリにアンインストール情報があるかどうかで判定する。

レジストリキー
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
の下に、 DisplayName が調べたいアプリケーション名と一致するキーがあるかどうかで判定する。

```lang:C#
    RegistryKey regKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall");

    if (regKey == null)
    {
        // レジストリキーがなければ、インストールされていない。
        return;
    }

    string[] subKeyNames = regKey.GetSubKeyNames();
    regKey.Close();

    foreach (string subKeyName in subKeyNames)
    {
        RegistryKey subKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall\" + subKeyName);
        string displayName = (string)subKey.GetValue("DisplayName", string.Empty);
        subKey.Close();

        if (displayName == "調べたいアプリケーション名")
        {
            // 調べたいアプリケーション名と DisplayName が一致すれば、インストールされている。
            return;
        }
    }

    // 調べたいアプリケーション名と一致する DisplayName のキーが見つからなければ、インストールされていない。
    return;
```
OpalでUserScriptを書く #opal #userscript


OpalはRubyと互換性のある文法を持ったAltJSです。AltJSということは、JavaScriptでできることは基本的にできるということなので、当然ながらUserScriptの作成もできます。

というわけで、UserScriptを作ってみました( https://github.com/cielavenir/ctouch/blob/master/qiita_ciel_tools/qiita_source.user.js をOpalに移植しました )。このコードを実行すると、有効なUserScriptが生成されます。

```userscript.rb
#!/usr/bin/ruby
#coding:utf-8

COMMENT=%Q`
// ==UserScript==
// @name        Qiita Source (Opal)
// @namespace   com.cielavenir
// @description Show link to Qiita Markdown source.
// @include     http://qiita.com/*/items/*
// @include     http://qiita.com/*/private/*
// @version     0.0.0.1
// ==/UserScript==
`.lstrip

IO.popen('opal -c','r+b'){|io|
	io.puts DATA.read
	io.close_write
	puts COMMENT
	puts io.read
}

__END__
require 'native'
->{
	doc=Native(`document`)
	ul=doc.getElementsByClassName('itemsShowHeaderTitle_status')[0]
	return if !ul
	li=doc.createElement('li')
	a=doc.createElement('a')
	Native(a).href=Native(`location`).href.split('#')[0]+'.md'
	Native(a).textContent='Markdownを表示する'
	Native(li).appendChild(a)
	Native(ul).appendChild(li)
}.()
```

\_\_END\_\_以下がOpalのコードになっています。これを`opal -c`に読ませて、その出力をCOMMENTと結合する形です。COMMENTはUserScriptのマジックコメントを普通に書くことができます(%Q\`\`としましたが、COMMENTにバッククオート入れる方は居ませんよね…？)。

まず、JavaScriptと通信するのを容易にするためにnativeモジュールをrequireし、コード全体を`->{...}.()`で囲みます。これはJavaScriptでコードを`(function(){..})()`で囲うのと同じ利点があります。
次に、Native(\`document\`)でdocumentオブジェクトを拾います。ここで受ける変数名をdocumentにするとグローバルのdocumentオブジェクトが潰れるようなので注意して下さい。
最後に、docを使って要素を生成し、JavaScriptのメソッドやセッタを変数をNativeでくくって呼び出せば完成です。
GAE/Go のテンプレートと Jinja2 テンプレートの比較

## Goでhtmlテンプレートを書くときの参考資料

[Golang html/template versus Python Jinja2 (1)](http://siongui.github.io/2015/02/21/python-jinja2-vs-go-html-template-1/)
[Golang html/template versus Python Jinja2 (2)](http://siongui.github.io/2015/02/24/python-jinja2-vs-go-html-template-2/)
[Golang html/template versus Python Jinja2 (3) - Arrays and Slices](http://siongui.github.io/2015/03/05/python-jinja2-vs-go-html-template-array-slice/)
[Golang html/template versus Python Jinja2 (4) - Arrays and Slices Index](http://siongui.github.io/2015/03/06/python-jinja2-vs-go-html-template-array-slice-index/)
[Golang html/template versus Python Jinja2 (5) - Maps and Dictionaries](http://siongui.github.io/2015/03/07/python-jinja2-vs-go-html-template-map-dictionary/)
[Golang html/template versus Python Jinja2 (6) - Template Inheritance (Extends)](http://siongui.github.io/2015/03/08/python-jinja2-vs-go-html-template-extends/)
[Golang html/template versus Python Jinja2 (7) - Custom Functions and Filters](http://siongui.github.io/2015/03/12/python-jinja2-vs-go-html-template-function-and-filter/)
Redis Lua Scriptにはまだまだ限界を感じる

備忘程度に。後で、もう少し補足して記事にするかも。

* 別記事でも書いたけど、Expireにフックできない。Expireの仕組みからして当然っちゃあ当然だけどね。

* 時間のかかる処理に関する逃げ道がない（個人的には、Yieldでコンテクストを譲って、atomicityを犠牲にしてでも長期間の動作をしたいときに対応する、とかができると良いし、それってLuaっぽいと思う）

* 入れ子にできない。Redis Lua Scriptから別のスクリプトを呼べない。例えば、木構造をアトミックに操作できるように、木構造の基本動作をLua Scriptにしたとすんじゃん？　で、その木構造の基本動作を使って、より案件依存なトランザクションを作ろうとすると、詰むよね。結局、そうなると、後者についてはWATCHを使った楽観的ロックか、[僕も書いたみたいな、アプリケーションレベルのロック](http://qiita.com/mrpepper/items/587fb292c601723f0e7d)に戻らざるを得ない。

* 前項は、ひょっとして、モジュールシステムっぽくアプリケーション側でRedis Lua Script同士のインクルード機構をアプリケーション側で用意すべきってこと？　そんなバナナ。やれと言われればやれそうな気はする解法だけどさ……。でも、せっかく引数をARGVと別にKEYSを用意してシャーディングに対応しているというのに、それが効かなくなっちゃうよね。スケールできない宿命なんて、業務には使えなさそう。
C++ > finallyのないC++での解決 > RAIIを使う

引用: コーディングを支える技術 by 西尾泰和さん

>一方でC++ではfinallyを持っていません。それではどうやって「例外が起きても起きなくても必ず実行されるコード」を書けば良いのでしょうか？
C++ではRAIIを使うのが一般的です。

```cpp
class SampleRAII {
public:
  // コンストラクタ
  SampleRAII()
    : resource(lock()) {
  }

  // デストラクタ
  ~SampleRAII() {
    unlock();
  }
  ...
}
```

> C++の設計者 Bjarne Stroustrupは、finallyを使うよりもこちらのほうがエレガントな解決方法だと主張しています（「C++の設計と進化」 p.495）。
Slackで、投稿に対して絵文字で「いいね！」などのリアクションが返せるようになった


投稿の右のギヤアイコンから`Add a reacton`出来るようになりました :tada: 

![Slack add a reaction](https://qiita-image-store.s3.amazonaws.com/0/19398/da593125-2231-d5aa-ad5f-f87431fd8372.png "e855ce6e-bc61-fc4d-5b62-a66ec0ac444e.png")


今までは、 :+1: などを通常の発言として返信することが多かったと思いますが、それが機能的になって便利です。
単なる「いいね！」じゃなくて、好きな絵文字で出来るのもSlackらしい(　´･‿･｀)

1つめの絵文字はギヤアイコンからでやや分かりにくいですが、それ以降はその絵文字を押すとカウント上がったり、追加ボタンが隣に配置されていて追加操作も簡単に出来ます。
~~(現時点で、iPhoneアプリなどからも初回のリアクションは出来ない模様)~~
→メッセージ長押しで出てくるアクションシートのメニューから選択出来るようになりました


![Slack modify reactions](https://qiita-image-store.s3.amazonaws.com/0/19398/434592d2-951f-181c-efef-5ce7d52e9c3c.png "d4e064bd-b057-c4c6-006e-39f3c4a392f3.png")

ちなみに、今のところReactionされても特に通知などは来ない模様です。

## 誰のリアクションか確認

### パソコン

リアクションの絵文字にマウスオーバーすれば見られます(　´･‿･｀)

![Screen Shot 2015-07-10 at 1.04.09 PM.png](https://qiita-image-store.s3.amazonaws.com/0/19398/fc0dfd5d-7d23-b1fb-bfc1-6db3a0bdb35a.png "Screen Shot 2015-07-10 at 1.04.09 PM.png")


### モバイル

リアクションの絵文字を**長押し** で一覧画面へ遷移します。

うっかりタップすると、リアクション動作になって、カウントが増えたり取り消しになったりするので、注意です。(パソコンでも同様)

![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/19398/e23ead32-b6e8-d420-71e8-2d55abfe9b57.png)


## `Add a reaction`のキーボードショートカット

以下でキーボードのみでも可能です。

> You can also type `+:emoji_name:` or `cmd+shift+\` to react without leaving the comfort of your keyboard. Enjoy! :sparkles:

`cmd+shift+\`は日本語キーボードの場合、`cmd+shift+¥`でOKです。


## 情報元

デザイナーの @riotherio に、[Slack invents emoji favs, which are the best thing ever 💁](http://thenextweb.com/apps/2015/07/09/how-did-we-ever-live-without-this/)の記事を教えてもらいました(　´･‿･｀)
> Emoji reactions are available today in Slack, so prepare your channels for a flood of emoji in 3…2…

- Slackのリリースノート: [722 ways to say “I got your message” | Several People Are Typing](http://slackhq.com/post/123561085920/reactions)
- Hacker News: [Slack adds emoji reactions | Hacker News](https://news.ycombinator.com/item?id=9858953)
トランジスタ > 複合トランジスタ（まとめ) > 純ダーリントン / 準ダーリントン 

引用: ダイオード・トランジスタ回路入門 by 岡山 努さん
6章のまとめ

> 
1. ダーリントン接続はh_{FE}の大きなトランジスタを等価的に合成する手法です。合成h_{FE}は2つのトランジスタの電流増幅率の積になります。
2. 純ダーリントン接続や順ダーリントン接続では、合成されたトランジスタの極性は初段のトランジスタと同じ極性になります。
3. 低電圧動作させるときには準ダーリントン接続や初段プルアップの手法を用います。
4. 集積化されたダーリントントランジスタはB-E間に抵抗を接続したものがあり、h_{FE}のコレクタ電流依存性が大きいトランジスタとなります。
5. pnpn構造のサイリスタはnpnとpnpトランジスタの組み合わせ回路として考えることができます。
6. IGBTはMOS-FETとh_{FE}の小さなpnpトランジスタの異種ダーリントン接続に近い特性をもちます。

<hr>
http://blogs.yahoo.co.jp/denshiyorimichi/20871830.html
>この本では、インバーテッド・ダーリントン接続を<font color=red>準ダーリントン接続</font>と表現している

http://analog-engineer.cocolog-nifty.com/blog/2008/02/post_b367.html
> インバーテッドダーリントントランジスタ（<font color=red>準ダーリントン</font>）は，たとえば，pnp初段Q1のコレクタを主トランジスタnpnトランジスタQ2のベースに接続して構成する。

http://speed47.com/adiary/adiary.cgi/074
> 
ダーリントン接続とインバーテッドダーリントン接続の違い。
ダーリントン接続（以下<font color=red>純ダーリントン接続</font>）は、NPNのトランジスタを2つ使う。
しかし、トランジスタにも電圧低下が0.7Vほどあり、2段構えると1.4V下がってしまう。
その点、インバーテッドダーリントン接続は、NPNとPNPを使う事により、一段目の0.7Vの降下だけで済む　だそうで。
FuelPHPとACCONの関連（クラス図）

![クラス図](https://lh3.googleusercontent.com/-am8LYrAdnd5XS0UgsKeK_2xzH3CMMUBi0yWphbvqQ=w2346-h1660-no "クラス図")

[拡大](https://photos.google.com/share/AF1QipOclhzl3JLsmGphqQBPgueQmbE3MM6_CwxXzmZXyZ1F2ApYSY_hPsrS2KGHdxe3rA/photo/AF1QipNhWdVUyyhHBuLMlzo17P2u-m6V-kNVifj6Jw2g?key=Q2J6VHNoNkxNaDZHUlRmQVByYV9YUXQxbVY2S1hn "ACCON Class図")

※アプリケーション層を除く

-----
[ACCONのクラス図はこちら](http://qiita.com/maemori/items/179d47e23bc3265f6bdd "ACCON Class図")
技術英語 > the other way around

「反対に」という意味。

youtubeのコーディングの動画やTVドラマや映画などで使われているのをよく聞く。

<hr>
http://english.stackexchange.com/questions/132109/does-the-way-around-means-the-same-thing-as-the-opposite

> Hellionさんの回答
> I think the usage of the other way around is restricted to cases where there is a statement of the general form "X (has some relationship to) Y"; when you say "no, it's the other way around" you are asserting that in fact the statement should be "Y (has some relationship to) X."

X, Yふたつが関係する時、Xのことを言っていると思ったらYだった、という場合は、the other way aroundが使えるという回答。

例1:
> We went to the store and then the movie. Wait, it was <font color=red>the other way around</font>; we went to the movie and then the store.

例2:
> Did the first chicken create the first egg, or was it <font color=red>the other way around</font>?

<hr>
引用: オックスフォード現代英英辞典
> the , other way 'round
> 1. in the opposite position, direction or order
> I think it should go on the other wary round.
> 2. the opposite situation
> I didn't leave you. It was the other way round (= you left me).

<hr>
githubで検索したところ
「AからBへ変換、とその反対」
の"その反対"の意味で"the other way round"が使われている。

https://github.com/gegy1000/TBL-Json/blob/72a8b0d2229dc3db12e536614419ecd03d52caf0/README.md
> Converts tabula models to 1.8 block models and the other way round

https://github.com/benjojo/labcol.js/blob/f3e70155a20be234aa3cc5f0602adedb5a5d5161/README.md
> A library to handle the conversion of RGB to LAB or XYZ, and the other way round!
今日はWebcomponentsとPolymerであそぶ。


仕事が終わってようやくPolymerと遊ぼうと思ってたら
ソロソロと朝が来ましたが...( ；∀；)ドゥースルワタシ...

>これはワタシ的メモです。
>違っているかもしれませんので先にごめんなさいw


##まずWeb componentsのおさらい。

今年5月末にバージョン1.0となり正式リリースしたPolymerさんにちなんで
一年半前に耳にしたWebcomponentsをおさらいっス。
ひつこく。
それはもう。
何度記事読んでも覚えられないんでッw

* * *

* Templates (各パーツごとのテンプレートを作成)
* Shadows DOM (ShadowRootで隠してページに埋め込む)
* Custom Elements (分かりやすいタグを独自に作成し、挿入。と。)
* HTMLImports (各パーツをファイル毎に分解してからの〜インポート。)

* * *

**どや。**

**・・・**

**覚えにくい...orz**

↑英語ヤメろ〜w (あかん。ニホンゴもやー( ；∀；))

##つまりのところ、カプセル化して使ってこまい。

・・・てな感じで、いかがでしょうか？w

語弊が生じそうなので、やめとこか(笑)
↑ワタシ楽しそうw


これがおもしろいのは、
HTML/CSSはスコープを持たない故にどんどん上書きしていくリスクがなくなるShadows DOMと
HTMLを使いまわそうぜ的に新たに要素を構成して
それをCustom Elementsで新しくタグ作って定義していこうぜ的なとこ。

さてさて。うまくワタシに組み込めるかな？笑

##Polymerさん。

今日あそぶハズだったJavaScript UIフレームワークのPolymerさんです。w

ここ最近APIに遊んでもらっていることが多いワタシですが
.
.
.

あー。
外が明るくなってきたのでまた後日にしましょう。。。orz

目指せ。Material design。笑
systemd-networkdでbonding, VLAN, bridgeを設定する


# はじめに

systemd-networkdは、systemd version 210から含まれているネットワーク設定のデーモンです。
この記事では、systemd.netdev(5)からbonding, VLAN, bridgeの設定をまとめました。

# netdevファイルの基本

仮想ネットワークデバイスは、systemd-networkdでは`.netdev`ファイルから作成されます。
標準的な`.netdev`ファイルは以下のようになります。

```:example.netdev
[NetDev]
Name=名前
Kind=種類

[Kindに応じたセクション]
```

気をつけることは、**`[Netdev]`ではなく`[NetDev]`だということです。**間違えるとうまく動きません。

# bonding

bondingは、複数のネットワークインターフェースを束ねるための仕組みです。
bondingをするために`bond0`というインターフェースを作成する`.netdev`ファイルは以下のようになります。

```:bond0.netdev
[NetDev]
Name=bond0
Kind=bonding

[Bond]
Mode=balance-xor
TransmitHashPolicy=layer2+3
```

`Kind`に`bonding`を設定し、動作モード等の設定は`[Bond]`で行います。

`Mode`には動作モードを設定します。
(参考: Linux Bonding mode=0の恐怖 http://ja.community.dell.com/techcenter/b/weblog/archive/2014/05/16/linux-bonding-mode-0)
`TransmitHashPolicy`は送信ハッシュポリシーの設定で、`xmit_hash_policy`に相当するオプションです。

どのインターフェースを束ねるかの設定は、対応した`.network`ファイルで行います。
この例では、`eth0`を`bond0`に参加させています。

```:eth0.network
[Match]
Name=eth0

[Network]
Bond=bond0
```

# VLAN

VLANは、LANセグメントを分割して仮想的なLANを作るための仕組みです。
vlan101(VLAN番号:101)を作成する`.netdev`ファイルは以下のようになります。

```:vlan101.netdev
[NetDev]
Name=vlan101
Kind=vlan

[VLAN]
Id=101
```

`Kind`に`vlan`を設定し、VLAN IDの設定は`[VLAN]`で行います。

`Id`にVLAN IDを設定します。これも大文字・小文字の違いには気をつけてください。

どのインターフェースからVLANを作成するかの設定は、対応した`.network`ファイルで行います。
この例では、`vlan101`は`eth0`から作成されます。

```:eth0.network
[Match]
Name=eth0

[Network]
VLAN=vlan101
```

# bridge

ブリッジは、複数のネットワークセグメントを接続するための仕組みです。
`br0`という名前のブリッジを作成するための`.netdev`ファイルは以下のようになります。

```:br0.netdev
[NetDev]
Name=br0
Kind=bridge
```

`Kind`に`bridge`を設定するだけです。
残念ながら`brctl`コマンドなどで設定できる、STPなどは設定できないようです。

どのインターフェースをブリッジに参加させるかの設定は、対応した`.network`ファイルで行います。
この例では、`eth0`を`br0`に参加させています。

```:eth0.network
[Kind]
Name=eth0

[Network]
Bridge=br0
```

# 参考
Arch Wikiのsystemd-networkdの項目
https://wiki.archlinuxjp.org/index.php/systemd-networkd

man systemd.netdev(5)
http://www.freedesktop.org/software/systemd/man/systemd.netdev.html
"gcloud auth login"で"UnicodeDecodeError"が出た時の対処。

一緒に作業している人が、GAEを触る為にGoogle cloud SDKをインストールして`gcloud auth login`でログインしようとすると`UnicodeDecodeError`が発生してログイン出来ない事案が発生した。
ググって調べると、同じエラーに引っかかっている人はいるのだが、イマイチ解決方法が見えない。（英語が駄目だからかもしれない…）
Pythonの文字コードの設定をあれこれとしても解決せず、`gcloud components update xxx`で私のPCと同じ内容にしても駄目。 もしや、Windows7とWindows8というOSの差だろうかとも思ったが、それならもっと情報が転がっていそうだけれど…。
と、行き詰まっていたところで、ログインユーザー名が漢字である事に気づく。 そんな事は無いよなぁ…と思いながらも、管理者権限のアルファベット表記のユーザーを１人つくり、試してみると…普通にログイン出来た。

**やはり全角のユーザー名は駄目なのか…。**

もちろん、他の要因でも起きる可能性はあると思うのだけれど、まさかだった。
UE4でモデルをインポートするとテクスチャが読み込まれない


#【前提】
__・Unreal Engine 4.8.1の使用を前提に記述しています__
__・うそを書くつもりはありませんが、私の使用経験に基づいて記述しているため、間違いが多分にある可能性があります__
__・私の環境がWindowsなのでWindows環境前提です__

#【目的】
UE4でインポートできるFBX形式ので、素材サイトなどモデルを活用する場合に、なぜテクスチャファイルが読み込まれないかの例です。

#【FBX形式】

FBXでテクスチャを使用する場合、方法が2つあります。

1)FBXファイルにテクスチャデータ（バイナリ）を含める
この形式の場合はFBXのファイルが当然大きくなります。
例えばDCCツールであるMayaなどで、この形式でFBXに書きだす場合は以下のオプションにチェックを入れます

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/485be48a-5ad8-15d1-dc62-349232517bb7.jpeg)

Maya等でなくても、他のDCCツールでもFBX内にテクスチャを内包するオプションはあると思います

以下、最近公開されたモデルの中野シスターズの妹さんのFBXファイルにテクスチャを内包した例です。
ファイルが10MBを超えています。
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/29c586b2-07fe-8622-5cb4-a6e4b2dda282.jpeg)

中野シスターズさんの配布サイトはこちら
http://nakasis.com/

2)FBXファイルにテクスチャデータを含めない
この形式ではテクスチャデータをFBXファイルに内包するのではなく、どこか別の場所の外部にもって
テクスチャのファイルの存在する場所、絶対パスか相対パスを記録する形式です。

同じようにDCCツールであるMayaでこの形式で出力する場合、上記のチェックを外します

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/a24390ae-e71d-31a5-5439-409982decfc9.jpeg)

この形式ですと、テクスチャファイルを外部に持ってモデルの形状データだけに出来るためファイルを小さくできます。

以下、中野シスターズの妹さんのFBXファイルにテクスチャを内包しない例です。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/f379dbaa-bb44-02fc-8868-6b165874fd9e.jpeg)


#【UE4のインポートオプション】

UE4でFBXにテクスチャやマテリアルデータを読み込む場合は以下のチェックを付けます

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/59114/99b507b4-d34c-cba2-1809-ca1cd264adb8.jpeg)

赤枠の2つのチェック
__import Materials__
__Import Textures__

です。

1)FBXファイルにテクスチャデータ（バイナリ）を含める　形式をインポートする場合は
__Import Textures__のチェックは無視されるようで、__import Materials__がチェックされていると
__Import Textures__にチェックがあろうとなかろうと、自動的にテクスチャファイルを読み込みます。

2)FBXファイルにテクスチャデータを含めない　形式でテクスチャファイルをインポートする場合は
__Import Textures__　にチェックがないとテクスチャファイルがUE4に読み込まれません。

通常はこのチェックは2つとも付けておく方が良いと思います。

#【UE4でテクスチャが読み込まれない例】

この現象は、幾つか原因が考えられますが

上記の説明の中で、この現象に陥る原因として
、
__①【UE4のインポートオプション】が誤っている__

__import Materials__
__Import Textures__
のチェックを外している。


__②2)FBXファイルにテクスチャデータを含めない　形式で保存されているテクスチャファイルの場所がUE4のインポータが認識できない場所にある__

素材サイトなどで作製したFBXファイルのテクスチャの保存先が絶対パスで記録されている場合等

__③テクスチャファイルがUE4で読み込みできる画像形式でない__

https://docs.unrealengine.com/latest/JPN/Engine/Content/Types/Textures/Importing/index.html
↑UE4で読み込める画像形式はこちら

.bmp
.float
.pcx
.png
.psd
.tga
.jpg
.dds 
.hdr 


【最後に】

質問頂いたので、UE4でテクスチャが読み込まれない現象について説明してみました。

多分、海外の素材サイト等を利用してモデルを読み込むと②の現象に陥ることが多いです。
その場合は、諦めてマテリアル情報（UV等）だけを読み込んでおいて
テクスチャは後から画像として読み込んで、自分でマテリアルに貼っていくしかないと思います。
（あとはDCCツールで編集して1)FBXファイルにテクスチャデータ（バイナリ）を含める　の形式にしてから読み込むととか）


最後まで読んで頂いてありがとうございます。
systemdで既存のunitを編集する2つの方法

# はじめに

systemdを使っていて、以下のような理由でunitファイルを編集したくなることがあります。

- 起動用のコマンドラインオプションを編集したい
- 起動時に独自のフックを入れたい
- unitファイルがバグってて起動できない

ここでは、systemdで既存のunitを編集するための2つの方法を紹介します。

# unitファイルの差分だけを書く

個人的にはこちらの方法をおすすめします。
なぜなら、ほとんどの場合は設定を1〜2個編集するだけで済むはずで、新たにunitファイルを作るのはやりすぎだと思うためです。

この方法で`nginx.service`を編集したい場合は以下のコマンドを実行します。

```
# systemctl edit nginx.service
```

このコマンドを入力するとエディタが立ち上がるので差分を書いて、保存して終了します。
差分は`/etc/systemd/system/<unit名>.d/override.conf`に保存されます。

# unitファイルのコピーを編集する

unitファイルのコピーを`/etc/systemd/system`に作成して、それを編集する方法です。
編集箇所がかなりの量になる場合はこちらが楽かもしれません。
デメリットとして、前述の差分を書く方法とは違い、こちらは1からunitファイルを作るのと変わらないためバージョンアップ等に対応できない点があります。

この方法で`nginx.service`を編集したい場合は以下のコマンドを実行します。

```
# systemctl edit --full nginx.service
```

# daemon-reloadの必要性

この2つの方法では、編集後に自動的に`# systemctl daemon-reload`が実行されるので別途実行する必要はありません。

# ハマりそうな点について

`[Service]`の`ExecStart`を編集する際には、以下のようにすると既存の設定を上書きできます。

```
[Service]
ExecStart=
ExecStart=新しい設定
```

# 参考
Arch Wikiの「Editing provided unit files」の項目
https://wiki.archlinux.org/index.php/Systemd#Editing_provided_unit_files
wglGetProcAddress()を手書きしたくなかったからスクリプトにした

wglGetProcAddress() を自分でなんとかしないといけない局面があり glext.hから一連の処理を自動生成するrubyを書いた。


GLEXT_PATH, EXT_FUNCTION の定義は外で。

```rb

# glext.hで宣言されている関数群を {関数名, 宣言文} のHashにする
glextFunctions = File.read(GLEXT_PATH) \
  .split("\n") \
  .select{|line| line.match(/GLAPI \S+ \*?APIENTRY gl\S+/)} \
  .map{|api| [api.match(/APIENTRY (\S+) /)[1] , api] } \
  .to_h

data = []

initData = []
initData << "inline bool initGLExtensionProcAddress()"
initData << "{"
initData << "  return"

EXT_FUNCTION.each do |funcName|
  unless glextFunctions.key?(funcName)
    puts "!!!! not found function -- #{funcName} !!!!"
    exit
  end

  funcDecl    = glextFunctions[funcName]

  funcPointer = "wglProcAddress_#{funcName}"
  funcType    = "PFN#{funcName.upcase}PROC"
  returnType  = funcDecl.match(/GLAPI (\S+ \*?)APIENTRY/)[1]
  argDecl     = funcDecl.match(/\(([^\)]+)\)/)[1]
  args        = argDecl.split(',').map{|arg| arg.match(/\*?([a-zA-Z0-9]+)$/)[1]}.join(',')
  args        = "" if args == "void"

  data << <<-CODE
  static #{funcType} #{funcPointer} = NULL;
  inline #{returnType} APIENTRY #{funcName}( #{argDecl} ){
    return (*#{funcPointer})( #{args} );
  }
  CODE

  initData << "  ( #{funcPointer} = "
  initData << "    (<%=funcType%>)wglGetProcAddress(\"#{funcName}\") ) != NULL &&"
end

initData << "    true;"
initData << "}"

File.write("glextension.h", data.join("\n") + "\n" + initData.join("\n"))
```

↓みたいなヘッダーを、EXT_FUNCTIONで設定しただけ吐く。

```cpp
static PFNGLGENBUFFERSPROC wglProcAddress_glGenBuffers = NULL;
inline void  APIENTRY glGenBuffers( GLsizei n, GLuint *buffers ){
  return (*wglProcAddress_glGenBuffers)( n,buffers );
}

inline bool initGLExtensionProcAddress()
{
  return
    ( wglProcAddress_glGenBuffers =
      (<%=funcType%>)wglGetProcAddress("glGenBuffers") ) != NULL &&
    true;
}
```

もっとrubyうまくなりたい。
Vagrantの仮想マシンにscpでファイル転送する


# 1.OpenSSHの設定をする
OpenSSHの設定を行う. vagrant ssh-configコマンドで出来る.


```
$vagrant ssh-config 
```

このコマンドで得ることのできるファイルを,ssh.configに書き込む

```
$vagrant ssh-config > ssh.config
```

# 2.scpコマンドで転送する

```
scp -F ssh.config hoge.txt vagrant@default:~/
```
* scp [-F ssh_config] コンフィグファイルを指定
無料で自分専用CMSを運用する方法（OctoPress + OpenShift編）


## 前提（環境）
* 自分の手元
	* Mac
* Web
	* OpenShift

## 準備
* OpenShiftのSignUp
* `gem install rhc` しておく（自分の手元）
	* installの初期セットアップでOpenShiftとのSSH設定も行われる

## 手順
* OpenShiftでの作業
 1. Ruby1.9.3以上を作成する
 2. Application画面の右下に出ている"SourceCode"の下にある `ssh:〜` をコピーしておく

* 手元の作業
 1. 好きなフォルダーを作る
 2. `git clone git://github.com/imathis/octopress.git octopress && cd octopress`
 3. `sudo gem install bundler`
 4. `rbenv rehash`
 5. `bundle install`
 6. `rake install`
 7. `cd ..`
 8. `mkdir _deployment && cd _deployment`
 9. `cp ../octopress/config.ru .`
 10. `cp ../octopress/Gemfile .`
 11. `bundle install`
 12. `mkdir public/`
 13. `git init .`
 14. `git remote add openshift URI` ここで指定するURIはOpenShiftの2.の作業のURI
 15. `git add .`
 16. `git commit -am 'initial deploy'`
 17. `cd ..`
 18. `mv _deployment octopress`
 19. `cd octopress`
 20. Rakefileの内容を[Rakefile@gist](https://gist.github.com/Gaddict/a2c65d09460e25bae208)で上書きし、保存
 21. `git add _deployment/`
 22. `rake new_post['Hello World']`
 23. 22.で作成したファイルを編集し、保存する
 24. `rake generate`
 25. `rake gen_deploy`

## 簡単な操作方法
### 記事の作成
1. `rake new_post['title']`

### 記事の内容を確認
1. `rake preview`
2. [http://localhost:4000](http://localhost:4000)にアクセス

### 記事をOpenShiftにアップロード
1. `rake gen_deploy`


## 参考サイト
* [Deploying Octopress on Openshift](http://www.shellco.de/deploying-octopress-on-openshift)
* [Octopress SetUp](http://octopress.org/docs/setup/)