OmniAICreator/Qiita-1.07M huggingface dataset:
値をランダムに分配するにはどうすればいいのか

ある値をn個に分割する方法がわからない。
多分、数学を学んでいると一発でわかるんだろうなぁ。
書いてみたけど果てしなく不安。


# <i class="fa fa-code"></i> コード

```php:distribute.php

$target = array(
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
    'G',
    'H',
);

$target_cnt = count($target);
$total = 123456789;
echo $total . "\n";
$result = array_fill(0, $target_cnt, 0);
$i = 0;

while ($total) {
    if (!($i %= $target_cnt)) {
        shuffle($result);
    }
    $rand = mt_rand(0, $total);
    $result[$i] += $rand;
    $total -= $rand;
    $i++;
}

var_dump(array_combine($target, $result));
echo $total . "\n";
echo array_sum($result) . "\n";

```

値が加算される順番はランダムだけど、回数は(途中で終わらない限り)等しい、としてみたけど意味はあるのかしらん。
順番固定だと後半が少なくなりそうだし、毎回ランダムで一つに加算だと偏りが出そう。
平均的にしようとしている時点でランダムでない？

# <i class="fa fa-pencil"></i> 出力

```php:output
123456789
array(8) {
  ["A"]=>
  int(95557576)
  ["B"]=>
  int(313427)
  ["C"]=>
  int(2720550)
  ["D"]=>
  int(448420)
  ["E"]=>
  int(3296615)
  ["F"]=>
  int(73736)
  ["G"]=>
  int(172534)
  ["H"]=>
  int(20873931)
}
0
123456789
```

***


ゲームなどで余剰分をオートで振り分ける機能や、敵CPUのランダムな行動力割り当て、部隊分割とかをぼや～と考えていた。
これ自体の使い道はあるんですかね？
実際のゲームはもっと最適な行動をランダムに行うんですよね。
すごいなぁ。

# :one: 追記1

やっぱり後半ほどランダム値がとる値の範囲が狭まるのはおかしい気がしてきた。
だから、１ループで加算される最大値を均等にしてみた。

```php:distribute2.php

$target = array(
    'A',
    'B',
    'C',
    'D',
    'E',
    'F',
    'G',
    'H',
);

$target_cnt = count($target);
$total = 123456789;
echo $total . "\n";
$result = array_fill(0, $target_cnt, 0);
$remainder = 0; // IDE警告消し
while ($total) {

    $remainder = $total % $target_cnt;
    $quotient = (int)($total / $target_cnt);
    if ($quotient == 0) {
        break;
    }

    for ($i = 0; $i < $target_cnt; $i++) {
        $rand = mt_rand(0, $quotient);
        $result[$i] += $rand;
        $total -= $rand;
    }
}

// 余りの分配
$total -= $remainder;
$i = 0;
while ($remainder--) {
    $i %= $target_cnt;
    $result[$i++]++;
}

var_dump(array_combine($target, $result));
echo $total . "\n";
echo array_sum($result) . "\n";

```

```php:output2

123456789
array(8) {
  ["A"]=>
  int(11087871)
  ["B"]=>
  int(13496825)
  ["C"]=>
  int(15902076)
  ["D"]=>
  int(17920329)
  ["E"]=>
  int(17281928)
  ["F"]=>
  int(21869953)
  ["G"]=>
  int(13350973)
  ["H"]=>
  int(12546834)
}
0
123456789

```

最初より値が均等ぎみになった気がする。
でも均等にすることが主目的ではないし…
逆に極端な値が出ないって欠点でもあるのかもしれない。
ランダムってなんだ(無知)
Objective-C, Swiftでローカルファイル(.env)で定義した環境変数を参照する

＝＝＝＝＝✄＝＝＝＝＝追記 2015/07/28＝＝＝＝＝✄＝＝＝＝＝

