OmniAICreator/Qiita-1.07M huggingface dataset:
【Python】pandasで日本語のcsvを文字化けせずに読み込む（さらに日本語で書かれた列を抽出する）

Python2.7.6をpycharmでデータ分析をしようと思い立ち絶賛勉強中です。

今回は、解析対象の日本語で書かれたcsvファイルを読み込んだところ
見事に文字化けしたファイルが出力されました。
いろいろ調べた結果、以下の方法で解決しました。

## なぜcsvファイルが文字化けしたのか
文字化けしたファイルは前に作成した[エントリー](http://qiita.com/redAlgae/items/1d9788b6f0b6613bf711)と同様の方法で
行いました。

```文字化けしたcsvファイル
import pandas as pd
import os

# データが格納されている作業ディレクトリまでパス指定
os.chdir("/ディレクトリまでのファイルパス")
# csvの読み取り
df= pd.read_csv("japanese.csv")
print df
```
しかし、csvの読み取りの際に、文字コードを指定していなかったため、
無事文字化けしたファイルが読み取られました。

## 文字化けしない日本語csvファイルの読み取り方法
そこで、次のような方法でcsvファイルをSHIFT-JISで読み取ったところ、
見事、日本語でcsvファイルが表示されました！

```ちゃんと読めたcsvファイル
import pandas as pd
import os

# データが格納されている作業ディレクトリまでパス指定
os.chdir("/ディレクトリまでのファイルパス")
# 文字コードを指定したcsvの読み取り
df= pd.read_csv("japanese.csv",encoding="SHIFT-JIS")
print df
```

さて、このように日本語csvファイルが読み込めたので、いよいよデータを加工するぞ！
となったのですが、文字コードをいろいろ弄っているうちに、日本語で指定した列を
取得することができず、またもや苦戦しました...


## 日本語で書かれた列のみを抽出する

欲しい列のみを取ってくるには、明示的にcolumnを指定する
loc[:,"欲しい列名"]
を記載すれば、”欲しい列名”以下の列をすべて取得してくれるそうです。
[こちら](http://sinhrks.hatenablog.com/entry/2014/11/12/233216)に詳しい解説が載っています。
結果、次のように記載するば、
"欲しい列の名前"が書かれている列を
ごそっと取得することができました！

```ちゃんと読めたcsvファイル
import pandas as pd
import os

# データが格納されている作業ディレクトリまでパス指定
os.chdir("/ディレクトリまでのファイルパス")
# 文字コードを指定したcsvの読み取り
df= pd.read_csv("japanese.csv,encoding="SHIFT-JIS"")
column = df.loc[:,[u'欲しい列の名前']]
print column 
```

今回も基本的なところで躓いてしまっているのですが、
もし、同じ悩みを抱えている人がいたら参考になればと....
java-cv 0.7から java-cv 1.0へのアップデート

# 変更箇所

* IplImage.create
 * => cvCreateImage
 
 
 
* CvScalar.YELLOW
 * => cvScalar(255.0, 255.0, 0.0, 0.0)



* CvMemStorage.create
 * => cvCreateMemStorage



* cvFindContours
 * 引数変わった、最後にcv(0,0)を渡す
CircleCIでGo1.5を使用する

こんなかんじで、いまんとこ動いてる。

```yaml:circle.yml
machine:
  environment:
    GOROOT: ${HOME}/go
    PATH: ${GOROOT}/bin:${PATH}
  post:
    - wget https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz
    - tar zxvf go1.5.linux-amd64.tar.gz
```
Xcodeでエディタ背景黒のダークテーマにした時にカーソルが見にくくなる問題を解決

気分転換や目に優しそうという理由で、たまにXcodeをダーク系テーマにしますが、このようにカーソルがとても見にくくなり見失う(追うのに目が疲れる)問題があって、すぐ断念して背景白系のテーマに戻してしまっていました。

![68747470733a2f2f7261772e6769746875622e636f6d2f65676f6c642f6265747465722d78636f64652d696265616d2d637572736f722f6d61737465722f637572736f722d6578616d706c652d6265666f72652e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/19398/783f84b7-1dc8-abf5-a574-5c83878f2196.png)



それが、[egold/better-xcode-ibeam-cursor](https://github.com/egold/better-xcode-ibeam-cursor)を使うことで、バッチリ解決しましたʕ ·ᴥ·ʔ


![68747470733a2f2f7261772e6769746875622e636f6d2f65676f6c642f6265747465722d78636f64652d696265616d2d637572736f722f6d61737465722f637572736f722d6578616d706c652d61667465722e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/19398/771d7bb5-98f2-7520-447a-805295b305a2.png)

リンク先に書いてある通り、このコマンドだけでとても快適になりました(　´･‿･｀)

```sh
curl -L https://raw.githubusercontent.com/egold/better-xcode-ibeam-cursor/master/install.sh | bash 
```

カーソル用の画像をバックアップしつつ、見やすいものにすり替えているだけなので、元に戻したくなっても問題無いと思います。

ただ、背景白テーマでも、カーソル用の画像がすり替えた状態で見た目全く問題無いので、基本的には気にせずそのままで大丈夫だと思っています。

Visual Studioだとこういうハックしなくても、この見やすいカーソルなのでXcodeも見習って欲しいところです(　´･‿･｀)

ちなみにダークテーマは、以前は [mduvall/flatland-xcode](https://github.com/mduvall/flatland-xcode) 使っていましたが、今は [Br1an6/Amoyly-Xcode-Themes](https://github.com/Br1an6/Amoyly-Xcode-Themes) を使っています。
Star少なめですが、僕はとても見やすく感じて気に入りました。

> A sexy, elegant, and comfortable-reading theme

と書いてある通りだと思いました。

というわけで快適にダークテーマが使えるようになって嬉しいです(　´･‿･｀)
MicrosoftEdgeで位置情報取得時にエラーコールバックが実行されないバグとその回避方法

# Edgeで位置情報取得時にエラーコールバックが実行されないバグ

MicrosoftEdgeで位置情報の取得できないデスクトップPCなどで位置情報を取得するときにエラーコールバックが実行されません。

検証ブラウザ：Microsoft Edge(64bit) 20.10240.16384.0

```js
window.navigator.geolocation.getCurrentPosition(callback,callback);
// コールバックがいつまで待っても実行されない
```

また、タイムアウト設定も効きません。また、watchPositionを使用した場合も同様です。

```js
window.navigator.geolocation.watchPosition(callback,callback, {
  timeout: 1000
});
// コールバックがいつまで待っても実行されない
```

Microsoftのページで紹介されているコードでも再現します
[現在位置の取得 (Windows)](https://msdn.microsoft.com/ja-jp/library/gg589519(v=vs.85).aspx)

# 回避方法
``getCurrentPosition()``または``watchPosition()``が2回目以降の呼び出しであれば、タイムアウト設定が有効になります。

タイムアウト以外でエラーコールバックが実行される方法は見つけられませんでしたが、ひとまずタイムアウトが有効になるようにして、位置情報取得時には必ずタイムアウト時間を設定してあげるのがよさそうです。

1番最初に無駄に``getCurrentPosition()``を呼んで、以降はタイムアウトを必ず設定して呼ぶようにすれば大丈夫です。

```js
// Edgeのgeolocationバグ回避サンプル
// 1回無駄に呼んでおく
navigator.geolocation.getCurrentPosition($.noop, $.noop);

$('btn').click(function(){
  navigator.geolocation.getCurrentPosition(successCallback, errorCallback, {
    timeout: 10000
  });
});
```

# 位置情報取得成功時について
手元に位置情報取得できるWindows10が無いので未検証です。またEdgeの開発者ツールでGPSのシミュレートを有効にしても位置情報取得できませんでした。
効率的な LaTeX ファイル分割術

# 背景

長大な LaTeX 文書を作成する際，1つの tex ファイルでこれを行うと様々な不都合が生じます．

* 1回のタイプセットに時間がかかる
* エディタの動作もぎこちなくなる
* 多人数での編集に向かない

したがって，ある程度以上大きな文書を作成するときは tex ファイルを分割するのが一般的です．

# 一般的な手法

おそらく，最もよく行われている tex ファイルの分割は，大まかに次のような手順で実施されています（参考：[LaTeX ドリル - LaTeX ファイルの分割](http://www.ic.daito.ac.jp/~mizutani/tex/drill/drillbook8.html)）．

1. 専用ディレクトリを用意する．
2. セクション毎の内容を収録した tex ファイル（**コンテンツファイル**）を作成する．
3. すべてのコンテンツファイルを \include するための**マスターファイル**を用意する．
4. マスターファイルをタイプセットする．

この手順4において，不要な箇所を適宜コメントアウトすることにより，文書全体をいちいちタイプセットする煩わしさから解放されることができます．

# 問題点

前節で紹介した「一般的な手法」でも，最初に提示した不都合を解消することができています．しかしながら，個々のコンテンツファイルは，それ単体ではタイプセットすることができません．

普通のテキストエディタで tex ソースを作成し，コマンドラインでタイプセットを行う人にとっては，これでもさほど問題にならないかもしれませんが，現在は TeX 用の統合環境を用いて LaTeX 文書作成を行っている人も少なくないことでしょう．こうした人にとっては，現在編集中のファイルをタイプセットするのに，いちいちマスターファイルを表示してタイプセットを行うのはメンドウ以外のなにものでもありません．
そこで，次のようなことが実現できれば理想的です．

* 文書全体をタイプセットするときにはマスターファイルを用いる．
* 各コンテンツファイルもそれぞれ単体でタイプセットすることができる．

# 解決策1（2015-09-06 追記）

この目的のために docmute パッケージなるものが存在します．特に理由がない限りは，この方法を利用するのが手っ取り早く，確実でしょう．詳しい説明は[こちらの記事](http://d.hatena.ne.jp/zrbabbler/20150906/1441509908)を参照してください．

# 解決策2

新たなパッケージを導入したくない場合などは，次の方法でも目的は達成できます．

その方法の具体的な手順を，例を用いて説明していきます．以下では

* マスターファイル：master.tex
* コンテンツファイル：content-X.tex（ここで X は任意の自然数）

と名付けることにします．

まず，マスターファイルにちょっとした仕掛けを行ないます．

```tex:master.tex
\documentclass{jsarticle}

% ----- 仕掛け 開始 -----
\newcommand{\ifdraft}{false}
% ----- 仕掛け 終了 -----

\begin{document}

\include{content-1}

\include{content-2}

\include{content-3}

\end{document}
```

ご覧の通り，上の master.tex では，マクロ \ifdraft を定義しています．このマクロの名前と内容は，基本的になんでも結構です[^1]．master.tex で既にマクロを定義している場合には，それを流用することもできます．

[^1]: 厳密には \relax に展開されるものは不可です．

次に，各コンテンツファイルの冒頭と末尾に以下のようなコードを仕込みます．

```tex:content-X.tex
\expandafter\ifx\csname ifdraft\endcsname\relax
 \documentclass{jsarticle}
 \begin{document}
\fi

% ここに文書の内容を書く

\expandafter\ifx\csname ifdraft\endcsname\relax
  \end{document}
\fi
```

原理は TeX 言語の話になってしまうので割愛しますが，1行目の`\expandafter\ifx\csname ifdraft\endcsname\relax`は「 \ifdraft という制御綴が定義されているか否か」で条件分岐を行い，未定義の場合に続く2行を"実行"するというものです[^2]．したがって，冒頭のコード全体では次のようなことが行われることになります．

[^2]: 使用している TeX エンジンが e-TeX 拡張の適用されたものである場合には，プリミティブ \ifdefined を用いても同様のことが実現できます．

* \ifdraft が定義済みの場合  
master.tex で \include されている場合なので，\documentclass の宣言等は行わない．
* \ifdraft が未定義の場合  
content-X.tex が単体でタイプセットされている場合なので，\documentclass の宣言等を行う．

末尾のコードについてもほぼ同様です．

これで，content-X.tex は master.tex から \include されることも，単体でタイプセットすることも可能なファイルとなりました．

# おわりに

今回紹介した Tips は，本当に〈ちょっとしたこと〉でしたが，長大な文書を作成する際には，その〈ちょっとしたこと〉が積み重なって結果的に多くの時間や労力を無駄にすることにつながります．〈ちょっとしたこと〉に対しては〈ちょっとした工夫〉で対処して，快適な LaTeX ライフを送りましょう．
ATmega328P に 8MHz 版のブートローダーを書き込む


[ブートローダーを焼ける](http://qiita.com/hotchpotch/items/b0822cdf3f961ce087b8) ようになったので、8MHz 版も焼いてみる。昔の Arudino IDE には付属してた(?) みたいだけど、1.6.5 には 8Mhz 版のボード設定が無いので作る。

- https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

に書いてあるとおり、 breadboard-1-6-x.zip を落とし、Arduino のスケッチフォルダ(Mac なら標準だと ~/Documents/Arduino/) に mkdir hardware して、breadboard-1.6.x をそこに解凍し、Arduino を再起動するとボードの欄に ```ATmega328 on a breadboard (8 MHz internal clock)``` が増えている。のでそれを選択して「ブートローダを書き込む」で焼ける。

![ard.png](https://qiita-image-store.s3.amazonaws.com/0/5330/81c519a5-7869-71d6-6283-72e4d4e411c2.png "ard.png")

最初ありがたみがよくわからなかったんだけど、ATmega328P を単体のマイコンで使う場合、クロックが 8MHz だと外部水晶を必要としない & 3.3V の機器しか扱わない(i2cデバイスは3.3Vのことが多くて、5Vだと結局3.3Vも用意することになる)ならこれはこれで便利。
ルーティングで使用するパラメータ名を変更

ルーティングで使われるパラメータを変更したかった要望があったのでメモ


```rb
resource :idea
```

```irb

     idea POST   /idea(.:format)                ideas#create
 new_idea GET    /idea/new(.:format)            ideas#new
edit_idea GET    /idea/:id/edit(.:format)           ideas#edit
          GET    /idea/:id(.:format)                ideas#show
          PATCH  /idea/:id(.:format)                ideas#update
          PUT    /idea/:id(.:format)                ideas#update
          DELETE /idea/:id(.:format)                ideas#destroy
```


:param オプションを使用してresourceを唱えるとパラメータ名を変更できる

```rb
resource :idea, :param => 'not_id'
```

```irb
      idea POST   /idea(.:format)               ideas#create
  new_idea GET    /idea/new(.:format)           ideas#new
 edit_idea GET    /idea/:not_id/edit(.:format)          ideas#edit
           GET    /idea/:not_id(.:format)               ideas#show 
           PATCH  /idea/:not_id(.:format)               ideas#update
           PUT    /idea/:not_id(.:format)               ideas#update
           DELETE /idea/:not_id(.:format)               ideas#destroy
```









参考
[Change the name of the :id parameter in Routing resources for Rails](http://stackoverflow.com/questions/6592038/change-the-name-of-the-id-parameter-in-routing-resources-for-rails)
unity / dotnet > 文字列から"-"を取り除く > Linq使用版

http://stackoverflow.com/questions/7411438/remove-characters-from-c-sharp-string


```csharp
using System.Linq; // for Where

string removeHyphen(string src) {
	var dst = new string (src.Where (c => !"-".Contains (c)).ToArray ());
	return dst;
}
```

電話番号から"-"を抜く時などに使う。
Arduino UNO 2を二つ使って、 ATmega328P にブートローダを焼く


Arduino UNO に乗っている AVR マイコン ATmega328P はブートローダを焼かないと AVR ISP として使えない(マイコンだけ差し替えても動かせない)ので、ブートローダを焼く。

- https://www.arduino.cc/en/Tutorial/ArduinoISP

の通りで、Arudino UNO のボードが二つあると簡単に焼けるんだけど、Arudino UNO の場合注意点がある(オフィシャルにも思いっきり太字で書いてある、しかも二カ所…)ので注意。

1. ArduinoISP のスケッチを焼く。Arduino IDE のメニューのスケッチの例 > ArudinoISP を選択すればOK。
2. スケッチを書き込む。
3. 以下の配線にする。配線図には載ってないけど、Arudino UNO の場合、Reset と GND の間に 10uF のコンデンサを挟む！！！これが無いとうまく書き込めない。
![](https://www.arduino.cc/en/uploads/Tutorial/arduinoisp.png)
![DSC_0093.JPG](https://qiita-image-store.s3.amazonaws.com/0/5330/a3032e9d-7cbc-6e13-eca9-8e37bc444fba.jpeg "DSC_0093.JPG")
(手前が 10uF のコンデンサ)

4. ツール＞書込装置 を Arudino as ISP へ
5. ツール＞ブートローダを書き込む

で書き込める。UNO の場合、必ず 10uF コンデンサを挟むことを忘れずに。なお Arudino IDE 1.6.5、UNO は Rev3 (と Rev3 の互換機) で試した。

ちなみに最初 10uF コンデンサが手元に無かったので、10Kの抵抗で試したら何故かうまくいってしまった…(推奨じゃないです)。 [スレで話されてるけどよくわからない…](http://forum.arduino.cc/index.php?topic=104435.0) ので尋ねてみたら

> Arduino は外部プルアップで 10kΩついてて、10kΩで reset と gnd  を繋ぐと、平常時 2.5V しか reset にかからなくなる
> そのため 100nF にかかる電圧が逆になるため、DTR ローにしても100nFから電荷が供給されるので少しだけ電圧がさがらずリセットがかからない
> ただ、リセットされやすくなる、という弊害がある

とのことらしい。解るようになりたい(まだ解らない)
Oracle Model句を利用したデータ移行SQL



#データ移行背景および使用したSQLについて
**前臨床試験における”試験資料の保管情報”を格納するAccessDbより、移行先システムのOracleDbへ”試験資料の保管情報”データを移行するSQL**
*SQLを実行するOracleスキーマへはDBA権限が付与されており、AccessDbより出力したExcelファイルを変換したCSV（カンマ区切り）を外部表として参照している（SQL文内の”FILETRANSDATA_QAU_EX”が外部表テーブルに相当する）。
*上記において、Excelを一度出力する理由は、データ分析および区切り文字の選定、セル内の不要な改行コードの除去等を行い、データ移行用として弊害のないCSVを作成するためである。実際には作成したCSVについて、"¥nのみの改行”の除去もしている。

*移行先システムへのデータ移行要件として、下記の3点が挙げられた。
1.”試験資料の保管情報”の項目値”冊数”の分だけレコードを作成して移行先にデータをInsertする。”冊数”が５冊なら、当該の１レコードを５レコードとして移行しなければならない。

2.移行先の主キー
STUDYNO(試験番号)、SEQ(試験番号ごとに一意で付番される連番)、FILENOおよびTOTALNO。ある試験番号について試験資料が５冊の資料と４冊の資料の保管情報が両方ある場合、それぞれTOTALNO=5、４となり、FILENO=1〜５、1〜４の範囲で付番されたレコードが存在する。つまり、 TOTALNO=5、FILENO=2のレコードは５レコードのうちの２レコード目を指す。

3.移行元データの主キー
移行先の主キーのSTUDYNOに該当するのは列"フィールド3"と列"試験番号"を文字連結したもの。しかしながら、当該列の列値に、キー値以外の文字情報が末尾に付加されていたため、変換する必要がある。

*データ移行要件への対応は下記のように行った。これは、1つのSQLで実装した。
1.Oracle SQLのModel句(10g以降で使用可能)により、1レコードを”冊数”分だけ疑似複製する。これにより、移行先データのみ”冊数”分レコードが生成される。
参考URL: [日付範囲を展開したレコードを作成したい](http://oshiete.goo.ne.jp/qa/7646612.html )

2.移行元の主キー列から不要な情報を取り除くため、”主キー値の文字規則から外れるもの”を、データ上に使用実績のない文字”$”に一度変換し、これを指標にして、不要情報を取り除いたキー値を取得する。変換には正規表現を利用した列値変換関数（REGEXP_REPLACE）を使用する。


#SQL本文
```sql

insert into FILETRANSDATA (STUDYNO,SEQ,FILENO,UPDATEDATE,UPDATESYAIN_NO,TOTALNO,ADDFLG,QAUFILEFLG,ELECFLG)

select * from
 (
  SELECT  studyno , maxseq + FILENO  as newseq , FILENO ,  sysdate, '888888',NUMTO,0 as ADDFLG,1 as QAUFILEFLG, 0 as ELECFLG
   FROM  
   (  
     select 
      studyno_ex as studyno,
      nvl((select  distinct  to_number(max(seq) over(partition by STUDYNO)) FROM   FILETRANSDATA  where STUDYNO = studyno_ex),0) as maxseq,
      1 as NUMFROM,
      numto_ex as NUMTO	
      FROM  
      (
       select 
          trim(coalesce(substr(studyno_ex,1,instr(studyno_ex,'$')-1),studyno_ex)) as studyno_ex,
          sum(filenum) as numto_ex 
          from 
        (
          select 
            REGEXP_REPLACE(SUBSTRB(TO_SINGLE_BYTE("フィールド3" || "試験番号"),1,20),'[^0-9a-zA-Z ¥ -]','$') as studyno_ex,
            to_number(冊数) as filenum
            from 
            FILETRANSDATA_QAU_EX where trunc(to_date(trim("移管日"))) <= trunc(to_date('2015/04/30'))

         )
           group by 
              trim(coalesce(substr(studyno_ex,1,instr(studyno_ex,'$')-1),studyno_ex))
      )  
    )
      MODEL  PARTITION BY (studyno,maxseq,NUMTO	)  
      DIMENSION BY (0 AS IND)  
      MEASURES(NUMFROM as FILENO,NUMTO - NUMFROM as RANGE)  
      RULES(FILENO[for IND from 0 to RANGE[0] increment 1] = FILENO[0] + cv(IND)) 
  ) 
  where
   NUMTO >=1  ;
   
   
commit;
```
PSR-6 Caching Interface

[PSR一覧](http://qiita.com/rana_kualu/items/f41d8f657df7709bda0f)
[PSR-5](8b2d9d42b81e9f6f0fd1) / [PSR-6](b37c226363f3015951b6) / [PSR-11](a45829de16380af5acd0) / [PSR-12](28f169bb3eadc6f9e3f3) / [PSR-14](aa60378265d802051397) / [PSR-16](f25ab973b975a274b151)


2015/08/20現在、AcceptされたPSRは0,1,2,3,4,7の5種類です。
このうちPSR-4はPSR-0の置き換えなので実質4種類となります。
まあここらへんは解説記事たくさんあるのでいいでしょう。

で、現在[PSR-6 Caching Interface](https://github.com/Crell/fig-standards/tree/Cache/proposed)というのがレビュー中です。

PSR-6はキャッシュを扱うInterfaceです。
キャッシュは現状フレームワークによって実装が全く違うので、各フレームワークに特化した書き方をしなければならず、再利用性が全くありません。

```php
	// Zend Framweork2
	$cache  = Zend\Cache\StorageFactory::adapterFactory('apc', ['ttl' => 3600]);
	$cache->setItem('key', 'value');
	$item = $cache->getItem('key', $success);
	$cache->removeItem('key');
	
	// CakePHP 2.x
	Cache::config('short', [ 'engine' => 'Apc', 'duration' => '+1 hours' ]);
	Cache::write('key', 'value');
	$item = Cache::read('key');
	Cache::delete('key');
	
	// CodeIgniter
	$this->load->driver('cache', ['adapter' => 'apc']);
	$this->cache->save('key', 'item', 3600);
	$item = $this->cache->get('key');
	$this->cache->delete('key');
	
	// Phalcon
	$cache = new \Phalcon\Cache\Backend\Apc(
		new \Phalcon\Cache\Frontend\Data([ 'lifetime' => 3600 ]),
		[ 'prefix' => 'prefix']
	);
	$cache->save('key', 'value');
	$item = $cache->get('key');
	$cache->delete('key');
```

これがPSR-6対応になれば、どんなフレームワークでもだいたい同じ書き方になります。

```php
	// PSR-6
	$cache = new CacheItemPool('apc');
	$cache->save( (new CacheItem('key'))->set('value', 3600) );
	$item = $cache->getItem('key');
	$cache->deleteItems(['key']);
```

PSR-6が決めているのはInterfaceだけなので、実装の中身は各FWによって違うため、CacheItemPoolやCacheItemは違う名前になる可能性があります。
しかしその中身は`Psr\Cache\CacheItemInterface`を実装しているので、同じメソッドが存在していることが保証されます。
これでキャッシュ部分の仕様については、ソースの使い回しができるようになりました。
実際問題そのまま使い回したり、もしくは何処かで言われてるように、PSRで複数のFWを混ぜて使うようになるなんてことがあるかというと、まず無いと思いますが。

そういや`Psr\Cache\CacheItemInterface::__construct()`が未定義だからキーの渡し方がこれで合ってる保証はないな。
なんで定義されてないんだろ？

あとまだDraftなPSRが5,8,9,10とありますが、5以外はちょっと意味がよくわかりません。
zipの中のゴミ（.DS_Storeなど）を消す

zipで固めた時に`.DS_Store`などの
ゴミ
不要なファイルが紛れ込むのでメモ。

```sh
zip --delete file.zip "*.DS_Store"
zip --delete file.zip "*__MACOSX*"
```

シェルスクリプトにしてしまえばさらに手間は省けるか。

# 参考

* [Zipの中の `.DS_Store` や `__MACOSX` を削除 - @yamagh](http://yamagh.hatenablog.jp/entry/2014/12/06/172245)
SSH公開鍵認証（パススルー）の設定

めちゃくちゃありきたりですが、確実に毎回忘れるのでメモ

````lang:bash　クライアント側

# 連携元のユーザーにスイッチ
su - from_user

# 移動
cd ~/.ssh

# 秘密鍵と公開鍵生成(id_rsa、id_rsa.pub)
ssh-keygen -t rsa

# 作成した公開鍵をサーバに送信
scp ~/.ssh/id_rsa.pub to_user@server:

````

````lang:bash　サーバ側

# 連携先のユーザーにスイッチ
su - to_user

# authorized_keysがない場合は作る
touch ~/.ssh/authorized_keys
chmod 600 authorized_keys

# 公開鍵を登録
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm  id_rsa.pub

# 補足 パーミッションは下記のとおりになっていること
chmod 755 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

````
phpstormでphpcs, phpmd設定


- すぐ忘れるのでメモ

## phpcs

![ss 2015-08-20 10.30.45.png](https://qiita-image-store.s3.amazonaws.com/0/2143/36c56357-e80b-0bdb-8770-973bdd7f9585.png "ss 2015-08-20 10.30.45.png")

![ss 2015-08-20 10.30.54.png](https://qiita-image-store.s3.amazonaws.com/0/2143/46a0c547-809c-7ac7-e893-ec514540a7a7.png "ss 2015-08-20 10.30.54.png")


![ss 2015-08-20 10.31.09.png](https://qiita-image-store.s3.amazonaws.com/0/2143/9c6003f5-710a-29c6-7283-86d79e40788c.png "ss 2015-08-20 10.31.09.png")



## phpmd


![ss 2015-08-20 10.31.36.png](https://qiita-image-store.s3.amazonaws.com/0/2143/454b3887-e831-7cb7-0e2b-8724ae6f7230.png "ss 2015-08-20 10.31.36.png")

![ss 2015-08-20 10.31.42.png](https://qiita-image-store.s3.amazonaws.com/0/2143/02f2475c-cb93-5034-0231-2e8d95e3163e.png "ss 2015-08-20 10.31.42.png")


![ss 2015-08-20 10.31.53.png](https://qiita-image-store.s3.amazonaws.com/0/2143/6969ac4f-9b44-2b74-fe1d-9ac5549e4e73.png "ss 2015-08-20 10.31.53.png")



以上でファイル編集時にスクロールバーにWarningがでます。
Servletのwebapp フォルダ下に配置したcssやjsファイルが読めないときの原因

web.xml のservlet-mappingが、以下のようになっていると、すべてのリクエストがサーブレットへ振り分けられてしまう。これが原因。

```web.xml
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
```

サーブレットのパスが決まっているのならば、以下のように修正する

```web.xml
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/myservlet</url-pattern>
</servlet-mapping>
```
WebpackでcssのsourceMapを使ったとき背景画像が表示されない

こうやってsourceMapを作る設定にしていると、
cssの背景が表示されない。

```
module: {
    loaders: [
      {
        test: /\.less$/,
        loader: 'style-loader!css-loader?sourceMap!less-loader'
      },
    ]
}
```


同じ症状の人
https://github.com/webpack/css-loader/issues/29

【解決案】
https://github.com/webpack/style-loader/issues/55

このページのように、publicPathをこんな感じで書いていると駄目

```
  output: {
    publicPath: '/static/'
  },
```

ホストを追加するといけた。

```
  output: {
    publicPath: 'http://localhost:3000/static/'
  },
```

よくわからん
シリアルケーブル無しでYamahaRTX1100をいじる方法


YamahaRTX1100の中古がめっっっちゃ安いので、モデムが付かない回線契約に変更した際に購入しました。

<h2>初期化</h2>

まずは背面のinitボタンを押しながら電源をONします。
これで工場出荷時の状態になります。

<h2>IPが無いことに気がつく</h2>

YamahaRTXは初期設定でだいたいDHCPと192.168.100.1/24が設定されているが、なんとRTX1100は古いので、設定されていませんでした。
（RTX1200以降だとあるみたい？）

シリアルケーブル無いしどうしようってことで調べたら2通り解決方法がありました。

1. rarpdコマンドでIPを設定する
2. IPv6を割り出してtelnetする

rarpdはbrewになかったので面倒臭いので2番を選びました。

<h2>MACアドレスの確認</h2>

RTX1100を裏っ返しましょう。
そこにはMACアドレスが2つ書いてあります。
ひとつめでOKです。

<h2>IPv6を計算する</h2>

まず、MACアドレスの真ん中に`FF:FE`を足します。
MACアドレスが`A0:B1:C2:D3:E4:F5`だった場合、`A0:B1:C2:FF:FE:D3:E4:F5`になります。

次に、先頭から7ビット目を反転させます。
2進数に変換すると、Aが`1010`、0が`0000`なので、`10100000`が`10100010`になります。

算出された`A2:B1:C2:FF:FE:D3:E4:F5`を、IPv6は16ビット毎なので区切りを変えます。
リンクローカルアドレスが先頭に付くため、`FE80:0000:0000:0000:A2B1:C2FF:FED3:E4F5`がIPv6のアドレスになります。

<h2>繋いでローカルIPを設定する</h2>

RTX1100に繋ぎます。
ゾーンIDを付けてtelnetをします。

```
telnet FE80::A2B1:C2FF:FED3:E4F5%en6
```
管理者になります。
初期化したのでパスワードはありません。

```
administrator
```

以上で設定するところまで接続できました。
docker-machineをVirtualBoxで使用するときにホストオンリーアダプターのIPアドレスを設定する


## 前提

devという名前の仮想環境を以下のように作ったとする。

``` bash
$ docker-machine create --driver virtualbox dev
```

`dev`のIPアドレスを確認する

```
$ docker-machine ip dev
xxx.xxx.xxx.xxx #ダミーです
```

↑ このIPアドレスが固定となり、VirtualBoxの設定でホストオンリーアダプターのIPアドレスをいくら変更しても変わってくれない。または、`docker-machine start dev`すると新しいホストオンリーアダプターが設定されてしまう。


## docker-machineのconfigを修正する

Macの場合、以下のディレクトリにconfigファイルがあります。
`/User/(ユーザ名)/.docker/machine/machines/dev/config.json`

このconfig.jsonファイルになっていて、以下の箇所を上書き修正します。

```bash
"HostOnlyCIDR":"xxx.xxx.xxx.xxx"
```


## 以上

どこにも書かれていないので、メモ。
アルゴリズムトレードへの誘い

# アルゴリズムトレードとは
> アルゴリズムトレードは、コンピューターシステムがマーケットの動向に応じて、自動的に売買注文のタイミングや数量を決めて注文を繰り返す取引のことをいう。


# モチベーション
* FXは世界で最も大規模なオンラインゲーム
* お金がぐぐぐっと増えると脳から大量の快楽物質が得られる（実際、金に特化して反応する脳の部位がある というのをNスペか何かで見た）
* ~~脱社畜~~ 投資
* 機会学習とか最近はやりのディープラーニングとかの応用として何か作りたい


# アルゴリズムトレードの魅力
鉱山で金を発掘しているような感覚があり、検証段階で良さげな結果が得られた時はウキウキが止まらなくなる。自分の涎に気づかないことすらある。


# アルゴリズムトレード全体の流れ
### 自分がよくやるやり方１：ルールを見つけてコーディングする
MT4を使えばすべてがひとつのツール上で完結するので、チャートを眺めていてこのルールでいけるんじゃね？と思い立ったらぱぱっと試せる。

1. チャートを眺める
2. 何か規則らしきものを見つける
3. その規則めいたものをささっとコーディングする（MT4のMQLという言語を用いる）
4. ツールで検証する(MT4のバックテストツールを用いる)
5. コードミス等によるリスクを減らすために数日間テスト口座で運用する（MT4のデモ口座でログインして自動取引モードをオンにする）
6. 良い結果なら実践投入(そのままMT4で実弾の入った口座にログインして自動取引モードにする)

少し具体的に。
1.チャートを眺める
2.何か規則らしきものを見つける
![見つける.PNG](https://qiita-image-store.s3.amazonaws.com/0/90119/c52e8c11-1c37-0b7f-c2a6-6832a09df059.png)
すごくベタだけど、例えばこのチャートから、おっなんか近い過去に何度か同じ値で反転したなら、その次もまた反転しそうだ、というパターンが見つかる。

3.その規則めいたものをささっとコーディングする（MT4のMQLという言語を用いる）
```lang:filename
void OnTick(void){
  if(なにか条件){
    ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,ALLOW_SLIPPAGE,NULL,Ask+TakeProfit*Point,"comment",Magic,0,Green);
  }
}
```
MQL4という言語の雰囲気はこんな感じで、相場の価格が変動するごとにOnTick()関数が走るので、その中にメインのロジックを書いていく。
売り買いの注文を入れるようなドメイン依存な操作はすべて関数が用意されている。ちなみに上のOrderSend()は注文を入れる関数。
便利な関数としては、移動平均やボリンジャーバンドはもちろん、他にもさまざまなシステムトレードで使いそうな数値を返してくれる関数が用意されている。


4.ツールで検証する(MT4のバックテストツールを用いる)
過去の相場の値動きに対して、作ったアルゴリズムでどのくらい儲かるのかをテストできる。MT4内にそのツールがある。
どこでどのくらい損失があったかもチャート上に表示され、チャートでのエラー解析もしやすい。
![てｓｔ.PNG](https://qiita-image-store.s3.amazonaws.com/0/90119/c90c2506-c7e1-474d-5d7d-9e0351ff4cd2.png)

5.コードミス等によるリスクを減らすために数日間テスト口座で運用する（MT4のデモ口座でログインして自動取引モードをオンにする）
6.良い結果なら実践投入(そのままMT4で実弾の入った口座にログインして自動取引モードにする)


### 自分がよくやるやり方２：Rでデータマイニング的に聖杯を見つける
↑のやり方と基本的な方針は同じだが手段が違う。
Rは統計的な処理を得意とする言語なので、そういう方面でやりたい場合にいい。
あと、MT4による検証は処理時間がRに比べて遅いので、すぐに結果の概要を見て、ものすごい勢いでトライ＆エラーを繰り返したい場合にはRの方が捗る。

1. チャートを眺める
2. 何か規則らしきものを見つける
3. その規則めいたものをRで実装する
4. Rで検証用のソースコードを書いて検証
![Image２.png](https://qiita-image-store.s3.amazonaws.com/0/90119/972bb429-5830-ac48-a2e6-acafea235071.png)
5. 結果を見て、規則を修正するなど改良 → 3に戻る 
6. 良い結果ならMT4にそのルールを移植して実践投入



### 自分がよくやるやり方３：機械学習を用いる場合
学習モデルをじっくり時間をかけて作り、MT4からそれを呼び出して用いる。

1. 学習モデルの作成
機械学習を用いる場合はMT4やMQLでは非力であるため、perlやpythonなどを用いる。これらの言語にはすでに強力な機械学習のライブラリがいろいろそろっている。

2. API化
最終的に満足のいく結果が得られたら、その学習モデルをAPI化する。
チャートの足の情報など、アルゴリズムに必要な情報を入力として与えると、｛売り｜買い｜何もしない｝などの基本動作を出力として返すようにする。

3. MT4からAPIの利用
MQLから何らかの方法でAPIを叩いて、そのAPIの出力結果に従いトレードするようにプログラミングする。
URLのRequestを投げることができるので、作ったAPIをURLとしてアクセスできる状態

4. テスト口座でテスト運用

5. 問題なければ実弾投入


### 他人が作成した優れたアルゴリズムを見つける
http://www.metatrader4.com/en/signals/overview
MT4では作成したアルゴリズムを簡単にパッケージ化して他人に配布／販売する仕組みが備わっている。
インターネットに公開されたアルゴリズムから有効なものを見つけるのは、かなり玉石混交の世界で地雷も多い。
しかし中には純粋無垢な大学生が統計の勉強がてら作ってみましたーみたいなノリで公開している無料のアルゴリズムが結構優れものだったりする。


# 儲け方
・自分の資金で運用する
・アルゴリズムの販売

資金が少ない場合はアルゴリズムを販売の方が効率がよいこともある
販売サイトの一例：http://fx-on.com/


# 結局ランダムウォークじゃないのか？ システムトレード自体にそもそも可能性あるのか？
みたいな話。

ファンダメンタル要因が統計的に優位なレベルでチャートに反映されていないという事実がもし仮にあったとしても、金融的なテクニカル要因だけでも十分に

左の図は、どの価格にどのくらい売り／買い注文がどのくらいあるかを示している。
節目となる価格に注文が多いことがわかる。
![Image.png](https://qiita-image-store.s3.amazonaws.com/0/90119/6f6a21f0-5fed-6bd0-559c-4a901c57ce06.png)
自分が何をしたいのかまとめてみよう。

まずはじめに、RubyとPythonに興味がある事。
第二に農業関連のソフトウェアを自分で開発できたらいいなって思うこと。
第三に農業関連のハードウェアを制御できるようになったら尚更いいなと思うこと。
第四に知り合いが「ゲームを共同制作し無いか」と言ってきているけど、この話はどの程度まで
大きくなるかわから無いから、技術が身についてからでいい。



ぱっと思いつく所だと
牛舎に関することをデータベースかする事
これは既存の物でできる事だけど

では牛の体調管理に関する事はどうだろうか
その場合、ハードウェアを制御する必要があるかもしれ無いし
人間用の物や犬用の物で応用できれば特に問題はない

だけどそれをやっぱりデータベース化したいという事はかわり無い
解析もしたいし

明治とか農協でもそう言うのを開発してたりするかもしれ無いけど
自分でやったほうがいいかもしれ無い

なぜ、Pythonなのかと言うと
もし完成したら地元の人たちにも使って欲しいから
プラットホームは選びたく無い。

もしかしたら〜専門書の数から言って
Javaのほうがいいかもしれ無いとか思うけど
その辺はよく分から無い
Nginxのリダイレクト設定のメモ

個人的なメモなので注意
この辺あれば大体カバーできるかと

```
# 302の場合
  location ^~ /hoge/foo.html {
    rewrite ^(.*)$ http://example.com/hoge/foo.html redirect;
  }

# 301の場合 
 location ^~ /foo/bar.html {
    rewrite ^(.*)$ http://example.com/foo/ permanent;
  }

# ホスト名等引き継ぎ
  location ^~ /hoge {
    proxy_set_header Host $host;
    proxy_set_header X-Proto $http_x_forwarded_proto;
    proxy_pass http://127.0.0.1$request_uri;
  }

# 特定のクエリの場合だけ転送
  location ^~ /hoge/foo.php {
    if ($args ~ "(.*)&?hogehoge=01&foobar=1") {
      set $args $1$2;
      rewrite ^(.*)$ http://example.com/hoge/foo.aspx?hogehoge=foobar permanent;
    }

    if ($args ~ "(.*)&?hogehoge=01&hoge=2") {
      set $args $1$2;
      rewrite ^(.*)$ http://example.com/hoge/foo.aspx?hogehoge=hoge permanent;
    }
  }

# 特定のパスを転送
  location ~* ^/hoge/(.*)/info.html {
    rewrite /([^/]*)/(.*) http:/example.com/$2 redirect;
  }

# HTTPSでのアクセス時だけ転送(ELB経由とか)
  location ^~ / {
    if ($http_x_forwarded_proto = "https") {
      rewrite ^(.*)$ https://example.com$request_uri redirect;
      break;
    }
  }

# 特定のVirtualHostで/あり無しの判断をしたい
# 明示的に分けておく
# 例 :
#  sample.com/hoge/foo/bar  => example.com/hoge/foo/bar
#  sample.com/hoge/foo/bar/ => example.com/hoge/foo/bar  
 location ^~ /hoge/foo/ {
   if ($request_uri ~ "(.+)/$") {
     rewrite ^(.+)/$ http://example.com$1 permanent;
   }
   if ($request_uri ~ "(.*)"){
     rewrite ^(.*)$ http://example.com$1 permanent;
   }
 }
```
記事抜粋の文字数とか変更


フィルターフック使用。
function.phpに下記記述。

```php:hoge
<?php

// 抜粋の長さを変更
function change_excerpt_length($length) {   
    return 50;
}   

// ...の文字を消す
function change_excerpt_more($more) {
    // return ' ... ';
    // return '続きを読む';
    return '';
}

add_filter('excerpt_length', 'change_excerpt_length');
add_filter('excerpt_more', 'change_excerpt_more');

?>
```
WebStormで使用するJDKバージョンを変更する


WebStormでJavaScriptファイルをミニファイしようと思ったら、JDKバージョン関連でハマった。

# 環境
+ Mac OS X 10.10.2
+ WebStorm 7.0.1

# Watcherを追加
Preferences > File Watchers > + > Closure Compilerでデフォルト設定のままOK
![image](https://qiita-image-store.s3.amazonaws.com/0/31862/35a71920-0b64-ab1f-32e0-3e687ddd2e42.png)

# Javaのエラーが発生
WebStormのcompiler.jar実行時にエラーが発生する。
`Exception in thread "main" java.lang.UnsupportedClassVersionError: com/google/javascript/jscomp/CommandLineRunner : Unsupported major.minor version 51.0`
![image](https://qiita-image-store.s3.amazonaws.com/0/31862/30a7d7e3-c648-41db-d118-09265b95ae8e.png)

Closure Compilerのデフォルト設定が、MacのJDK1.6.0を使用する設定になっているのが原因みたい。
`/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar`

# WebStormが使用するJDKバージョンを変更する
WebStorm自体の設定を変更すればよさそうなので、1.6* の記述を最新の 1.8* に変更した。

`vim /Applications/WebStorm.app/Contents/Info.plist`

```xml:Info.plist
<key>Java</key>
    <dict>
        •••

        <key>JVMVersion</key>
        <string>1.6*</string>

        •••
```

WebStormを再起動すると、無事コンパイルは成功する。

# 参考
[Selecting the JDK version the IDE will run under](https://intellij-support.jetbrains.com/hc/en-us/articles/206827547-Selecting-the-JDK-version-the-IDE-will-run-under)
【phpメモ】URLから動画のサービスを判定して然るべき埋め込みタグを出す

以下の動画に対応
動画の幅などはお好みで

- youtube
- vimeo
- vine
- youku
- tudou

```php

/**
* 動画のURLからサービスを判定して埋め込みタグを生成する
*
* @param   string $param 動画URL
* @return  string        埋め込みタグ
*/
public function createvideotag($param)
{
    $param .= '/';
    // youtube
    if(preg_match('#https?://www.youtube.com/.*#i',$param,$matches)){
        $parse_url = parse_url($param);
        $v_param = '';
        // 動画IDを取得
        if (preg_match('#v=([-\w]{11})#i', $parse_url['query'], $v_matches)) {
            $video_id = $v_matches[1];
            return '<iframe width="600" height="338" src="https://www.youtube.com/embed/' . $v_matches[1] . '" frameborder="0" allowfullscreen></iframe>';
        }
    }
    // vimeo
    if(preg_match('#https?://vimeo.com.*#i',$param,$matches)){
        foreach ($matches as $key => $value) {
            if (preg_match('#/(\d+)/#i', $value, $val_match)) {
                return '<iframe src="https://player.vimeo.com/video/' . $val_match[1] . '?color=e0dccb" width="600" height="338" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
            }
        }
    }
    // vine
    if(preg_match('#https?://vine.co/v/(.*?)/#i',$param,$matches)){
        return '<iframe src="https://vine.co/v/' . $matches[1] . '/embed/simple" width="600" height="338" frameborder="0"></iframe><script src="https://platform.vine.co/static/scripts/embed.js"></script>';
    }
    // youku
    if(preg_match('#https?://v.youku.com/v_show/id_(.*?).html#i',$param,$matches)){
        return '<iframe class="wpjam_video" width=600 height=338 src="http://player.youku.com/embed/' . $matches[1] . '" frameborder=0 allowfullscreen></iframe>';
    }
    // tudou
    // tudouだけちょっと不十分なので修正が必要...
    if(preg_match('#https?://www.tudou.com/.*#i', $param, $matches)){
        if (preg_match('#([-\w]+).html#i', $param, $code)) {
            return '<iframe width=600 height=338 src="http://www.tudou.com/programs/view/html5embed.action?code='. $code[1] .'" frameborder=0 allowfullscreen></iframe>';
        }
    }
}
```
【iOS】storyboardを使ったときの一つの解　〜少しでもきれいにプログラムを書きたい悪あがき〜

## 背景 ##

よくプログラムを書くときは、MVCモデルが使われます。
一方で、Modelをどう伝搬させていくか、あるいは、Modelへのリンキングをどうするかが
いつも悩みの種になります。

特にstoryboardを使用してTabViewを使用するなんて場合は、
複数のViewControllerがあるため何かと悩みの種になります。

今回は、TabViewをstoryboard上で使用する場合、どうModelオブジェクトを取得するかに
焦点を当てて、一つの解を示します。


## 一つの解決策 ##
**UITabBarControllerをカスタマイズして、Modelを持たせるだけ**

これが一つの解です。


## 解決策の理由 ##
UIViewControllerには、プロパティとして、
tabBarController
というプロパティがあるのです。

つまり、タブ一つ一つに割り当てられるUIViewControllerではこれを使用して、

```swift
        //get parent tabbar controller
        var parent: CustomTabBarController = self.tabBarController as! CustomTabBarController
        
        //get model from parent
        var model: Model = parent.model
```

という風に記載すれば、Modelオブジェクトを取得出来るようになるわけです。


## エンディング ##
いかがでしたでしょうか。
これは応用すれば、xibでも出来るかと思います。


これで、タブを使用する場合のModelの伝搬をどうするかについて悩まなくても良くなると
思います！！！

それではまた〜(^^)/
CoffeeScript使ってみた

## 参考

* [JavaScriptを卒業してCoffeeScriptで飛躍しよう - 基本などまとめ - Qiita](http://qiita.com/Yama-to/items/a947cfa2565b03ddc9de)
* [The Little Book on CoffeeScript - Syntax](http://minghai.github.io/library/coffeescript/02_syntax.html)
* [CoffeeScriptのclassをグローバルに定義する。 - Qiita](http://qiita.com/kaminaly/items/c1fc738dcacc6dc262c6)

## 準備

```bash:インストール
sudo apt-get install coffeescript
```

```coffeescript:a.coffee
nums = [1, 2, 3, 4, 5]
if nums[3] is 3
  window.alert '一致' 
else
  window.alert nums[3]
```

## 変換

```bash:a.jsが出来る
coffee -c a.coffee
```

```js:a.js
// Generated by CoffeeScript 1.4.0
(function() {
  var nums;

  nums = [1, 2, 3, 4, 5]; 

  if (nums[3] === 3) {
    window.alert('一致');
  } else {
    window.alert(nums[3]);
  }

}).call(this);
```

## グローバル変数

* グローバル変数にしたい場合、先頭に@付ける

```coffeescript:a.coffee
@nums = nums
```

```js:a.js
   this.nums = nums;
```

他で`nums`にアクセスが出来ます。
グローバル変数に展開されないように書けるので良いかと。
[jQuery] slick.jsのレスポンシブオプションバグ?

## 条件
```html:HTML
<div class="slider responsive">
  <div><h3>1</h3></div>
  <div><h3>2</h3></div>
  <div><h3>3</h3></div>
  <div><h3>4</h3></div>
  <div><h3>5</h3></div>
  <div><h3>6</h3></div>
  <div><h3>7</h3></div>
  <div><h3>8</h3></div>
</div>
```

```js:JavaScript
$('.responsive').slick({
  dots: true,
  infinite: false,
  speed: 500,
  slidesToShow: 5,
  slidesToScroll: 1,
  responsive: [{
    breakpoint: 768,
    settings: {
      slidesToShow: 2,
      slidesToScroll: 2,
      dots: true
    }
  }]
});
```

1. slideToScrollの値をslidesToShowの値と異なる数字にする。(?)
2. ブレークポイントの値未満までウィンドウサイズを小さくする。
3. 最後のアイテム (上記ソースコードだと8枚目) までスライドする。
4. ブレークポイントの値以上までウィンドウサイズを大きくする。


## 何が起こる?
* 4の後、矢印ボタンによるスライドで前のアイテムに戻れない。

![slick.png](https://qiita-image-store.s3.amazonaws.com/0/32689/22767303-c08c-b5be-a664-092676edb33b.png)

## なぜ?
* 正直よくわからない。現在位置の補正がうまくいってない?
* オプションで解決する?

## 強引な解決策
* slick.jsの1634行目を変更する。

```js:slick.js
_.checkResponsive();
```

```js:slick.js
_.checkResponsive(true);
```

* これをすると、リサイズ時に強制的に1枚目のスライドに戻る。

本来の解決策をご存じの方、ご教示ください……。
一歩一歩理解する、AutoLayoutで等間隔に置く方法

##プレビューを表示する方法
http://wayohoo.com/xcode/xcode-has-a-preview-function-of-the-storyboard.html
これでいちいちビルドせずにすみます。
ただちょっと動きが怪しかったりするので、ある程度出来たらシミュレータで見るといいです。

##サンプル
https://github.com/xcatsan/iOS7-Sample
サンプル見てもなぁと思ったのですが、見事に等間隔に表示されるので（本当にできるんだ）というメンタル的な面も込めて見るべき

##手順
いきなり全部バン！とやっても分けわからなので、少しずつ等間隔に近づけていきます。
また、AutoLayoutは隣のビューが大事な要素になってきます。適当に置いて制約つけてリフレッシュしたら急にきれいになったりしないので、なるべく完成に近い配置で制約をつけましょう。
ステップごとにしっかりUpdateFrameしましょう。UpdateFrameしてズレるならすぐにやり直しましょう。

##STEP1

まずは以下のようなビューを作ってみましょう
![スクリーンショット 2015-08-20 16.40.50.png](https://qiita-image-store.s3.amazonaws.com/0/24979/75eb61ef-6537-1dd9-a78a-2df28939c1b8.png)

ピンクと緑のビューを配置したら以下のように設定します。
![スクリーンショット 2015-08-20 16.34.57.png](https://qiita-image-store.s3.amazonaws.com/0/24979/57eb5ca1-191e-3551-0dc5-8f6c8363ff00.png)
ピンクの方は、縦横44x44を守りつつ左上右のマージンを0にします。


![スクリーンショット 2015-08-20 16.40.22.png](https://qiita-image-store.s3.amazonaws.com/0/24979/c7734eb7-7fb0-c385-8e6c-277621330861.png)
緑はこう。
ピンクとの違いは横幅が指定されていないところです。
つまり可変となるので、画面の横幅に関わらず緑の横幅は
`画面横幅-ピンクの横幅（44px）`
となります。

##STEP2
![スクリーンショット 2015-08-20 16.46.15.png](https://qiita-image-store.s3.amazonaws.com/0/24979/dbbe1fbd-24e9-3218-6539-29187209d52a.png)

次に右側にもピンクのビューを配置してみましょう。

![スクリーンショット 2015-08-20 16.45.46.png](https://qiita-image-store.s3.amazonaws.com/0/24979/5a69911e-4d42-cd43-e0e4-a0ae3a42084b.png)
２つ目のピンクのビューも１つ目と同じです。

２つ目のピンクのビューを指定すると、何やら怒られてしまいます。
![スクリーンショット 2015-08-20 16.48.48.png](https://qiita-image-store.s3.amazonaws.com/0/24979/97bf4f53-3e3f-feec-9fc9-6f84ed3e153d.png)
なぜでしょうか？
これは、緑のビューの右端のマージン0は白のビュー（ViewControllerのView）の右端に合わせていたからです。
ピンクのビューを配置したことで、緑のビューはピンクの左端に合わせる制約と白の右端に合わせる制約を両方持つことになってしまい、エラーを吐いてしまいます。

![スクリーンショット 2015-08-20 16.51.55.png](https://qiita-image-store.s3.amazonaws.com/0/24979/effe72a0-7ba1-c80c-ac56-cc538679a4ec.png)
青で囲まれた制約を消せばエラーがなくなります。

![スクリーンショット 2015-08-20 16.54.14.png](https://qiita-image-store.s3.amazonaws.com/0/24979/0eeb5b17-d510-cbc9-943e-223ed8a766b7.png)

これでピンク緑ピンクの形になりました。

#STEP3

![スクリーンショット 2015-08-20 16.56.42.png](https://qiita-image-store.s3.amazonaws.com/0/24979/9e6b6e9d-0914-a56a-aa86-80175934759c.png)

さらに右に緑のビューを挟んでみましょう。

先ほどと同じように、緑のビューを差し込みます。
２つ目のピンクのビューはSTEP2の緑同様、白のビューの端と２つ目の緑の端に制約が付いているので白のビューに対する制約は消しておきましょう。

![スクリーンショット 2015-08-20 17.14.00.png](https://qiita-image-store.s3.amazonaws.com/0/24979/7a05488f-48ea-a509-cdd8-8a9352339458.png)


ここまで進めると、このようなプレビューになってしまうと思います。

これは２つの緑の横幅が可変なため、片方が0片方が（画面の横幅-(ピンクの横幅x2)-(0:一つ目の緑)）となってしまっている状況です。
二つの緑の横幅は同じにしたいので、一つ目の緑から二つ目の緑へctrlを押しながらドラッグし
![スクリーンショット 2015-08-20 17.16.39.png](https://qiita-image-store.s3.amazonaws.com/0/24979/a57f42be-6f9b-1886-3738-fe37dbd6c7ed.png)
Equal Widthsを指定します。（AとBのビューの横幅は同じにするの意）

これでピンク緑ピンク緑になったと思います。

#STEP4

最後に、左側に緑のビューを差し込みます。

完成系はこちら

![スクリーンショット 2015-08-20 17.20.01.png](https://qiita-image-store.s3.amazonaws.com/0/24979/835c659a-eaa7-49a8-c568-1ffcf0a19ce8.png)

ここまで出来ていれば楽勝だと思います。

STEP2とSTEP3の復習のようなものです。
緑の幅を他の緑と同じにして、ピンクの左の基準を緑の右端に合わせます。

あとは繰り返しですね！
途中で詰まった点があればコメントいただければ補足します。
プッシュ通知とiOS9の低電力モードについて


## 低電力モード

iOS9から新たに低電力モードが追加された。

### 低電力モードの仕様

* Reduce CPU and GPU performance  
CPU, GPUのパフォーマンス低下
* Pause discretionary and background activities, including networking  
ネットワークを含め、バックグラウンドでの更新が行われなくなる
* Reduce screen brightness  
画面の明るさの低減
* Reduce the timeout for auto-locking the device  
オートロックのタイムアウト低減
* Disable Mail fetch  
メールの自動フェッチ受信の無効化
* Disable motion effects  
視差効果の無効化
* Disable animated wallpapers  
壁紙のアニメーションの無効化

[React to Low Power Mode on iPhones](https://developer.apple.com/library/prerelease/ios/documentation/Performance/Conceptual/EnergyGuide-iOS/LowPowerMode.html)

## 低電力モード時のプッシュ通知について

低電力モードをONにしている状態で、プッシュ通知（Remote Notification）を試みる

結論として、低電力モード自体はプッシュ通知機能を制限することはない。

| アプリの状態 | プッシュ通知 |
| :--------: | :---------:|
| アクティブ | 届く |
| バックグラウンド | <del>届く</del> **届かない** |
| 停止（起動していない） | 届く |

### 問題点

#### 低電力モードでは、端末がスリープ状態になるとWi-Fiが切れる

低電力モードをオフにしていると、端末がスリープしたタイミングでWi-Fiの接続が切断されてしまう。
例えば、iPod touchなどWi-Fiでしか通信ができない端末で低電力モードにしていると、スリープした時には通信ができずプッシュ通知が受信できなくなる

*※ この場合、このアプリのデバイストークンはフィードバックサービス送りになる*

## 追記 (2015-09-10)

iOS9のGM版がリリースされたので、改めて低電力モードでのプッシュ通知を確認したところ、
低電力モード時はバックグラウンド状態のときは`application:didReceiveRemoteNotification:fetchCompletionHandler:`が呼ばれなかった。
→ `content-available:1`を設定してプッシュをしてもデリゲートメソッドが呼ばれない

そのため、Silent Pushは低電力モード時は届かないことに注意したい
Ruby で「114514」になったら勝ち

http://shindanmaker.com/536869 という診断メーカーを見つけたのでrubyで書いてみた。
もう少しきれいなコードで書けると思うので誰か教えてください。

```rb:maker.rb
test = %w(1 1 4 5 1 4)
count = 0
loop do
	t = Array.new
	test.size.times do 
		t.push(test[rand(test.size - 1)])
	end

	t = t.join
	count += 1
	if t == "114514"
		print (t + "!\n")
		puts (count.to_s+"回目で成功")
		break
	else
		puts (t+"!\n")
	end
end
```

114514って出るまでひたすら繰り返す　ただそれだけ
MantisにCSSを追加するだけのプラグインつくったよ

[SimpleCustomCss]

# 参考文献

[Symfowareについての考察blog]
ほぼ唯一といっていいと思う日本語のMantis解説。
しっかりしたプラグイン作成までカバーしてくれています。
[Mantis Bug Tracker Developers Guide - Building a Plugin]
↑のチュートリアルリンクが切れていたので代わり。しかし[Symfowareについての考察blog]がほぼ日本語訳してくれているので~~読めなかった~~使わなかった。
[Plugin Events Reference Mantis Bug Tracker Wiki]
フックできるイベントの調査。
CSSの読み込み時イベントを探した。
公式ですし結構充実してそうなので今後は他の英語ページはいいかな…

# 動機

Markdownとハイライトを導入したけど\`\`時のただの`<code>`に装飾入ってないなー
CSSに追記するか、別ファイルに書いて新たに読み込ませるかー
あーまたcoreのファイルをバックアップとっていじるのかーいやだなー

そうだ、プラグインにしよう。

***

と思ってつくってみたら、単純すぎてプラグインと呼びたくないものになる。
普通のプラグインの通過点で止めるというか…

```php

<?php

class SimpleCustomCssPlugin extends MantisPlugin
{
    public function register()
    {
        $this->name = 'Simple Custom CSS';
        $this->description = 'add custom CSS';
        $this->page = '';
        $this->version = '1.0';
        $this->requires = array(
            'MantisCore' => '1.2.0',
        );

        $this->author = 'khsk';
        $this->contact = 'eatparalytic@gmail.com';
        $this->url = 'https://github.com/khsk/SimpleCustomCss';
    }

    public function hooks()
    {
        return array(
            'EVENT_LAYOUT_RESOURCES' => 'addCss',
        );
    }

    public function addCss()
    {
        echo '<link rel="stylesheet" type="text/css" href="', plugin_file( 'css/custom.css' ), '"/>';
    }
}

```

ほぼ公式の使い方解説の写し。`<link>`の`echo`は公式コピーの引数変更ぐらいか。

内容は`<head>`閉じる直前時のイベント`EVENT_LAYOUT_RESOURCES`発生時に`<link>`を`echo`してCSSを追加するだけ。

直接ファイルをいじるのに比べて、ブラウザからオン・オフが簡単に出来きます。それだけ。

すでにテーマをカスタマイズできるプラグインはありますが、ほんのちょっとだけ、このタグだけ変えたいってときはこんな単純なものもありますよ…ということで、Gitの練習がてらに挙げてみました。

[Plugin Events Reference Mantis Bug Tracker Wiki]:https://www.mantisbt.org/wiki/doku.php/mantisbt:plugins_events
[Mantis Bug Tracker Developers Guide - Building a Plugin]:https://www.mantisbt.org/docs/master-1.2.x/en/developers/dev.plugins.building.html
[Symfowareについての考察blog]:http://symfoware.blog68.fc2.com/blog-entry-697.html
[SimpleCustomCss]:https://github.com/khsk/SimpleCustomCss
「谷山=志村予想⇒フェルマーの最終定理」の流れ（未完成）

#はじめに
フェルマーの最終定理を証明するためには谷山=志村予想が正しいことを証明すればよい。この流れと理解するための知識を細かく書く。

このページは動画でも解説をしています。
[谷山=志村予想とフェルマーの最終定理](https://youtu.be/RRS8NuTUoUA)

注意：変更を加えているので動画と違うところがあります

#必要な知識
##フェルマーの最終定理
>自然数$n≥3$に対して

>```math
a^n+b^n=c^n
```
を満たす自然数$a,b,c$は存在しない

##楕円曲線（正確でない）
>曲線が楕円曲線であるとは，$y^2=x^3+ax+b$ と表され，有理数の点を通り，その点は尖ったり交差したりすることのない点である。

※グラフに描くと尖ったり交差したりすることのない点を非特異点と呼ぶ
※右辺=0のとき，重根を持たなければ非特異点しかもたない

別表現(9/8 フライ曲線に合わせるために変更した)
>曲線が楕円曲線であるとは，$y^2=x^3+ax^2+bx+c$ と表され，(右辺)=0が重根を持たない。

##上半平面上の重み 2 レベルNの保型形式（正確でない）
>$f(z)$ が上半平面上の重み $2$　レベル $N$（自然数）の保型形式であるとは
　(1) $f$ :複素平面の上半平面{ $z ∈ C: Im(z) > 0$ }で定義された関数
　(2) $f$ :正則(微分可能のようなもの)
　(3) 

>```math
  \left(
    \begin{array}{cc}
      a & b\\
      c & d
    \end{array}
  \right)
\in\Gamma_{0}(N)
に対して \quad 
f\left(\frac{az+b}{c z+d}\right) =(cz+d)^2f(z) 
```
という変換が成り立つ。ただし

>```math
\Gamma_{0}(N)=\left\{
\left(
    \begin{array}{cc}
      a & b\\
      c & d
    \end{array}
  \right) 
: 
\ a,b,c,d\in Z,\ \ c\equiv 0\mod N \ かつ\ ad-bc=1\right\}
```

##谷山＝志村予想
>有理数体上の導手 $N$ の楕円曲線に対して，あるレベル $N$ のモジュラー形式 $f(z)$ が存在して, すべての素数 $p$ で $a_p(f) = a_p(E)$ となる.

>※ 導手N：楕円曲線Eの判別式と素数から得られる定数
※  $a_p(f)$：fの導手Nから得られる定数

別表現
>全ての楕円曲線はモジュラーにより一意化できる

>※一意化の例：円 $x^2+y^2=1$ は $x=\cos t,y=\sin t$ により三角関数に一意化される

#志村=谷山予想が正しければフェルマーも正しいことの流れ
(9/8 本：[ガロア理論と表現論](http://www.amazon.co.jp/gp/product/4535785899/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4535785899&linkCode=as2&tag=simanezumi104-22)を参考に変更した)
##フェルマーの最終定理が成り立たないと仮定する
ある自然数$n≥3$に対して

```math
a^n+b^n=c^n
```
を満たす自然数$a,b,c$が存在すると仮定する。
(このとき $a,b,c$ が互いに素であることが示せる⇒[証明](http://qiita.com/simanezumi1989/items/62921a55cc54904005ca)）
##a,b,cを使って楕円曲線を作る
曲線

```math
E:y^2=x(x-a^n)(x+b^n)
```
を考える。この曲線が楕円曲線であること(重根をもたないこと)を確かめる（$a,b$ が互いに素なのでok）。
この楕円曲線をフライ曲線という。
このフライ曲線は面白い特徴をもつらしい
・半安定　（[定義](http://qiita.com/simanezumi1989/items/63e08a935613148ee9d7)　[証明](http://qiita.com/simanezumi1989/items/62921a55cc54904005ca)）
・判別式が2n乗
##谷山＝志村予想の一部（ワイルズの定理）
すべての半安定な楕円曲線は、モジュラーである。これはフライ曲線 $E$ に対してある保型形式 $F$ が存在して
>$L_E(s)$（フライ曲線のゼータ関数）＝ $L_F(s)$（保型形式のゼータ関数）

を満たすことを意味する。このとき
>レベルを下げる操作をすると $F$ はレベル2となる(ガロア表現の分岐からレベルがわかるらしい)。

しかし，そのような保形形式は $0$ しかないので矛盾する。

#関連サイト
次の記事：[谷山=志村予想の例](http://qiita.com/simanezumi1989/items/043f6a8d62ff413f9893)
#参考文献
おすすめ記事：[Ribetによるフェルマーの最終定理の証明の流れ](http://qiita.com/simanezumi1989/items/1b779a3de95612f41512)
[ワイルズの証明](http://math.stanford.edu/~lekheng/flt/wiles.pdf)
[ガロア理論と表現論](http://www.amazon.co.jp/gp/product/4535785899/ref=as_li_tf_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4535785899&linkCode=as2&tag=simanezumi104-22)
[リベットの証明](https://math.berkeley.edu/~ribet/Articles/toulousela.pdf)
[リベットのまとめ](https://www.math.wisc.edu/~boston/invent_100.pdf)
[Frey曲線やε予想](http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/0971-4.pdf)
[Freyの論文](http://backup.itsoc.org/review/05pl1.pdf)
[谷山=志村予想](http://mathematics-pdf.com/column/taniyama_shimura.html)
[定義](http://sigma2011auemath.web.fc2.com/pdf/09shun.pdf)
深層学習でツイートの感情分析

#はじめに
今回はラベル付きツイートデータの感情分析(Sentiment Analysis，or 感情分類 Sentiment Classification)をしました．
**2015/10/19 追加実験を行いました．**
**2015/12/19 SCNNのソースコード公開しました．[hogefugabar/CharSCNN-theano](https://github.com/hogefugabar/CharSCNN-theano)**
**2015/12/27 SCNNだけでなく，CharSCNNの実装も公開しました．[hogefugabar/CharSCNN-theano](https://github.com/hogefugabar/CharSCNN-theano)**

#アルゴリズム
今回は[Deep Convolutional Neural Networks for Sentiment Analysis of Short Texts](http://www.aclweb.org/anthology/C14-1008)という論文に載っているCharSCNNというアルゴリズムを使おうとしたのですが，メモリの都合上SCNNというアルゴリズムを使いました．このアルゴリズムは入力として与える文(Sentence)を，単語のone-hot表現の系列として与えます．CharSCNNは単語に加えて文字にもone-hot表現を与えたものになります．SCNNは僕の理解が間違っていなければ以下に近いアーキテクチャになるかと思われます．

> <img src="https://dl.dropboxusercontent.com/u/38631959/sentence-conv.png" width=600>
> [UNITN: Training Deep Convolutional Neural Network for Twitter Sentiment Classification](http://alt.qcri.org/semeval2015/cdrom/pdf/SemEval079.pdf)より

#実装
GitHubに[satwantrana/CharSCNN](https://github.com/satwantrana/CharSCNN)があったのでこれをまんま使おうと下のですが，いろいろコードがおかしかったので自分で修正しました．**2015/12/19 ソースコード公開しました．[hogefugabar/CharSCNN-theano](https://github.com/hogefugabar/CharSCNN-theano) こちらを参照してください．**

To Word Embeddings → Convolution → Max Pooling → Fully-Connected → Fully-Connected → Softmaxみたいな感じで実装しました．Dropout，RMSpropなども使ってます．

#データセット
[satwantrana/CharSCNN](https://github.com/satwantrana/CharSCNN)の中にあったtweets_clean.txtの2万ツイートを使いました．訓練データ18000ツイート，テストデータ2000ツイートです．それぞれのツイートには0/1(negative/positive)のラベルがついていますので，2クラス分類です．

#実験結果
<img src="https://dl.dropboxusercontent.com/u/38631959/scnn.png" width=600>
グラフ10シード平均とったもに更に移動平均をとったものになります．
大体2epoch(180000*2 iteration)回したあたりから過学習が始まる感じでした．
最高で0.8ほどの分類精度となりました．元論文には0.82~0.85くらいまで行ったとあったので，データセットの違いやパラメータの違いが影響しているのかなと思います．


#終わりに
一番最初の入力をWord Embeddingsに変換する重みをWord2Vecで事前学習したものを使用すると結果が良くなるらしいのでそれもやってみたい．

#追加実験(2015/10/19更新)
ChainerのサンプルにWord2VecがあったのでSkip-gram with Negative-Samplingで事前学習した結果をつかってみました．Chainerで事前学習してTheanoプログラム回すという笑．cPickleさんありがてえ．
<img src="https://dl.dropboxusercontent.com/u/38631959/with_pretrain.png" width=600>

あれ，立ち上がりは事前学習したほうが良かったけど最終的な結果は事前学習していないほうがいい．．．もうちょっと長く回したらどうなるんだろ．
Encoding.ASCII.GetString(byte[])の結果に'?'(0x3F)が混ざる

Encoding.ASCII.GetStringに与えるbyte配列の中にASCII範囲外の値（つまり0x00~0x7F以外）が入っていた場合、そのbyteは'?'(=0x3F)に変換されるようです。
つまり不可逆変換となります。

```lang:例
byte[] arr1 = { 0x30, 0x39, 0x41, 0x5A, 0xAA };
string str = Encoding.ASCII.GetString(byte);
byte[] arr2 = Encoding.ASCII.GetBytes(str);     // 逆変換
```
結果：
arr1 : { 0x30, 0x39, 0x41, 0x5A, 0xAA }
arr2 : { 0x30, 0x39, 0x41, 0x5A, 0x3F }

対策について追記(2015/08/24)
コメントで指摘いただいた、「ISO-8859-1」によるエンコーディングを行った結果、望む結果を得ることができました。

```lang:対策例
byte[] arr1 = { 0x30, 0x39, 0x41, 0x5A, 0xAA };
string str = Encoding.GetEncoding("ISO-8859-1").GetString(byte);
byte[] arr2 = Encoding.GetEncoding("ISO-8859-1").GetBytes(str);     // 逆変換
```
結果：
arr1 : { 0x30, 0x39, 0x41, 0x5A, 0xAA }
arr2 : { 0x30, 0x39, 0x41, 0x5A, 0xAA }

( @yuba さん、ありがとうございました )
IE6対応のjsライブラリ

## jQuery1.12.4

* http://code.jquery.com/jquery-1.12.4.min.js

## knockout.js

* [AngularJS - angular・backbone・knockoutの比較／印象まとめ - Qiita](http://qiita.com/takuhito-h/items/15655309aef0889cfb62)

> Microsoft ASP.NET開発チームの人が開発
> 依存するライブラリは無し (jQuery不要)
> IE6以上対応（2017/3/7 version 3.4.2 にて確認。）
> サーバー通信機能（Ajax）がない

* [Demo&Tips | Knockout.js 日本語ドキュメント](http://kojs.sukobuto.com/tips/helloWorld)
* http://knockoutjs.com 

```html:
<span data-bind="text: message"></span> <br>
<span data-bind="html: msg2"></span>

<script src="http://knockoutjs.com/downloads/knockout-3.4.2.js"></script>
<script>
ko.applyBindings({
    message: '<b>hello</b> wrold!',
    msg2: '
hello
'
});
</script>
```

![スクリーンショット_2017-03-07_08-30-41.png](https://qiita-image-store.s3.amazonaws.com/0/25728/c73680ea-7f93-63f3-625d-6ded1a3670ee.png)


## JSON3

* [CoffeeScriptベストプラクティス集 ブラウザ向けJavaScript編（1） (1/3)：CodeZine（コードジン）](http://codezine.jp/article/detail/6533)

> 　最近のブラウザでは、オブジェクトをJSON文字列に変換するJSON.stringify()や、逆にJSON文字列をオブジェクトに変換するJSON.parse()という関数が用意されています。しかしInternet Explorer（以下、IE）6や7などの比較的古いブラウザではこれらの関数が用意されていません。

## CSS3, HTML5

* [BootstrapのIE8対応 - Qiita](http://qiita.com/kimromi/items/d2f234c90c07f5417a8f) <- bootstrap3?
  * [html5shiv.js](https://github.com/aFarkas/html5shiv) (html5対応)
  * [respond.js](https://github.com/scottjehl/Respond) (css3対応)
sitemap_generator + whenever + S3 で サイトマップを配信する

毎日定時にサイトマップを生成し、GoogleにPingするのは whenever + sitemap_generator でカンタンに実現できるのですが、いくつかの特殊要件を満たすために工夫したことをまとめておきます。

なお、使っている gem の version は以下の通りです。
 * rails: 4.2.0
 * whenever: 0.9.4
 * sitemap_generator: 5.1.0


## production のみ whenever を有効に
素直に

```rb
every 1.day, at: '10:00 am' do
  rake 'sitemap:refresh'
end
```
と書くと、sandbox や staging 等でも crontab に登録され、Google に Ping されるので避けたいところです。


```rb
if @environment.to_sym == :production
  every 1.day, at: '10:00 am' do
    rake 'sitemap:refresh'
  end
end
```

と書けば、production だけで 有効になります。
See: https://github.com/javan/whenever/wiki/Setting-variables-on-the-fly



## S3から sitemap.xml.gz を配信する
一般的には sitemap_generator で生成したサイトマップは Nginx や Apache 等の Web サーバから配信すればいいのですが、事情により Webサーバから配信できないこともあります。


代替手段として最も手軽なのは（たぶん）S3 でのホスティングだと思われます。
sitemap_generator にはアダプターがあり

```rb
 SitemapGenerator::Sitemap.adapter = SitemapGenerator::S3Adapter.new(fog_provider: 'AWS',
                                         aws_access_key_id: <your-access-key-id>,
                                         aws_secret_access_key: <your-access-key>,
                                         fog_directory: <your-bucket>,
                                         fog_region: <your-aws-region e.g. us-west-2>)
```
という風に設定することができます。
https://github.com/kjvarga/sitemap_generator/wiki/Generate-Sitemaps-on-read-only-filesystems-like-Heroku


## S3 にあるサイトマップをWebマスターツールに登録
Webマスターツールでは所有ドメイン外にあるサイトマップは登録できない（少なくとも調べた範囲では）ので、例えば /sitemap という path を S3 にリダイレクトしてあげればよさそうです。


```rb
get '/sitemap' => redirect('https://s3-ap-northeast-1.amazonaws.com/your-bucket/sitemaps/sitemap.xml.gz')
```

こんな感じで routes.rb を書けば ok。