OmniAICreator/Qiita-1.07M huggingface dataset:
Mac OSX(Yosemite) で動くRails開発環境を作る。

Mac OSX（Yosemite）で動くRails開発環境をセットアップしていきます。
RailsをMac上で動かすには以下の手順で必要なものを自分の環境にインストールしていきます。

1.Xcodeのインストール
2.Homebrewのインストール
3.RVMのインストール
4.依存パッケージのインストール
5.Rubyのインストール
6.MySQLのインストールと自動起動の設定
7.Railsのインストール
***

#1. Xcodeのインストール
App storeからXcodeをインストールする。![スクリーンショット 2015-04-01 16.02.09.png](https://qiita-image-store.s3.amazonaws.com/0/73855/e3c4a954-8720-76da-6027-44ecc5b4535e.png)
Xcodeを起動して、Xcode→preferences→DownloadからCommandline Toolsを選択し、インストールします。


#2. Homebrewのインストール

Homebrewは必要なパッケージをターミナルから簡単なコマンドでインストールできるようにするものです。

Terminalを起動し、
`ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
を実行し、Homebrewをインストール。
インストールが終わったら`brew update`をterminalで実行します。
#3. RVMのインストール
RVMはRubyのバージョンを複数管理するソフトで、コマンド一つでRubyのバージョンを簡単に変更することができるツールです。似たものにrbenvというものがあります。
以下のコマンドを順に実行しましょう。

`$ git clone --depth 1 git://github.com/wayneeseguin/rvm.git`
`$ cd rvm`
`$ ./install`
`$ source ~/.bashrc`

#4. 依存パッケージのインストール
Homebrewのコマンドを用いて順次必要なものをインストールします。今回は以下のコマンドを実行しました。
`$ brew install autoconf automake libtool pkg-config openssl readline libyaml sqlite libxml2 libxslt libksba imagemagick`

`$ brew install https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb`

#5. Rubyのインストール
先にインストールしたRVMのコマンドを利用してRubyをインストールしていきます。
今回はRuby1.9.3と最新版のインストールを行います。
1.9.3のインストール
`$ rvm install 1.9.３`
1.9.3をデフォルトに設定
`$ rvm alias create default 1.9.3`
同様に最新版をインストール
`$ rvm install 2.2.1`

#6. MySQLのインストールと自動起動の設定
Homebrewを使ってMySQLをインストール

`$ brew install mysql`
MySQLの起動

`$ mysql.server start`

rootパスワードの設定

`$ /usr/local/opt/mysql/bin/mysqladmin -u root password 'パスワード'`

自動で起動するように設定ファイルをコピー

`$ mkdir -p ~/Library/LaunchAgents`

`$ cp /usr/local/Cellar/mysql/5.5.29/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/`

自動起動の設定ファイルを修正

`$ vim ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist`

6行目から

<key>KeepAlive</key>

<false/>

修正したら設定ファイルをロード

`$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist`

#7.Railsのインストール

`$ gem install rails`

Bundlerインストール

`$ gem install bundler`
でオッケーなのですが、今回はNetbeansを用いてRailsのプラグインをインストールしてみます。
（NetbeansはオープンソースのIDE(統合開発環境)です。詳細はGoogleで。）

NetBeansのメニューから［ツール］→［プラグイン］を選択

［設定］タブを選択

［追加］ボタンをクリック

［名前］に「Community Ruby」、［URL］に https://blogs.oracle.com/geertjan/resource/nb-72-community-ruby.xml と入力

［OK］ボタンをクリック

［使用可能なプラグイン］タブを選択

［更新の確認］ボタンをクリック

［検索］ボックスに「ruby」と入力

［Ruby and Rails］にチェックを入れる

［インストール］ボタンをクリック

［次へ］ボタンをクリック

［すべてのライセンス契約条件に同意する］をチェック

［インストール］ボタンをクリック

「次のプラグインは署名されていますが信頼されていません」という警告が出たら［続行］ボタンをクリック

［完了］ボタンをクリック
Apple Watchアプリ申請時にハマったこと

今日（2015/4/1）からApple Watchに対応したアプリの申請受付が始まりました。さっそく私も申請してみたのですが、いくつかハマった点があったのでメモしておきます。

## 1. 各種アプリアイコンを用意してなかった


私のアプリはプッシュ通知に対応してないので<b>Short Look</b>などのアイコンは不要かと思ったのですが、Validate時にエラーが出ました。

なので、<b>プッシュ通知に未対応でも全種類のアイコンを用意しておいたほうが良さそうです。</b>

* [Icon and Image Sizes](https://developer.apple.com/watch/human-interface-guidelines/icons-and-images/) - 必要なアイコンサイズはこちら

## 2. App Store用の大きいアイコンとスクリーンショットを用意してなかった

iTunes ConnectからApple Watch用の素材をアップできるようになっていたのですが、これらを用意していませんでした。

* 1024 x 1024 pxの大きいアイコン（ストア側で円形にトリミングされる）
* 312 x 390 pxのスクリーンショット（最低1枚）

詳しくは [iTunes Connect Developer Guide](https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Appendices/Properties.html) の「Apple Watch Properties」を参照して下さい。

## 3. アプリ本体とWatchAppのバージョンが合っていなかった

`CFBundleVersion` と `CFBundleShortVersionString` を、アプリ本体とWatch Appで完全に一致させておく必要があります。ここがずれているとValidateでエラーになります。

<b>良い例</b>

* アプリ本体
  * CFBundleVersion: 1.2.0.1
  * CFBundleShortVersionString: 1.2.0
* Watch App
  * CFBundleVersion: 1.2.0.1
  * CFBundleShortVersionString: 1.2.0

<b>2015.5.20追記：</b>今後はWatchKit Extension、Today Extension等のバージョンもアプリ本体と合わせる必要がありそうです（現在は警告が出るだけですが、将来的にはエラーになると予想されます）

## 4. Watch対応してるとTestFlightが使えないこと

![4c31779ca6ad504bc218.png](https://qiita-image-store.s3.amazonaws.com/0/8292/8feac131-9d7f-929a-efbe-8703b013776c.png)


だそうです。。

早く対応して欲しい！

<b>2015.5.19追記：</b>いつの間にかWatchKitを含むアプリもTestFlightに対応していました

# おまけ

Apple Watchに対応したアプリを申請するには、

* アプリ本体のプロビジョニングプロファイル

の他に

* WatchKit Extension用のプロビジョニングプロファイル
* WatchKit App用のプロビジョニングプロファイル

が必要になります。ここでハマる人が多いようです。

# 参考リンク

* [Preparing Your App Submission for Apple Watch](https://developer.apple.com/app-store/watch/)
Json11　オブジェクトの作り方、書き方

json配列と、jsonオブジェクト、

json11

C++11による初期化子構文、を使ってJson形式オブジェクトを作成可能。_φ(･_･
＜例＞

```
Json my_json = Json::object {
	{ "key1", "value1" },
	{ "key2", false },
	{ "key3", Json::array { 1, 2, 3 } },
};
```

■配列の中にオブジェクトを格納する場合。
・jsonオブジェクトを作って、そこにjson配列を入れてますね。

```
//目的例
//オブジェクトを、配列に格納しています。
{
    "PlayerData", [
        { {"map", 1}, {"area", 1}, {"quest", 1} }
        ,{ {"map", 2}, {"area", 2}, {"quest", 2} }
    ]
}
```

```
//書き方例　コード例
json11::Json my_json = json11::Json::object {
    {	"PlayerData", json11::Json::array {
            json11::Json::object { {"map", 1}, {"area", 1}, {"quest", 1} }
            , json11::Json::object { {"map", 2}, {"area", 2}, {"quest", 2} }
        }
    } 
};
```
push.default=simple が upstream 相当にならない時

[Qiitaとかで](http://qiita.com/awakia/items/6aaea1ffecba725be601#3-4)よくある説明。

> **simple**
> upstreamが設定されていて、それが同名のブランチ名であるときのみpushする。

```shell-session
$ git remote add origin git@github.com:unarist/test.git
$ git push origin
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master
```

これは期待通り。

```shell-session
$ git remote add hoge git@github.com:unarist/test.git
$ git push hoge
Counting objects: 3, done.
Writing objects: 100% (3/3), 197 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:unarist/test.git
 * [new branch]      master -> master
```

え？upstream設定してないのに、なんでrefspecなしでpushできてるの？

# 要約

- ブランチのupstreamとpush先が違うremoteの時、`push.default=current` と同じになる
    - つまり「カレントブランチと同名のブランチにpushする」
- ブランチのupstreamが設定されていない場合は `origin`
- ただしupstreamが無効なremoteの場合は `push.default=upstream` 互換のまま
    - 例えば、ブランチのupstreamが設定されておらず、 `origin` 以外のremoteしか作ってない時。

# むかーしむかし、あるところに

[Triangular workflow](https://www.sociomantic.com/blog/2014/05/git-triangular-workflow/) というのがあります。「普段はupstreamからpullしたいけど、pushは別のところにしたい」というパターン。Gitにはこれをサポートする機能として、`remote.pushdefault` `branch.<name>.pushremote` という設定があり、例えばブランチのupstreamがrepoAになっていても（オプションなしで）repoBに対してpushする、ということができます。

これらの設定はあくまでデフォルトのpush先を指定するものであり、「push時はそれがupstreamになる」というわけではありません。`git push <repo>` 相当ですね。

`push.default=upstream` は「refspecなしのpushは常にupstreamに対して行われるべき」という設定なので、Triangular workflowとは相性が悪いのですが、これまでは `push.default=matching` がデフォルトでしたし、マニュアルにも一応注意書きがあります。

> `upstream` - push the current branch back to the branch whose
   changes are usually integrated into the current branch (which is
   called `@{upstream}`).  *This mode only makes sense if you are
   pushing to the same repository you would normally pull from
   (i.e. central workflow)*.

さて、最近になって `push.default=simple` が現れ、勧められるようになりました。今の最新版ではこれがデフォルト設定です。そうなると、Triangular workflow をしていた人は（これまでデフォルト設定で動いていたのに）設定を変えないといけません。

「面倒だな。よし、Triangular workflow っぽい時は `push.default=simple` からupstreamの縛りを除いた、`push.default=current` をデフォルトにしよう」

[push: change `simple` to accommodate triangular workflows · git/git@ed2b182](https://github.com/git/git/commit/ed2b18292bfeedc98c9e2b6bd8a35d8001dab2fc)

その基準が「upstreamとpush先のrepo(remote)が異なる時」なので、 `git push piyo` としても `push.default=current` 相当になるというわけです。めでたしめでたし。

# おまけ：simple vs current

`matching` よりマシってぐらいの理由で `simple` を使ってましたが、 `current` もよさそうですね。普段同じremoteにpushすることが多いなら、 upstream設定してなくても `git push` が使えて便利な気もします。`origin` 以外をデフォルトにしたいなら `remote.pushdefault` 設定すればいいですし。

逆にこういう場合は `current` はやめたほうがよさそうです。

- ローカルとは違う名前のブランチにpushしたい（することがある）
- upstream設定していなければ叱ってほしい
- `git push <not-upstream-repo>` したら叱ってほしい（これは `simple` でもだめですが）
【新卒/GitHub初心者向け】コードレビュー時のプルリクテンプレ


社会人7年目のゴリゴリのおっさんですが
新卒からこんなプルリクきたら嬉しいなー、
ってか自分もこれやらないとなーっと思ったので。

また今までSVNだったけど4月からGitHub使うことになった方にも
参考になればと。


## 目的
- コードレビューにかかる時間的コストをさげて、生産性を上げてこ！
- どこをどう見ていいかわからん！という先輩レビュワーの不満解消！
- 先輩レビュワーに対する意思表示(HRTの精神)！
- 自分がしたことの明示化(伝えないと伝わらない)！
- 何をして何をしてないかの意思表示!


## 以下テンプレ内容
(git hubのコメントに貼り付けるイメージ)

````
## レビュー期日

## 目的

## やったこと

## やってないこと

## 〇〇さんに見てほしいところ

## 確認済


お願いします。
````



## 以下テンプレを使った例


````
## レビュー期日
 - 6/23 18:00まで
 
## 目的
リダイレクトするとパラメータが消えるバグの解消

## やったこと
 - [x] def process_g08m11_redirectsにparams(typeなどの)を追加
 - [x] def process_rails_redirectsにparams(typeなど)を追加
 - インデント調整やソース可読性向上のためのリファクタリング

## G08M11さんに見てほしいところ
 - 冗長的な書き方の解消

## 確認済
 - 単体テスト
 - 結合テスト


お願いします。
````

## やってみた結果
 - テンプレ使ったら所要時間1分も掛からない。
(規模にもよるかも。フェーズにもよるかも。)
 - 好意的に受け取って頂けてる感ある。

 - まだ実施中のためもっと良いやり方やチームにfitしたやり方があるかも。
 - PDCA回しながら継続化
 - もっと状況によってパターン化させていく。



## 参考記事

http://techlife.cookpad.com/entry/2015/03/30/174713
【俺メモ】node-sqlite3でデータが取れなかった時の処理

node.js用のSqlite3のパッケージnode-sqlite3のdb.eachを使ったときのメモや。
インストールとか省略。

# SQLの実行結果が0件の場合を検知できないパターン

```js:app.js
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('db.sqlite3');

db.serialize(function() {
    //取り出したレコードを１行ずつループするeachを使うで
    db.each('SELECT * FROM test WHERE id = ?', [n], function(err, row) {
        if (err){
            //エラー処理してな
        }else{
            //rowの値を処理するところや
        }
    });
    //eachで結果が0件ならcallbackの処理が走らんさかい、注意な。
});
```
# complete処理追加で解決

追加したところを抜粋すんで。

```js:app.js
    //取り出したレコードを１行ずつループするeachを使うで
    db.each('SELECT * FROM test WHERE id = ?', [n], function(err, row) {
        if (err){
            //エラー処理してな
        }else{
            //rowの値を処理するところや
        }
    }, function(err, count){  //←complete処理追加
        //SQL実行直後に上のコールバック処理が走る前にここが処理されるで。
        if (err){
            //エラー処理な
        }else{
            if (count == 0){
                //ここでSQLの実行結果が0件の処理や
            }else{
                //処理や
            }
        }
    });
});
```

db.eachの外側に件数が0件の判定を書いても無駄なあがきになるさかい注意な。
なんせ非同期で処理が進んで先に外側の処理が動いてまうからな。
注文詳細APIの403Forbiddenについて

いつもお世話になっております。

注文詳細APIを使用して複数店舗の注文詳細を取得するプログラムを昨年9月より稼働しています。

昨夜よりある店舗にて401 Authorization Requiredとなり、本日API認証を行って再度取得を行ったところ、今度は403 Forbiddenが返ってきてしまいました。

他の店舗では同様に本日認証エラーとなってもAPI認証を行った後は問題なく注文情報が取得できています。

「403 Forbidden」の説明を見ると「Forbidden. リソースへのアクセスを許されていないか、利用制限を超えている場合に適用されます。」とあります。
他の店舗は取得できているのでサーバの問題ではないと思いますが、利用制限とはどのようなものでしょうか？また他に考えられる原因がありましたら教えていただけますでしょうか？

どうぞ宜しくお願い致します。
:afterなどのCSS擬似要素のStyleを動的に変更する


通常は下記のようにcssプロパティによってStyleを指定できる。

```javascript
$('#hoge').css('color', 'red');
```

しかし、jQueryで:afterなどの擬似要素にはセレクタでアクセスすることができない。（非DOMであるため）
ボタンクリックのタイミングなどで、擬似要素のStyleを変更したい場合は下記のように動的にstyleタグを生成して書き換えると上手くいく。

```html
<html>
  <head>
    <style id='foo' type='text/css'></style>
    <style type='text/css'>
      #hoge:after {
        content:"E";
      }
    </style>
  </head>
  <body>
    <div>
      AB<span id='hoge'>CD</span>F
    </div>
    <button id="btn" type="button" value="Button">
  </body>
</html>
```

```javascript
var cssTemplate = '<style type="text/css">#hoge:after{color: #[color_code];}</style>';

$('#btn').on('click', function(e){
  var css = cssTemplate.replace('#[color_code]', 'red');
  $('#foo').replaceWith($(css));
});

```
cbrestoreで特定のドキュメントだけをリストアする

システムの開発中には、データベースの状態を特定の時点に戻したい場合が良くあります。今回はキーを指定して、Couchbase Serverで特定のドキュメントだけをリストアする方法を紹介します。

本文は[ブログ](http://ijokarumawak.github.io/couchbase/2015/04/01/restore-specific-doc/)で公開しています。

リストア前にバックアップファイルの中身を確認する方法や、キーの指定、日付範囲指定、 バケットの指定などのcbrestoreオプションについて記載しました。

- [バックアップ内容の確認](http://ijokarumawak.github.io/couchbase/2015/04/01/restore-specific-doc#step1)
- [バックアップファイルの中身をみてみよう](http://ijokarumawak.github.io/couchbase/2015/04/01/restore-specific-doc#step2)
- [リストアオプションの解説](http://ijokarumawak.github.io/couchbase/2015/04/01/restore-specific-doc#step3)
- [最終的なリストアコマンド](http://ijokarumawak.github.io/couchbase/2015/04/01/restore-specific-doc#step4)
cocostudio1.6メモ


cocostudio　1.6

プロジェクトのキャンバスを別のプロジェクトへ入れ替える事について　メモ。


プロジェクトファイル
　.xml.ui
　これを編集。
　　[JsonList]部分に追加または削除

キャンバスファイル
　.json
　これを移動する。

リソースの移動と削除も必要。
linux > cut --bytes=4-は各行の先頭から4バイト取り除く

動作環境

    CentOS 6.5

[こちら](http://qiita.com/7of9/items/900dc85dd83268d8ee60)のコメントで`cut --bytes=4-`を使ったスキップ処理をコメントいただいたが、処理後のサイズに納得がいかなかった。

[SO](http://stackoverflow.com/questions/29381522/why-cut-command-cut-more-than-specified-for-elf-file-cut-bytes-16-a-out)の質問に回答がつき、理由がわかった。

`cut --bytes=4-`は「各行の先頭4バイトを取り除く」となり「１つのファイルの先頭4バイトを取り除く」のではないということがわかった。

例として
```
echo -e "2015-03-31\n2015-04-01" | cut --bytes=4-
5-03-31
5-04-01
```
という結果となり、確かに「各行の先頭(4-1)バイトを取り除く」ようになっていることが確認できた。

.ELFファイルの中身が行のように認識されるバイナリデータが入ってしまっている場合、`cut --bytes=4-`を使ってしまうと、ファイル先頭だけでなく途中も削除されるということがわかった。
SSH認証エラー

突然カギもパスフレーズも変えてないのに、ssh認証エラーとなる。
途方に暮れること、１日。。

/home/個人ディレクトリのパーミッションを確認したところ、"777"！！
"777"だとauthorized_keysは無効化されるそうです。
セキュリティ上、そりゃそうだと納得。
特に急いでいるときに、とりあえず動けと呪文のように
パーミッションを"777"にすることは、「イカン！！」と学びました。。
Macでfirewallの確認ダイアログを抑制する方法

Macでfirewallをオンにした状態でsocketなどを使う自作のプログラムを実行する時に、接続を許可するかどうか確認を求めるダイアログが発生する。
（例えば、MPIを使ったprocess間通信をするプログラムなど）
実行するプログラムに署名をつけて、毎回確認が求められないようにする方法。自作のプログラムを自分のマシン上で動かすことを想定しています。

基本的には以下の記事に和訳です。

- http://superuser.com/questions/100013/why-does-the-mac-os-x-firewall-dialog-recurringly-pop-up-and-disappear-by-itself
- http://forums.macnn.com/79/developer-center/355720/how-re-sign-apples-applications-once/

## 手順

まずアプリケーションに署名がついているかどうかを確認する。

```
codesign -dvvvv /path/to/application
```

おそらく何も署名がない場合、 `/path/to/application: code object is not signed at all` というような出力が出るはず

次に証明書を作る

1. キーチェーンアクセスを開く
2. [Keychain Access] - [Certificate Assistant] - [Create a Certificate] を選択
3. Certificateの名前をつける。わかりやすい名前をつけておけばよい
4. [Identity Type]を "Self Signed Root", [Certificate Type] を"Code Signing", [Let me override defaults] にチェックを入れ、[Create]をクリック。
5. [Serial Number] として適当な数字を入力。他の証明書とかぶらないようにする。
6. [validity period] を十分長い期間にしておく。2000日とか。
7. 次の画面でpersonal informationを入れる場所がある。ここは割と適当でよい。
8. 次に出てくる "Key Pair Information", "Key Usage Extension", "Extended Key Usage Extension", "Basic Constraints Extension", "Subject Alternate Name Extension" のページはデフォルトのままでOK。
9. 証明書を保存するキーチェーンとして "login" を選択する。これで証明書がつくられる。
10. 次に証明書を信頼する必要がある。
    1. "login" -> "MyCertificates" を選択し、先ほど作成した証明書を見つけて右クリック。[Get Info]を選択。
    2. "Trust"の矢印をクリックし、 "When using this certificate" を "Always Trust" に変更。
    3. ダイアログを閉じるときにパスワードを聞かれる。

以上で証明書の作成が終了。

次はプログラムに証明書をつける。

```
codesign -f -s （証明書の名前） /path/to/application
```

これで証明書がつけられる。
EBeanで生SQLを実行したのにDBに反映されていない？ それEBeanの過剰な最適化です。

Play Frameworkで動くプログラムでDDL（データ操作でなく、CREATE TABLEなどスキーマを操作するSQL命令文）を発行しようとするとなぜかDB側に全然反映されなくて悩むことがあります。
悩まされた方、例えばこんな記事とか。
http://netmark.jp/2012/12/play-framework-isucon2-8.html
>
```
Ebean.execute(Ebean.createCallableSql("commit;"));
Ebean.commitTransaction();
```
なお、↑のコードでは EBean.createCallableSql("commit;") と Ebean.commitTransaction で2回コミットしてます。
本当は2回もいらないような気がするのですが、なんか試してるうちにこうじゃないと動かなかったのでこうしてます。

この問題は、**DDL命令もロールバック可能なDB製品**との組み合わせで発生します。PostgreSQLとSQLServerが該当します。EBeanはDBアクセスの最適化として「UPDATE/INSERT/DELETEの発行されなかったトランザクションではcommit()を呼ばれても実際にはROLLBACKを発行する」という動作をしているためです。

トランザクションを明示的に作らなかった場合も暗黙の単命令トランザクションですからやはりROLLBACK。
引用したブログ記事の、手動でCOMMITを生発行するという対策はそういう意味で効いているわけですが、これはやはりこう、もう少しフレームワークにちゃんと乗っかった対策がやりたくなります。

方法は2つ。

* 設定で最適化をオフにすること。application.conf に**transaction.onqueryonly=COMMIT**と設定します。
* 設定の影響を受けないコードを書きたい場合、コード中で**transaction.getConnection()**を呼ぶ。
これはJDBCの生オブジェクトを引っ張り出すメソッドで低レベルな操作の入口となるものなのですが、これを呼ばれた時点でEBeanは「何か変更が入れられたことだろう」と判断して必ずCOMMITしてくれるようになります。
UbuntuでNVIDIAのディスプレイドライバが動作しない場合のチェック項目

UbuntuにCUDAをNVIDIA提供のパッケージからインストールすると、ディスプレイドライバも同時にインストールされる。それで正常に動作している場合はよいが、時として画面がまったく表示されなかったり、表示はされるがログイン時にウィンドウマネージャも何も表示されないなどの症状が出ることがあるので、そういうときのチェック項目をメモしておく。

まず、前提としてsshで別の端末からログインする方法は確保されているものとする。

ウィンドウが全く表示されず、コンソール画面も使用できない場合は、リモートログインして、/var/log/Xorg.0.logをチェックする。ファイル末尾まで飛んでから(EE)を後から検索してちょっと溯り、nvidiaがらみのエラーをチェックする。

(EE) Failed to load module "nvidia" (module does not exist, 0)

のような行があったら、Xサーバがnvidiaモジュールの読み込みに失敗している。 /usr/lib/xorg/modules/drivers をチェックして、ここにnvidia_drv.soというモジュールがあるかどうか見てみる。なければ、ディスプレイドライバのディレクトリ/usr/lib/nvidia-ドライババージョン/xorgの中にあるnvidia_drv.soをここにコピーしてくる。

これでnvidia_drv.soは読み込めるようになるはずだ。まだ表示が出ない場合、カーネルモジュールの方もチェックしてみる。/var/log/kern.logを見て、nvidiaモジュールが読み込まれているかどうか調べる。module verification failedとかmodule license 'NVIDIA' taints kernelとかのメッセージはプロプライエタリドライバであるせいなので気にする必要はない。前のバージョンのドライバのアンインストールが不完全であったりすると、上記のxorgの方のモジュールとのバージョンミスマッチでの初期化失敗メッセージがあるので、そのような場合は古いカーネルモジュールを手動で削除する必要があるかもしれない。カーネルモジュールの場所は、/lib/modules/カーネルバージョン/updates/dkmsである。ここにnvidia.koとnvidia-uvm.koがあればよい。インストールした方法によって、ドライバのバージョン番号が入ったファイル名になっている場合、あるいはバージョン番号ありとなしのファイルが混在している場合などがあり、最後のケースなどは両者でバージョンが矛盾している可能性が高いので、

modinfo モジュール名

などで確認したのち、古いバージョンを確実に削除する。

これで通常はログイン画面は表示されるようになる。しかしこの後、ログインするとウィンドウマネージャが起動せず実際の操作が何もできない状態になる場合がある。これは、compizウィンドウマネージャが必要とするxorgのGLX拡張機能が正常に動作していないせいだ。/var/log/Xorg.0.logを見てglxモジュールが読み込めているかどうかをチェックし、読み込めているように見える場合は/usr/lib/xorg/modules/extensionsディレクトリの内容を確認する。ここにlibglx.soというファイルがあれば、それがGLXモジュールなのだが、問題はこれがnvidiaのものではなく、Mesa由来のものである可能性があることだ。

dpkg -S /usr/lib/xorg/modules/extensions/ligblx.so

で所属パッケージ名がxserver-xorg-coreと表示されたらnvidiaのものではないので、

sudo mv libglx.so libglx.so.xorg

などと名前を変更して、nvidiaのglxモジュールを

sudo cp /usr/lib/nvidia-ドライババージョン/xorg/libglx.so.バージョン番号 libglx.so

のようにしてコピーしてくる。これで再起動すればGLXも使用可能になるはずである。しかしさらに稀にインストールがうまく行っていない場合、libglx.soからさらに参照されている下位のライブラリ(libnvidia-tls.so等)がうまく参照できずlibglx.soが初期化に失敗するケースがある。これらの下位ライブラリは/usr/lib/nvidia-ドライババージョン 以下にあるのだが、正常に読み込めているかどうかは

ldconfig -p | grep nvidia

としてみれば分かる。これが3行くらいしか出てこなければライブラリが読み込めていない。うまく行っていれば50行くらいの出力がある。

もしうまく行っていない場合は、/etc/ld.so.conf.d/以下のnvidia_settings.conf、あるいは類似のファイル名の設定ファイルをチェックする。おそらくシンボリックリンクになっているが、これが（途中何段階かシンボリックリンクを経由していても良い）最終的に正しく

/usr/lib/nvidia-ドライババージョン/ld.so.conf

を指し示すように適宜リンクを修正し、ldconfigを一度実行する。先のldconfig -pの出力が正常になればよい。これで再起動すればよい。

なお、GLXモジュールはnvidiaのものでなくxserver-xorg-coreのものが読み込まれてもとりあえず一見正常に動作するケースもある。しかしパフォーマンスや、シェーダーの互換性の問題でOpenGLを用いたプログラム等が正しく動作しないケースも出てくるので、

glxinfo | grep vendor

で表示されるGLX機能の提供元がNVIDIAになっていることを確認しておく必要がある。NVIDIAでないGLXモジュールが読み込まれているなら、上記の方法で修正する。

およそ以上がドライバインストールがうまくいっていない場合のチェック項目である。
[Rails 4.x] annotate という gem がいい感じに schema や routing を表示してくれて便利

# Version

```rb
Ruby # 2.2.1
Rails # 4.2.0
```

# Install

```rb
$ vi Gemfile
--------
  # add
  gem 'annotate'
--------
```

```rb
$ bundle install
```

# Make Config File(Task File)

```rb
$ bundle exec rails g annotate:install
```

```rb
$ vi lib/tasks/auto_annotate_models.rake
---
# NOTE: only doing this in development as some production environments (Heroku)
# NOTE: are sensitive to local FS writes, and besides -- it's just not proper
# NOTE: to have a dev-mode tool do its thing in production.
if Rails.env.development?
  task :set_annotation_options do
    # You can override any of these by setting an environment variable of the
    # same name.
    Annotate.set_defaults({
      'position_in_routes'   => "before", # before/after
      'position_in_class'    => "before",
      'position_in_test'     => "before",
      'position_in_fixture'  => "before",
      'position_in_factory'  => "before",
      'show_indexes'         => "true",
      'simple_indexes'       => "false",
      'model_dir'            => "app/models", # model_directory_path
      'include_version'      => "false",
      'require'              => "",
      'exclude_tests'        => "false",
      'exclude_fixtures'     => "false",
      'exclude_factories'    => "false",
      'ignore_model_sub_dir' => "false",
      'skip_on_db_migrate'   => "false",
      'format_bare'          => "true",
      'format_rdoc'          => "false",
      'format_markdown'      => "false",
      'sort'                 => "false",
      'force'                => "false",
      'trace'                => "false",
    })
  end

  Annotate.load_tasks
end
```

# Check Task

```rb
$ rake -T
---

rake annotate_models         # Add schema information (as comments) to model and fixture files
rake annotate_routes         # Adds the route map to routes.rb
```

# Write

## Model

```rb
$ cd project_root
$ bundle install annotate
---
Annotated (27): HogeModelName, FugaModelName, OtherModelName......
---
```

## Route

```rb
$ rake annotate_routes
---
Route file annotated.
```

```rb
# == Route Map
#
# Starting up a new ElasticSearch client with
#                              Prefix Verb     URI Pattern                                                          Controller#Action
# hoge GET /hoge(.:format) hoges#index
　　・
　　・
　　・
Rails.application.routes.draw do
  get 'hoge' => 'hoge#index'
  scope 'hoge' do
　　・
　　・
　　・
```

# update

if you change schema or routing, command above agin and the updated code is reflected.
WordPressサイトをマルチサイト化する方法


#サブディレクトリ型のマルチサイト化

* まずwpディレクトリに入っているwp-config.phpを適当な場所にダウンロードして編集、下記コードを追記。

 ```php:wp-config.php
 //適当な所に追記
 define('WP_ALLOW_MULTISITE', true));
 ```
 
* するとダッシュボードの「ツール」から「ネットワークを設置」という項目が出てきます。
そこからもにｙ


いつか更新します・・・。
WWWクラスでローカルファイルを読み込む

参考ページ：
　http://docs.unity3d.com/ja/current/Manual/StreamingAssets.html
　http://neareal.net/index.php?ComputerGraphics%2FUnity%2FTips%2FScript%2FLoadFileByUsingWWW

●Streaming Assetsなら
// Application.dataPathはAssetsの直下のフォルダの事
string path = Application.streamingAssetsPath + "/myAssetBundle.unity3d";
        
●Assets直下なら
// Application.dataPathはAssetsの直下のフォルダの事
string path = Application.dataPath + "/myAssetBundle.unity3d";
        
●アセットバンドルロードに利用してみる

```csharp:LoadAssetBundleData.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class LoadAssetBundleData : MonoBehaviour {

    public void OnLoadAssetBundle()
    {
        StartCoroutine(LoadAssetBundle_CreateMemory());
    }

    IEnumerator LoadAssetBundle_CreateMemory()
    {
        // Application.dataPathはAssetsの直下のフォルダの事
        string path = Application.dataPath + "/StreamingAssets/myAssetBundle.unity3d";
        
        WWW www = new WWW("file://" + path);
        yield return www;
        var assetBundleCreateRequest = AssetBundle.CreateFromMemory(www.bytes);
        yield return assetBundleCreateRequest;
        AssetBundle assetBundle = assetBundleCreateRequest.assetBundle;

        Object[] objectArray = assetBundle.LoadAll();
        List<Object> myList = new List<Object>();

        myList.AddRange(objectArray);

        foreach(Object obj in myList)
        {
            Instantiate(obj);
        }
    }
}
```
Spring boot の Order メモ

| Key                                              |             |
|:-------------------------------------------------|------------:|
| Ordered.HIGHEST_PRECEDENCE                       | -2147483648 |
| SecurityProperties.IGNORED_ORDER                 | -2147483648 |
| SecurityProperties.DEFAULT_FILTER_ORDER          |           0 |
| ManagementServerProperties.ACCESS_OVERRIDE_ORDER |  2147483636 |
| ManagementServerProperties.BASIC_AUTH_ORDER      |  2147483637 |
| SecurityProperties.ACCESS_OVERRIDE_ORDER         |  2147483640 |
| SecurityProperties.BASIC_AUTH_ORDER              |  2147483642 |
| Ordered.LOWEST_PRECEDENCE                        |  2147483647 |
Zend 重複登録予防

* ブラウザの戻るボタンでの重複登録防止(クッキー使用) 
* submitボタンのダブルクリックでの重複登録防止（アラート使用）


**MainController側**
　トークンを発行し、ビューに挿入する。

```php:MainController.php＞indexAction
//トークン発行
$tokenId = substr(md5(uniqid().mt_rand()),-13,10);
$this -> view -> tokenId = $tokenId;
```

**入力欄**
　↑で発行し送られてきたトークンをhiddenでさらに送信。
　このときダブルクリックでの重複登録をさせないためにアラートを表示させる。

```html:index.tpl
<form action="[SampleController.php＞insertActionへのURL]" method="POST">
　<input type="text" name="title">
  <input type="hidden" name="ticket" value="($this->tokenId)">
　<input type="submit" value="登録" onClick="javascript:doubleClick(this)">
</form>


<script type="text/javascript">
    //登録ボタンのダブルクリック防止
    function doubleClick(btn){
        alert("登録しました！！");
    }
</script>

```

**入力情報が送られてくる側**
　入力情報と共に送られてきたトークンを取得→クッキーに登録。
　  issetがtrueならクッキーデータがある(戻るボタンや更新ボタンを押した)ということで、
　入力ページにジャンプさせる。

```php:SampleController.php＞insertAction
//トークン取得
$req = $this -> getRequest();
$ticket='';
$ticket = trim($req -> getPost('ticket'));
//クッキー発行
setcookie('tickettemp', $ticket, time()+(3600*24*30));
//戻るボタンとか押してたら入力ページに戻す
if(isset($_COOKIE['tickettemp'])){
  if($ticket == $_COOKIE['tickettemp']){
    //入力ページにジャンプ
    $this -> _redirect('/モジュール名/main/index');
  }
}

//以下で入力情報の取得とDB登録処理をする。
```
Rails4.2以降のurl_for


## 問題
`4.1`から`4.2`にアップデートすると、`***_path method ... only_path: true`的なワーニングが出てくる

## 原因
- `view`で`url_for`メソッドを使っている箇所でワーニングが出ている
- 4.2以降は、`ActionView::RoutingUrlFor#url_for`は、デフォルト`only_path: true`の動きと同じようになりました

## 対応方法
- `view`で使っている`url_for`の場合は、4.2はデフォルトで`only_path: true`の動きになっているので、オプションを指定しなくて良い
  https://github.com/rails/rails/blob/cad20f720c4c6e04584253cd0a23f22b3d43ab0f/actionview/lib/action_view/routing_url_for.rb#L78
- `view`以外の場合は、今までと変わらないので、ワーニングが出てこないはず
  https://github.com/rails/rails/blob/cad20f720c4c6e04584253cd0a23f22b3d43ab0f/actionview/lib/action_view/routing_url_for.rb#L78
Rails + Mysql データベース作成


開発中よく忘れるのでメモ。

```
$mysql>create database [データベース名] character set utf8;
$mysql>create user 'ユーザ名'@'localhost' identified by 'パスワード';
$mysql>grant all privileges on [データベース名].* to 'ユーザ名'@'localhost';
```

※　ちなみに上記だとiOSなどからの投稿に**絵文字**が含まれれている場合、不正文字列として保存できません。uft8ではなく、utf8mb4を指定すれば問題なし。(mysqlのバージョンが5.5.3以上)
snmptrapdのlistenポート変更

net-snmp 5.7.2, Fedora 20 でのお話です。  

Net-SNMPのsnmptrapdのlistenポートを変更する方法です。  

manページ( `man snmptrapd` )を見ると `-p` オプションで変更できそうに書いてありますが、それですと変更できませんでした。  

`man snmpcmd` の方を見ると、`snmpcmd [OPTIONS] AGENT [PARAMETERS]` と記載があったので、  

snmptrapdの起動オプション( `/etc/sysconfig/snmptrapd` )に、 `-p` オプションなしで追加したところ、無事に変更できました。  

```bash:/etc/sysconfig/snmptrapd
# snmptrapd command line options
# '-f' is implicitly added by snmptrapd systemd unit file
# OPTIONS="-Lsd"
OPTIONS="udp:10162 -Lf /var/log/snmptrapd.log"
```
[LLDB] Pythonで独自コマンドを作ってみる


XcodeのLLDBに、Pythonで作った独自コマンドを読み込ませます。

Xcodeは起動時に以下のふたつのうちどちらかを読み込むようです。

- ~/.lldbinit
- ~/.lldbinit-Xcode

基本的には`.lldbinit-Xcode`が読み込まれるようです。
ただ、コマンドラインからなどでは上記が読み込まれるので、基本的な設定は`.lldbinit`に記述し、`.lldbinit-Xcode`には以下のように`.lldbinit`を読み込む処理を入れておくといいでしょう。

```rc
command source ~/.lldbinit
```

### 起動時に独自コマンド用ファイルを読み込む

上記のように設定したら、`.lldbinit`にPythonファイルを読み込む設定をしておくことで自動的にコマンドが読み込まれます。

```rc
command script import ~/.lldb/hoge.py
```


## ファイルで定義する

上で書いた読み込み設定をしたら、実際に読み込ませる内容を定義します。
主な書式と必要な記述は以下の通りです。

```py:new-command.py
#!/usr/bin/env python
#coding: utf-8

import lldb
import commands
import os

def command_function(debugger, command, result, internal_dict):
	cmd = "po self"
	debugger.HandleCommand(cmd)
	
def __lldb_init_module(debugger, internal_dict):
	debugger.HandleCommand("command script add -f new-command:command_function commandname")
	print "commandname has been installed."
```

定義したら以下のように読み込みます。

```console
(lldb) command script import /path/to/command.py
```

## break中にインラインで設定する

ちょっとした動作テストなどはインラインで設定して実行してみると動作が確認しやすいです。

以下のようにするとpythonのインタープリタが起動します。

```console
(lldb) script⏎
```

そして以下のように定義し、インタープリタを抜けます。

```console
(lldb) script⏎
Python Interactive Interpreter. To exit, type 'quit()', 'exit()' or Ctrl-D.
>>> def hoge_function(debugger, command, result, internal_dict):
...	cmd = "po self"
...	debugger.HandleCommand(cmd)
...	
>>> quit⏎
(lldb) command script add hoge -f hoge_func
(lldb) hoge
<UIView...
```


### 文字列のプレースホルダ

以下のように書くことでプレースホルダを利用することができます。
コマンドで指定された文字列を元に処理をする場合に便利です。

```py
val = "This is %s %s" % ("a", "pen")

# --- or ---

val = "This is %(unit)s %(msg)s" % {"unit": "a", "msg": "pen"}

# --- or ---

val = """This is
%s %s""" % ("a", "pen")
```

### コマンドを分割する

コマンドはひとつなぎの文字列として渡されるので、`shlex.split`を使って分割します。

```py
command_list = shlex.split(command)
```


## ダミーのビューをコピーして`addSubview:`するコマンド

今回やりたかったのは、指定されたビューのサイズを使ってビューを複製し、それを`addSubview:`して思った位置にちゃんとビューが生成されているか、を確認するコマンドを作ることでした。

だいぶ冗長な感じな気はしますが、とりあえず以下のようにしたら動いたので記載しておきます。

```py
#!/usr/bin/env python
# -*- coding: utf-8

import lldb
import commands
import os
import shlex

def dmy_func(debugger, command, result, internal_dict):
    commands = shlex.split(command)

    count = len(commands)

    if count < 2:
        return

    cmd = "po CGRect $frame = (CGRect)[%s frame]" % commands[0]
    print(cmd)
    debugger.HandleCommand(cmd)

    cmd = "po UIView *$view = [[UIView alloc] initWithFrame:(CGRect)$frame]"
    print(cmd)
    debugger.HandleCommand(cmd)

    cmd = "po [$view setBackgroundColor:(UIColor*)[UIColor redColor]]"
    print(cmd)
    debugger.HandleCommand(cmd)

    cmd = "po [%s addSubview:(UIView*)$view]" % commands[1]
    print(cmd)
    debugger.HandleCommand(cmd)

def __lldb_init_module(debugger, internal_dict):
    debugger.HandleCommand("command script add -f dmy.dmy_func dmy")
    print "dmy command has been installed."
```

### 使い方

```console
(lldb) dmy self.hogeView self.view
```

`self.hogeView`のframeを使ってUIViewを生成し、それを`self.view`に`addSubview:`する、というものです。
色が白っぽいか判定する

# はじめに
背景色が白っぽい場合は文字色を黒にし、
そうでない場合は文字色を白に設定したかった状況。

その色が「白っぽいか」どうやって判定するか調べたら
いくつか方法が出てきました。

想定したテストケースで全て成功した判定方法があったので情報共有します。

※ 追記あり
takabosoft様よりコメントで助言頂きました！
ありがとうございます。

# 追記: 成功した方法の改善版

UIColorの生成方法によってはUIColorからRGB値が取得できず
想定外の動作となる場合がありました。

具体的には `[UIColor clearColor]` や `[UIColor colorWithWhite:alpha:]` で生成したUIColorの場合。

また変換方法もより良い式がありましたのでそちらに変更しました。
グレースケール変換時の式を使用しています。

```objc
+ (BOOL)isWhitishColor:(UIColor *)color
{
    // clearColorの場合、rgb値が0となるため、結果としてNOを返却
    
    const CGFloat *rgba = CGColorGetComponents(color.CGColor);
    int rgbaCount = CGColorGetNumberOfComponents(color.CGColor);

    CGFloat red;
    CGFloat green;
    CGFloat blue;
    CGFloat alpha;

    // 要素が4つの場合とそれ以外の場合とで取得インデックスが変化
    if (rgbaCount == 4) {
        red   = rgba[0];
        green = rgba[1];
        blue  = rgba[2];
        alpha = rgba[3];
    }
    else {
        red   = rgba[0];
        green = rgba[0];
        blue  = rgba[0];
        alpha = rgba[1];
    }
    
    CGFloat value = 0.299 * red + 0.587 * green + 0.114 * blue;
    
    return value >= 0.5 ? YES : NO;
}
```

引数で渡した色が「白っぽい」時にYESを返し、
黒っぽい時とclearColorの場合にNOを返却する仕様です。

# 成功した方法

UIColorからRGBを取得し、要素別に値を変換しています。

```objc
+ (BOOL)isWhitishColor:(UIColor *)color
{
    CGFloat red;
    CGFloat green;
    CGFloat blue;
    CGFloat alpha;
    
    [color getRed:&red green:&green blue:&blue alpha:&alpha];
    
    CGFloat value = (77.0 * red + 151.0 * green + 28.0 * blue) / 256.0;

    return value >= 0.5 ? YES : NO;
}
```

メソッド名は悩む所ですね。
気になったら変えてください！

# 想定通りの結果ではなかった方法1

```objc
+ (BOOL)isWhitishColorNG1:(UIColor *)color
{
    CGFloat red;
    CGFloat green;
    CGFloat blue;
    CGFloat alpha;
    
    [color getRed:&red green:&green blue:&blue alpha:&alpha];
    
    CGFloat value = (77.0 * red + 28.0 * green + 151.0 * blue) / 256.0;
    
    return value >= 0.5 ? YES : NO;
}
```

成功パターンとは緑と青の重みが異なる変換方式。
想定通りの結果は出ず。

# 想定通りの結果ではなかった方法2

```objc
+ (BOOL)isWhitishColorNG2:(UIColor *)color
{
    CGFloat hue;
    CGFloat saturation;
    CGFloat brightness;
    CGFloat alpha;
    
    [color getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
    
    return brightness >= 0.5 ? YES : NO;
```

brightnessで判定してみましたが想定通りの結果は出ず。
hueでも試してみましたが上手く行かず。

試していませんが値の組み合わせで良い結果が出るかもしれません。

# おわりに
参考になりましたら幸いです。

# 参考
[UIColor から色の明るさを取得する](http://program.station.ez-net.jp/special/handbook/objective-c/uicolor/brightness.asp)

[Grayscale](http://en.wikipedia.org/wiki/Grayscale)
Visual Studioでプロジェクトフォルダの名前を変える方法

大したことではないのですが、備忘録として記録しておきます。

Visual Studioはプロジェクトや名前空間の名前変更が非常に優秀で、コードの名前空間を右クリックして「名前の変更」を行うと全てのコードに変更を加えてくれます。
しかし、プロジェクト名を変えても、ビルド先のフォルダが元の名称のままになり、例えば「GUIアプリケーションを同じ名前のクラスライブラリとそのライブラリを参照したサンプルGUIアプリケーションに分離したい」ときなどに一工夫をしなければなりません。

```
例： HogeProject(GUIアプリ) -> HogeProject(クラスライブラリ), HogeProjectGUI(GUIサンプルアプリ)
```

（*以下の作業では念のため、予めバックアップを取ってください）
上記の例では、まずHogeProjectの名前空間やプロジェクト名、アセンブリ名などをすべてHogeProjectGUIに変更します。

```
HogeProject(GUIアプリ) -> HogeProjectGUI(GUIサンプルアプリ)
```

次に、Visual Studio を閉じて、HogeProject.slnファイルをテキストエディタで編集します。
その中で、

```
Project("{<プロジェクト固有のGUID>}") = "HogeProjectGUI","HogeProject/HogeProjectGUI.csproj","{<固有のGUID>}"
```

というプロジェクトファイルのパスを設定する行を変更して


```
Project("{<プロジェクト固有のGUID>}") = "HogeProjectGUI","HogeProjectGUI/HogeProjectGUI.csproj","{<固有のGUID>}"
```

にします。そして、__エクスプローラでHogeProjectプロジェクトフォルダの名前をHogeProjectGUIに変更__します。
これを忘れるとプロジェクトを正しく開くことができません。
この両方を行った後に、Visual Studioでプロジェクトを開きます。プロジェクトフォルダの名前変更はこれで終わりです。

あとは、新しいクラスライブラリプロジェクト(HogeProject)をソリューションに追加します。

```
HogeProjectGUI(GUIサンプルアプリ) -> HogeProject(クラスライブラリ), HogeProjectGUI(GUIサンプルアプリ)
```
システム開発の流れ

#■システム開発概要
ある考え方に基づいた「方法や手順の体系」を意味するものであり、企業にとっては「業務の仕組み」そのもの。

#1.要件定義
◆クライアントとの話し合いで、システムの計画を立てる。
・非機能要件→セキュリティや信頼性、保守性
・機能要件→業務上の要件

#2.基本設計
◆要件定義をもとにして、プロジェクトの大まかな全体像を設計をする。
◆良いシステムを適切な価格で作るためにリスク管理をする。
・RFI→企業が調達や業務委託など大きな決断をする際、外部業者に情報提供を要請すること。
・RFP→具体的なシステム提案・見積もりを要請すること。

#3.開発
◆プログラムを書く

#4.結合テスト
◆プログラムが設計通りに動くかのテストを行う。
・まずテスト仕様書の作成を行う。
・テスト仕様書を参照しながら動作確認を行い、バグを発見したらRedmineなどを利用して報告する。

#5.システムテスト
◆本番環境を想定して、設計通りに動くかのテストを行う。



#■システム開発を行う目的
× プログラムを組むこと。
× サーバを構築すること。
○ 会社に**効果や利益**をもたらすこと。
○ **新しい業務の仕組み**を考えること。
会社の効率UPや利益をもたらすために以上の５ステップによって開発を進めていくのである。

さらに、上記行程を
・全体として開発を行うのが**ウォーターフォール開発**
・機能ごとに開発を行うのが**アジャイル開発**
である。
DockerのVolumeがコンテナのライフサイクルとは独立していることを理解する

##Volumeはコンテナのライフサイクルとは独立している
DockerのVolumeはDockerコンテナ自体のライフサイクルとは独立している。
つまり、Volumeを指定したコンテナを削除しても、Volumeのデータは消えない。
-vオプションでホストのパスを指定しない場合、dockerが管理するホスト内のディレクトリにマッピングする。

##だからこういうことができる
- データコンテナ[^1]を参照するコンテナが起動していてもデータコンテナは削除(docker rm)できる。そしてデータは消えない。
- データコンテナを削除してもvolumeに指定したデータは消えず、復旧可能。
- docker inspectで"Volumes"の項目を確認すれば実際にデータが格納されているホストのパスを確認できる


[^1]: データコンテナ: 永続化するデータを格納する目的で作成したコンテナ.
Jenkins の API 経由ビルドで 405 Method Not Allowed


# 問題

```curl -XPOST http://example.com/job/foo/build``` のようなコマンドを使い、API 経由でリモートからのビルドをしたら、いつのまにか ```405 Method Not Allowed``` 応答が返ってくるようになってしまった。

# 原因

API 経由のビルドを開始して以降に、[Jenkinsの管理]-[グローバルセキュリティの設定] で [セキュリティの有効化] にチェックを入れていたため。

# 解決策

認証ユーザーでログインし、ユーザー毎の設定画面で API トークンを取得し、API リクエストに含めることで解決。

![Kobito.ZtXjtQ.png](https://qiita-image-store.s3.amazonaws.com/0/1329/b7385e0b-61a8-61e5-a2b8-7de085c69b36.png "Kobito.ZtXjtQ.png")


```
curl -XPOST -ufoo:apitoken http://example.com/job/foo/build
```
WordPress の get_the_contents() は ショートコードが展開されない

なので `do_shortcode()` を使う。

```
$content = do_shortcode(get_the_content());
```

こんな感じ。

### これはハマる

もちろん、 `the_content()` ではショートコードは展開されます。
だから当然 `get_the_content()` でも展開されるかと思いきや、そのまんまの文字列が返ってきまして……

つまり、 `the_〜` と `get_the_〜` は表示する・しない点だけが違うわけではなく、中で行っている処理や返ってくる値も異なるということです。これはハマる。

#### 参考リンク

> [WordPressでget_*()を使うときは念のためソースを確認して適切に処理すべし！ | Firegoby](https://firegoby.jp/archives/5402)

大変ためになりました。
ソース確認します。

### 

---

`do_shortcode()` が用意されているということは、投稿本文以外でもショートコードを使えるようになるということか。
シンプソン法 > テーブルデータでの積分

[【C言語で数値計算】 定積分の近似計算（シンプソン法）](http://qiita.com/HirofumiYashima/items/6636bd3a8ce0460e5a4f)
をもとに、テーブルのデータを積分するコードに変更した。

実際にシンプソン積分をしたいものとして、時間のかかる計算結果を用いることがある。その際に先に結果をテーブルとして出力しておき、それを後で積分するということに使う。

```c:simpson_integ_table.c
#include <stdio.h>

// 積分対象関数.
float function (float x) 
{
	float result;
	result = x; // 一次直線
	return result;
}

static double simpson_integ_table(double *xs, double *ys, int lastIdx)
{
	double integral; // 積分結果
	double h; // 積分範囲を n 個に分割したときの幅
	double dA;
	int idx;

	h = (xs[lastIdx] - xs[0]) / lastIdx; // 分割幅

	integral = ys[0]; // 積分結果の変数の初期値

	for (idx=1; idx<lastIdx-2; idx+=2) {
		dA = 4.0*ys[idx] + 2.0*ys[idx+1];
		integral += dA; // Σ
	}

	integral += ( 4.0*ys[idx] + ys[idx+1] );

	integral *= h/3.0; 

	return integral;
}

#define BUF_SIZ (500)

int main()
{
	double integral;
	double xs[BUF_SIZ]; // x
	double ys[BUF_SIZ]; // y
	double h;
	int count;
	int idx;
	double dval;

	// configuration
	double xmin = 0.0;
	double xmax = 100.0;
	int divnum = 120;
	int lastIdx = 2*divnum;

	// 1. preparation of tables
	h = (xmax - xmin) / (2.0*(double)divnum); // 分割幅
	for(idx=0; idx<=lastIdx; idx++){
		dval = xmin + (double)(idx) * h;
		xs[idx] = dval;
		ys[idx] = function(dval);
	}

	// 2. integration
	integral = simpson_integ_table(xs, ys, lastIdx);

	// === Simpson 法による積分 (終了） ===
	printf ("積分結果= %lf\n", integral);
	printf ("解析的に求めた結果 (底辺 100，高さ 100 の直角三角形)=%lf\n",
		(xmax - xmin)*function(xmax) / 2.0 );

	return(0);
}
```
玩转 ruby 里的常量,方法还有父类


1. 你发现了没有 ruby 允许一个常量和一个方法名字是一样的. 难道他们不冲突吗?

```
Sum = 0

def Sum(*args)
	args.inject(Sum) { |s, i| s+i}
	
end

p Sum		# -> 0
p Sum(1)	# -> 1
p Sum(1,2) # -> 3

```

看到了吗?第一次我们使用`Sum `的时候他标示常量,之后就是方法了.
没有错误,警告,就是这么神奇!

2. 我们在定义类的时候, 在给某类追加父类的时候,其实哪里是一个表达式,而不仅仅只能是一个常量, 他还可以是一个表达式来计算最终的父类名字.

```
class Shape
end

circle_is_shape = true
class Circle < (circle_is_shape ? Shape : Object)
end

p Circle.superclass # -> Shape
```

怎么样, 神奇吧,可是你会问为什么要这样做呢, 可能你早已知道其实定义一个类,就是创建一个新` Class` 对象,然后赋值给一个常量.

```
class Shape
end
#上下是一样的
Shape = Class.new
```

我们的类名就是一个常量, 到这里, 之前我们已经得到一个结论就是同门的方法名和常量名是可以共存的. 所以, 我们在一个类定义当中把父类作为一个表达式存在. 

```
class Shape
end

def Shape(which)
  require "shapes/#{which}"
  Shape.const_get(which.to_s.capitalize)
end

class Square < Shape
end

class Circle < Shape(:ellipse)
end
```

看看上面的代码,我们定义了一个` Shape` 方法名和类,然后通过这个方法的参数来调用某个类.
之后,你会看到在定义` Shape` 子类的时候就和平常一样的, 定义了` Square` 类, 但是`Circle` 类的定义就不一样了.它的父类是方法`Shape` 返回值.

那么,又怎么样呢?能做什么呢? 好,这个情况下就完全可以通过外部的一些配置来实例化类了.

```
require 'yaml'
config = YAML.load_file('definitions.yml')

class Spline < Shape(config[:spline])
end

class Star < Shape(config[:star])
end

```

好吧,最后,其实说来这些在实际使用中没有多大的作用,只是一个 tricky 罢了, 但是至少我们看到了 ruby 的一个趣点!
deletedされたlogをプロセスが掴みっぱなしだったときのはなし

#logrotate設定
nginxのlogがdeletedされてるのに、プロセスがいつまでも掴んだまま。
結果、サーバー容量死亡のお知らせ。


logrotateの設定ファイル(/etc/logrotate.d/nginx)を変更。
具体的には、postrotateのコマンドをkillコマンドに変更した。

```lang:変更前
/var/log/nginx/*.log {
    create 0644 nginx adm
    daily
    rotate 7
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /etc/init.d/nginx reopen_logs
    endscript
}
```

```lang:変更後
/var/log/nginx/*.log {
    create 0644 nginx adm
    daily
    rotate 7
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
```


reopenとkillは意味が同じはずなので、なぜこれでできたの？と知り合いに聞かれて私もわからん…。
純粋に再起動後にlogrotateおかしくなったので、そのときのrestartがうまくいかなかったのかも？
対話的 rebase でどのコミットを fixup すればいいか調べるスクリプト書いた


ブツはこれ → https://github.com/magicant/settings/blob/master/bin/git-retro

# ユースケース

`git commit --fixup=XXXX` の `XXXX` に指定すべきコミットが何か自分で見付け出すのが面倒な時

# 使用法

1. 適当なコミットメッセージで一旦パッチをコミットする: `git commit -m temp`
1. Rebase 先を指定してスクリプトを実行する: `git retro master`
1. `123ABC is the first applicable commit` みたいなメッセージが出るので、それを対象に fixup する: `git commit --amend --fixup=123ABC && git rebase -i master`

# 何をやってるの?

Rebase 対象の中から、コンフリクトなしでパッチを当てられる最も古いコミットを探します。
easing関数

canvasでオブジェクトの大きさを変えたい時とかにeasingを使いたくなることがある。
オブジェクトの運動は物理の式でまかなえるので、あまり頻繁には使わないけど。

http://gizma.com/easing/

上記ページに記載してある内容をいつも忘れるので、自分用に書き直しただけ。
必要な数値は以下。内容はたぶんあってるはず。

`currentTime` は変化が開始してからの経過時間。
`startValue` は初期値。
`changeValue` は初期値から変化させたい分の値。**完了時の値ではない。**
`duration` は変化が完了するまでに要する時間。

## linear

    var easingLinear = function (currentTime, startValue, changeValue, duration) {
      return changeValue * currentTime / duration + startValue;
    };

## easeInCubic

    var easingEaseInCubic = function (currentTime, startValue, changeValue, duration) {
      currentTime /= duration;
      return changeValue * currentTime * currentTime * currentTime + startValue;
    };

## easeOutCubic

    var easingEaseOutCubic = function (currentTime, startValue, changeValue, duration) {
      currentTime /= duration;
      currentTime--;
      return changeValue * (currentTime * currentTime * currentTime + 1) + startValue;
    };

## easeInExpo

    var easingEaseInExpo = function (currentTime, startValue, changeValue, duration) {
      return changeValue * Math.pow(2, 10 * (currentTime / duration - 1)) + startValue;
    };

## easeOutExpo

    var easingEaseOutExpo = function (currentTime, startValue, changeValue, duration) {
      return changeValue * (-1 * Math.pow(2, -10 * currentTime / duration) + 1) + startValue;
    };
Bootstrap3　ナビゲーションバーの折り畳みボタン展開後のレイアウトが揃わない

現在Java、Seasar2(SAStrats/S2JDBC)、JSP、PostgreSQLで
DBを使ったWebアプリケーションを作っています。

Bootstrap3でナビゲーションバーを作成したのですが、質問があります。

結論から言うと

**ナビゲーションバーの折り畳みボタン展開後のレイアウトが揃えるにはどうしたらいいでしょうか？**

<br>
具体的に言うと下記画像の横を揃えたいと思っています。
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/60528/22da9aea-5890-33e7-a40d-8468bee7c796.jpeg)

```jsp:jsp
<!-- Navigation -->
    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse"
                data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="">弱点リスト</a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="navbar-collapse collapse">
                <ul class="nav navbar-nav navbar-right">
                    <li><s:link href="diary">Practice</s:link></li>
                    <li><s:link href="login/menu">Menu</s:link></li>
                    <li><p class="navbar-text">名前検索</p></li>
                    <li>
                    <s:form action="paging/search/1" styleClass="navbar-form navbar-left">
                    <div class="form-group">
                    <html:text styleId="hoge" property="searchName"
                    styleClass="form-control" style="width:150px;"/>
                    </div>
                    <html:submit value="検索" styleClass="btn btn-info"/>
                    </s:form>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
```

PracticeやMenuと同じ並びに他の項目もしたいのですが、なかなかその方法がわからずにいます。

他のタグも試した結果、タグが違うことが並びの違いにつながっていると判断し、
bootstrap.cssを見ているのですが、解決までには至っていません。
&lt;input>タグではズレ、&lt;a href>タグでは揃いました。

&lt;li>タグでそのレイアウトを設定し、そのセレクタを最優先で反映させるようにすればいけるのかなとも思っています。
<br>
もしわかる方やアドバイスをいただける方がいましたらよろしくお願いします。
Linux mintのproxy設定

Ubuntuと紛らわしいので、記載

設定ファイルは
/etc/apt/apt.conf.d/80proxy
を作成

内容
Acquire::ftp::proxy "ftp://プロキシIPアドレス:ポート番号/";
Acquire::http::proxy "http://プロキシIPアドレス:ポート番号/";
Acquire::https::proxy "https://プロキシIPアドレス:ポート番号/";

認証が必要な場合
Acquire::ftp::proxy "ftp://ユーザー名:パスワード@プロキシIPアドレス:ポート番号/";
Acquire::http::proxy "http://ユーザー名:パスワード@プロキシIPアドレス:ポート番号/";
Acquire::https::proxy "https://ユーザー名:パスワード@プロキシIPアドレス:ポート番号/";

--
毎回apt.confって間違える。
Unityエディター上でのBuildSettingのターゲット取得

 ●**BuildSettingで設定しているプラットフォーム**
　EditorUserBuildSettings.activeBuildTarget

　**・ログ表示**
　Debug.Log(EditorUserBuildSettings.activeBuildTarget.ToString());

　**・enum**

```csharp:
using System;

namespace UnityEditor
{
    public enum BuildTarget
    {
        StandaloneOSXUniversal = 2,
        StandaloneOSXIntel = 4,
        StandaloneWindows = 5,
        WebPlayer = 6,
        WebPlayerStreamed = 7,
        iPhone = 9,
        PS3 = 10,
        XBOX360 = 11,
        Android = 13,
        StandaloneGLESEmu = 14,
        NaCl = 16,
        StandaloneLinux = 17,
        FlashPlayer = 18,
        StandaloneWindows64 = 19,
        MetroPlayer = 21,
        StandaloneLinux64 = 24,
        StandaloneLinuxUniversal = 25,
        WP8Player = 26,
        StandaloneOSXIntel64 = 27,
        BlackBerry = 28,
        [Obsolete("Use BlackBerry instead")]
        BB10 = 28,
        Tizen = 29,
        PSP2 = 30,
        PS4 = 31,
        PSM = 32,
        XboxOne = 33,
        SamsungTV = 34,
    }
}
```
[Swift] AlamofireのSessionDelegateを受け取る

**SwiftのAlamofireを使用してのSSL通信の認証に少しはまったので備忘録。**
※基本的な使い方は、他の人を参照下さい。
※この方法が正しいのかは分かりませんが、とりあえず成功はしました。

***
Objectice-C時代の<-(void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge>をAlamofireで受け取れればと、
いろいろ調べたり、Alamofireのコードをちょっと調べたりして、

AlamofireのSessionDelegateクラスにある<public var sessionDidReceiveChallenge: ((NSURLSession!, NSURLAuthenticationChallenge) -> (NSURLSessionAuthChallengeDisposition, NSURLCredential!))?>が受け取れるようになれば実現できそう。

このSessionDelegateクラスは、Alamofireのinitにて生成されていたので、以下の形で受け取るようにしました。

    var alamoManger: Manager!
    alamoManger = Manager(configuration: configuration)
    let delegate: Manager.SessionDelegate = alamoManger.delegate
    
    // HTTPS Authentication
    delegate.sessionDidReceiveChallenge = { (session: NSURLSession!, challenge: NSURLAuthenticationChallenge) in
        return (.UseCredential, self.createSSLCertificate(challenge)! )
    }

NSURLCredentialを生成するメソッド

    func createSSLCertificate(challenge: NSURLAuthenticationChallenge) -> NSURLCredential! {
    
        if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPBasic
            || challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPDigest{
            // Basic認証
        }
        else {
            if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
                // SSL通信
            }
        }
    }


リクエストする時はpublicクラスのAlamofireではなく、生成したManagerクラスをして行います。

    alamoManger
        .request(.POST, url, parameters: parameters)
        .responseJSON({(request, response, data, error) in
        )

とりあえず、このコードで成功はしたのですが、何か間違っていたら教えて下さい。
Engine Yardでgulpをつかう

CssやJSのcompileなど、clientサイドの加工にgulpを使うのが便利です。
gulpを、deploy時にも、実行できるようにする方法を紹介します。

### 1. Custom Chefで、Nodejsのversionをあげる

https://github.com/ukitazume/ey-mini-cookbook/tree/master/cookbooks/nodejs

Chefについて、使い方はこちら
https://support.cloud.engineyard.com/forums/22944266?locale=63

### 2. gulpfile.js を用意する

https://github.com/gulpjs/gulp/blob/master/docs/getting-started.md
を参照して使う。

### 3. Deploy Hookで、gulpをける

PHPの場合、at deploy/before_symlink.rb
Rubyの場合 assets compileの絡みで、設計が必要

```
sudo "eselect nodejs set 0.10.30"
run "npm install gulp"
run "gulp"
```
配列の展開

# 引数

仮引数でカッコを付けてやるか

```rb
def args_array1((a, b))
  puts a
  puts b
end

args_array1(['a', 'b'])
```

実引数でアスタリスクを付けてやると

```rb
def args_array2(a, b)
  puts a
  puts b
end

args_array2(*['a', 'b'])
```

配列が展開されて渡される。

```
a
b
```


# 代入

配列を展開しつつ代入

```rb
full_name = ['阿部', '高和']
last_name, first_name = full_name
puts last_name
puts first_name
```

```rb
阿部
=> nil

高和
=> nil
```
railsでカレンダー上に無い日付のバリデーションを行う時の注意点

date型の値の日付チェックで、1930/2/30のような不正な日付を除外する方法を記載する。

# 発生した問題

f.date_selectのようなプルダウン形式の場合、そのままではmodel層でのバリデーションが行えない。

# 理由

view層でf.date_selectのプルダウンによって年月日をそれぞれ取得する方法だと、年月日のデータがパラメータから渡ってくる場合、パラメータはparams[:hoge]["date(1i)"]、params[:hoge]["date(2i)"]、params[:hoge]["date(3i)"]に分割して格納される。
このparams[:hoge]をモデルに格納（具体的にはFuga.new(params)）するタイミングで、1930年2月30日のような不正なデータに補正が自動でかかり、1930年3月2日とされてしまう。補正後のデータはデータ的には妥当なためバリデーションをすり抜けてしまう。


## 前提

年月日をparams[:hoge]["date(1i)"]、params[:hoge]["date(2i)"]、params[:hoge]["date(3i)"]としてばらばらに取得しチェックすれば対応可能。ただしこの方法だとコントローラ層での対応となるので出来ればやりたくない。
（年月日を入力する画面ごとに対応が必要なため、対応抜けが発生する恐れがある）

f.date_selectで年月日をそれぞれプルダウンで取得する方法ではどうにもならない場合、テキストフィールドに変更もやむなしとする。
（ただしテキストフィールドで入ってくる値が1930/2/30みたいな不正なデータだとチェック時に値が消し飛ばされてnilが入る）

# 色々試したこと

## 1. [rails 日付や時刻の正当性を validation する](http://qiita.com/mizunokura/items/db3427c3d27471281350)

まさにやりたいことそのものだったが、バリデータの呼び出しをコントローラ層で行わなければならないので保留。


## 2. [Rails 4.1 で validates_timeliness を使う](http://qiita.com/akishin/items/6fbdae71ffb354323057)

gemで日付の正当性をチェックする方法を検討し、validates_timelinessを導入。
それでもやっぱり解決しない。（1930年2月30日は3月2日としてスルー）
設定の仕方がダメだったのかもしれない。保留。

## 3. railsのコールバックを試す

1930年2月30日⇒3月2日の変換がかかるタイミングの前にバリデータが動かせないかとコールバックを試す。
（after_initializeなど）

いずれも失敗。そもそもコールバック使い方が違うと思う。これはこれで要学習。

## 4. [rails/validatesでbefore_type_cast](http://dora.bk.tsukuba.ac.jp/~takeuchi/?%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%2Frails%2Fvalidates%E3%81%A7before_type_cast)

[Active records before_type_cast](http://www.slideshare.net/thehoagie/active-records-beforetypecast)

最終的にこの方法で落ち着いた。

カスタムバリデータ内で<カラム名>_before_type_castで変換がかかる前の値（1930年2月30日のような値）を取得することでバリデーションを行うことが出来た。
実装するとこんな感じ。

```rb
validate :date_valid?

def date_valid?
  date = date_before_type_cast
  return if date.blank?
  # YYMMDDで飛んでくる前提
  y = birthday[0, 4].to_i
  m = birthday[4, 2].to_i
  d = birthday[6, 2].to_i
  unless Date.valid_date?(y, m, d)
    errors.add(:date, "日付の値が不正です")
  end
end
```
PowerShell cd の罠

PowerShell のスクリプト中で普通に cd (Set-Location) を使うことはあると思います。
だがしかし、実は、cd 後に外部コマンドを実行すると反映していない。
Set-Location ではPowerShell環境のカレントLocationを変更しているだけのようです。
PowerShellではドライブとしてファイルシステム以外も統合して扱うことに起因しているんだと思われますが、きっとだれもがハマルと思います。

実行環境のファイルシステム上のカレントも変更するように以下のようなfunctionを定義して代用しています。

```ps1:SetCurrentDirectory.ps1
function Set-CurrentDirectory ($path) {
	Set-Location $path
	if ((Get-Location).Provider.Name -eq 'FileSystem') {
		[IO.Directory]::SetCurrentDirectory((Get-Location).ProviderPath)
	}
}
```

とりあえずfunction定義だけで、エラーチェックもなにもなしですが、これをもっとブラッシュアップしてコマンドレットにして、cd のエイリアスを置き換えると便利かもしれません。

cdのエイリアスが無ければもう少し混乱が避けられたのでは......。