この方法でも二回目以降のビルドからしか反映されなかったり、Archiveするときに反映されなかったりするので、 @kishikawakatsumi さんの紹介してくださった[cocoapods-keys](https://github.com/orta/cocoapods-keys)を使う方法が確実です。pod install時にソースを生成するので。

＝＝＝＝＝＝✄＝＝＝＝＝＝追記終わり＝＝＝＝＝＝✄＝＝＝＝＝＝

Railsとかやってるとリポジトリに含まないファイルである`.env`に、ソースコードにまぜちゃいけない色々な情報を埋め込んでおいて、
コードから環境変数として参照とかはよくやるのですが、iPhoneアプリ開発でやったことがなかったので調べてみました。

結果的にはドンピシャなやつがなかったので、自分で色々組み合わせました。

最初ずっと英語で調べていたのですが、諦めて日本語で探したら参考になる記事がわんさかでてきたので、日本のiOSエンジニアの方々のレベルは海外なんかに負けてないと思いました。

手順

1. `Preprocess Info.plist file`に`YES`を設定する
1. `<プロジェクト名>-Info.plist`に環境変数名と同じkeyを追加する
1. `.env`に必要な変数を定義する
1. `[[[NSBundle mainBundle] infoDictionary] objectForKey:@"環境変数名"];`で参照する (Swiftは `NSBundle.mainBundle().objectForInfoDictionaryKey("環境変数名") as String`)
1. `.env_sample`をつくって`.env`は`.gitignore`する
1. Run Scriptに以下のソースを追加する

```bash:RunScript
if [ ${CONFIGURATION} = "Debug" ]; then

    plistBuddy="/usr/libexec/PlistBuddy"
    infoPlistFileSource="${SRCROOT}/${INFOPLIST_FILE}"
    infoPlistFileDestination="${TEMP_DIR}/Preprocessed-Info.plist"

    # 今回は関係ないけどビルドバージョンを自動で更新する
    currentVersion=$($plistBuddy -c "Print CFBundleVersion" "${infoPlistFileSource}")
    versionPrefix="dev-"
    lastCommitDate=$(git log -1 --format='%ci')
    versionSuffix=" ($lastCommitDate)"
    versionString=${versionPrefix}${currentVersion}${versionSuffix}

    $plistBuddy -c "Set :CFBundleVersion ${versionString}" "${infoPlistFileDestination}"

    # .env内の環境変数を参照できるようにする
    . ./.env

    $plistBuddy -c "Set :HOGE ${HOGE}" "${infoPlistFileDestination}"
    $plistBuddy -c "Set :FUGA ${FUGA}" "${infoPlistFileDestination}"
    $plistBuddy -c "Set :PIYO ${PIYO}" "${infoPlistFileDestination}"

fi
```

環境変数の定義はこんな感じです。

```bash:.env
HOGE='ほげ'
FUGA='ふが'
PIYO='ぴよぴよ'
```

plistも例えばこんな感じです。

![スクリーンショット 2015-07-02 11.24.29.png](https://qiita-image-store.s3.amazonaws.com/0/4194/71284fdd-6fd3-8367-8a05-2e2e78a7e8ab.png)

で、結局なんですが何回かビルドしたり、クリーンしたりしないと、ちゃんと環境変数を参照できないことを覗いては概ねうまくいきました！
何回かビルドすると最終的に意図通りに参照できるように収束するので問題ないかと。

もっといい方法がありましたら、教えてください！

## 参考URL

- [ios - How can I exclude a secret key from an open-sourced Xcode project? - Stack Overflow](http://stackoverflow.com/questions/12711205/how-can-i-exclude-a-secret-key-from-an-open-sourced-xcode-project)
- [PlistBuddy(8) Mac OS X Manual Page](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/PlistBuddy.8.html)
- [iPhoneの実機デバッグで自動的にMacのローカルサーバーと通信させる - The Powerful Code](http://powerful-code.com/blog/2013/11/script-for-debugging/)
- [これがXcodeでのバージョニングの決定版になるかも - TOKOROM BLOG](http://www.tokoro.me/2014/05/19/xcode-versioning/)
- [EZ-NET: Build 番号の自動更新スクリプトで Info.plist そのものに書き込まないための考察](http://program.station.ez-net.jp/special/objective-c/xcode/update-build.asp)
- [シェルスクリプトで外部ファイルに記述された変数を利用する方法 | 俺的備忘録 〜なんかいろいろ〜](http://orebibou.com/2014/11/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E5%A4%96%E9%83%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E8%A8%98%E8%BF%B0%E3%81%95%E3%82%8C%E3%81%9F%E5%A4%89/)
Ideone.comの使い方

# Ideone.comとは

Ideone.com http://ideone.com/

ブラウザ上でプログラムを書いてその実行まで出来るオンラインエディタ。
様々なプログラミング言語に対応している。

# 使い方

## 言語を選択

![01.png](https://qiita-image-store.s3.amazonaws.com/0/17037/136f639f-87bd-c276-73db-87f35b69c5b7.png)

左下の赤枠のプルダウンで選択
（画面はC#を選択）


## 選択した言語でコードを記述する

![02.png](https://qiita-image-store.s3.amazonaws.com/0/17037/98c1923f-aa08-5159-9205-7eb04057d43e.png)

赤枠内に記述する

![03.png](https://qiita-image-store.s3.amazonaws.com/0/17037/de684963-feb0-4917-9de6-50a0deec934f.png)

こんな感じで記述

## 書いたコードを実行する

![05.png](https://qiita-image-store.s3.amazonaws.com/0/17037/6148a956-5f08-c988-83b3-95526f51d876.png)

右下の「Run」ボタンをクリックして実行する

* 「Sucecess」と表示されれば成功
* 「stdout」の下に実行結果が出力される
* 修正する場合は左上の「edit」をクリック

## エラーの場合

![06.png](https://qiita-image-store.s3.amazonaws.com/0/17037/0ff9b5cd-ae01-faef-6487-6377a6076441.png)

エラーの場合はエラーメッセージが表示されます

## 誰かに見せる場合

![07.png](https://qiita-image-store.s3.amazonaws.com/0/17037/657c5a6a-0eeb-b03c-2003-5e46496011db.png)

誰かに見せたい場合は画面右にある共有URLを教える

終わり
Android Wearでエミュレータだけで開発を始める時に少し便利なシェルスクリプトを作る

[Android Wearのデバッグを始める時の手順メモ](http://qiita.com/mapyo/items/b1d9685b01a289a17f3b)


この辺でAndroid wearで開発を始める時に必要な手順について書いた。


しかし普段、開発を始める時に、IPが微妙に変わっていたりして、`adb device`コマンドを打っていちいち調べながらやるのがめんどくさかった。
なのでシェルスクリプトで必要な値を取ってきてコマンドを実行するようにした。





```sh
#!/bin/sh
WEAR=`adb devices | grep emulator | cut -f1`
HANDHELD=`adb devices | grep 5555 | cut -f1`
adb -d -s $WEAR forward tcp:5601 tcp:5601
adb -d -s $HANDHELD forward tcp:5601 tcp:5601
```

※handheld側はgenymotion。wear側は標準エミュレータを使っている前提です。


ほんのちょっとのことだけど、地味に便利！
vimwの無名ファイルのコマンドを実行

# コマンド
`:w !cmd`

# 説明
環境によって`cmd`を変えるといいです。

詳しくは、`:h :w_c`を参照。

`:w`コマンドは保存するだけの機能ではなく、テキスト出力の機能もあるみたいです。
canvasの座標

# HTML5 の &lt;canvas&gt; 要素

## canvas の線

canvas で line（線）を引くとデフォルトでlineWidth = 1.0 になっているのに、ブラウザ上では2pxの薄い線が引かれたように見える。

なぜか？

これは、canvasの座標は(OpenGL風の) x,y,z 軸のあるグラフ空間の座標で、画面上の1ピクセルと対応した座標ではないからだ。

(x,y) = (5,0) から (5,100) に引いた、Y軸と平行な線はx=5の線と重なる。これをブラウザに写すと、(4, 0) ピクセルと (5, 0) ピクセルにまたがった位置から Y = 100 まで線を引くことになる。幅1.0の線を2ピクセルの中間に引くので、x=4のピクセルとx=5のピクセルに半分ずつ色をつけて50%の濃度で色をつけた線をY=0からY=100まで、ブラウザに写すと(4, -1)ピクセルと(5, 0)ピクセルの境目から(4, 99)ピクセルと(5,100)ピクセルの境目まで線を引くことになる。2ピクセル幅に半分の濃さで。

つまり、canvasに指示する(0,0)の座標はブラウザ上の<canvas>の左上隅の(0, 0)のピクセルの中のさらに左上隅を指しているのだ。

canvasの座標は数学的な概念の座標で、それをGPUやフレームバッファを使って実際に目に見える液晶の点にする間に座標の変換が起こっている。

http://d.hatena.ne.jp/mindcat/20100815/1281877127
フォルダにあるファイルの一覧をコピー（列挙）する

[Windows]フォルダにあるファイルの一覧をコピー（列挙）する
-----------------------------------------
たまにメールとかで、
　「そのディレクトリにあるファイル（名）を教えて下さい。」
と聞くと、頑張って写経する人がいる。

欲しいフォルダのカレントディレクトリまで移動（※方法は＜補足＞に記載）し、以下をコマンドラインで実行して貼り付けして欲しい。

```
dir /B | clip
```
※clipはあまり有名じゃない様ですが、クリップボードに値を入れるコマンドです。

サブディレクトリのファイルも含めて必要であれば、$/s$を追加して以下実行して貼り付けして下さい。

```
dir /B /S | clip
```


＜補足＞コマンドラインの実行方法
------------------------------------------------
Windowsの人は、

１. ［ファイル名を指定して実行］ダイアログボックスを開く

```
Windowsマーク+R
```
２. cmdと入力してEnter

３. 取得したいディレクトリへの絶対パスをコピーして以下のよう移動
例えば、C:\tempディレクトリに移動したいのであれば、以下のように打ち込んでEnter


```
cd "C:\temp"
```

４. あとは、本文の以下コマンドを打ちこんで下さい。

```sh
dir /B | clip
```
AWS 認定ソリューションアーキテクトになるための勉強法

こんにちは。
先日、AWS 認定ソリューションアーキテクト（アソシエイト）に合格した者です。
私が実践した勉強法をまとめます。

# はじめに
AWS実戦経験はほぼ皆無。2ヶ月前にAWSアカウント取得後、EC2やVPCあたりを少し触った程度。ただし日頃からサーバーサイドの開発したり、VMWareなどの仮想化環境いじっているため、インフラ周りの知識は多少あるつもり。
試験の準備は5月中旬から始め、6月末の受験まで勉強期間は1ヶ月ちょっとでした。
参考までに、技術系の主な保持資格は以下の通り。

* 基本情報処理技術者
* ネットワークスペシャリスト

# 製品・サービス
手を動かしてみるのが一番なので、書籍やインターネット情報を参考にできる限り多くのサービスに触れるように心がけました。

* EC2
* VPC
* EBS
* S3
* RDS
* SNS
* Route 53
* IAM
* AWS CLI
* Elastic Beanstalk
* Cloud Watch
* Cloud Formation
* Lambda

# AWS 資料
* 試験ガイド（ブループリント）
  * http://aws.amazon.com/jp/certification/certified-solutions-architect-associate/ 
  * これは必須。試験範囲や参考資料が紹介されています。急がばまわれです。
* サンプル問題
  * http://aws.amazon.com/jp/certification/certified-solutions-architect-associate/ 
  * ソリューションアーキテクトだけでなく、デベロッパーやシスオペの問題も解きました。
* ホワイトペーパー
  * http://aws.amazon.com/jp/whitepapers/
  * 試験ガイドで参考資料として紹介されているものには全て目を通しました。
* AWS クラウドサービス活用資料集
  * http://aws.amazon.com/jp/aws-jp-introduction/
  * ウェビナーの資料がSlideshareとPDF形式で読めます。いずれも興味をそそられる資料ばかりですが、数が多いので私は初心者向けのトレーニング資料を中心に、ソリューション資料とBlack Belt Tech Webinar の一部に目を通しました。中でもディザスタリカバリ関連は、実務で使える有益な資料だと思います。
* よくある質問
  * http://aws.amazon.com/jp/ec2/faqs/
  * AWSのサービスごとにFAQが日本語でまとめられています。私は主要なサービスのWebページをKindleへ転送して通勤電車で読みました。


# トレー二ング
AWS主催の試験準備ワークショップ（半日）に参加しました。AWSのトレーナー直々に試験概要や勉強法について教えて頂き、大変役に立ちました。受講できる機会があればぜひ。
その後、ウェブ上で模擬試験を一度受けました。これもできればやっておくと良いと思います。

# 書籍
Kindleと紙の本で手当たり次第読みました。私に最も合っていたのは「パターン別構築・運用ガイド」で、AWSの様々なサービスを手を動かして実践していくものです。AWSは自分で触ってみないとピンと来ないので、この本はとても良かったです。

* Amazon Web Services 基礎からのネットワーク&サーバー構築
  * http://www.amazon.co.jp/dp/4822262960/
* Amazon Web Services クラウドデザインパターン設計ガイド
  * http://www.amazon.co.jp/dp/4822277372/
* Amazon Web Services クラウドデザインパターン実装ガイド
  * http://www.amazon.co.jp/dp/4822277364/
* Amazon Web Services 徹底活用ガイド (日経BPムック)
  * http://www.amazon.co.jp/dp/482226999X/
* Amazon Web Services パターン別構築・運用ガイド
  * http://www.amazon.co.jp/dp/4797382570/

# ブログ
経験者の皆さんが書かれたブログを読みました。
AWS公式の「よくある質問」や「活用資料集」の存在もブログで知ることができました。
この場を借りてお礼申し上げます。ありがとうございます。

# おわりに
知れば知るほど、非常によく考えられたクラウドサービスだなと再認識させられました。
今回学んだ知識を活かし、現場でAWSを活用していければと思います。
機会があれば他の試験（デベロッパーなど）にも挑戦したいなあと思っています。
ReportViewer で拡張子xlsxのExcelへExport

#はじめに
ReportViewer をWinFormで使い、簡単にExportできないか調査したところ、旧型式(拡張子xls)は簡単にExportができた。
参照ページ[reportViewerでエクスポートを自動化させる](http://blog.livedoor.jp/hurtmut/archives/51201323.html)のとおりにすると、xlsのExcelになる。
#拡張子xlsxにする方法
単純に、「Excel」を「EXCELOPENXML」に変更するだけでExportできた。

```csharp
var bytes = reportViewer1.ServerReport.Render("EXCELOPENXML");
using (var fs = new FileStream("test.xlsx", FileMode.Create))
    fs.Write(bytes, 0, bytes.Length);
```

#HTMLにする方法
追記でHTMLで出力する方法は「HTML4.0」を指定する。

```csharp
var bytes = reportViewer1.ServerReport.Render("HTML4.0");
using (var fs = new FileStream("test.html", FileMode.Create))
    fs.Write(bytes, 0, bytes.Length);
```
Xcode 6-7系のバージョン間の微妙な差異まとめ

**以下、最終更新日時時点の情報です。**
たまにメンテナンスしています。

---

Xcode 6系のバージョン間の微妙な差異、特にSwiftで書いている場合しっかり把握しているとたまに捗ります(　´･‿･｀)


|Xcode|Swift|Apple Watch| tvOS |iOS SDK |CircleCI|Travis|備考|
|---|---|---|---|---|---|---|---|
|6.0|1.0| 　| 　|8.0　 |　 |　|　|
|6.1.1|1.1|　| 　| 8.1 　|o | o |　| 　|
|6.2|-|WatchKit| 　|8.2　|　|　|　|　|
|6.3.1|1.2|　| 　|8.3　|[o](https://circleci.com/docs/ios)| [o](http://blog.travis-ci.com/2015-05-26-xcode-63-beta-general-availability/) |エンバグ(※1)|
|6.3.2|-|　| 　|8.3　|　| 　|6.3.1のバグ直った|
|6.4|-|　| 　|8.4　|　| 　|2015/07/01リリース・現最新|
|7|2|watchOS 2| 　|9.0　|　| 　|2015/09/17リリース|
|7.1 |[2.1](http://www.russbishop.net/swift-2-1)|watchOS 2| 9.0　|9.1　|o　|o 　|2015/10/22リリース|
|7.2 |2.1.1|watchOS 2.1| 9.1　|9.2　|　| 　|2015/12/08リリース|
|7.3 |2.2|watchOS 2.2| 9.2　|9.3　| o　| o |2016/3/21リリース|
書いても意味の薄いマイナーバージョンは一部スキップしています。


## ※1: エンバグについて

これです。
Embedded Framework使ってたり(+もう少し条件あるかも)すると、ビルドが詰まってものすごく時間がかかってまともに使えなくなります(´・︵・｀)

```
Swift Compiler

Swift projects now compile quickly, fixing a speed regression in Xcode 6.3.1.
In Xcode 6.3.1, the Swift “Merge” compile phase could appear to hang for some targets. You no longer need to enable Whole Module Optimization in order to avoid this issue. (20638611)
```

https://developer.apple.com/library/mac/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html


`Whole Module Optimization`がデフォルトNOなのですが、YESにするとこの問題回避出来ます。

僕はちょうどこの問題に引っかかって、けっこうハマりました。
(XcodeやSwiftのバージョン上がるといろんな問題が同時発生するので、何が原因か特定に手こずることがある)

---

どのバージョンのXcodeを使うかは基本お好みですが、極力最新のを使うのがベター、という前提の下、ユースケースとしては以下などですかね。


# ユースケース

## CircleCI・Travis使うなら

**Xcode 6.3.1〜Xcode 7.1**

この間にはSwiftの仕様に(ほぼ)差が無いため、僕はAppStore経由でインストール出来て取り回しの良い正式版最新のXcode 6.4で開発してます。
まあ差異があったらCI上でビルドエラーとして検知してくれますし。その結果どうしてもCI上のXcodeのバージョンと合わせなきゃいけないということになったら手元の環境も揃えるつもりですが、まだ困ったこと無いです。

→最近、[Bitrise - Mobile Continuous Integration and Delivery](https://www.bitrise.io/)に乗り換えました。
正式版は即時追従してくれるし、β版もある程度追従してくれます。

## Apple TVアプリ作るなら

Xcode 7.1 以降ですね。

# 管理のコツ

僕は以下のように管理していて、もう今後使わないであろうタイミングでこまめに削除しています。

- AppStore最新版はそのまま弄らずXcode.appとして扱う
- それ以外は、Xcode-6.3.1.appなどリネームして管理
	- リネームしないとAppStore版で上書きされちゃったりする

## `xcode-select`コマンド活用

`xcodebuild`など実行した時、どの版が使われるのかを管理します。
CI環境作っていれば日常的に実行することは無いですが、たまに検証などでこれ系のコマンド使います。

- 現在のパス確認: `xcode-select -p`
- パス変更: `sudo xcode-select -s NEW_PATH`

`DEVELOPER_DIR`の環境変数に設定しても同様のことが出来ます。


# リンク
- 過去のXcode: https://developer.apple.com/downloads/
- Pre-release系: [Download - iOS - Apple Developer](https://developer.apple.com/ios/download/)
require vs use

## 要約
Clojure 1.4以降では、基本的に`use`を使う必要はありません。`require`を使いましょう。

## requireとuseの違い
Clojureで名前空間を定義する際、別の名前空間をロードして使う方法がいくつか提供されています。その中でも、`require`と`use`はよく似た機能をもっていて、使い分けが難しいと感じる人もいるかもしれません。

`require`と`use`の使い方を表にまとめると次のようになります。

|                  |require|use|名前の参照方法|
|:-----------------|:---------------------|:--|:--|
|すべて名前空間修飾あり|`(:require foo.a)`| - |`foo.a/f`, `foo.a/g`|
|すべて名前空間修飾あり(別名)|`(:require [foo.a :as a])`|`(:use [foo.a :as a])`|`a/f`, `a/g`|
|指定した名前のみ名前空間修飾なし|`(:require [foo.a :refer [f]])`|`(:use [foo.a :only [f]])`|`f`, `foo.a/g`|
|すべて名前空間修飾なし|`(:require [foo.a :refer :all])`|`(:use foo.a)`|`f`, `g`|

たとえば、次のような名前空間`foo.a`があったとしましょう。

```clj
(ns foo.a)

(defn f [x] ...)
(defn g [x] ...)
```

この名前空間`foo.a`を使用する名前空間`foo.b`が次のように定義されているとき、

```clj
(ns foo.b
  (:require [foo.a :refer [f]]))
```

この名前空間の中では、`:refer`で指定された`f`のみが名前空間修飾なしで参照でき、それ以外(この場合は`g`)は必ず名前空間名で修飾して参照しなければいけません。

```clj
(f ...)
(foo.a/g ...)
```

`require`の`:as`と`:refer`は組み合わせて使うこともできます。その場合は`:refer`で指定した名前のみが名前空間修飾なしで参照でき、それ以外の名前は`:as`で指定した別名で修飾して参照します。`use`でも同様のことができます。

```clj
(ns foo.b
  (:require [foo.a :as a :refer [f]]))

(f ...)
(a/g ...)
```

表に戻って`require`と`use`を比べてみると、その違いはほとんどないように見えます。しかし、両者の間で顕著に異なっている部分が1つあります。それは、**オプションをまったく指定しなかった場合のデフォルトの挙動**です。
`require`はオプションを指定しなかった場合、対象となる名前空間で定義された名前はすべて名前空間修飾してしか使うことができません。一方、`use`をオプションなしで使った場合には、すべての名前が名前空間修飾なしで使えるようになります。`use`のこのデフォルトの挙動によって、どの名前がどの名前空間で定義されているのかを追いづらくなり保守性が悪くなってしまうため、使用は控えた方がいいといわれています。

## なぜこのような状況になっているのか？
ここまで読んできた人の中には、なぜ似たような機能を2つも持つような状況になっているのか疑問に思う人もいるかもしれません。
`use`はもともと、`require`＋`refer`[^1]相当の機能として実装されています。今回は触れませんでしたが、`use`には`:rename`や`:exclude`などのオプションも備えています。逆に、1.4以前の`require`には`:refer`の機能はありませんでした。つまり、`use`の方が`require`の完全な上位互換なのです。しかし、実際には`:rename`や`:exclude`などのマイナーなオプションはあまり使われず、`require`と`use`はほとんど同じように使われてきました。そして、不慣れな人にとってはますます`require`と`use`の機能の違いは分かりづらく、不用意にオプションなしの`use`が乱用されることで、保守性の悪いコードを生みやすい状況を作っていました。
このような事態を受けて、デフォルトの挙動で名前空間修飾を必要とする`require`で一本化して`use`の使用を置き換えることを目的に、1.4で新たに`require`に`:refer`オプションが加えられたのです。

このあたりの事情は、該当チケットやそこにリンクの張られたメーリングリストのスレッドに当時のやりとりがあります。

- [CLJ-879: Allow :require to support a :refer clause](http://dev.clojure.org/jira/browse/CLJ-879)
- [Clojure Dev: simplifying the require/use situation](https://groups.google.com/forum/#!topic/clojure-dev/kbcI3bkJr_0)

そんなわけで、1.4以降では`use`は使わずとも`require`だけでコードが書けるようになっています。`use`自体はdeprecatedとまではなっていないものの、上記の修正の意図をくみとると積極的に`use`を使う理由はないように思います。今、あえて`use`を使う状況は、REPLでの開発で逐一`(require [... :refer :all])`とするのが面倒な場合やテストコードを書くときなど、一部のケースに限られるでしょう。

## おわりに
`require`で`:refer`オプションがサポートされたのはClojureの歴史の中では比較的最近(とはいえ3年前)で、現存するClojureに関する日本語の書籍でこれについて触れている本はほとんどありません。これに限らず、Clojureの新しい機能について日本語の情報が手に入るまでにはかなり"時差"があります。現状としては、Clojureのモダンな書き方にキャッチアップしていくには、活発に開発されているClojureプロジェクトのコードを読んで学ぶか、やはり頑張って英語のドキュメント等をウォッチしていくしかないでしょう(Clojureにもっと普及してもらいたいと思っている身としては、この状況をもうちょっと是正できれば、とも思っていますが…)。

[^1]: 別の名前空間で定義された名前を名前空間修飾なしに参照できるようにする機能
電子回路 > コイル > 電圧が電流より90度位相が進む理由

引用: 基礎から学ぶ電気回路計算 by 永田博義さん

> ファラデーの実験によると、インダクタンスL[H]に電流i=I_m sin(ωt)[A]が流れているとき、端子間に現れる電圧v_Lは、次式のように電流の変化率（微分）に比例することが明らかになりました。

```math
v_L = L \frac{d}{dt} \{ I_m sin(\omega t) \}  \\
    = \omega L { I_m cos(\omega t)} \\
    = \omega L I_m sin(\omega t + 90\deg)
```

他の本を呼んでいて、位相が90度進む理由がわからずにまる覚えしていたが、「微分する」「微分回路」という概念が入ると、sinを微分した値はcosで、sin(θ + 90deg)と理解できた。

こうなると、覚えるのは「90度進む」ということでなく「微分する」ということだけでいい。
同時に、コンデンサの場合は「積分する」「積分回路」ということから「90度遅れる」というのが分かる。
(0, eval)('this')とは何なのか


##はじめに
knockout.jsの冒頭のソースコードを見たとき気になる１行があった。

```js:knockout.js
    var window = this || (0, eval)('this'), ...
```

この`(0,eval)('this')`はいったい何なのか。調べた。

##調べた結果

これはindirect eval callを使用した、どのスコープでも必ずグローバルオブジェクトの`this`を取得するためのテクニックであった。

ES5ではevalを直接呼び出すと、引数のコードはそのスコープで実行されるが、間接的に`eval`を呼び出すと、引数のコードは必ずグローバルスコープとなるそうだ。なので引数の`this`は必ずグローバルオブジェクトとなる。ブラウザでは`window`となり、Nodeでは`global`になるのだ。実際どうするかだが、eval関数を変数に代入し、その変数で実行すればよい。

```js:
// Nodeで実行
var obj = new (function(){
	this.direct = eval('this');
    var ev = eval;// 変数に代入
	this.indirect = ev('this');
});

console.log(obj.direct === global);//false
console.log(obj.indirect === global);//true

```
これを極限にまで簡略化すると`(0,eval)('this')`となる。カンマ演算子は左から順に評価して、最後の項目を返す。なので(0,eval)はevalを返す関数とみることができる。こういうイメージだろうか。

```js:
 (function(){ return eval;}(0))('this');
```

返す値は一時変数に代入されるので、そこでevalの間接参照となり、グローバルスコープで実行され、グローバルスコープの`this`が取得できる。

## 何なのかわかったところで

実際に試すと見事グローバルスコープの`this`が取得できた。

```js:
// Nodeで実行
var obj = new (function(){
	this.direct = eval('this');
	this.indirect = (0,eval)('this');
});

console.log(obj.direct === global);//false
console.log(obj.indirect === global);//true

```
電子回路 > アドミタンス Y

引用: 基礎から学ぶ電気回路計算 by 永田博義さん


```math
\dot{Y} = G - jB [S]
```
>と表されます。このときG[S]をコンダクタンス、B[S]をサセプタンスと呼びます。

上記のドット付きは複素数の値を表す。

Sはジーメンス。


以前、回路計算の達人から「タンスを覚えなさい」と言われたことがある。

インピーダンス、インダクタンス、コンダクタンス、(誘導性、容量性）リアクタンスなどはある程度理解したと思うが、アドミタンスは知らなかった。
技術英語 > shorthand notation


引用: Swift Programming
https://www.youtube.com/watch?v=6Zf79Ns8_oY

@09:34
> num++, which is <font color=red>shorthand notation</font> for add one to whatever the num is.

<hr>
shorthand notationの反対としては longhand notation があるようだ。

http://www.hongkiat.com/blog/css-shorthand-longhand-notations/
> ... on both CSS shorthand notations and longhand notations, ...

<hr>
handで思い出したのが all hands 。
意味は「総員」。

Star trek: Voyagerにてよく聞くフレーズだ。 

「Brace for impact, all hands (衝撃に備えよ、総員）」のような場面などで使われる。
エクスプローラーで通常見れないフォルダ・ファイルの作り方(Windows/.NET/C#)システム隠しファイル

エクスプローラーからは通常見れないフォルダ・ファイルを作る方法をご紹介します。

Windowsには、「隠しファイル」というものが存在しますが、
さらにその上をいく、「システム隠しファイル」を作ることができます。
ちなみに、これより上はWindows8.1現在、存在しません。
 
ディレクトリとファイルの属性に、

System.IO.FileAttributes.Hiddenと
System.IO.FileAttributes.System

を追加してやります。
以下、gistに貼ってあります。
https://gist.github.com/Koki-Shimizu/86b1dab64b6cf319658a

```csharp:Program.cs
using System.IO;
namespace HiddenFolderMaker
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = @"C:\temp\hidden2\";

            Directory.CreateDirectory(path);

            var directoryInfo = new DirectoryInfo(path);
            directoryInfo.Attributes |= System.IO.FileAttributes.Hidden;
            directoryInfo.Attributes |= System.IO.FileAttributes.System;

            var filepath = Path.Combine(path, "naisyo.txt");

            File.CreateText(filepath);

            var file_attr = File.GetAttributes(filepath);

            File.SetAttributes(filepath,file_attr | FileAttributes.Hidden);
            File.SetAttributes(filepath, file_attr | FileAttributes.System);
        }
    }
}
```


こうするとエクスプローラーのオプション設定にて、

　ファイルとフォルダーの表示にて、
「隠しファイル、隠しフォルダー、および隠しドライブを表示する」を選択します。
続いて、
「保護されたオペレーション　システム　ファイルを表示しない（推奨）」のチェックを外し、適用を行います。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/12790/789a0315-b2f0-b20d-c2b1-13aa35a5c2e9.png)



そうすると、やっと隠し状態で見れます。

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/12790/dd6c06a7-2b50-0deb-268d-ce561d3a8338.png)



ちなみに、結局上記オプションを設定すれば見れちゃうじゃないか、と思われるかも知れませんが、イタチごっこになっちゃいますので、これ以上のレベルは追加しないようです。
【自分用メモ】PowerShellによるIPアドレスの設定及び変更

#◆IPアドレス操作
PowerShellでIPアドレスを設定する場合は、まず、Remove-NetIPAddressしてからNew-NetIPAddressするという手順を踏む。set-NetIPAddressで変更しようとするとエラーになるほか、set-NetIPAddressの際にはデフォルトゲートウェイが指定できないなど、不完全な設定しかできない。

#静的に設定したIPアドレスの削除
```lang:PowerShellコマンド
Remove-NetIPAddress -InterfaceIndex 13 -IPAddress "192.168.88.88" -DefaultGateway "192.168.88.1"
```
##【解説】
「-InterfaceIndex 13」は、Get-NetAdapterで表示されたifIndex Statusの値なので各環境で読み替える必要あり。
「-IPAddress "192.168.88.88"」は、文字通り、静的に設定した削除対象のIPアドレスなので、各環境で読み替える必要あり。
「-DefaultGateway "192.168.88.1"」は、文字通り、静的に設定した削除対象のデフォルトゲートウェイなので、各環境で読み替える必要あり。
明示的にデフォルトゲートウェイを削除しないと、デフォルトゲートウェイだけ残ってしまう。

#静的に設定したDNSサーバの削除
```lang:PowerShellコマンド
Set-DnsClientServerAddress -InterfaceIndex 13 -ResetServerAddresses
```
##【解説】
「-InterfaceIndex 13」は、Get-NetAdapterで表示されたifIndex Statusの値なので各環境で読み替える必要あり。
「-ResetServerAddresses」のみで、静的に設定されているDNSサーバがすべてクリアされる。

#DHCPで配布されたIPアドレスの削除
```lang:PowerShellコマンド
Remove-NetIPAddress -InterfaceIndex 13 -DefaultGateway "172.16.64.1"
```
##【解説】
「-InterfaceIndex 13」は、Get-NetAdapterで表示されたifIndex Statusの値なので各環境で読み替える必要あり。
「-DefaultGateway "172.16.64.1"」は、文字通り、静的に設定した削除対象のデフォルトゲートウェイなので、各環境で読み替える必要あり。
明示的にデフォルトゲートウェイを削除しないと、デフォルトゲートウェイだけ残ってしまう。

#静的なIPアドレスの設定
```lang:PowerShellコマンド
New-NetIPAddress -InterfaceIndex 13 -IPAddress "192.168.88.88" -AddressFamily IPv4 -PrefixLength 24 -DefaultGateway "192.168.88.1"
```
##【解説】
「-InterfaceIndex 13」は、Get-NetAdapterで表示されたifIndex Statusの値なので各環境で読み替える必要あり。
「-IPAddress "192.168.88.88"」は、文字通り、静的に設定したいIPアドレスなので、各環境で読み替える必要あり。
「-DefaultGateway "192.168.88.1"」は、文字通り、静的に設定したいデフォルトゲートウェイなので、各環境で読み替える必要あり。

#静的なDNSサーバの設定
```lang:PowerShellコマンド
Set-DnsClientServerAddress -InterfaceIndex 13 -ServerAddresses "192.168.88.1"
```
##【解説】
「-InterfaceIndex 13」は、Get-NetAdapterで表示されたifIndex Statusの値なので各環境で読み替える必要あり。
「-IPAddress "192.168.88.88"」は、文字通り、静的に設定したいDNSサーバなので、各環境で読み替える必要あり。

#DHCPによるIP取得の設定
```lang:PowerShellコマンド
Set-NetIPInterface -InterfaceIndex 13 -Dhcp Enabled
```
##【解説】
「-InterfaceIndex 13」は、Get-NetAdapterで表示されたifIndex Statusの値なので各環境で読み替える必要あり。

#◆ネットワークアダプタの有効・無効
ネットワークの静的IP設定とDHCPによるIP取得の設定をPowerShellから繰り返し行うと、DHCPが降ってこない場合がある。また、ipconfig /renewがすばやく実行されない場合は、ネットワークアダプタを無効としたあと有効とすることで、すぐにipconfig /renew相当の処理が実施される。
しかし、その際、「タスクトレイ」→「ネットワークと共有センター」→「アダプターの設定の変更」または「コントロール パネル」→「ネットワークとインターネット」→「ネットワーク接続」→「アダプターの設定の変更」で、対象のネットワークアダプタを無効→有効する操作は面倒であるため、これもPowerShellで実施する。


#ネットワークアダプタの無効操作
```lang:PowerShellコマンド
Disable-NetAdapter -Name "eth0"
```
##【解説】
「-Name "eth0"」は、Get-NetAdapterで表示されたName（ネットワークアダプタ名）の値なので各環境で読み替える必要あり。
デフォルトのネットワークアダプタ名は、「ローカルエリア接続 2」等となっており、PowerShellのコマンド入力時に日本語入力の切り替えや途中で半角スペースを入力する必要があるなど面倒であるため、事前に名称を変更する等しておくと楽になる。（PowerShellからネットワークアダプタ名を変更する方法は後で調べる）

#ネットワークアダプタの有効操作
```lang:PowerShellコマンド
Enable-NetAdapter -Name "eth0"
```
##【解説】
「-Name "eth0"」は、Get-NetAdapterで表示されたName（ネットワークアダプタ名）の値なので各環境で読み替える必要あり。
デフォルトのネットワークアダプタ名は、「ローカルエリア接続 2」等となっており、PowerShellのコマンド入力時に日本語入力の切り替えや途中で半角スペースを入力する必要があるなど面倒であるため、事前に名称を変更する等しておくと楽になる。
.gitignore を指定するまえに無視したいファイルが複数登録されてしまったときのコマンド


.gitignore に設定したリストでrmする

```
git rm --cached `git ls-files --full-name -i --exclude-from=.gitignore`
```

[あとからまとめて.gitignoreする方法](http://qiita.com/yuuAn/items/b1d1df2e810fd6b92574)
JSONはViewなのか

## RailsはデフォルトでJSONがView

Railsをつかっていると、デフォルトでjbuilderというgemが含まれていて、JSONを返すレスポンをさばくとき、JSONは viewとして扱うようになっています。

jbuilderを使っていれば、処理は同じでレスポンスのフォーマットだけが違う。みたいなアクションを作りたいとき、すごくすっきり書けます。

```ruby
class ProductsController < ApplicationController
  def show
    @product = Product.find(params[:id)
  end
end
```

上のように書いておけば、リクエストのフォーマットに応じてHTMLテンプレファイルかJSONのDSLファイルか適切なものを探してそれをレンダリングして返してくれます。
HTMLとJSONが単にフォーマットが違うだけ。という扱いがされているからです。両者の実装上のちがいは、置くファイルのフォーマットだけになります。

## HTMLはUI、JSONはデータ

HTMLもJSONも、ただ Content-Typeが違うだけ。なのはたしかです。しかし私見ですが、HTMLとJSONはもはや表現している内容の幅に開きがありすぎるので、統一的に扱うべきなのか疑問です。

通常、2つのフォーマットは以下のようなことを表現しています。
* HTML → プレゼンテーションやUIを表現したもの
* JSON → データを表現したもの

JSONがコントローラで選択されるViewということになっていると、たとえ同じリソースを表現しているJSONだったとしても、URLが違ったり、別のリソースにネストしていたり、文脈に応じてフォーマットが変わることを許してしまいます。
この柔軟性は必要悪です。JSONを受けとるクライアントにとってみれば、理想的には1つのリソースのJSON表現は1つであったほうが扱いやすいからです。

使う場所によってプロパティが変わってしまい、いつどのように変わるかはドキュメントを見ないとわからない。なんていうクラスがあったら見通しが悪いと思いますが、JSONにも同じようなことが言えるとおもわれます。

## HTMLはUIを含んでいる

HTMLは、人間に対してデータをプレゼンテーションしていて、見た目に関する情報や、関連するjsやcssの情報なんかを含んでいます。しかも、URLによって表示項目が変わったりするのは普通です。

たとえば、

```html
<span>Yamada</span>
```

 という表現がされていたユーザというリソースが、別の画面では 

```html
<span><div class="suteki">Yamada!!!</div></span>
```

みたいに表現が変わるのはごく普通のことです。
過去の思想がそうだったかはわからないですが、現在のHTMLは、人間になにをどう見せるかを記述するためのものとなっているので、URLごと、アクションごとに別のものがレンダリングできる柔軟性を獲得しまくっていくのは自然なことです。

JSONはどうでしょう。JSONは、基本的にはプログラムが読むためのものです。 

```js
{"name": "Yamada"}
```

 というJSONが、別のURLでは　

```js
{"name": { "suteki": "Yamada!!!"} }
```

みたいになってたら、ちょっと極端な例ですが、とても使えたもんじゃないですよね。

そもそも、Viewとデータを分離しているのは、データそのものと、見た目の表現の形式を分離したいからです。JSONでデータをうけとり、そこからさらにネイティブアプリなりHTMLなりで見た目の表現を組み立てるクライアントの視点からみるとJSONはViewではないと言うことができます。

## gemたち

以上のような理由から、僕は、モデルのデータから一意なJSONを組み立てるタイプの gem を好んで使っています。
そのようなノリのあるgemには以下のようなものがあります。

* https://github.com/rails-api/active_model_serializers
* https://github.com/apotonick/roar
Bootstrap3 tabs - コントローラに応じて、activeタブを変更する。

#概要

- [Bootstrap3 tabs](http://getbootstrap.com/javascript/#tabs)を使用。
- どのコントローラから呼ばれたかを検知し、activeタブを切り替える。

#経緯
ユーザーがフォームを提出後、検証に引っかかり、エラーメッセージとともにやり直しさせることは、よくあります。全てが別々のテンプレートであれば何も問題がないのですが、タブを使用し一画面で複数の機能を持たせる場合、activeタブを状況に応じて、切り替えたくなります。
例えば、タブのひとつに新規作成フォームがあるとします。再レンダリング後は、フォームをactiveにするのが自然です。しかしながら、何もしないと、いつもデフォルトがactiveになってしまいフォームが隠れてしまいます。

#やりたいことの流れ
####1. デフォルトでは表が表示される。
![Screenshot 2015-07-02 21.50.48.png](https://qiita-image-store.s3.amazonaws.com/0/82804/11edb5b1-1642-ac54-5a64-058ab8efe98b.png)

####2. 新規作成用タブをクリックするとフォームが表示される。(検証に引っかかるよう、わざと空フォームを提出)

![Screenshot 2015-07-02 21.51.15.png](https://qiita-image-store.s3.amazonaws.com/0/82804/112b97db-0577-8a13-9f83-9e6189ffee63.png)

####3. やり直しさせるのだから、再レンダリング後、(デフォルトのページを表示する代わりに)フォームのタブをactiveにしたい。
![Screenshot 2015-07-02 21.51.39.png](https://qiita-image-store.s3.amazonaws.com/0/82804/5f4e6d2c-65ce-d580-468c-07d7289c6da8.png)

#解決策
解決策のひとつとして現在のコントローラ名に応じて、タブを切り替える方法があります。テンプレートはHAMLで書いています。
以下の例では、デフォルト：#tabs_1がactiveで、MovingItemsControllerからレンダリングされた場合のみ例外的に#tabs_2をactiveにするとします。

####1. 最初、レンダリング前にCSSクラスを入れ替える方法を考えました。

```haml:show.html.haml
-# タブ用クラス
- active_tab      = "active"
- active_content  = %w[tab-pane fade active in]
- default_tab     = ""
- default_content = %w[tab-pane fade]

-# タブ交換機 in Ruby
- if params[:controller] == 'moving_items'
  - tab1, content1 = default_tab, default_content
  - tab2, content2 = active_tab, active_content   #<= ACTIVE
- else
  - tab1, content1 = active_tab, active_content   #<= ACTIVE
  - tab2, content2 = default_tab, default_content

/ タブ
%ul{ class: "nav nav-tabs", role: 'tablist' }
  %li{ class: tab1 }
    %a{ href: "#tabs_1", role: "tab", data: { toggle: "tab" } }
      All items
  %li{ class: tab2 }
    %a{ href: "#tabs_2", role: "tab", data: { toggle: "tab" } }
      Add item

/ タブコンテンツ
.tab-content
  #tabs_1{ class: content1 }
    - if @moving_items.count > 0
      = render 'moving_items/table'
    - else
      %p No item found
  #tabs_2{ class: content2 }
    = render 'moving_items/form'
```
####2. その後、リファクタリングしていたら、JavaScriptで対応した方がスッキリすることに気がつきました。

```haml:show.html.haml
/ タブ
%ul{ class: "nav nav-tabs", role: 'tablist', id: "tabs_movings" }
  %li{ class: "active" }
    %a{ href: "#tabs_1", role: "tab", data: { toggle: "tab" } }
      All items
  %li
    %a{ href: "#tabs_2", role: "tab", data: { toggle: "tab" } }
      Add item

/ タブコンテンツ
.tab-content
  #tabs_1{ class: "tab-pane fade active in" }
    - if @moving_items.count > 0
      = render 'moving_items/table'
    - else
      %p No item found
  #tabs_2{ class: "tab-pane fade" }
    = render 'moving_items/form'

:coffee
  // タブ交換機 in JavaScript
  // ページが読み込まれた後、２番目のタブをactiveにする。
  jQuery ->
    if #{ params[:controller] == 'moving_items' }
      $('#tabs_movings li:eq(1) a').tab('show')
```
以上です。
Generics、typealiasを組み合わせた時のif let as? の挙動

「特定のクラスのときにnilを正常側で扱いたい」というような処理を書いていた時に遭遇したのでメモ
どれもAnyでas?キャストを行っているはずが、`test1` のときだけ結果が異なる。。


```swift

protocol Prot {
    typealias Test
}

// Generics + typealiasを使ったas?チェック
func test1<T: Prot>(prot: T, any: AnyObject?) -> Bool {
    
    if let any = any as? T.Test {
        return true
    }
    return false
}

// 通常のパターン
func test2<T: Prot>(prot: T, any: AnyObject?) -> Bool {
    
    if let any = any as? Any {
        return true
    }
    return false
}

// typealiasを使ったas?チェック
typealias AliasAny = Any
func test3<T: Prot>(prot: T, any: AnyObject?) -> Bool {
    
    if let any = any as? AliasAny {
        return true
    }
    return false
}


struct A: Prot {
    typealias Test = Any
}

let aaa: Int? = nil
test1(A(), aaa) //false !?
test2(A(), aaa) //true
test3(A(), aaa) //true

```
Ubuntu14.04LTSにcanonLBP9600Cのドライバをインストールする際の注意

初投稿になります
同環境内でのインクジェットプリンタ(PIXUS)を利用する方法は下記の通りですが
[Ubuntu 14.04 (64bit)でCanonのネットワークプリンタを使う](http://qiita.com/ma2shita/items/481d8f6625469e1defe2)

レーザービームプリンタLBP9系のドライバについて解説したいと思います。

僕のPCの環境はUbuntu14｡04LTS（64bit）です。

canonはLinux京のプリンタのドライバは下記で入手できるようになっています。
[canonプリンタ](http://cweb.canon.jp/e-support/software/index.html)

僕の場合はここでLBP9系プリナタを選択→OSはLinuxを選択すると下記のような画面になると思います。
![Screenshot from 2015-07-02 01:09:15.png](https://qiita-image-store.s3.amazonaws.com/0/84792/01aca3d6-96a8-63b4-3a1d-9d6adcc924ce.png)

ここで注意して欲しいのが64bit版だからといって上から2つめのドライバをDLしないでください。
間違えたドライバとして認識されます、違いはよくわかっていません。

あとは開放したファイルをdpkg -i でインストールしてください。やり方もそのファイルの中に書いてあります。
お疲れ様でした。
GoogleAnalyticsのカスタムレポートを使って手軽に経路×ファネル分析を始める

# eコマースの基礎分析 - ファネル分析 #
eコマースサイトを運営するにあたり、最も基礎的でざっくりとサービスの状態・弱点を理解するのに有効なのがファネル分析。本稿ではgoogle analyticsを使用してだれでも手軽にファネル分析を実践できる設定を紹介する。 なお本設定はgoogle analyticsにてeコマーストラッキングを実装している場合は同様の機能が使用可能なため不要となる。

# 設定の概要 #
ファネル分析とは、最終ゴール（ここでは購買とする）に到達するまでにユーザーが通過する各ページへの流入量と離脱率を把握し、施策を講じる際の優先度を決定する際によく用いられる。

##マイクロコンバージョン設定##
まず、ユーザーの行動経路順に、例えば下記のようなページにマイクロコンバージョンとしてゴール設定をする。もちろんサイト構造に応じて加減可能。

1. ランディングページ
2. カテゴリページ
3. 商品一覧ページ
4. 商品詳細ページ
5. カートページ
6. ユーザー情報入力ページ（住所・クレジットカードなど）
7. 購入完了ページ

（ゴール設定の仕方は[google analyticsのヘルプ](https://support.google.com/analytics/answer/1032415?hl=ja)を参照）

##カスタムレポートの設定##
画面上部にある```[カスタム]->[+新しいカスタムレポート]```と進み、オリジナルのレポートを作成する。

各設定項目は以下を参考に。

* ```指標グループ```：レポートに表示させるパラメータ項目を設定する。ここでは前項にて設定した各ゴールの完了数を設定。下記例ではその他セッション、直帰率等も横並びで比較している。
* ```ディメンジョンの詳細```：レポートの切り口を設定する。ここではデフォルトチャネルグループ（サイトへの流入チャネル）を設定した。この他おすすめの設定としては「デバイス」「新規とリピーター」など。ユーザーの属性ごとに比較検討したいディメンジョンを設定する。

![スクリーンショット 2015-07-02 00.59.43.png](https://qiita-image-store.s3.amazonaws.com/0/83135/2676175f-52c5-ca54-78ac-645179372286.png)

## Tips ##
同様の指標グループに対し、ディメンジョンのみを変更したレポートを作成したい場合は画面右側にある```[このタブを複製]```を利用すると良い。
CSS3 transition と JavaScript のタイミング同期

# 問題

消えるときに CSS3 transition してから DOM から取り外すというとき transition の duration と timeout の秒数を同期するにはどうしたらよいかと。

# こうしてみた

JavaScript で ```transition-duration``` を読み取って ```setTimeout``` に渡すとか。 ```transition-delay``` も加算するともうちょっと実用的か。

```index.html
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" media="all" href="./index.css" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
  <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script>
  <script src="./index.js"></script>
  <meta charset="utf-8">
  <title>CSS3 transition with JavaScript</title>
</head>
<body>
  <h1>CSS3 transition with JavaScript</h1>
  <div id="js-main"></div>
  <button id="js-add">add</button>
</body>
</html>
```

```index.css
#js-add {
  position: fixed;
  bottom: 1ex;
}
.fade-button {
  opacity: 0;
  transform: scale(0.9);
  visibility: hidden;
  transition: all 0.3s;
}
.is-visible {
  opacity: 1;
  transform: scale(1);
  visibility: visible;
}
```

```index.js
var FadeButton = Backbone.View.extend({
  tagName: 'button',
  className: 'fade-button',
  events: {
    'click' : 'hide'
  },
  render: function() {
    this.$el.text(this.cid);
    setTimeout(function(){
      this.$el.addClass('is-visible');
    }.bind(this), 1);
    return this;
  },
  hide: function() {
    var duration = parseFloat(this.$el.css('transition-duration')) * 1000;
    this.off();
    this.$el.removeClass('is-visible');
    setTimeout(function() {
      this.remove();
    }.bind(this), duration);
  }
});

$(function(){
  $('#js-add').on('click', function(){
    var button = new FadeButton();
    $('#js-main').append(button.render().$el);
  });
});
```

# もっといい方法あった

> transitionendイベントでより正確にtransitionの終了が取得できないでしょうか？

oh ...

```index(改).js
  hide: function() {
    var gone = _.bind(function() {
      this.off();
      this.remove();
      console.debug("I have gone.");
    }, this);
    this.$el.one('transitionend', gone);
    this.$el.removeClass('is-visible');
  }
```

JS Bin はこちら [CSS3 transition with JavaScript](https://output.jsbin.com/gonuja)
php素人がphpフレームワーク選んでみる


## 目的

php入門。これからwordpressやらphpプロダクトを触ることになりそうなのでphpに慣れることが目的。

## 目標

とは言え、漫然と入門サイトを眺めても面白くないので、アウトプット目標として、簡単なポートフォリオサイトの作成を目指す。

## 候補者

* laravel
* Symfony
* FuelPHP
* CodeIgniter
* Aura
* lumen

こちらのサイトを参考に人気の高いやつをピックアップ。
http://qiita.com/shukotang/items/055058b33b553b48c164
（きっと人気の理由があるはずと思ってここではあまり深く考えない）

こちらは参考程度。phpフレームベンチマーク
http://blog.a-way-out.net/blog/2015/03/26/php-framework-benchmark/

## 実食！

お題：DBにProductテーブルを作成して、Product.nameを画面に表示する(まずはローカルmacで。PHP 5.5.14)
※もちろんこの程度だとフレームワークの良さを体感出来ないものも出てくるんだけど、今回はさくっと決めたいので簡単に触って第一印象だけで決める。（frameworkの良し悪しではなく飽くまで直感ベースの選定）


### １. laravel (http://laravel.com/)

* project作成後のファイルがごちゃごちゃしてるように感じた

### ２. Symfony (http://symfony.com/)

* laravelよりはすっきりしてるかな（初期）
* エラーページがなんかかわいい
* debugツールバーが初期設定で入ってる
* Route設定の書き方に違和感

### ３. FuelPHP(http://fuelphp.com/)

* なんかプロジェクト作成時(oil create [PROJECT NAME])に

```
[Composer\Repository\InvalidRepositoryException]
  No valid composer.json was found in any branch or tag of https://github.com/fuel/core, could not load a package from it.
```

と赤字出て気持ち悪いので後回しに。@_@;

### ４. CodeIgniter(3系)(http://www.codeigniter.com/)

* routeing,controller,viewまでやってみたけど、なんとなく野暮ったい？感じ。次いく

### ５. Aura(http://auraphp.com/)

* composerコマンド一発でプロジェクト作成
* ファイル構造も他と比べてもすっきりしてる感じ
* 何も書かずともhello worldページが見れた
* 開発のリズムも悪くない。一旦lumenへ

### ６. lumen(http://lumen.laravel.com/)

* プロジェクト作成コマンドがいい。laravelと一緒かな(それもそうか）
* laravelとファイル構成も似てる(一周してみるとそんなにごちゃごちゃしてなく見える不思議w)
* 開発のリズムもいい。コードの見通しも良い。

## 選定！

上で書いたお題をやってないものもあるんだけど、まあ一応全部触れたのでよし。

結論。
**lumen**で行こう。

理由は、触ってみて馴染みやすそうと思ったから（超主観）
感触がいいという意味では、laravel、Auraも良さそうだなーと感じたのだけど、せっかくなので新しいやつでやってみようかと。
今回は目指すアウトプットも小規模なシステムになるので、パワー不足があるにしてもあまり影響ないかなと判断。


今回の記事は全く客観性を欠く内容のため、参考になる部分は少ないだろうと思いつつ、最悪自分用のメモとして書き置く。

にっち
複数ワーカーだと bin/delayed_job stop でジョブが停止しない

##記事を書いた環境情報

```bash
$ lsb_release -d
Description:    Ubuntu 14.04.1 LTS
$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [i686-linux]
```

```bash
$ gem list | grep delayed
delayed_job (4.0.6)
delayed_job_active_record (4.0.3)
```

##本文

各ドキュメントにはstopでワーカーがいくつあっても問題なく停止するように書かれているけど、実際は停止しませんでした。

```bash
$ bin/delayed_job start -n 2
delayed_job.0: process with pid 19532 started.
delayed_job.1: process with pid 19538 started.
$ bin/delayed_job stop
# なにも表示されない
```

停止させるには起動しているワーカーの数を指定する必要があります。

```bash
$ bin/delayed_job stop -n 2
delayed_job.0: trying to stop process with pid 19532...
delayed_job.0: process with pid 19532 successfully stopped.
delayed_job.1: trying to stop process with pid 19538...
delayed_job.1: process with pid 19538 successfully stopped.
```

なのでコマンドからでは無くて、スクリプト内で起動しているワーカー数を見て停止させるには以下のようにファイル数を取得する必要があります。

```ruby
# pid格納先
pid_dir = "tmp/delayed_job/pids"
# ワーカー数
worker_num = Dir.glob("#{pid_dir}/delayed_job*").size
# 停止コマンドの実行
puts `ruby bin/delayed_job stop --pid-dir #{pid_dir} -n {worker_num.to_s}`
```

うーん、以前はこんな事をしなくても停止していた気がします。
MeteorがReactを公式サポートしたので、チュートリアルをやってみる

これまで頑なにBlazeテンプレートを貫いてきたMeteorに変化の兆し。どうやらreactテンプレートを正式に採用したらしいです。今回はそのチュートリアルをやってみたいと思います。

##本家チュートリアル
http://react-in-meteor.readthedocs.org/en/latest/tutorial/
##完成品
デモ：http://reace-meteor-encodows.meteor.com/
レポジトリ:https://github.com/endows/react-meteor-example
![スクリーンショット 2015-07-01 23.34.18.png](https://qiita-image-store.s3.amazonaws.com/0/36652/f1a9c875-1a7d-c880-32f3-f56d11016b0b.png)

## ステップ１　HelloWorld
まずはreact + meteorでHelloworldしてみましょう。

```
git clone https://github.com/endows/react-meteor-example
cd react-meteor-example
git checkout hello-world
meteor
```
するとこんな画面になると思います。
![スクリーンショット 2015-07-01 22.43.20.png](https://qiita-image-store.s3.amazonaws.com/0/36652/c8ed645d-7e84-87b0-56b5-87960ca920eb.png)

東京グールの鈴谷什造くんが覗き込んでます。ちょっとファイルを見てみましょう。

```
# react-meteor-example.jsx
var App = React.createClass({
  render () {
    return (
      <div>
       <img src='http://lohas.nicoseiga.jp/thumb/4521080i?'/></img>
       <h1>Hello worldですぅ!!!!</h1>
      </div>
    );
  }
});

if (Meteor.isClient) {
  Meteor.startup(function () {
    React.render(<App />, document.getElementById('root'));
  });
}

```

見事に```Template.**```がありません。美しきコード！Blazeから解放されたことを実感しますねー

## ステップ２　inputとlistを表示

```
git checkout reactive-collection
meteor
```
![スクリーンショット 2015-07-02 0.23.26.png](https://qiita-image-store.s3.amazonaws.com/0/36652/f5dabb64-f5e9-87f8-8026-895ad772dcf9.png)


```
# react-meteor-example.jsx
...
Meteor.methods({
  insertTask: function (task) {
    // Validate the data
    check(task, {
      content: String
    });

    // Insert into MongoDB and Minimongo
    Tasks.insert(task);
  }
});
...
```
これで入力とlist表示ができるはずです。注目すべきは、直接Collectionにinsertせずに```Meteor.call()```を使っている点。この辺がFluxっぽいですよね。

##やってみた感想
正直React初心者でしたが、案外できました。Meteorパッケージはビルドやインクルードを意識しなくていいことですよね。React入門としてもよかったと思います。React使いの人には朗報なのでしょうが、自分はまだコードとビューがごちゃごちゃになったjsx記法になれません。

まずはriotあたりから慣れていこうと思います。以上、React + Meteorのチュートリアルでした。
詰まったリスト

色々詰まって調べた事を書いていきます。
まだまだまだまだ勉強不足です。

Gitコマンド

git branch -r
(remote名)/(branch名)
(remote名)/(branch名)
(remote名)/(branch名)
（git branch -r　コマンドで確認）

git pull (remote名) master
Gitのmasterにローカルのmasterを合わせる

git push (remote名) (branch名)
ローカルのbranchをGitに上げる

あるbranchをローカルに持ってきたいとき。
git fetch (remote名) (branch名)
git checkout -b (branch名) (remote名)/(branch名)
fetchしてからcheckoutでできるみたいです。

http://markdownlivepreview.com/
複数行のコード挿入で表現が分からず迷いました。
各行頭に半角スペースを４。
Git 基本の用語集

Gitの勉強を兼ねて、用語集を作成しました。
不十分なところもあると思いますが、誰かの参考になればと思います。

| 用語                                      | 意味         |
|:------------------------------------------|:-------------|
|リポジトリ<br>(repository)                 |履歴管理を行う場所。|
|リモートリポジトリ<br>(remote repository)  |サーバーにあるリポジトリ。基本はベアリポジトリで運用される。|
|ローカルリポジトリ<br>(local repository)   |自分のPCにあるリポジトリ。基本はノンベアリポジトリで運用される。|
|ベアリポジトリ<br>(bare repository)        |ワークツリーを持たず、チェックアウト、マージができないリポジトリ。|
|ノンベアリポジトリ<br>(non bare repository)|ワークツリーを持ち、チェックアウト、マージができるリポジトリ。|
|ワークツリー<br>(work tree)                |履歴管理を行いたいファイルがある場所。|
|インデックス<br>(index)                    |コミットしたいファイル又はファイルの一部を登録するところ。|
|ステージ<br>(stage)                        |ワークツリーからコミットしたいファイル又はファイルの一部をIndexに登録すること。|
|ハンク<br>(hunk)                           |変更した一範囲。|
|コミット<br>(commit)                       |インデックスに登録してある変更対象をローカルリポジトリに反映すること。|
|リセット<br>(reset)                        |コミット前の変更をローカルリポジトリの状態へ戻すこと。<br>また、特定のコミットまで状態を戻すこと。ただし、ローカルリポジトリに限られる。|
|ヘッド<br>(head)                           |作業対象となっているブランチ、コミット。|
|チェックアウト<br>(checkout)               |ヘッドを切り替えること。<br>過去のコミットを対象にチェックアウトした場合、それをもとにコミットすることはできない。|
|プッシュ<br>(push)                         |ローカルリポジトリの変更をリモートリポジトリに反映させること。|
|プル<br>(pull)                             |リモートリポジトリの変更をローカルリポジトリに反映させること。フェッチ＋マージ|
|フェッチ<br>(fetch)                        |リモートリポジトリの変更をローカルリポジトリに反映させること。フェッチ＋マージ|
|マージ<br>(merge)                          |異なるブランチの変更を反映させること。お互いの変更履歴が残る。|
|リベース<br>(rebase)                           |異なるブランチの変更を反映させること。変更履歴が片方に集約される。|
|コンフリクト<br>(conflict)                 |マージ対象の２ファイルで同じ箇所が変更されており、自動でマージができないこと。|
|ブランチ<br>(branch)                       |履歴管理を枝分かれさせてたもの。ブランチを使うこちにより、複数の履歴を並列に管理できる。|
|フォーク<br>(fork)                         |リモートリポジトリをコピーしてリモートリポジトリを作成すること。|
|クローン<br>(clone)                        |リモートリポジトリをコピーしてローカルリポジトリを作成すること。|
|プルリクエスト<br>(pull request)           |フォークしたリポジトリでの変更を、フォーク元のリポジトリへ反映するよう依頼すること。|
|.gitignore                                 |履歴管理の対象外とするファイルを登録するところ。対象範囲は各リポジトリ。|
|.gitignore (グローバル)                    |履歴管理の対象外とするファイルを登録するところ。対象範囲は全リポジトリ。|


Gitが、おもしろいほどわかる基本の使い方33
<a href="http://www.amazon.co.jp/gp/product/4844365010/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=4844365010&linkCode=as2&tag=asunaro098-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4844365010&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=asunaro098-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=asunaro098-22&l=as2&o=9&a=4844365010" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
ライブラリ間の依存関係を表示する

gradlewにて以下のコードを実行します(コードはgradlewがあるディレクトリで実行する前提)。
{}内は適宜置き換えます。

```
./gradlew {モジュール名}:dependencies
```

例えばモジュール名がndだったとすると

```
./gradlew nd:dependencies
```
「第１章」Eclipse スタート

<h2>Eclipseとは</h2>
Eclipse（「イクリプス」または「エクリプス」）は、IBMによって開発された統合開発環境 (IDE) の一つ。高機能ながらオープンソースであり、Javaをはじめとするいくつかの言語に対応する。Eclipse自体はJavaで記述されている。

**<h1><font color=orange>１．Eclipseのダウンロード</font></h1>[Link] http://mergedoc.osdn.jp/**

![image](https://qiita-image-store.s3.amazonaws.com/0/84788/600e7034-a10f-28bb-7f97-3f59dd7803b9.png)

①　Eclipse 4.5 Mars Pleiades All in One クリック。

![image](https://qiita-image-store.s3.amazonaws.com/0/84788/1c5b8d17-c0e7-ed5f-8c84-866f19a1ed8b.png)

②　・64bit Full Edition **Ultimate** Download。※ 約1.49GB
ProductFlavorを使って別パッケージ名のapkを作成する

build.gradeにProductFlavorを設定し、別パッケージ名のapeファイルを作成する方法です。

bulid.gradleに以下のコードを追記し、gradlewを使って、apkを作成します。

```
productFlavors {
	{productFlavor名}{
		applicationId "{任意のパッケージ名}"
	}
}
```
MockeryでLaravel5のコントローラーテストの基本覚書

Laravel5とMockeryの覚書

こういうコントローラーがあって

```CustomerController.php
<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;

use App\Customer;

use Illuminate\Http\Request;

class CustomerController extends Controller {

	protected $customer;

	public function __construct(Customer $customer)
	{
		$this->customer = $customer;
	}

	/**
	 * Display a listing of the resource.
	 *
	 * @return Response
	 */
	public function getIndex()
	{
		$customers = $this->customer->all()->sortByDesc('id');
		return view('customer.index')->with(compact('customers'));
	}
}
```

こういうテストがあるとして
それぞれの説明を書きとめ

```customerTest.php
<?php

use App\Customer;

class CustomerTest extends TestCase {

	protected $customerMock;

	public function setUp()
	{
		parent::setUp();
		$this->customerMock = Mockery::mock('App\Customer');
	}
	public function tearDown()
	{
		parent::tearDown();
		Mockery::close();
	}
	public function testIndex()
	{
		$this->customerMock
			->shouldReceive('all')
			->once()
			->andReturn($this->customerMock);
		$this->app->instance('App\Customer', $this->customerMock);
		$this->call('GET', '/customers/');
	}
}
```

## モックの用意

setUpメソッドでモックのインスタンスを作成する
注意点としてはモックに渡すモデル名は完全な名前空間付きにする

```php
    protected $customerMock;

    public function setUp()
    {
        parent::setUp();
        $this->customerMock = Mockery::mock('App\Customer');
    }
```

## モックのクローズ

これは必須

```php
	public function tearDown()
	{
		parent::tearDown();
		Mockery::close();
	}
```

## モデルの"all"メソッドが呼ばれることをテスト

```php

	public function testIndex()
	{
		$this->customerMock
			->shouldReceive('all')
			->once()
			->andReturn($this->customerMock);
		$this->app->instance('App\Customer', $this->customerMock);
		$this->call('GET', '/customers/');
	}
```

### shouldReceiveとonce

これがテストの本体(?)でControllerでall()が呼ばれないとテストが落ちる
注意点としては上で書いた
Mockery::close()
を呼んでおかないとテスト自体が実行されない。(はまった)

```php
            ->shouldReceive('all')
            ->once()
```

### andReturn

この例で言うとallが呼ばれた時に返す値(そのまんまだけど)
このコントローラーではall()の後にsortByDesc()を呼んでいるので自身を返さないといけないので
以下のようにする

```php
			->andReturn($this->customerMock);
```

### モックの注入

これはLaravelの機能で自動的にモデルが注入される前に差し替えている(んだと思う)
ここでもクラス名は完全な名前空間付きにする

```php
$this->app->instance('App\Customer', $this->customerMock);
```
AndroidStudioを使ってアプリ実行中にデバッグモードへ切替える方法

【環境】
AndroidStudio1.2.2

---

AndroidStudioからアプリを起動していて、途中でデバッグモードに切り替えをしたいということは度々あると思います。

eclipseの時とはアイコンが異なっていて、AndroidStudioでは画像内の赤丸で囲んだアイコンになっています。
このボタンを押して、プロセスを選択するとデバッグモードへ切り替えが可能です。

![debug.png](https://qiita-image-store.s3.amazonaws.com/0/71946/90dfc758-7797-da15-cf1b-642fc8dde3e5.png)
Androidアプリのリリース作業

Androidアプリをリリースしたので、GooglePlayConsoleでの作業手順を記録しておきます。

1. GooglePlayConsoleへログイン
2. 「新しいアプリを追加」ボタンをタップ
![Screen Shot 2015-07-01 at 11.01.42.png](https://qiita-image-store.s3.amazonaws.com/0/59560/52eb82de-3ced-1d9d-0352-8fe7e28e4568.png)

3. 基本的にはリリース用APKが作成される前に掲載情報を準備しておくので、タイトル記入して「ストアの掲載情報を準備」をタップ

#掲載情報
必須項目に必要な情報を記入し、画像をアップロードする。文字数制限と画像サイズには気をつけておく。
![Screen-Shot-2015-07-01-at-10.32.12.png](https://qiita-image-store.s3.amazonaws.com/0/59560/0609cf8d-17fd-4266-8270-d5c4c89da4ea.png)

![Screen-Shot-2015-07-01-at-10.32.22.png](https://qiita-image-store.s3.amazonaws.com/0/59560/7444bdff-129b-25d3-91e8-91502c377db5.png)

![Screen-Shot-2015-07-01-at-10.32.33.png](https://qiita-image-store.s3.amazonaws.com/0/59560/f5a484da-3f18-e5c1-c718-dfc12718beeb.png)

![Screen-Shot-2015-07-01-at-10.32.43.png](https://qiita-image-store.s3.amazonaws.com/0/59560/f98fd300-fa40-8f44-008c-7fb9c98ae815.png)

![Screen Shot 2015-07-01 at 10.34.16.png](https://qiita-image-store.s3.amazonaws.com/0/59560/6d58786e-5ba5-a780-82a6-5c8ce23b6f61.png)

#価格と販売/配布地域
無料を選択すると、公開後に「有料」へ変更できない点だけ注意する。

![Screen Shot 2015-07-01 at 11.39.01.png](https://qiita-image-store.s3.amazonaws.com/0/59560/7a95b5a3-adce-878d-be7c-64ab48731bdc.png)

![Screen Shot 2015-07-01 at 11.39.15.png](https://qiita-image-store.s3.amazonaws.com/0/59560/9da42f38-ea13-7922-451c-c4c25b43021c.png)

#APK
リリース前に、リリース用のAPKをアップロードする。このとき、バージョン情報が1.0.0となっているか注意しておく。私の場合は、見落として0.2.7でアップロード作業をしていたので。。。
![Screen-Shot-2015-07-01-at-10.31.41.png](https://qiita-image-store.s3.amazonaws.com/0/59560/6bece857-8c22-34ca-3aa0-92536f3be8e3.png)

#コンテンツのレーティング
APKがアップロードされたらやっと選択可能となる項目になります。「次へ」をタップ。
![Screen Shot 2015-07-01 at 13.40.26.png](https://qiita-image-store.s3.amazonaws.com/0/59560/ff4c8af2-8950-9544-bc3c-027e49e210eb.png)

カテゴリなど選択した後に、メールアドレス入力欄が表示されるため、用意しておいてください。
![Screen Shot 2015-07-01 at 13.40.44.png](https://qiita-image-store.s3.amazonaws.com/0/59560/487165a6-79c1-debb-2044-fecdb8277172.png)

チェック項目が多くあるので、選択し「レーティングを算定」をタップしその後適用させてください。
![Screen Shot 2015-07-01 at 13.43.21.png](https://qiita-image-store.s3.amazonaws.com/0/59560/b3e941f8-441a-4f9c-610e-699544ff783f.png)

![Screen Shot 2015-07-01 at 13.43.28.png](https://qiita-image-store.s3.amazonaws.com/0/59560/7b43875a-63ac-73ea-7697-d539e6b96e66.png)

#準備完了！
すべて設定が終了すると、画面上のアイコン横にあるステータスが「公開の準備完了」となります。あとは、公開ボタンを押してマーケットに反映されるのを待つだけ！
![Screen-Shot-2015-07-01-at-13.44.01.png](https://qiita-image-store.s3.amazonaws.com/0/59560/44b403f0-d00e-7108-0cb6-21c8a05c0d17.png)
PhoneGapで画面を固定化


HTML/CSSだとbodyあたり

```css
body{
	-webkit-overflow-scrolling:none;
}
```

とでも書いて、height:100%のwrapper要素に```-webkit-overflow-scrolling:touch;```とでも書いておけばいけそうなものですが、そうでもなかったので別の方法を模索。
[ここ](http://www.proto-star.com/2013/07/12/phonegap%E3%81%A7%E7%94%BB%E9%9D%A2%E3%82%92%E5%9B%BA%E5%AE%9A%E5%8C%96%E3%81%99%E3%82%8B/
)に方法は書いてました。

基本的には
config.xmlに以下を書き加えればOK。

```html
<preference name="DisallowOverscroll" value="true" />
```


ただし、body内の要素がスクリーンサイズを超えていればスクロールはする。