OmniAICreator/Qiita-1.07M huggingface dataset:
【PHP】連想配列、配列への追加


#連想配列の追加
## 1. array_mergeを使う方法

```php:array_merge
$hoge = array('key1'=>'value1');
$hoge = array_merge($hoge,array('key2'=>'value2'));

var_dump($hoge);
//=>array(2) { ["key1"]=> string(6) "value1" ["key2"]=> string(6) "value2" }
```

##2. +演算子を使う方法

```php:+演算子
$hoge = array('key1'=>'value1');
$hoge = $hoge + array('key2'=>'value2');

var_dump($hoge);
//=>array(2) { ["key1"]=> string(6) "value1" ["key2"]=> string(6) "value2" }
```

もちろん、これでもOK

```php:+演算子
$hoge = array('key1'=>'value1');
$hoge += array('key2'=>'value2');

var_dump($hoge);
//=>array(2) { ["key1"]=> string(6) "value1" ["key2"]=> string(6) "value2" }
```

##3. []を使う方法
要素ひとつだけなら[]も使える。

```php:[]を使用
$hoge = array('key1'=>'value1');
$hoge['key2'] = 'value2';

var_dump($hoge);
//=>array(2) { ["key1"]=> string(6) "value1" ["key2"]=> string(6) "value2" }
```

## ※array_mergeと+演算子の違い
* 同一キーの場合、array_mergeはvalue値を上書きして、+演算子はvalue値を上書きしない。

```php:array_mergeと+演算子の違い(同一キーの場合)
$hoge_1 = array('key1'=>value1);
$hoge_2 = array('key1'=>value2);

var_dump(array_merge($hoge_1,$hoge_2));
//=>array(1) { ["key1"]=> string(6) "value2" }

var_dump($hoge_1 + $hoge_2);
//=>array(1) { ["key1"]=> string(6) "value1" }

```

* キーが数値の場合、array_mergeはキーを採番し直す。+演算子はそのまま。

```php:array_mergeと+演算子の違い（キーが数値の場合）
$hoge_1 = array(5=>value1);
$hoge_2 = array(8=>value2);

var_dump(array_merge($hoge_1,$hoge_2));
//=>array(2) { [0]=> string(6) "value1" [1]=> string(6) "value2" }

var_dump($hoge_1 + $hoge_2);
//=>array(2) { [5]=> string(6) "value1" [8]=> string(6) "value2" }

```

#配列の追加
##1 . array_pushを使う方法
array_push (配列,追加する要素[,追加する要素 ... ] )

```php:array_push
$hoge = array('AAA','BBB');
array_push($hoge,'CCC','DDD');

var_dump($hoge);
//=>array(4) { [0]=> string(3) "AAA" [1]=> string(3) "BBB" [2]=> string(3) "CCC" [3]=> string(3) "DDD" }
```


##2 . []を使う方法

```php:[]を使う
$hoge[] = 'AAA';
$hoge[] = 'BBB';

var_dump($hoge);
//=>array(2) { [0]=> string(3) "AAA" [1]=> string(3) "BBB" }
```

ちなみに、array_pushと[]では、[]を使った方が速度は早いらしい。


##3 .  array_mergeを使う方法
PHPで配列はキーが数値の連想配列なので、array_mergeが使える。
また、array_mergeはキーが数値の場合、キーを採番し直すのでちょうど追加したような形になる。

```php:array_push
$hoge = array('AAA','BBB');
$fuga = array_merge($hoge,array('CCC','DDD'));

var_dump($fuga);
//=>array(4) { [0]=> string(3) "AAA" [1]=> string(3) "BBB" [2]=> string(3) "CCC" [3]=> string(3) "DDD" }
```
Rails MiniTestでlibとhelperテストのメモ

#Rails MiniTestでlibとhelperテストのメモ

Rails MiniTestでlibとhelperテスト時に少しつまったので、メモとして残しておきます。

##libのテスト

まずRakefileに次の一行を追加します。
これで`bundle exec rake test`に含まれます。

```rb:Rakefile
:
MiniTest::Rails::Testing.default_tasks << 'lib'
:
```

次にテストコードです。
テストしたいlibをincludeしたオブジェクトを使います。

```rb:test/lib/xxx_test.rb
require "test_helper"

describe SampleLib do
  before do
    class TestSampleLib
      include SampleLib
    end
    @loader = TestSampleLib.new
  end
  
  describe "sampleを実行" do
    it "Sampleが返却される" do
      assert_equal 'Sample' @loader.sample
    end
  end
end
```

##helperのテスト

libと同様に対象のhelperをincludeしたオブジェクトを使います。
button_toなどの他のhelperも使いたいのでActionView::Baseを継承します。

```rb:test/helpers/application_helper_test.rb
require "test_helper"

describe ApplicationHelper do
  before do
    class TestHelper < ActionView::Base
      include ApplicationHelper
    end
    @helper = TestHelper.new
  end
  
  describe "sampleを実行" do
    it "Sampleが返却される" do
      assert_equal 'Sample', @helper.sample
    end
  end
end
```
大きいファイルを分割したいときにつかうsplit command

heapdumpなどの大きいファイルをやりとりしたいときに、相手に送る手段が限られていたりして、圧縮だけでは送れないことがよくあったりする。そのときに使うsplit commandの使い方をよく忘れるのでメモ

`$ split -b 40M heap.bin.20140528.113433.zip heap_20140528`

-bでファイルサイズを指定。第二引数でprefixを指定。

#追記
良い感じの解説ページ見つけた
[UNIX / Linux split Command Examples](http://linux.101hacks.com/unix/split/)
macでOpenCVで顔検出

初めて投稿。
色々調べて、MacでOpenCVで顔検出するサンプル
OpenCVがHomebrewなどでインストールされている前提

```c++:test_face_detect.cpp
#include <opencv2/opencv.hpp>
 
int main (int argc, char **argv){
    cv::Mat frame, img, gray;
    cv::VideoCapture cap(0);
    const std::string cascade_name = "/usr/local/Cellar/opencv/2.4.4a/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml";
    cv::CascadeClassifier cascade;

    cascade.load(cascade_name);
    while (cv::waitKey(1) != 'q') {
        cap >> frame;
        cv::cvtColor(frame, gray, CV_BGRA2GRAY);
        cv::equalizeHist (gray, gray);

        std::vector<cv::Rect> faces;
        cascade.detectMultiScale(gray, faces);
     
        for(std::vector<cv::Rect>::iterator it=faces.begin(); it!=faces.end(); it++){
            cv::rectangle(frame, *it, CV_RGB(255,0,0), 3);
        }
     
        cv::imshow("Face Detected", frame);
    }
    return 0;
}
```

コンパイルは下記みたいな感じ
``$ clang++ test_face_detect.cpp -o FaceDetected `pkg-config --cflags --libs opencv```

で、実行
`$ ./FaceDetected `

# 参考資料
http://www.yasutomo57jp.com/2014/02/12/mac%E3%81%A7opencv%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%86/

http://www.yasutomo57jp.com/2012/09/17/opencv%E3%81%A7%E9%A1%94%E6%A4%9C%E5%87%BA/
WindowsでGitする時は大文字・小文字の罠に注意

#背景
　Windowsのファイルシステムでは、半角英字の大文字・小文字を区別しません。表記上は区別できますが、ファイルパスとして大文字と小文字が等価となるようです。そのため、大文字・小文字を区別するunixサーバ等とファイル転送をする際にはこの問題が常にそばにあります。

　この記事ではGitの作業フローを例に、現象の一例を示します。

#再現手順
※クライアントとしてTortoiseGitを使用します。

大文字混じりのファイル **aBaBaB.txt** を作成して `git add`。
![git1.PNG](https://qiita-image-store.s3.amazonaws.com/0/20500/f6e7d0fa-9bc4-ce23-43e3-e364fdb1bdf1.png)

ファイルをローカルで削除。
![git3.PNG](https://qiita-image-store.s3.amazonaws.com/0/20500/ddbcaaee-f9c7-d3de-8125-2bd89393d144.png)

小文字だけの同名ファイル **ababab.txt** を作成。
　※ Git管理下のファイルだと誤認されます。
![git4.PNG](https://qiita-image-store.s3.amazonaws.com/0/20500/1853beba-dd1b-80b8-8c9a-b0ffba99afeb.png)

 **ababab.txt** を編集して `git commit` すると、 **aBaBaB.txt** として扱われます。
![git5 - コピー.PNG](https://qiita-image-store.s3.amazonaws.com/0/20500/6cd9dbc9-70d9-5ec7-eb91-342d6314aabd.png)

#例えばどんな時に発生するか
　開発工程をGitで管理し、本番サーバはSCP等でファイル転送を行って管理している構成において、運用開始後に緊急のバグFix等があり、何らかの理由で本番のソースコードがGitリポジトリの内容と乖離してしまったケースを想定します。
　前述のバグFixでファイル命名規則による右のような修正 **myClass.php → myclass.php** を行っていた場合に、後日、差分をマージする作業をWindows上で行うと、その修正が検出されずリポジトリへの反映が漏れる現象につながります。
GoogleMap for iOSモジュール利用時のTiShadow利用方法

1時間くらいハマったのでメモしておく。

Google Maps for iOSモジュール（com.moshemarciano.googlemaps）利用時に、以下のコマンドでTiShadowを利用しようとしても、アプリが起動してこない。

`titanium -p iphone --shadow`

詳しい理由はわからないけど、シミュレータのバージョンをiPhone 4インチ 64-bitにするとうまく動く。

`titanium build -p iphone -T simulator -C 'iPhone Retina (4 inch 64-bit)' --shadow`
Emacsで任意の位置を記憶する"quick-back"

# quick-back

## 公式

https://github.com/ketanaka/quick-back

## 機能
今まさに編集している一瞬だけパッと覚えておきたい場合に特化した **quick-back**

機能は

* カーソル位置とバッファを記憶する
* 記憶した位置への移動（または移動前の箇所に移動）

とシンプルだが、 registers, bookmarks で登録した箇所が覚えきれない、今は余計なことに頭使いたくない、という時に便利。

## インストール

公式にあるとおり、 load-path を通して

```el
(require 'quick-back)
(global-set-key (kbd "C-M-'") 'quick-back-mark)     ; customize as you like
(global-set-key (kbd "C-'") 'quick-back-jump)       ; customize as you like
```

とするだけ。
デフォルトのキーバインドは登録されておらず、自分で設定する必要はあるが、ここは使いやすいようにしてくれという意思と判断。
個人的には、USキーボードで使いやすいキーバインドで設定例が書かれている点も評価したい。

## 使い方

記憶したい任意のバッファの任意の位置で、おもむろに
`M-x quick-back-mark`、
作業を進めていくうちに記憶位置に戻りたくなったら、
`M-x quick-back-jump`
で、記憶位置にすっ飛んでいく。

また作業の続きをやりたくなれば、再度
`M-x quick-back-jump`
で、記憶位置に飛ぶ前の位置に戻ってくる。

`M-x quick-back-jump` を適当に実行しているだけで、真剣にコードを読んでいるように誤摩化せるかもしれない...
Linux Mintでクリップボードの履歴管理を使う

WindowsでいうCLCLですね。一度使い始めたらもう二度となかった生活には戻れない一種の麻薬的ソフトウェアです。

## インストール

色々とあるようですが、自分は一番使いやすそうな`clipit`を使ってます。

```console
$ sudo apt-get install clipit
```

んで、スタートメニューから`clipit`で起動させて

あとは履歴数がデフォルトで50なので100ぐらいに増やしたり、好きなように設定しときましょう。
Herokuのコマンドメモ


## herokuへ初回PUSH
```terminal
$ cd <レポジトリ名>
$ git init
$ heroku create <アプリ名>　
$ heroku git:remote -a <アプリ名>
# addした名前を確認出来ます
$ git remote -v
$ git add .
$ git commit -c "comment"
$ git push <アプリ名> master
```
## herokuのログを確認する
```terminal
$ heroku logs
``` 

## データベースのパスを取得する
※clearDBの場合  

```terminal
$ heroku config --app <アプリ名>
CLEARDB_DATABASE_URL:mysql://ユーザ名:パスワード@サーバ名（ホスト名）/データベース?reconnect =true
```

## heroku appの一覧表示
```terminal
$ heroku apps
```

## アプリの概要を表示
```terminal
$ heroku info --app <アプリ名>
```

## コンフィグを表示
```terminal
$ heroku config
```

## タイムゾーンを設定
```terminal
$ heroku config:add TZ=Asia/Tokyo
```



## 参考:
https://qiita.com/chihiro/items/b8a3ef54716842dd115a
https://qiita.com/Horie1024/items/85688099707610f70fa6
node.jsをroot権限なしでinstall する

レンタルサーバーでnode.jsを使いたいけど、
root権限挙げないと言われたので、頑張ってインストール。
よくわからないところも合った。。。知ってる方コメント希望です。

手順は細かく分けて下記の９ステップ。

１，node.jsのソースコードをダウンロード
２，FTPで\$HOME/downloadにアップして/ $HOME直下でファイルを解凍
３，pythonのデフォルトが古いのでエイリアス変更
４，解凍先に移動
５，configures ？　インストールの環境設定？
６，コンパイル，インストール
７，\$HOME/local/binにパスを通す
９，再接続してバージョン確認（即時反映的なことすればいいのかな？）

それでは、具体的に書くステップで何をしたか説明します。

１，node.jsのソースコードをダウンロード
<a href="http://nodejs.org/download/" title="http://nodejs.org/download/">http://nodejs.org/download/</a>
の「Source Code」から最新ソースを落としてくる。
私はnode-v0.10.28.tar.gzを落としました　2014/05/15時点

２，FTPで\$HOME/downloadにアップして/ $HOME直下でファイルを解凍
＊イケてないので、\$HOME/programs的なの作ったほうがいいかも
> tar zxvf node-v0.10.28.tar.gz

３，pythonのデフォルトが古いのでエイリアス変更
> alias python='/usr/bin/python2.7'

４，解凍先に移動
> cd node-v0.10.28

５，configures ？　インストールの環境設定？

> python configure --prefix=\$HOME/local

６，コンパイル，インストール
> gmake
> gmake install


７，$HOME/local/binにパスを通す
> vi .bashrc

下記を追加
PATH=\$HOME/local/bin:"$PATH"

９，再接続してバージョン確認（即時反映的なことすればいいのかな？）
> node -v

終了！

４の後にgmakeいきなりすると、

python ./configure
File "./configure", line 442
fpu = 'vfpv3' if armv7 else 'vfpv2'
^
SyntaxError: invalid syntax
make: *** [config.gypi] エラー 1

が出て積んだかな・・・
と思いましたが、３，５のステップを行えば無事コンパイルできました。
WeakIdentityHashMapで任意のオブジェクトに外からフィールドを追加する


任意のオブジェクトにフィールドを足し、そのオブジェクトが開放されたらその追加フィールドも開放されるようにしたい。immutable objectだとWeakHashMapを使えばいいのですが、hashCode()を再定義したmutable objectだと、オブジェクトの状態が変わってhashCode()が無効になることがあるのでWeakHashMapは使えません。hashCode()ではなく`System.identityHashCode()`を使えばいいので、それならIdentityHashMapが使えるかと思えばこちらはkeyがweak referenceではないのでオブジェクトのライフサイクルに従って追加フィールドが開放されることを期待できません。

というわけで、WeakIdentityHashMapをリリースしました。実装自体はいたるところにあるのですが、単体で簡単に使えるものが見当たらなかったので。

* https://github.com/gfx/Java-WeakIdentityHashMap

使い方は、以下のようにstatic finalでWIHMをもっておき

```java
private static final WeakIdentityHashMap<ObjectClass, FieldClass> foo = new WeakIdentityHashMap<>();
```

あとは適当なアクセサを用意するだけ

```java
    public static void setFoo(ObjectClass object, FieldClass value) {
        foo.put(object, value);
    }

    public FieldClass getFoo(ObjectClass object) {
        return foo.get(object);
    }
```

WeakIdentityHashMapはMaven Centralに上げてあるので以下の宣言出使えます。

```groovy
dependencies {
    compile 'com.github.gfx.util:weak-identity-hash-map:+'
}
```

なおObjectie-Cだと同じ用途で[Associative References](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html)がありますね。
円の金額表記で3桁毎にカンマを入れる

```rb:price.rb
number_to_currency(9800*3, :locale=>'ja')
```

```yaml:ja.yml
  # 円表記
  number:
      currency:
        format:
          unit: "円"
          format: "%n%u"
          negative_format: "-%n%u"
          precision: 0
```
【#R言語】時系列データの周期特性とトレンドの成分分析 #統計学 #機械学習

R言語を使って時系列データの周期特性とトレンドの成分分析を行う手順を自分用のメモとしてまとめました。

### 手順 1: サンプルデータ `UKgas` を読み込みます

    R> data("UKgas")
    R> UKgas

### 手順 2: 関数 `str()` を使って、時系列データ `UKgas` の構造を確認します

    R> str(UKgas)
    Time-Series [1:108] from 1960 to 1987: 160.1 129.7 84.8 120.1 160.1 ...

→ 1960年から1987年までのデータが格納された時系列データであることを確かめます。

### 手順 3: 関数 `stl()` と関数 `plot()` を使って、時系列データ `UKgas` の成分分解を行います

    R> plot(stl(x=UKgas,s.window="periodic"))

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kukita/20140527/20140527095821.png" title="f:id:kukita:20140527095821p:plain" class="hatena-fotolife" itemprop="image"></span></p>

→ data（元データ）が seasonal（周期特性）、trend（トレンド）、remainder（残差）の3つの成分に分解されたことを確かめます。


以上
【#R言語】One Class SVM（1クラス サポートベクターマシン）を使った外れ値検出 #統計学 #機械学習

R言語を使ってOne Class SVM（1クラス サポートベクターマシン）を使った外れ値検出を行う手順を自分用のメモとしてまとめました。

### 手順 1: サンプルデータ `UKgas` を読み込みます

    R> data("UKgas")
    R> UKgas

### 手順 2: 関数 `str()` を使って、時系列データ `UKgas` の構造を確認します

    R> str(UKgas)
    Time-Series [1:108] from 1960 to 1987: 160.1 129.7 84.8 120.1 160.1 ...

→ 1960年から1987年までのデータが格納された時系列データであることを確かめます。

### 手順 3: ライブラリ `kernlab` を読み込みます

    R> library("kernlab")

### 手順 4: 関数 `as.numeric()` と関数 `data.frame()` を使って、時系列データ `UKgas` を数値ベクトルデータに変換、 `class` 列を追加し、データフレームを作成します

    R> ukgas.data <- data.frame(as.numeric(UKgas), class=1)
    R> ukgas.data

### 手順 5: 関数 `str()` を使って、作成したデータフレーム `ukgas.data` の構造を確認します

    R> str(ukgas.data)
    'data.frame':   108 obs. of  2 variables:
     $ as.numeric.UKgas.: num  160.1 129.7 84.8 120.1 160.1 ...
     $ class            : num  1 1 1 1 1 1 1 1 1 1 ...

→ 1列目に as.numeric.UKgas（ガスの消費量）、2列目に class（値は全て"1"）が格納された data.frame 型オブジェクトであることを確かめます。

### 手順 6: 関数 `ksvm()` を使って、SVMオブジェクトを作成します

    R> ukgas.data.svm <- ksvm(x=class~., data=ukgas.data, type="one-svc", kernel="vanilladot")
    R> ukgas.data.svm
    ※ kernel: vanilladot（線形カーネル）、polidot（多項式カーネル）、rbfkernel（RBFカーネル）等から選択。

### 手順 7: 関数 `predict()` を使って、外れ値を検出します

    R> ukgas.data.outlier <- predict(ukgas.data.svm)
    R> ukgas.data.outlier

### 手順 8: 関数 `ifelse()` を使って、`TRUE`,`FALSE`の値をそれぞれ`2`,`1`に置換します

    R> cluster <- ifelse(ukgas.data.outlier==TRUE, 2, 1)
    R> cluster

### 手順 9: 関数 `rm()` を使って、不要なオブジェクト `ukgas.data.outlier` を削除します

    R> rm(ukgas.data.outlier)

### 手順 10: 関数 `data.frame()` を使って、元データと外れ値の検出結果をマージします

    R> ukgas.data <- data.frame(ukgas.data, cluster)
    R> ukgas.data

### 手順 11: 関数 `str()` を使って、作成したデータフレーム `ukgas.data` の構造を確認します

    R> str(ukgas.data)
    'data.frame':   108 obs. of  3 variables:
     $ as.numeric.UKgas.: num  160.1 129.7 84.8 120.1 160.1 ...
     $ class            : num  1 1 1 1 1 1 1 1 1 1 ...
     $ cluster          : num  1 1 1 1 1 1 1 1 1 1 ...

→ 3列目に cluster が追加されたことを確かめます。

### 手順 12: 関数 `plot()` を使って、散布図を作成します

    R> plot(ukgas.data[,1], type="o", col=ukgas.data$cluster)

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kukita/20140527/20140527094744.png" title="f:id:kukita:20140527094744p:plain" class="hatena-fotolife" itemprop="image"></span></p>


以上
アクションバーのタブ部分のみを表示する


```java
//Activity#onCreateの中です

//上部を隠す
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowHomeEnabled(false);

//タブの設定(Listenerは適当です)
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab firstTab = actionBar.newTab().setText("First tab").setTabListener(new ActionBar.TabListener() {
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        Log.d("drama", "First tab");
    }
    @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }
    @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }
});
ActionBar.Tab secondTab = actionBar.newTab().setText("Second tab").setTabListener(new ActionBar.TabListener() {
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        Log.d("drama", "Second tab");
    }
    @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }
    @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { }
});
actionBar.addTab(firstTab);
actionBar.addTab(secondTab);
```
Unity4.5に上げたらNortonにMono.exeを消された

同じ憂き目にあった人は多いようです
(http://forum.unity3d.com/threads/248291-Unity-4-5-mono-exe-virus-detected-problem)


Mono.exeを検疫から復元後
C:\Program Files (x86)\Unity\Editor\Data\Mono\bin\mono.exe　をチェック除外しました。
VirtualBoxのゲストOSをフルサイズで使うときにミニツールバーを表示させない

UbuntuをゲストOSで使うときにはそれほど気にならなかったんですが、Mintを使うとタスクバーが下にあり、最大化して使うとVirtualBoxのミニツールバーがかぶさってタスクバーの一部が見えなくなってしまって不便です。

## 解決策

`一般`->`高度`の `ミニツールバー: ☑ フルスクリーン/シームレスモード時に表示`のチェックを外しておきましょう。
SQLServerAgentサービス(SQLAGENT)が起動直後停止してしまう

SQL Server 2008 Express から SQL Server 2008 Enterprise へアップグレードした後，SQL Server Agent を起動しようとしても直ぐに停止してしまう事案に遭遇．その解決策を記します．

#環境
* Microsoft Windows Server 2008 R2 Standard 64bit
* Microsoft SQL Server 2008 R2 Enterprise

※この環境では SQL Server 2008 Express から SQL Server 2008 R2 Enterprise へアップグレードしています．

#経緯

1. SQL Server 2008 Express をインストール，運用．
2. SQL Server 2008 R2 Enterprise へアップグレード．
3. SQL Server Agent が起動していないことが発覚．
4. SQL Server Agent の起動を試みても直ぐに停止してしまう．
![SQL Server Agentサービス起動直後現れるダイアログ](https://qiita-image-store.s3.amazonaws.com/0/4734/e9f68d5f-e7cb-da23-35d3-8ee8a290e6c4.png "無題.png")  
図1 SQL Server Agentサービス起動直後現れるダイアログ
5. 起動しない...

#解決方法

SQL Server 構成マネージャーで SQL Server Agent サービスのログオン権限を管理者権限に変更します．

1. SQL Server 構成マネージャーを開く．
2. 左ペインで "SQL Serverのサービス"を選択し，"SQL Server Agent(#インスタンス名#)"を右クリック→"プロパティ"．
3. ログオンタブで "このアカウント" を選択し，管理者権限を持つアカウントのアカウント名およびパスワードを入力し，"適用"．
4. SQL Server Agent サービスを "開始" する．

このようにすれば、図1のようなダイアログが現れてSQL Server Agentサービスが停止してしまう現象に対応できるかもしれません．上記方法で解決しなければ、SQLAGENT.OUT ファイルを調べてみると良いかもしれません．
iOS7でステータスバーが消えない時

今更感がありますが、iOS7からはステータスバーの消し方が変わりました。

```objc
- (BOOL)prefersStatusBarHidden {
    return true;
}
```

を実装し、

```objc
setNeedsStatusBarAppearanceUpdate
```

を呼ぶ必要があります。
…が、これで消えないことがあります。

Info.plist内の
View controller-based status bar appearance
がNOになっている場合。
この場合はiOS6同様

```objc
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
```

を呼んで消す必要があります。
iOS7からステータスバーの制御がViewController単位での管理に変わり、setStatusBarHidden:withAnimation:がdeprecatedになったと思い込みがちですが、あくまでiOS7からステータスバーの制御がViewController単位での管理が”出来るようになった”だけなので、ご注意を
Django: コピペ用デフォルトadmin.py



```py

    from django.contrib import admin
    from django.db.models import get_app, get_models
    
    
    for model in get_models(get_app(__name__.split('.')[-2:][0])):
        name = "%sAdmin" % model.__name__
    
        admin_class = globals().get(name, None)
        if admin_class is None:
            params = dict(
                list_display=tuple([f.name for f in model._meta.fields]),)
            admin_class = type(
                "%sAdmin" % model.__name__,
                (admin.ModelAdmin,),
                params,
            )
    
        admin.site.register(model, admin_class)

```
SQLiteにMapオブジェクトを保存（おすすめはActiveAndroid）


チャオ！
SQLiteにMapオブジェクトを突っ込みたい場合ってあるあるですよね！

# MapをSQLiteに保存

そういう場合は
##### Map → JSONObject → String
で保存して

##### String → JSONObject → Map
で読み込むのがおすすめ！

## MapからStringに

MapからStringは超簡単♪

```Java:
public String mapToJsonString(Map data) {
	if (data == null) {
		return null;
	}
	return new JSONObject(data).toString();
}
```

## StringからMapに

StringからMapはちょっと面倒

```Java:
public Map jsonStringToMap(String data) {
	if (data == null) {
		return null;
	}
	try {
		JSONObject json = new JSONObject(data);
		Iterator<Object> keys = json.keys();
		Map<String, Object> params = new HashMap<String, Object>();
		while (keys.hasNext()) {
			String key = keys.next().toString();
			String val = json.getString(key);
			params.put(key, val);
		}

		return params;
	} catch (JSONException e) {
		return null;
	}

	return null;
}
```

これでももうMapを保存し放題だね！


# ActiveAndroidを使う場合

ナウなヤングはandroidでsqliteを使う場合ORMを使っていると思うけど、
おすすめは[ActiveAndroid](http://www.activeandroid.com/)！

* 勝手にできるIdが微妙
* 複数のxxx.dbは使えない（？）

とか色々アレな所もあるけど、それを上回る魅力が！

で、ActivieAndroidでMapオブジェクトを保存するには

1. 独自TypeSerializerを用意する
* AndroidManifest.xmlに一行追加

の2ステップだけで保存し放題！

### 1.独自TypeSerializerを用意する

好きな所にTypeSerializerを継承したMapSerializer.javaを保存

```Java:MapSerializer.java
package com.mypackage;

import com.activeandroid.serializer.TypeSerializer;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class MapSerializer extends TypeSerializer {

    @Override
    public Class<?> getDeserializedType() {
        return Map.class;
    }

    @Override
    public Class<?> getSerializedType() {
        return String.class;
    }

    @Override
    public String serialize(Object data) {
        if (data == null) {
            return null;
        }
        return new JSONObject((Map)data).toString();
    }

    @Override
    public Map deserialize(Object data) {
        if (data == null) {
            return null;
        }
        try {
            JSONObject json = new JSONObject((String) data);
            Iterator<Object> keys = json.keys();
            Map<String, Object> params = new HashMap<String, Object>();
            while (keys.hasNext()) {
                String key = keys.next().toString();
                String val = json.getString(key);
                params.put(key, val);
            }

            return params;
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }
}
```

### 2.AndroidManifest.xmlに一行追加

AndroidManifest.xmlに下記を追記するれば準備完了！

```xml:AndroidManifest.xml
<meta-data android:name="AA_SERIALIZERS" android:value="com.mypackage.MapSerializer" />
```

例えば更にDateを保存するためのDateSerializerを追加した場合は

```xml:AndroidManifest.xml
<meta-data android:name="AA_SERIALIZERS" android:value="com.mypackage.Dateerializer,com.mypackage.MapSerializer" />
```

って感じで追加すればいい感じ。

### 使ってみる

あとはモデルで普通にMapを指定しておけばOKOK！

```Java:
@Table(name = "myTable")
public class MyTable extends Model {

    @Column(name = "data")
    public Map data;
}
```
Wicket Quickstart [Maven] [Mac]

#Creating the project with maven
##Wicketのwebアプリを作って、mavenで動かすまで
###[1]
http://wicket.apache.org/
Wicketの公式サイトの左メニューからGet Started>Quickstartを選択。

##Creating the project - with Maven
記入内容は、わからなければここだけ変更すればいい。
GroupId: 作成されるパッケージのディレクトリ指定
Artifactld: 作成するプロジェクト名
Version: wicketのversion指定

##以下のCommand Lineのテキストエリアの中をコピーする。
Command Line:
mvn archetype:generate -DarchetypeGroupId=org.apache.wicket -:アーキタイプの指定
DarchetypeArtifactId=wicket-archetype-quickstart - : 今回のプロジェクトの作成方法
DarchetypeVersion=6.15.0 - : バージョンの設定
DgroupId=com.mycompany - : 階層の指定
DartifactId=myproject - : 作成するプロジェクト名
DarchetypeRepository=https://repository.apache.org/ -
DinteractiveMode=false : trueにするとパッケージの階層の最後にプロジェクト名で作成されたパッケージが追加される  

###[2]
ターミナルを起動して、プロジェクトを作成したいディレクトリまで移動したら、
先ほどコピーしたcommand lineの内容を貼付けて実行する。


###[3]
できたプロジェクトのディレクトリに移動したら、
`mvn jetty:run`
を入力する。
止めるときはcontrol+cで終了。

###[4]
問題なく動いたら、
`http://localhost:8080`
ローカルホストにアクセス。

Congratulations!
awkのシンタックスシュガー？

# awkの小ネタ
awkってクセあるからメモ。

## 環境
* CentOS 6.5 x64
* GNU Awk 3.1.7

## パターンアクション
基本はパターンアクション

```awk
 pattern { action statements }
```

## 真偽
boolはない。偽は空白と0、真はそれ以外。
http://codezine.jp/article/detail/7752


## 空行削除
パターンに$0のみ、アクションなしで実行します。空白は偽のため出力されません。

```
$ awk '$0'　aiai.txt
アイアイ アイアイ
おさるさんだよ
アイアイ アイアイ
みなみのしまの
```

## カラム数n個以上
今度はパターンを'$2'にします。2カラム目が空白なものは出力されません。よってカラム数が2以上のものを出力します。

```
$ awk '$2'　aiai.txt
アイアイ アイアイ
アイアイ アイアイ
```

!を付ければ逆になります。

```
$ awk '!$2' aiai.txt
おさるさんだよ
みなみのしまの
```

## 偶数行
偶数行を出力するには、NR(number of records)を使います。クセありますねー。

```
$ cat -n  aiai.txt | awk '! (NR % 2)'
     2  おさるさんだよ
     4  みなみのしまの
$ cat -n  aiai.txt | awk '(NR % 2) == 0'
     2  おさるさんだよ
     4  みなみのしまの
```


## 重複排除
ここまでくれば次のコードは納得できるかと。
私は初めてみたとき、これはどういう理屈か理解できませんでしたよ。

```
$ cat aiai.txt
アイアイ アイアイ
おさるさんだよ
アイアイ アイアイ
みなみのしまの

$ awk '!x[$0]++' aiai.txt
アイアイ アイアイ
おさるさんだよ
みなみのしまの
```

見事な重複排除ですね。awkの連想配列をうまく使っています。
x[$0]++をアクションで出力するとわかりやすいです。

```
$ awk '{ print !x[$0]++ }' aiai.txt
1
1
0
1
```

1は真、0は偽。もう説明の必要はないですね。

## 参考
* http://linuxjm.sourceforge.jp/html/GNU_gawk/man1/gawk.1.html
* http://www.usp-lab.com/opinion.html
gnuplotで綺麗な(？)グラフを作る

最近、グラフを作る時はmatplotlibが綺麗でイイナーとか思い始めたわけですが、いやいやgnuplotだって負けてはいません。
頑張れば綺麗な図が作れるぞい、という事でちょっとやってみようという話である。

ただし気をつけたまえ！
綺麗だという事と「見やすい」「わかりやすい」「論文に使える」とかいう事は全く別である！
世の中綺麗さよりもわかりやすさが優先される事は往々としてあるのだ！

とかまぁそれはさておき、完成したグラフを見せておきませう。
こんな感じである。
![Figure 0.png](https://qiita-image-store.s3.amazonaws.com/0/44457/35272549-18e7-9e7b-bf23-f57350f57b71.png)
データが何を意味しているかとかはとりあえず今回知らなくてOKです。
では、作り方のレシピ公開。

```gnuplot
reset
```
まずはresetです。
とりあえず色々な設定を初期化しておくと。
scriptで食わせるなら不要なわけですが、これが無いと何となく落ち着かない性分なもので。テヘヘ。

```gnuplot
set datafile separator ","
```
さて、今回はデータファイルがCSVなので、データファイルのセパレーターは","です。
デフォルトだとスペースとかタブとかになってたはずなので、ここで変更をしておきます。

```gnuplot
set grid lc rgb "white" lt 2
```
gridを表示します。line colorなのですが、実は後で背景の色を変えたいので、白にしておきます。
line typeは何となく2に。なんでだっけ？単に書く癖があるだけかも。

```gnuplot
set border lc rgb "white"
```
これも、背景を黒にするので設定しておきましょう。
枠の色を白に。

```gnuplot
set ytics 0.2
```
y軸なのですが、今回のデータはyレンジが0〜1で決まってるデータです。
デフォルトだと0.1刻みなのですが、ちょっとウザったいかしらと思ったので、0.2刻みに変更します。

```gnuplot
set xlabel "semi-major axis" tc rgb "white" font ",30"
set ylabel "eccentricity" tc rgb "white" font ",30" offset 1, 0
set cblabel "Temp" tc rgb "white" font ",30"
```
x軸のラベルとy軸のラベルをセットします。
色コンターを使うのでcolor bar labelもセット。
ここも文字色は白に。
fontはデフォルトでも構わないんだけど、サイズは大きくしたいので30ptにしておこーっと。
あとylabelを軸に近づけたかったのでoffset 1, 0して近づけてます。はい。

```gnuplot
set logscale x
```
x軸をlogでプロットしたかったのでセット。

```gnuplot
set size ratio 2.0/(1.0 + sqrt(5.0))
```
x軸とy軸でアスペクト比が同じ場合は当然同じにするんですが、
今回はそういうわけではないのでアスペクト比を変えました。
まぁ基本なんでもいいと思うんですがこういう時は黄金比にすることにしてるので黄金比です。

```gnuplot
set palette rgbformulae 22, 13, -31
```
gnuplotのデフォルトのコンターカラーを見るとgnuplot使ってることがバレバレで嫌なので、虹色コンターに変えます！
わざわざ使っておきながらバレるのが嫌とは何事だという感もしないでもない！

```gnuplot
set obj rect behind from screen 0, screen 0 to screen 1, screen 1
```
背景を黒にします。
つまり、screenいっぱいの黒い四角をbehindに置くことでそれを実装します。
色は省略したら自動的に黒っぽいいい感じの色になってくれたのでこのままで。

```gnuplot
p [:10][]"exoplanet.eu_catalog.csv" u 11:($14 == 0 ? NaN : $14):(log($2)/500.0):($63) with circles notitle fs transparent solid 0.85 lw 2.0 pal
```
下準備は終わり、いよいよプロットに移ります。
データファイルはexoplanet.eu_catalog.csvです！
何のデータでしょうねぇさっぱりわかりません！
まず、x軸は11行目にしたかったので11にしました。
y軸は14行目にしたかったのですが、14行目のデータは物によっては測られていないので、0の場合はNaNを返すことでプロットさせないことにしました。
点のサイズは2行目にしたかったのですが、データの大きさが桁でバラバラなので、logを取って調整しました。
点の色は63行目にしたがって付けたかったので63にしました。
プロットの種類はcirclesです。
判例は無くていいのでnotitleに。
fill styleですが、透過率を0.85にして、塗りつぶしにしました。
枠線の太さは2.0に。
また、palを指定して塗りつぶしはデータファイルから引っ張ってくる事を指定します。

さて、以上がこのグラフの生成scriptでした。
まとめるとこんな感じ。

```gnuplot
reset
set datafile separator ","
set grid lc rgb "white" lt 2
set border lc rgb "white"
set ytics 0.2
set xlabel "semi-major axis" tc rgb "white" font ",30"
set ylabel "eccentricity" tc rgb "white" font ",30" offset 1, 0
set cblabel "Temp" tc rgb "white" font ",30"
set logscale x
set size ratio 2.0/(1.0 + sqrt(5.0))
set palette rgbformulae 22, 13, -31
set obj rect behind from screen 0, screen 0 to screen 1, screen 1
p [:10][]"exoplanet.eu_catalog.csv" u 11:($14 == 0 ? NaN : $14):(log($2)/500.0):($63) with circles notitle fs transparent solid 0.85 lw 2.0 pal

reset
```
これでgnuplotでもオシャンティーなグラフがかける！
負けるなgnuplot！頑張れgnuplot！ごめんねでも最近はmatplotlibに浮気中だgnuplot！
phalcon でヘッダを追加する

# 概要

phalcon で全体的にヘッダを追加したい場合について．

下記ツールなどで簡単にチェックしてみるとヘッダが付いてないとかいうアラートが出たりする．

> OWASP Zed Attack Proxy Project - OWASP
>
> https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project

じゃあつけましょうという話で DI に response で設定してしまう．

```php
    $di['response'] = function() {
        $response = new \Phalcon\Http\Response();
        $response->setHeader('X-Frame-Options', 'SAMEORIGIN');
        $response->setHeader('X-Content-Type-Options', 'nosniff');
        return $response;
    };
```
終わり．

# つけるヘッダなど

下記サイトなどを参考にスレばいいんじゃないかな．

> 今夜つける HTTPレスポンスヘッダー （セキュリティ編） - うさぎ文学日記
>
> http://d.hatena.ne.jp/sen-u/20131130/p1

# 参考文献

ドキュメント

> Returning Responses — Phalcon 1.3.0 documentation
>
> http://docs.phalconphp.com/en/latest/reference/response.html
yum update後にVagrantで共有ディレクトリのマウントに失敗する

## 発生原因

とりあえずvagrantでVM起動して　`yum update`からでしょってんでupdateかけると
次回から`vagrant up`した時にこんなかんじのメッセージが表示されて、共有ディレクトリのマウントに失敗したりする。（起動自体は成功してSSHで入れる）
原因は多分なんかのkernel系パッケージのversionが上がったからだと思う。あとこれ起こるのVirtualBox環境かだけかも

~~~
Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3`
vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant
~~~

## 復旧方法(ゲストOSでの作業)

で、調べてみると「ゲストOS側」でこのコマンド使うと復旧できるっぽい

`$ /etc/init.d/vboxadd setup`

実行してみるけど失敗する

~~~

$ /etc/init.d/vboxadd setup

Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
The headers for the current running kernel were not found. If the following
module compilation fails then this could be the reason.
The missing package can be probably installed with
yum install kernel-devel-2.6.32-431.17.1.el6.x86_64

Building the main Guest Additions module                   [FAILED]
(Look at /var/log/vboxadd-install.log to find out what went wrong)
Doing non-kernel setup of the Guest Additions              [  OK  ]
~~~

yumでパッケージ入れろと指示が出てるから実行してからもう一度チャレンジ
今度は成功、ゲストOSでの作業はここまで

~~~
$ yum install -y kernel-devel-2.6.32-431.17.1.el6.x86_64
$ /etc/init.d/vboxadd setup

Removing existing VirtualBox non-DKMS kernel modules       [  OK  ]
Building the VirtualBox Guest Additions kernel modules
Building the main Guest Additions module                   [  OK  ]
Building the shared folder support module                  [  OK  ]
Building the OpenGL support module                         [  OK  ]
Doing non-kernel setup of the Guest Additions              [  OK  ]
Starting the VirtualBox Guest Additions                    [  OK  ]
~~~

あとは`vagrant halt`して`vagrant up`してやればいつもの様にマウントされるはず
Xcodeのカラースキームを追加する

### 今回はmonokaiを追加してみます ###
1. 一旦Xcodeを終了させる

2. まずディレクトリ作成

```
// mkdirは初回のみでOK
mkdir ~/Library/Developer/Xcode/UserData/FontAndColorThemes
cd ~/Library/Developer/Xcode/UserData/FontAndColorThemes
```
3.カラースキームのファイルをダウンロードします。
※ブラウザでDLしたファイルを設置してもOK

```
wget https://gist.githubusercontent.com/kristoferjoseph/1974303/raw/a1269b8ff59a8eff8a1385b5e13fcb1404043aa6/Monokai.dvtcolortheme
```

3.Xcode起動

```
メニューバー[Xcode] → Preferences → Fonts&Colors → monokai
```
kitchen-dockerでulimitのエラーを回避する方法


最近test-kitchenを使いはじめました。
[redisio](https://github.com/brianbianco/redisio)のcookbookを動かしたところ以下のようなエラーがでました。

```
STDERR: /etc/init.d/redislocalhost: line 28: ulimit: open files: cannot modify limit: Operation not permitted
       could not open session
```

エラーメッセージを読む限りulimitを変更する権限がないおって感じのこといわれていると思います。  

## そもそもulimitとは
だいたいグーグル先生に聞くと`システムリソースを制限する設定を行うコマンド`という答えをいただきました。

では、今回問題となった`/etc/init.d/redislocalhost`の28行目を見てみましょう。

```
$ kitchen login
$ vi /etc/init.d/redislocalhsot

     27
     28 ulimit -n 10032
     29
```

つまりulimitの制限しているから問題のようです。
recipeとかをtemplate書き換えてtest-kitchen動かす環境だけulimitの行を取り除くってのも微妙なアプローチですね。  

## dockerとulimitについて
どうしてulimitを書くとエラーになるのかは[この記事](http://qiita.com/gitcell/items/7cfde70e7a73fa1d2f7b)にわかりやすく解説されていたのでお読みください。

で、解決策として、[Problem running Apache/Ubuntu from docker #1900](https://github.com/dotcloud/docker/issues/1900)を見るとどうやら`privileged `オプションを渡して実行しているようです。

```
docker run -p :80 -privileged IMAGE apache2ctl -D FOREGROUND
```

## kitchen-dockerでのprivilegedの指定
[kitchen-dockerのgithub](https://github.com/portertech/kitchen-docker)を眺めている方は気づいているかもしれませんが、kitchen-dcokerではprovilegedの指定のオプションがあります。

ということで、.kitchen.ymlなり.kitchen.local.ymlの記述のサンプルをのっけておきます。

```
$ vim .kitchen.yml
---
driver:
  name: docker

provisioner:
  name: chef_solo

platforms:
  - name: centos-6.4
    driver_config:
      image: centos
      platform: centos
      dns: 8.8.8.8
      socket:  tcp://192.168.56.101:4243
      privileged: true

suites:
  - name: default
    run_list:
      - recipe[yum]
    attributes:
```

上記にように記述すればulimitによるエラーは発生しなくなります。
[memo] xubuntu で突然？ウィンドウがおかしくなったら

compiz をいろいろ弄っていたら、ウィンドウのタイトルバーがなくなったり、上部のパネルに食い込んだりして、使い物にならなくなった。compiz 消してもだめ。
いろいろ確認していくと、ウィンドウマネージャがそもそもぶっ飛んでるっぽい。

```shell-session
$ xfwm4
```

直った。

# 参考

http://d.hatena.ne.jp/windbell/20091223/p1
http://hueruwakame.blog.shinobi.jp/computer/%E3%82%B3%E3%82%B4%E3%83%88
HiveQLでピリオドをパースしたいとき

# 利用ケース

IPアドレスのピリオドをパースして、数値として扱いたいということがあるかもしれません。
Where句の範囲指定ができるようになり、計算が楽になったりします。

MySQLだと、
INET_ATON(“IPアドレス”)
という関数でそうした数値への変換できるみたいですね。

つまり、
INET_ATON("192.168.0.35") = 3232235555

Hiveには、そんな便利関数はないので、どうやって書くのかというと、下式で算出することになる。

```rb
192 * 256^3 + 168 * 256^2 + 0 * 256^1 + 34 * 256^0
```

# サンプルデータ

| host       |
|-------------|
|48.204.59.23|

# サンプルクエリ

```sql
SELECT
(
  host,
  CAST(host_array[0] AS double) * 16777216 +
  CAST(host_array[1] AS double) * 65536 +
  CAST(host_array[2] AS double) * 256 +
  CAST(host_array[3] AS double)
) AS host_num
FROM
(
  SELECT
    SPLIT(host, '\\.') AS host_array,
    host
  FROM www_access
) sep
```

### クエリ説明

ここで言いたかったことは、HiveはJavaなので、'.'には、'\\'が必要ということだけ。
次の段では、Array型のhost_arrayに対して、各要素を上式に当てはめて計算する。

```sql
SPLIT(host, '\\.') AS host_array,
```

# 結論

ピリオドにマッチさせる場合には、'\\.'を使います。

以上。
AngularJS の $resource (ngResource) で生成したクラスオブジェクトから返されるデータオブジェクトのインスタンスにメソッドを生やす

## おさらい

クラスオブジェクトとデータオブジェクトって今適当に名前つけただけなのでその説明を先に。

どちらも便宜上の言い方なので察してください。察しろ。

```javascript
// HogeResource は $resource で生成したクラスオブジェクト
var HogeResource = $resource('path/to/api', { /* params */ }, { /* actions */ });

// hoge はクラスオブジェクトから生成されるデータオブジェクトのインスタンス
var hoge = HogeResource.get(function() {
        // do something
});
```

で、今回はこのデータオブジェクトのインスタンスに対してメソッドを生やしたい、というわけです。

色々なサンプルで見られるのがデータバインディングした view 上で変更した値をそのまま save とか、controller で値を変更して save とかそういうのが多いですが、実際のユースケースとして煩雑なデータへのビジネスロジックを書きたい場合に効果を発揮すると思います。


## やりかた

簡単に言うと、上記で言うクラスオブジェクトのサービス (factory) を作って、クラスオブジェクトの prototype を拡張します。

```javascript
var module = angular.module(sample, [ngResource]);

module.factory('HogeResource', ['$resource', function($resource) {
    var HogeResource = $resource('path/to/api'); 

    angular.extend(HogeResource.prototype, {
        someMethod: function() {
            // ここの this はデータオブジェクト自身
            // なので、以下の場合は hoge という値を 'foo' に変更することになる
            this.hoge = 'foo';   
            // もちろんデータオブジェクトが本来持つメソッドも呼べる
            return this.$save();
        }
    });
    return HogeResource;
}]);

// 使い方
module.controller('FugaController', ['$scope', 'HogeResource', function($scope, HogeResource) {
    // とりあえずデータオブジェクトのインスタンスを取得して
    $scope.hoge = HogeResource.get(); 
    // なんかイベントあったら
    $scope.onClickSomething = function() {
        // someMethod を実行
        $scope.hoge.someMethod();
    };
}]);
```

みたいなことができるようになります。

要するにデータに対して何らかの操作を行うビジネスロジックを予め $resource のクラスインスタンスに書いておくことができるので、場合によっては重宝するかと。

もっといいやり方があれば教えて下さい。
CSS3 keyframes パラパラアニメが Chrome で動かなくなった

# 問題点

Chrome35 にアップデートしてから、keyframes のアニメが上手く動かなくなった。

ソースの内容は1枚絵のパラパラアニメ

```css
.anim
{
    background: url(http://xxx.xxx/xxx.png);
    animation: animname 1.0s steps(6,end) infinite;
}

@-ms-keyframes animname
{
    100% { background-position: -1000px; }
}
@-moz-keyframes animname
{
    100% { background-position: -1000px; }
}
@-webkit-keyframes animname
{
    100% { background-position: -1000px; }
}
```

Chrome のみ、テクスチャが高速スクロールする。

# 解決策

答えを見つけた。
https://code.google.com/p/chromium/issues/detail?id=376557

```css
@-webkit-keyframes animname
{
    0% { background-position: 0px 0px; }
    100% { background-position: -1000px; }
}
```

0% も設定する！

初期化忘れと言うことか...
Railsにおけるlayoutとその他のViewの読み込み順について

ユーザの状態によって、Viewの表示を切り替えようとしたときに詰まってしまったのでメモ。

RailsのViewには、共通部分を司るlayoutテンプレートと、各ページ固有のコンテンツを表すテンプレートの二種類があります。各ページ固有のコンテンツであるテンプレートは、layoutの中で```yield```されることで、レンダリングされます。この記事では、このテンプレートを便宜上 *コンテンツテンプレート* と呼ぶことにします。

今回詰まった原因は、 **layoutでyieldをするかしないかによって、コンテンツテンプレートを読み込むかどうかを決められると思っていたこと** です。

```erb:layout.html.erb
<!--上略-->
<%if signed_in?%>
  <%=yield%>
<%else%>
  ...
<%end%>
<!--下略-->
```
実際、```yield```するかしないかは、プログラムがコンテンツテンプレートを読み込むかどうかということには関係ありません。なぜかというと、「プログラムが読み込んで処理した結果を表示するかしないか」を決めるのが```yield```の有無だからです。```yield```の有無に関わらず、プログラムはコンテンツテンプレートを読み込んで処理を行います。

*参考：*[Railsドキュメント - yield](http://railsdoc.com/references/yield)

上記の例は、僕が今回やらかしたコードから引っ張ってきました。完全に勘違いしてますね。

通常、GETリクエストを受け取ると、Railsはルーティングに指定されたコントローラの指定されたアクションに処理を投げます。このアクションには、デフォルトで読み込むコンテンツテンプレートが設定されていて、何も設定されない場合、```render```メソッドによって自動的にデフォルトのテンプレートを読み込みます。

*参考：*[Railsドキュメント - render](http://railsdoc.com/references/render)

いろいろ試してみたところ、RailsにおけるView処理の流れは、次のような順番になっているようです。

1. ```render```メソッドを呼び出し
2. コンテンツテンプレート読み込み＆html(?)へパース
3. レイアウトテンプレート読み込み＆パースされたテンプレートをyieldで読み出し
4. ページとしてレンダリング

おおちゃくをして、Viewレベルでのアクション切り替えもどきをしようとしたのがいけませんでした。素直にユーザの状態ごとのアクションとViewを用意して、```before_filter```で振り分けるようにして解決しました。

*参考：* [Railsドキュメント - filter](http://railsdoc.com/references/filter) ,　 [before_filter に条件を設定する](http://rails3try.blogspot.jp/2011/12/rails3-beforefilter.html)
rubyでファイルのマージ

久しぶりにrubyを勉強しました。ファイルに新しい行を挿入してそれ以降の行を下にずらすような処理です。

```rb:sample.rb
#!/usr/bin/ruby

class ConfigfileMerge
	attr_reader :filename
	attr_reader :lines
	attr_reader :mergeline

	def initialize(filename)
		@filename=filename
	end

	def add(str)
		@mergeline = str
		/([^,]*),(.*)$/ =~ str
		@newID=$1.to_i
	end

	def execute()
		lines = readFileToArray
		before, after = separate lines
		afterNew = idUpcount after

		@lines=Marshal.load(Marshal.dump(before))
		@lines.push @mergeline
		@lines += afterNew
	end

private
	def readFileToArray()
		lines = Array.new
		open(@filename, "r") do |f|
			lines = f.readlines
		end
		lines
	end

	def separate(lines)
		arrays = lines.partition do |item|
			/([^,]*),(.*)$/ =~ item
			currentID=$1.to_i
			currentID < @newID ? true: false
		end

		return arrays[0],arrays[1]
	end

	def idUpcount(array)
		result = Array.new
		array.each do |item|
			/([^,]*),(.*)$/ =~ item
			currentID=$1.to_i
			currentData=$2
			currentID+=1
			result.push currentID.to_s + ","+ currentData
		end
		result
	end

	def flush()
		open(@filename, "w") do |f|
			@lines.each do |str|
				f.write str
			end
		end
	end
end

obj = ConfigfileMerge.new ARGV[0]
obj.add("5,TEST_4,50\n")
obj.execute

obj.lines.each do |line|
	puts line
end
```
画像名について考える


CSSのCLASSやIDと同じく、これも最低限の命名方法があると仕事が捗りやすいかなと思ったのでメモ。

基本的にはよく使われている接頭辞つけて、ディレクトリを細かに切ってわかりやすくという感じ。

いろんなコーディング規約を見ると、枝に連番つく事が多いんだけど、私はイマイチそれが好きじゃない。
自分が最初から最後まで面倒見るなら変な名前つけても自業自得だけど、いつどこで担当変更になるかわからない事を考えると、画像名も手を抜かない方がいいだろうなと思ったりします。

## 基本的な事
+ pngファイルはコミットする前に軽量化する
  + mageOptim とか利用する
+ スペース用透過画像は使用しない
+ 単語をつなげる場合はハイフン(-)を使用する
 + IDやCLASSの背景画像なら、IDやCLASS名と同じ名前つけるとわかりやすいかも
+ 短縮する場合は、一般的に広く使われる名称を使う


## 画像につけるプレフィックス（接頭辞）
| 種類 | 画像プレフィックス(接頭辞)| 例 |
|:-----|:-----|:-----|
| タイトル(h1〜h6)| hx_ |h1_profile.png|
| サブタイトル(h以外) |ttl_ |ttl_nickname.png|
| 背景 | bg_ |bg_section.png|
| グローバルナビゲーション | gnav_ |gnav_profile.png|
| ローカルナビゲーション | local-nav_ |local-nav_profile.png|
| ナビゲーション | nav_ |nav_profile.png|
| バナー | bnr_ |bnr_ad.png|
| ボタン | btn_ |btn_submit.png|
| ロゴ | logo_ |logo_product.png|
| アイコン | icon_ |icon_profile.png|
| 矢印 | arrow_ |arrow_brown-left|
| ライン | line_ |line_brown.png|
| 写真 | pic_ |pic_goods.png|
| その他画像 |img_ |img_cut.png|
| テキスト | txt_, text_ |txt_nickname.png, text_nickname.png|
| メインビジュアル | visual-img_ |visual-img_index.png|

## 画像につけるサフィックス（接尾辞）
| 種類 | サフィックス（接尾辞）|
|:-----|:-----|:-----|
| マウスオーバー | _on |
| 現在位置 | _cr |
| 無効 | _disable |
| 注釈 | _caption |


## プレフィックス（接頭辞）とサフィックス（接尾辞）が併用される場合
| 種類 | 画像プレフィックス(接頭辞)とサフィックス（接尾辞）| 例 |
|:-----|:-----|:-----|
| グローバルナビゲーション（マウスオーバー) | gnav_x_on |gnav_profile_on.png|
| グローバルナビゲーション（現在位置) | gnav_x_cr |gnav_profile_cr.png|
| ボタン（マウスオーバー） | btn_x_on |btn_submit_on.png|
| ボタン（無効） | btn_x_disable |btn_submit_disable.png|
| 写真の注釈 | pic_x_caption |pic_goods_caption.png|
| その他画像の注釈 |img_x_caption |img_cut_caption.png|


## 悩みどころ（良い方法があったら教えてほしい）
単語をつなげる場合、どういう順番にするか思案中。
名前で並べた時に、同じ色の矢印はひとかたまりで出てきてほしいので色を先に持ってきた。

```
arrow_brown-down.png
arrow_brown-left.png
arrow_brown-right.png
arrow_brown-up.png

arrow_red-down.png
arrow_red-left.png
arrow_red-right.png
arrow_red-up.png
```
…という感じで一覧表示したい。

また、 **プレフィックスとサフィックスを併用**する画像が出てきた。
微妙な単語の並びもあるけど、管理のしやすさを考えると今はこれがベストなのかなと思う。

その他、命名に連番使った方が悩まなくて済むという話も多いけど、コンテンツの順番が変わってしまうと```img_01.png```の前に```img_02.png```が来ちゃったりするのが個人的には気持ち悪いのでやめたい。

View側から見ると名前や連番云々はまったく関係ないのだけど、運用面側から見ると、少しでもきれいに並んでくれた方がうれしいなあと思ったりします。
Windowsやリモート環境でMiddlemanのLiveReloadをする

最近Middlemanを使おうと四苦八苦しています。日本語化されたマニュアルが神。

[[ Middleman で超速プロトタイピング ] #02 Middleman の便利機能 7 選 ｜ Developers.IO](http://dev.classmethod.jp/tool/middleman-supersonic-02/)

このページに、LiveReloadはMacのみ？って書いてあったので絶望的な気分だったのだけれど、ちゃんと設定すれば動きました。

[公式サイトの説明](https://middlemanapp.com/jp/basics/development_cycle/)には、「config.rbにこの一行を追記しろ」と書いてあるのだけれど、これが駄目っぽい。

```rb:config.rb
activate :livereload
```

livereloadをonにすると、必要なJavaScript類が読み込まれるのですが、よくよく見ると「host」なるパラメータがついています。これが0.0.0.0になっていて、LiveReloadの接続先がよくわからなくなっていたみたいです。

```html
<script type="text/javascript" src="/__rack/livereload.js?host=0.0.0.0&amp;port=35729"></script>
```

リモートのLinux環境でMiddlemanを動かしている場合もLiveReloadが動かなかったりするのですが、同じ理由っぽいです。なので接続先をちゃんと教えてあげれば動作するはず。

```rb:config.rb
activate :livereload, :host => `hostname`.chomp
```

これでいい感じに動きました。
ちなみにブラウザにエクステンションをインストールする必要はないみたいです。



## 参考

- [Using it on a remote server · Issue #26 · middleman/middleman-livereload](https://github.com/middleman/middleman-livereload/issues/26)
意外な（そうでもない？）NullPointerExceptionの発生場所

Javaでこういうコードを書きました（簡略化してます）  

```java

public Boolean getWrapper()
{
    return null;
}

public boolean getPrimitive()
{
    return getWrapper();
}

public static void main()
{
    System.out.println(getPrimitive());
}
```

これを実行すると、`java.lang.NullPointerException`で落ちます。ですがスタックトレースを辿ると例外が吐かれているのは

```java
    return getWrapper();
```

の行でした。ということは、`Boolean`型から`boolean`型への暗黙的な変換時に例外は発生しているんですが、それなら`java.lang.ClassCastException`じゃないのかなーとか思ったりして原因を調べてみました  

Java5～は自動ボクシングという機能でプリミティブ型とラッパークラスが暗黙的に変換されるようになっています

```java
Boolean b1 = true; //代入できる
boolean b2 = b1; //代入できる
```

が、これはコーディング時だけのことで、コンパイルされると

```java
Boolean b1 = Boolean.valueOf(true);
boolean b2 = b1.booleanValue();
```

と変換されます。つまり型変換時にインスタンスメソッドを呼んでます。  
なので最初のコードはコンパイラによって


```java

public Boolean getWrapper()
{
    return null;
}

public boolean getPrimitive()
{
    return getWrapper().booleanValue();
}

public static void main()
{
    System.out.println(getPrimitive());
}
```

となるので、nullに`booleanValue()`を呼び出してしまって、発生する例外は`java.lang.NullPointerException`だったというわけです。  

IDEでデバッグすると、何もインスタンスメンバを呼び出してないのにぬるぽされてしまって戸惑いましたが、実行時のコードを意識すると納得できた、という話でした。
フォーム内に入力例を表示させるには、どの方法がいいの？


# やりたかったこと

## 入力例を表示させたい
入力フォームの中に、デフォルトで入力例が表示されているフォームって、よく見かけますよね。

Qiita の検索欄にも「投稿/ユーザー検索」という文字列がデフォルトで入っています。

ユーザーはこれを見れば、ここにキーワードなりユーザー名を入れて検索すればいいのだな、とすぐ分かりますよね。

ということで、入力例をテキストボックス内に表示させるのは、ユーザビリティーのために必須な施策だと思います。

## placeholder は使えないの？
HTML5 に詳しい方は、input 要素の **placeholder** 属性を指定すればいいじゃん、と思うかもしれない。

こんな感じ。

```
<input type="search" name="go" placeholder="キーワードを入力してください">
```

ただし、placeholder には欠点があります。
それは、 **IE9以下** では対応していないという点です。
IE環境が必須の場合、別の方法をとらなければいけません。


# jQuery プラグインを使う

IE環境でもボックス内に入力例を表示させる方法を、2つ紹介します。
どちらもjQuery プラグインを使います。

## clearfield を使う

[clearfield](http://labs.thesedays.com/projects/jquery/clearfield/) を使います。

使用方法は簡単で、上のリンク先の「Download」からcleaField.js か clearField.packed.js のいずれかをダウンロードし、

1 jsファイルを読み込む

```
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.clearfield.js"></script>
```
2 script を記述

```
<script>
$(document).ready(function() {
	$('.clearField').clearField();
});
</script>
```
3 class 名を指定

```
<input type="text" class="clearField" value="検索ワードを入れてください">
```

これでOK。

参考：[jQuery 簡単軽量！入力例を表示するプラグイン【clearfield】を使用してフォームを改良する方法](http://zxcvbnmnbvcxz.com/form-improvement-2-1/)


## ah-placeholder.js を使う

clearfield は簡単でよいのですが、試してみたら一つ難点がありました。

clearfield の場合、value にサンプルのテキストを入力するので、入力フォームで行ったり来たりするとサンプルのテキストが入力データとして残ってしまいます。

なので、[ah-placeholder](https://github.com/ahomu/jquery.ah-placeholder/blob/master/jquery.ah-placeholder.js?locale=ja) も試してみました。

ah-placeholder も設定は簡単です。

1 jsファイルを読み込む

```
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.ah-placeholder.js"></script>
```

2 script を記述

```
<script>
$(function() {
$('[placeholder]').ahPlaceholder({
	placeholderColor : 'silver',
	placeholderAttr : 'placeholder',
	likeApple : false
	});
});
</script>
```

3 placeholder を指定

```
<input type="text" class="" value="" placeholder="検索ワードを入れてください">
```

参考：[HTML5のplaceholder属性をIEでも使えるようにするjQueryプラグイン「ah-placeholder.js」](http://m.designbits.jp/12082415/)



# どっちがいいか
今回は、ah-placeholder を採用しました。
placeholder で使えるのがいいですね。

そのうちIE9以下の使用者は絶滅危惧種となるでしょうし（まだ何年も先だが）。


**注：IE9以下だとvalueが書き換えられるのかどうかは、まだ確認していないです。**
Sane npm package directory settings

(Might only be applicable to package installed Node.js, Homebrew install users don't report any issues)

Related to this issue: https://github.com/npm/npm/issues/3139

# Quick Fix

add `prefix = ~/.npm` to your `.npmrc`

add `export PATH="$PATH:~/.npm/bin"` to your `.bash_profile`

make sure `.npm` exists in your user directory

enjoy not having issues with this crap: https://github.com/npm/npm/issues/2519

# Rationale

Puts my packages where I can expect them to be locally and fixes issues with `ember-cli` not working properly because of EACCESS issues with files being left with admin ownership.
PlayFramework 2 (Java) Ebeanでハマったところ

Formに書かれた内容をDBに登録するときに
[PersistenceException: java.sql.SQLException: Connection is closed!]
とエラーが出た

```testDB.java
package models;
import javax.persistence.Entity;
import javax.persistence.Id;

import play.db.ebean.Model;

@Entity
public class testDB extends Model{
	@Id
	public String id;
}
```

```Application.java
public static Result create(){
        TestDB t= Form.form(testDB.class).bindFromRequest().get();
    	t.save();
}
```

結果的に、Formに書かれてるnameの名前が「id」でなかったためtestDBに書かれているid
に値が入らなかったことが原因
プライマリーキーに設定しているフィールドの値がnullだった時に上記のエラーが出た
プライマリーキーの型をintやlongの基本データ型なら問題ないが、String
型でキーを管理したいときは注意したい
TurnipのStep内から他のTable Stepを呼び出す

# やりたいこと

**Turnip の Step 内から他の Table Step を呼び出したい**

Turnip の Step 内では send や step というメソッドで他の Step を呼び出すことが出来る
しかし、Table Step を呼び出したいときは、
Table 部分の引数をどのようにすれば与えれば良いのか困ったのでメモ


## Table Step

Table Step とは以下のように引数を Table 形式で受け取る Step


```cucumber
  Given there are the following monsters:
    | Name    | Hitpoints |
    | Blaaarg | 23        |
    | Moorg   | 12        |
```

* Table Steps: https://github.com/jnicklas/turnip#table-steps

## Step 内で他 Step の呼び出し


``` ruby
step "the value is :num" do |num|
  @value = num
end

step "the value is twice as much as :num" do |num|
  send "the value is :num", num * 2
end

step "the value is the magic number" do
  step "the value is 3"
end
```

* Calling steps from other steps：https://github.com/jnicklas/turnip#calling-steps-from-other-steps


# 結論

Turnip::Table.new で Step の引数に与えるパラメータを生成する

## 例

```rb
step "there are the following monsters:" do |monsters|
  # Table 形式のパラメータ monsters に対する処理
end

step "call another table step" do
  # Table 形式のパラメータ生成
  monsters = Turnip::Table.new([
                                 ["Name", "Hitpoints"],
                                 ["Blaaarg", "23"],
                                 ["Moorg", "12"],
                               ])
  # 上記の Table Step を呼び出す
  step "there are the following monsters:", monsters
end
```

* [Tunip::Table](https://github.com/jnicklas/turnip/blob/master/lib/turnip/table.rb)
Rails4 + Simple formでradio buttonインターフェースを用い且つselectedする

みんな大好き[simple_form](https://github.com/plataformatec/simple_form)ですが、公式の説明が ~~手抜き~~ソース嫁がスタンスなようでして、舐めてかかると盛大にハマります。
そんな全国のsimple_formerの為に表題の件掲載しておきます。

```erb
<%= f.input :sex, collection: [["male", 1],["female", 2]], checked: 1, as: :radio_buttons, item_wrapper_class: "inline" %>
```

ついでに、simple_formあるあるハマりポイントの「横並びラジオボタンにしたい」はitem_wrapper_class: "inline"です。



```erb
<%= f.input :category_id, collection: Category.all.map { |c| [c.name, c.id] }, checked: item.category_ids.split(" "), as: :check_boxes %>
```
item.category_idsはリテラルか配列で受ける感じです