OmniAICreator/Qiita-1.07M huggingface dataset:
Oculus riftでセンサーが認識しなくなった場合の解決方法

#Oculusでセンサーが認識しなくなった！
デバイスドライバーを見てみると何やらセンサーの部分に黄色い△マークが出ている。

ググると海外の方々が同じような症状で数名陥ってるもののなかなか解決手段にたどり着いていないようだ。。。

![1474542077287.jpg](https://qiita-image-store.s3.amazonaws.com/0/69647/6b4ceae0-70fd-2c75-aa08-521cb8e4946f.jpeg)


#解決策

４時間さまよった結果この記事にたどり着き、ここで紹介されているソフトをインストールしたら治りました。
https://forums.oculus.com/jp/discussion/33534/check-your-setup-cv1-external-camera-searching-windows-update


![image.png](https://qiita-image-store.s3.amazonaws.com/0/69647/a70ce9d5-6402-13bb-9b37-5c9cc386991a.png)


この日本語の記事があることで誰かが素早く問題を解決できたなら僕はうれしく思います。
Vim + Syntastic + eslint が動かないのはPATHをzshrcに書いていたのが原因だった

## 要するに

以下の環境ならこのトラブルに遭遇する可能性が高い。

- Zshを使っている
- Vimを使っている
- nodejs (or nvm等のnodejsバージョン管理ツール) のPATH解決を.zshrcでやってる

## 原因

Vimは.zshrcに書いているPATHは見ない、.zshenvのを見る。

## 解決策

もしnoodejsやnodejsのバージョン管理ツール用のPATHを.zshrcに書いているなら、
その記述を.zshenvというファイルを作ってそっちに書いてあげればいい。
そうするとVimから見たPATHがzsh側で定義するPATHと一致するため、jslintやeslint、flowtypeなど諸々のコマンドが動くようになる。

## 経緯

### Zsh + Vim + Syntastic

普段Zsh&Vimで開発しており、最近ES6をよく使うようになったのでJavascript系のvim-pluginをいくつか入れてみた。
Syntax Highlightingなどは問題なく使えたのだが、SyntaxCheck用にと入れたeslintがどうもうまく動かない、というかVimが認識しない。
CheckerにはおなじみのSyntasticを使っていたので、ググって出てきたIssueやブログ記事を参考にあれこれやってみるものの、うまくいかず。

ググって以下のページなどを参考にいろいろ試してみたが…。

- [eslint validator not working · Issue \#1110 · scrooloose/syntastic](https://github.com/scrooloose/syntastic/issues/1110)
- [Error in eslint checker · Issue \#1302 · scrooloose/syntastic](https://github.com/scrooloose/syntastic/issues/1302)
- [eslint not working? · Issue \#1347 · scrooloose/syntastic](https://github.com/scrooloose/syntastic/issues/1347)

設定をいじりつつSyntasticInfoで確認しても以下のような有様。

```
Syntastic: active mode enabled
Syntastic info for filetype: javascript
Available checker(s): -
Currently enabled checker(s): -
```

Syntasticの設定とかもいろいろいじくってみたが何も変わらずじまい。
例えば以下のような記述。

```
let s:eslint_path = system('PATH=$(npm bin):$PATH && which eslint')
let b:syntastic_javascript_eslint_exec = substitute(s:eslint_path, '^\n*\s*\(.\{-}\)\n*\s*$', '\1', '')
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
let g:syntastic_javascript_checkers = ['eslint']
```

※参考：[ESlint is available but won't enable · Issue \#1736 · scrooloose/syntastic](https://github.com/scrooloose/syntastic/issues/1736)

`b:syntastic_javascript_eslint_exec`じゃなくて`g:syntastic_javascript_eslint_exe`を使うんだみたいな話もあったのでそれもやったけどダメだった。
環境変数が怪しいなのはわかったのだが、肝心の解決方法にはたどり着けず。

数日過ぎて諦めかけていたところ、再度調べてみたら見落としてたのか.zshenvを使うんだ！という[stackoverflow](http://ja.stackoverflow.com/questions/8586/vim-%E3%81%AE-syntastic%E3%81%8C%E3%81%86%E3%81%BE%E3%81%8F%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84)を発見。
早速やってみたら、なんとまぁあっさり動いた。

GoやPHPなどの言語では、普通はグローバルなPATH（/usr/bin/,/usr/local/bin等）にbinaryが置かれる。vim-go経由でgofmt等がちゃんと動いたのはおそらくこれが理由。
グローバルな位置のPATHならVimも当然汲み取ってくれるだろう。
nodejsについては、私の場合は普段nodebrewなどのバージョン管理ツールを使うようにしているため、PATHの解決はreadmeに従い自分でzshrcにexportを書いていた。
これによりVimからnodejs系ツールのPATH解決ができないということになり、今回のトラブルに引っかかったというわけ。

いやはや勉強になりました。
Ruby単体でActiveRecordを使うベストプラクティス

を模索した結果落ち着いた構成をメモしておきます。

特にTimeZone周りで苦労しました。


## ファイル構成案

```
├── Gemfile
├── Gemfile.lock
├── Rakefile.rb
├── config
│   ├── application.rb
│   ├── database.yml
│   ├── database.yml.sample
│   └── initializers
│       └── db.rb
├── db
│   ├── migrate
│   │   └── 001_create_your_table.rb
│   └── schema.rb
└── app
    ├── ..
    .. 
    └── ..

```

## 主要なファイルの中身

### Gemfile

```Ruby:Gemfile
source 'https://rubygems.org'

gem 'activerecord'
gem 'rake'
```

### config/database.yml

```yaml:config/database.yml
development:
  adapter: mysql2
  encoding: utf8
  database: your_database
  pool: 5
  username: root
  host: localhost

..
```

一般的な構造にしました。以下の`config/initializers/db.rb`や`rakefile.rb`ではこの構造を前提としています。

### config/initializers/db.rb

```ruby:config/initializers/db.rb
config = YAML::load(ERB.new(IO.read(File.expand_path('../../database.yml', __FILE__))).result)
env = ENV.fetch('APP_ENV', 'development')
ActiveRecord::Base.establish_connection(config[env])
ActiveRecord::Base.time_zone_aware_attributes = true
```

一度読み込めばデータベースと接続されるようにしました。このファイルは起動時に読み込むようにしています。

個人的に重要かつなかなか辿り着けなかったのは

```ruby
ActiveRecord::Base.time_zone_aware_attributes = true
```

で、これによりActiveRecordで取得されるdatetime型のカラムのクラスが`TimeWithZone`になり、`Time.zone`で指定されているタイムゾーンに合わせて表記を調整してくれます。これを設定しないと`Time`になり、そのままstrftime等で扱うとレコード上の時刻が表示されてしまいます。

これはレコード上の時刻が用いたいタイムゾーンとズレているために起こる問題を解決しているということですが、レコードに記録される時刻を用いたい時刻（e.g. JST）にすれば良いという見方もあります。その場合、以下を追加すれば良いみたいです。

```ruby
ActiveRecord::Base.default_time_zone = :local
```

こうすることで、レコード保存時の時刻を、systemのタイムゾーンとしてくれます。

しかしこれはsystemのタイムゾーンが用いたいタイムゾーンであることを前提としていて嫌だなと思い、自分は`time_zone_aware_attributes = true`として、DB上の時刻はデフォルトのutcにするようにしました。

### config/application.rb

```ruby
..
Time.zone = 'Tokyo'
```

アプリケーションの設定全般的な意味合いで`application.rb`としています。起動時に読み込みます。
`TimeWithZone`は`Time.zone`を参照して時刻表記を変えるので、JST表記になるよう、ここで設定しています。

これが読み込まれるより前に、あるいはこのファイル内で`active_support/core_ext/time/zones`のrequireが必要ですが、ActiveSupportはActiveRecordの依存関係にあるので、`Bundler.require`で十分です。自分はapplication.rb内で`Bundler.require`とその他必要なライブラリ（`yaml`, `erb`等）のrequireを行っています。

### Rakefile.rb

```Ruby:Rakefile.rb
require 'bundler/setup'
require 'active_record'

include ActiveRecord::Tasks

db_dir = File.expand_path('../db', __FILE__)
config_dir = File.expand_path('../config', __FILE__)

DatabaseTasks.env = ENV['APP_ENV'] || 'development'
DatabaseTasks.db_dir = db_dir

DatabaseTasks.database_configuration = YAML::load(ERB.new(IO.read(File.join(config_dir, 'database.yml'))).result)
DatabaseTasks.migrations_paths = File.join(db_dir, 'migrate')

task :environment do
  ActiveRecord::Base.configurations = DatabaseTasks.database_configuration
  ActiveRecord::Base.establish_connection DatabaseTasks.env.to_sym
end

load 'active_record/railties/databases.rake'
```

https://gist.github.com/drogus/6087979

ほぼ此方そのまま。変更点はyamlロード時にRuby式を展開するようにしたくらいです。

調べると、`migrate`や`rollback`を自前で書く例も多く見つかるのですが、`create`や`schema:load`を実装している例は見つかりませんでした。そこで此方の全タスク持ってきちゃったRakefileに落ち着きました。

後は`db/migrate`にmigrationファイルを置けばmigrateができます。また、migrateをする度に`db/schema.rb`を生成してくれます。

## 使い方

あとは`ActiveRecord::Base`を継承したクラスを作るなりしていつも通り使うだけです。
Wireshark 2.2 を Ubuntu16.04 LTSにインストールした時のメモ

# はじめに

- Ubuntu16.04LTSにインストール済みのWiresharkを2.2にアップデートできなかったので、その時のメモ

# 手順

- repositoryの追加?

```:cmd
sudo add-apt-repository ppa:wireshark-dev/stable
```

- install / upgrade 

```:cmd
sudo apt-get update
sudo apt-get install wireshark
```

## できなかった時に対処したこと
- 上記のやり方でできなかったので、以下を実施

```:cmd
apt-get dist-upgrade
```


# 参考サイト

- http://ubuntuhandbook.org/index.php/2016/09/installwireshark-2-2-0-ppa-ubuntu-16-04/
- http://d.conma.me/entry/20080621/1213977187
リーダーがメンバーに向けて話さなくてはならない事

ある大きな会社のCTO様に頂いた話。

**『皆、明るい未来の話が聞きたいんです』**

毎月の全社締め会で役員陣が社員に向けてスピーチする時間がある。
「何か良い話をしよう！」と思うと、”教訓めいた事”や”説教じみた事”を話したくなってしまう。

でも、社員の皆が聞きたいのはそんな話ではない。
「これから会社をこういう風に変えていきます！」
「こんな目標を掲げて頑張りましょう！」
というような、未来像の見える話が聞きたい。

経営層が伝えなくてはならないのはビジョン。
リーダーに期待されているのは、そういう事。
未来の旗を立てること。


ある社員から「○○さんの話はつまらないです！」と言われた事をきっかけに、話す内容を変えた、との事。
【MySQL】マスターを止めずに定期バックアップからレプリケーションを復旧する

### ■バックアップの時刻を調べる
定期的にバックアップをとっていることが前提。
この例では毎日8:00とする。

### ■その時刻をもとにマスターのバイナリログファイルを特定する

    $ ls -l;
    
    rw-rw---- 1 mysql mysql  1073753869  6月 16 06:04 2016 mysql-bin.000231
    rw-rw---- 1 mysql mysql  1073750057  6月 16 16:33 2016 mysql-bin.000232
    rw-rw---- 1 mysql mysql  1073741972  6月 17 01:03 2016 mysql-bin.000233

タイムスタンプがバックアップ時間より新しいファイルの中で、もっとも古いものが対象。
この場合は mysql-bin.000232

### ■バイナリログをテキストに変換する
    $ mysqlbinlog --no-defaults --start-datetime="2016-06-16 07:55:00" --stop-datetime="2016-06-16 08:05:00" mysql-bin.000232  > tmp.log;

--no-defaults を指定しないとmysqlbinlog: unknown variable 'default-character-set=utf8'言われた。
--start-datetimeと--stop-datetimeで出力ファイルのサイズを減らす。

### ■tmp.logをのぞいて、8:00頃のログポジションを特定する

```tmp.log
...
# at 191679237
#160616  7:59:51 server id 1001  end_log_pos 191679375  Query   thread_id=2978577       exec_time=0     error_code=0
...
```
時刻で検索する。
atの後ろの値がログポジション。
クエリも目視で確認したほうがベター。辛いけど。

### ■レプリケーション停止＆初期化

    mysql> stop slave;
    mysql> reset slave;

### ■バックアップからリストアする
    $ mysql -u hoge -p < dump.sql;
    
### ■レプリケーション設定＆開始
    mysql > CHANGE MASTER TO
           MASTER_HOST='hosuto',
           MASTER_USER='yuuzaa',
           MASTER_PASSWORD='paswaado',
           MASTER_LOG_FILE='mysql-bin.000232',
           MASTER_LOG_POS=191679237;
    mysql > START SLAVE;

### ■祈る
完全に正しいログポジションではない場合、レプリケーションエラーは発生しうる。
レプリケーションがエラーしたらひとつずつ確認し、スキップして問題なさそうならスキップ。
大事なのは祈り。



バックアップ時の--master-dataとか--single-transactionで、もっとうまくできる気がする。
swift 3にアップデートしたらType 'Any?' has no subscript members

表題通り、Swift2 -> Swift3にアップデートした時に
こんなエラーが出てしまいましたので対応をメモ


<img width="869" alt="スクリーンショット 2016-09-22 19.13.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/108235/35c1c2ea-a1a7-427a-6ffd-c8cf74d03812.png">

# こうした

型推論ができていなかったので、キャストしました。41行目のことろです。

<img width="856" alt="スクリーンショット 2016-09-22 19.15.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/108235/1e63f1e2-886a-2cd6-ff51-d3e90a08ff55.png">

# なんでそうなったか

Swift3では`snapshop.value?`のところで**Any型**を返すようになり、
41行目の`snapshop.value?["uid"]`でAny型に対して添字を使おうとしてエラーが出ています。

Any型をディクショナリ型にasでキャストしてあげれば解決しました
査定のやり方

会社によってかなり方針が違ってくるので、あくまで今の会社でのケース。
年に2回、査定が入る。


## 査定は、その人の人生を左右する事を肝に銘じる
当たり前だけど、適当に勢いでやらない。

## 社内の相対的な評価で考えない
これを意識しないと、市場価値とズレた評価になってしまう。
高過ぎれば勘違いさせる事になってしまうし、低過ぎれば正当な評価をしてあげられていない事になる。

『社内では凄く活躍してる！でも、業界全体で見たらまだまだ未熟な成果だよね』というような。

## 成果で評価する
”成長”や”頑張り”に寄り過ぎないように注意する。
この2点はスパイスくらいで考える（自分の場合はそうしないと、性格的にこの2点に偏ってしまう）。

## 評価軸を定める
* 事業貢献度
* 組織貢献度
* （絶対的な）エンジニアスキルレベル
* （絶対的な）マネージャースキルレベル

## 手柄に対する報酬ではない
これはインセンティブ。
基本給与をこの軸で考えると給与の上がったり下がったりが激しくなってしまう。

## 会社の業績と連動する
儲かってなかったら、たくさん払えない。

## 本人評価と会社評価がズレていないか注意する
納得感は大事。
半期開始時に目標（会社からの期待値）を設定し、月一面談で進捗を確認する。
出来た事、出来ていなかった事を明確にする。
基本、皆頑張っているので評価されたがっている（自分もそうだ）。

## 査定面談実施前に評価は決めておく
その評価に基づいたコミュニケーションを取る。面談時に決めようとすると、コミュニケーションの方向性を間違える。
自分が見えていなかった成果や貢献があれば、評価を修正する。

※弊社では査定面談後に給与を決める

## とにかく厳しい目で見る
（あくまで自分の場合は、）全員を高評価したくなってしまう（会社のキャッシュ管理にあまり関わっていないせいかもしれない）ので、0.8掛けくらいで評価する。
Pepperの設定画面をタブレットから終了できないときの回避法メモ

#概要 (分かる人はここ読めば終わり)
解決策：ChoregrapheからPepperに接続し、ロボアプリ一覧(Robot applications)から「設定」アプリ(boot-config)を探し、その直下にある起動中のbehavior.xarを見つけて赤い停止ボタンをクリックして停止する。(※カッコ内は言語設定が英語の場合の表記)
Choregraphe使わずコマンドでやるなら以下を実行。

```
qicli call ALBehaviorManager.stopBehavior boot-config
```


詳細は以下に述べます。

#背景
Pepperの設定画面を終了しようとした際、「右上の×ボタンをいくらタップしても閉じることが出来ない」といった経験はありませんか？
これは、ほとんどのケースがロボアプリのアップデート通知が来ている時です。基本的にはそれらアプリのアップデートを実施しないと設定画面を終了する事ができない仕様となっているので、アップデートしてしまえばこの画面を抜けられるのですが。。。

「ちょっと確認したいことがあって設定開いただけで、今は早くアプリ開発作業に戻りたい」
「大事なデモを数日後に控えてるから、デモが終わるまでは無駄なアップデートは避けたい」
「現在接続してるネットワークで重たい(かもしれない)ファイル群をダウンロードしたくない」

といった状況の時は、アップデートなんてやってられないですよね。
筆者もPepperアプリ開発を始めてからしばらくこの回避方法を知らず困っていた1人です。あまりこの方法が共有されていないように思えるので、参考にして頂ければと思います。

#前提
・PCとPepperが接続できる環境があること

#解決策詳細(カッコ()内は英語表記)
## Choregraphe使う場合
0. PCとPepperとを同じネットワークに接続
1. Choregrapheを起動し、Pepperに接続
2. ロボアプリ一覧(Robot applications)のビューから、「設定」アプリ(boot-config)を探す。ロボアプリ一覧のビューが見当たらないときは、「表示(View)」-> 「ロボアプリ一覧(Robot applications)」から開く
3. 設定(boot-config)アイコン左横のトグルをクリックして展開し、behavior.xarを探す
4. タブレットの設定画面表示中は赤い停止ボタンが表示されているので、停止ボタンをクリックする

##コマンドラインから実行する場合
0. PCとPepperとを同じネットワークに接続
1. ssh接続する
2. 以下実行

```
qicli call ALBehaviorManager.stopBehavior boot-config
```
numpyのwhere

webで調べても、なかなかバチッと内容が検索できなかったのでメモ（マジで短いっす、、）
#知りたいこと
```python
>> import numpy as np
>> np.where(A>5, 1, -1)
```
なるコードがあって、？と思った

#動かしてみる

## まずは準備
```python
>> import numpy as np
### まずは配列を作りますね
>> A = np.arange(10,0,-1)
### 内容確認
>> A
array([10,  9,  8,  7,  6,  5,  4,  3,  2,  1])
```

## 確認！
````python
### 内側から確認してきましょう
>> A>5
[ True  True  True  True  True False False False False False]
### -> 条件を満たせばTrue、満たさなければFalseを返すんですね
### whereをかましてみる
>> np.where(A>5)
(array([0, 1, 2, 3, 4]),)
### -> 条件を満たす要素が取り出せましたね。
### さて、お題の内容
>> np.where(A>5, 1, -1)
array([ 1,  1,  1,  1,  1, -1, -1, -1, -1, -1])
### -> 条件を満たせたら2つ目の引数の値"1"を、満たせなかったら3つ目の引数の値"-1"を返すっぽい
### ↑の内容を念のため他の値で確認
>> np.where(A>5,2,0)
array([2, 2, 2, 2, 2, 0, 0, 0, 0, 0])
### -> 合ってたっぽいですね。
```

SQLの`where`句のような感じですかね？（違うかな？！）

# Reference
- 公式ドキュメント：
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
 ↑今回の記事をベースにすると、少しは理解が進みますかね？！
ActiveRecordでgroup by でcountした結果をcountされた結果でソートする

以下のテーブル構造から、ASINでグルーピングして、countを取る。

| id | ASIN |
|:-:|:-:|
| 1  | 1111111111  |
| 2  | 2222222222  |
| 3  | 3333333333  |
| 4  | 2222222222  |

```
 Model.group(:asin).count(:id)
```
上記の実行結果

```
{"1111111111" => 1,
"2222222222" => 2,
"3333333333" => 1,
}
```

これを、count結果の降順に並べる。

```
Model.group(:asin).order('count_id desc').count(:id)
```
```
{"2222222222" => 2,
"1111111111" => 1,
"3333333333" => 1,
}
```
これで求める結果が取れた。

ポイントは、最初の実行結果のログから、count_idという別名がつけられるので、
それをorderに指定する。
また、指定の際には文字列で渡してあげること。

```
Model.group(:asin).order(count_id: :desc).count(:id)
```

これだと、実行されるSQLは

```
SELECT 
　　COUNT(Table.`id`) AS count_id, asin AS asin 
FROM Table 
WHERE Table.`deleted_at` IS NULL 
GROUP BY Table.`asin` 
ORDER BY Table.`count_id` DESC`
```

となり、Table.`count_id` がなくて怒られる。

結構使う場面は多そうなので、残しておく。
(Kerasチュートリアル要約) 少ないデータでパワフルな画像分類を実現するために


### この要約は

[Building powerful image classification models using very little data | The Keras Blog](https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html)

ディープラーニングでの画像分類には、大量のデータが必要、とよく言われます。
また、ファインチューニングで画像分類を応用したい場合、データはあってもポイントがわからずに、正解率を上げるのに苦労することがあるかと思います。
このチュートリアルは、画像分類を本当に役立たせるためのポイントが解説されている貴重な資料なので、翻訳・要約してまとめました。

参考: こちらのブログでは翻訳を試みられています。

[【ディープラーニング】少ないデータで効率よく学習させる方法：準備編 | ニートの言葉](http://andoo.hatenablog.com/entry/finetuning_keras)

## はじめに

- 少ないデータしか利用できないケースはあるの? 高価な医療画像などでよくある話。
- このチュートリアルでは、[Dog vs. Cats | Kaggle](https://www.kaggle.com/c/dogs-vs-cats/data) の画像からの犬猫判別問題を例題として使う。
- 用意されたデータから、8%だけ(犬・猫各1000枚を学習用、各400枚を評価用)を使う。
- Kaggleでは当初、最新技術なしでは60%も難しいと言われていたが、最終的に最新のディープラーニングを使ったチームが98%をマークした。
- ここでは、そのうちたった8%のデータだけで試みる。

### ディープラーニングには本当に大量のデータが不可欠なのか
- ディープラーニングでは大量のデータが不可欠と言われるが、少しミスリーディング。
- 本来、少しのデータを使って知覚できるようになるずだ。

### モデル設計のポイント:モデルの情報量と過学習
- ここでたった一枚だけの猫画像をオーグメンテーションする例で、過学習の問題を考えてみる。
- 過学習への対策は、結局モデルにどれだけ情報量を持たせるかという課題になる。
- たくさん情報を保持できるようにすれば良いか？そうすると不適切な特徴まで学習してしまうリスクが生じる。
- 一方、モデルが少ない情報だけしか保持できないようにすることで、重要な情報にしか注力できないようになり、この方が全く適切な方針になる。
- モデルの情報保持量を変えるには、まず考えられるのは、層の数や各層のサイズを変えること。
- もう一つの方法として、正則化(L1/L2正則化)で重みの値が小さくなるようにする。

## レベル1 - 小さなモデルを学習させる
この例では小さなモデルを、データをオーグメンテーションして、学習ではドロップアウトを使う。
ドロップアウトは同じデータに対してネットワークに違う振る舞いをさせるので、オーギュメンテーションと似た効果がある。

というわけで、90年のLeCunに似た3層、2層の全結合という小さな CNNで学習させた。
結果、約80%の正解率で、Kaggleのコンテスト100位以内を簡単に達成。

## レベル2 - 学習済みモデルの利用
もっと洗練されたアプローチとして、学習済みモデルを利用する方法がある。
幅広い問題に適用できるように、「ボトルネック特徴量」の抽出を図る。ボトルネック特徴量=Conv5のMaxPooling2D、全結合の手前の出力。
ImageNetを学習したVGG16を使う。

1. モデルの畳み込み層だけを使い、そこに学習・評価用データを一度計算させ、その時の出力(特徴量)を記録しておく。
2. 記録した特徴量を使って、小さな全結合層を学習させる。

1では、なぜ普通に畳み込み層を固定して全結合層だけを学習させる方法を取らないのか?
→計算量を抑えるられる。※ただ、このやり方の場合、データオーグメンテーションは使えない。
2では、オーグメンテーションしたデータで学習させる。

以上で、約90%まで正解率が上がる。

## レベル3 - ファインチューニング
畳み込み層のうち最終段だけと、上で学習した全結合の分類器を再度学習する。

1. VGG16の学習済みモデルをロード。
2. そこに、上で作成した全結合層をつなげる。
3. 畳み込み層の最終段手前まで固定する

### ファインチューニングのポイント
- ファインチューニングするには、適切に学習された重みからスタートさせること。学習勾配が大きいのは禁物で、例えば全結合層に乱数生成された重みを使うと、畳み込み層の重みまで崩れてしまう。だから上では分類器だけ学習させ、この準備をした。
- ファインチューニングの範囲を最後の畳み込み層までに限定することで、過学習を防ぐ。下位の層は汎化されていてセンシティブなので固定、上位の特化されている部分だけをチューニングする。
- ファインチューニングの学習率は、とても遅くする必要がある。最適化手法としてはSGDが良くて、学習率を適応的に扱うRMSpropなどは合わない。

以上で、50エポック経過後、正解率94%を達成する。

## 更に〜95%以上の正解率を狙うには
- もっとアグレッシブに: データオーグメンテーション。
- もっとアグレッシブに: ドロップアウト。
- L1/L2正則化を使う。
- 畳み込み層のファインチューニングをもう一段増やす。


以上、間違いやコメント等、ご指摘いただければ幸いです。
Cygwin で iconv.h を使う

Cygwin はデフォルトで`iconv`コマンドが使えますが、iconv.h をインクルードして使うことができません。

```sample.c
#include <iconv.h>
```

```
$ gcc -c -liconv test.c
test.c:1:19: fatal error: iconv.h: No such file or directory
compilation terminated.
```

iconv.h を使うには、Cygwinインストール時に使ったsetup.exeを起動し、libiconv の Src? にチェックを入れて追加します。
![ss2.png](https://qiita-image-store.s3.amazonaws.com/0/43328/b164409f-469c-54e3-7f9f-f7936ea40e81.png)
[Swift3] UIImageを切り抜く（とおまけ）

[こちらのStackOverflow](http://stackoverflow.com/questions/38568288/swift-3-0-how-to-call-cgimagecreatewithimageinrect)で既出ですが、Swift3でUIImageを特定の大きさに切り抜く方法が変わったのでメモしておきます。

### Swift2まで
Swift2までは以下のようなコードで切り抜くことができました。

```swift
let imageRef = CGImageCreateWithImageInRect(image.CGImage, CGRect)
let image = UIImage(CGImage: imageRef)
```

### Swift3から
Swift3では次のように変わります。

```swift
let imgRef = image.cgImage?.cropping(to: CGRect)
let image = UIImage(cgImage: imgRef!, scale: image.scale, orientation: image.imageOrientation)
```

## おまけ
この変更とともに、CGほにゃらら系の宣言の仕方が変わっています。いままでは`CGRectMake`や`CGSizeMake`などでも宣言できていましたがこれが廃止されました。またイニシャライザについて少し種類が増えているようです（？）

### 最後に
Swift3やXcode8について他にも記事を書いているので参考にしてください。

- [[iOS10][Xcode8] あらたにinfo.plistに追記が必要になった項目まとめ](http://qiita.com/touyoubuntu/items/a86da98528b24880f590)
- [各種ライブラリのSwift3での変更点](http://qiita.com/touyoubuntu/items/d40d2603aa066d48887e)
- [有名ライブラリのXcode8 GM対応ブランチ早見表](http://qiita.com/touyoubuntu/items/8359967cdd40c120ef69)
[Laravel]Controllersにフォルダを作成して下層にコントローラーを作成する方法

フロントサイトと管理サイトでコントローラファイルが見辛くなったのでフォルダ別に管理しようと思ったのでメモ。

**Controllers**フォルダを下記の様に配置したい場合

``` bash
Controllers
 ├Admin・・・ここに管理サイト用のコントローラーを作成したい
 ├Auth
 ├Controller.php
 └IndexController.php
```

Adminフォルダを作成してUserController.phpを作成します。
作成したファイルの**namespace**部分を編集します。

* UserController.phpを編集

``` php
<?php

namespace App\Http\Controllers\Admin;  // 編集

use Illuminate\Http\Request;

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

// 以下省略
```

* routes.phpを編集

``` php
// ユーザー管理
Route::get('/admin/user', 'Admin\UserController@index');
Route::get('/admin/user/show/{id}', 'Admin\UserController@show');
Route::get('/admin/user/add', 'Admin\UserController@add');
Route::post('/admin/user/create', 'Admin\UserController@create');

```

これでコントローラーが指定されたフォルダから利用することができます。
Visual Studio Code で自動更新を停止する方法

# Visual Studio Code で自動更新を停止する方法

Visual Studio Code の自動アップデートを停止する方法。
モバイルPCなどの従量回線な環境下で、必要になったので調べた。

 1. メニューから「ファイル＞基本設定」を開く。
 2. 「settings.json」が開かれるので、以下を入力してからCodeを再起動する。

　　` "update.channel": "none"`

![スクリーンショット 2016-09-22 18.42.34_1.png](https://qiita-image-store.s3.amazonaws.com/0/125588/f1d2f4d2-d3e0-1a71-dc12-7848a5dc0a72.png)


以上ー。


# 参考サイト

[【Visual Studio Code】自動アップデートを行わない設定方法]
https://blogs.msdn.microsoft.com/ayatokura/2015/12/20/visual-studio-code-2/
⇒情報がちょっと古い。`Code\storage.json` からは項目が無くなっている。

[How do I opt out of VS Code auto-updates?]
https://code.visualstudio.com/docs/supporting/FAQ#_how-do-i-opt-out-of-vs-code-autoupdates
⇒上記のサイトから辿れる。
　現行（v.1.5で確認）は `Code\User\settings.json` を編集する。

（v1.11では「基本設定＞ユーザー設定」ではなく「基本設定」だけでsettings.jsonが開く仕様に代わっていたので修正）
マネージャー職の成長実感

## 成長実感を得るには？
マネージャーが成長実感を得るために必要な事は、

**『日々の学びを明文化する』**事。

なるべくワンセンテンスで。
書籍の各章タイトルのようなイメージ。

## プログラマーからマネージャーになった人にありがちな事
マネージャー、リーダー職に就いていると、コードを書く時間が減り、プロダクトでなく人や組織に向き合う時間がメインになる。MTGや面談、人事関連の報告や契約関連等に時間を割いていると1日があっという間に終わり、「あれ？今日何やってたっけ？」となる事が多い。1日中頑張っていたはずなんだけど。。。

そんな毎日を繰り返して数ヶ月経った後に自分の仕事を振り返ると、なおさら何をやっていたのか分からない。そのため、自分がどんな成長をしてきたのかが分からない。

プログラマーの仕事は、基本的に目に見える成果物が残る。書いたコード、作ったアプリケーション。
マネージャーの仕事は、基本的に目に見える成果物が残らない。
そのギャップは結構大きい。

エンジニアのキャリアとして、プログラマーからエンジニアマネージャーにジョブチェンジした際、それまでハッキリと見えていた仕事の”成果物”が見えなくなってしまい、自分の価値が分からなくなってしまう事がある（自分はそうだった）。

本当に成長していないのだろうか？いや、そんな事はない。
それを日々感じられないのはとても勿体無い。

そこで、『学びを明文化』しておく事で、学びを”成果物”として残しておくと良い。

## 学びは生物
また、私のような凡人は学んだ事もすぐ忘れてしまう。忘れてしまっては日々の成長も一時的なもの。いつの間にか元の位置かそれ以下に戻って来てしまう。それも成長実感を得られない原因の一つ。
明文化した学びから記憶を引き出す作業が必要。引き出した記憶によって、行動も変化してくる。
学びと感情はセット。感情は生物。学びも生物。

## マネージャーとしてのスキルアップ
私の周りの優秀なマネージャー達は、皆それぞれの金言をたくさん持っている。
アウトプット出来る金言の質／数がマネージャーとしてのスキルの一つ。
スキルアップをしっかり実感出来れば、仕事をもっと面白く出来る。
【git】reset - コミットを捨てる

コミット書き換えシリーズ

resetでは、
要らなくなったコミットを捨てることができます。
実行時に影響範囲によって異なるモードを指定することで、
インデックスやワークツリーの内容も戻すかどうか指定できます。

| モード名 | HEADの位置 | インデックス | ワークツリー |
|:-:|:-:|:-:|:-:|
| `soft`  | 変更する | 変更しない | 変更しない |
| `mixed`  | 変更する | 変更する | 変更しない |
| `hard`  | 変更する | 変更する | 変更する |

HEADの位置 : branchが現在指すポインターの場所
インデックス : コミットした内容を保存する場所
ワークツリー : ローカルのリポジトリ

[主な利用シーン]
-変更したインデックスの状態を元に戻す(mixed)
-最近のコミットを完全に無かったことにする(hard)
-コミットだけを無かったことにする(soft)
【短編ポエム】Haskell/PureScriptの関数呼び出しはRuby/Python/JavaScriptよりイケている

* [「Rubyのここがイケてない」を論破したい](http://qiita.com/ocadaruma/items/4c66422cb7761f99e0fe)

> Proc#callがださい

たとえば、ふたつの引数の和を出力する関数`add`や`sum`について考えてみます。PythonやJavaScriptなら次のようなコードを書くことができます。

```py:python
def add(x, y):
    print(x + y)
 
sum = add    # そのまま代入できる
 
add(1, 2) 
sum(1, 2)    # addとsumの呼び出し方に違いはない
```

```js:JavaScript
function add(x, y){
    console.log(x + y);
}

sum = add    // そのまま代入できる

add(1, 2) 
sum(1, 2)    // addとsumの呼び出し方に違いはない
```

しかし、Rubyではメソッドをそのまま他の変数に代入したりはできず、`proc`や`lambda`で`Proc`オブジェクトを作ってから渡さなければなりませんし、受け取った側も`call`をつかって呼ぶ必要があります。これは`apply`メソッドを呼ばなければならないJavaあたりでも同じですね。

```ruby:Ruby
def add(x, y)
    puts (x + y)
end

sum = proc{|x, y| add(x, y)}  # procやlambdaで包む必要がある

add 1, 2          
sum.call 1, 2                 #callで呼び出す必要があり、addとsumの使い方が異なってしまう  
```

なるほどこれはダサい。でもこれにはRuby側の反論もあって、Rubyでは引数がないときはメソッド呼び出しで括弧を省略できるという利点もあります。

```js:JavaScript
function answer(){
    console.log(42)
}

answer()        // 括弧がいる
```

```ruby:Ruby
def answer
    puts 42
end

answer            # 括弧がいらない
```

> 私もちょっとダサい、っつーか扱い辛いと感じることがあります。が、これは文中にも書いてある通り、Rubyに価値を与えている独特なスタイルとのトレードオフでしょう。

JavaScriptやPythonにこのような括弧の省略を導入しようとしても、関数オブジェクトそのものを表す構文と衝突してしまうので不可能です。そんなわけで、これを見る限り必ずしもどちらがいいと言い切れないようにみえるのですが……。




# Haskell/PureScriptでは

Haskell/PureScriptでは、このジレンマが解決します。

```haskell:PureScript
add x y = logShow (x + y)    -- addには引数があります

sum = add                    -- 関数は第一級なので、普通に代入できます

answer = logShow 42          -- answerには引数がありません

fortyTwo = answer           -- answerの値も第一級なので、そのまま別の変数に代入することもできます

main = do
    add 1 2                  -- 3が出力されます。引数がある場合はもちろん普通に呼び出せます
    sum 1 2                  -- 3が出力されます。addとsumに呼び出しかたの違いはありません
    answer                   -- 42が出力されます。引数がない場合も、もちろん括弧はありません
    fortyTwo                 -- 42が出力されます。fortyTwoとanswerは同じものを指しているからです
```


Rubyの『引数のない関数呼び出しで括弧を省略できる』という利点と、Python/JavaScriptの『通常の関数呼び出しと、関数オブジェクトの呼び出しを区別しない』という利点の、ふたつの利点が両立しています。ふしぎ！Haskell/PureScriptでは何故こんなことができるのか、上のコードの各部はどういう意味なのか、どんな順序で実行が進んでいくのか、自分で考えてみると面白いかもしれません[^sample]。

[^sample]: もっとも、Haskell/PureScriptを知らない人は絶対にわからないと思いますが。なお、これはPureScriptのコードなので、実行の順序がぐちゃぐちゃになるHaskell特有の変態仕様『遅延評価』は関係がありません

それに、上のPureScriptのコードを良く見ると、ピリオドもなければコロンもないし、カンマのひとつすら存在しません。予約語はコードブロックの始まりを告げる`do`のみ。Pythonのようにインデントでブロックが表現されているなど、異様なまでにコードの見た目がスッキリしているのがわかると思います。これもHaskell/PureScriptのコードの特徴です。極限まで構文上のノイズが絞られていて筆者はすごく読みやすいと思うのですが、何故か読みにくいと言われることもあります。

> これは文法の問題なので、もしかしたらこれらを両立させる文法をもった言語が将来開発されるかもしれません。

15年以上前からあります。使っている人が少なすぎて、あまり知られていませんが……。

引数がないときの括弧を省こうとするなど、Rubyを使う人はそういう構文上のオーバーヘッドを嫌う人が多いのかもしれません。Haskell/PureScriptはとにかく構文が簡潔ですから、Rubyが好きな人にも向いているんじゃないかと。このような細かいところは正直どうでもいいと私は思うのですが、私は普段『同期的な作用と非同期な作用をモナドで抽象化すると一貫性が生まれて便利だよ』みたいな重大なポイントについて利点の説明をしては『意味わかんねーよ文章長えよカス！』という感じで罵られているので、今回は『関数の引数の有無や第一級かどうかについて便利さと単純さが両立するよ』という、わかりやすいポイントについてなるべく簡潔に説明をしました。

----
【git】revert - 過去のコミットを打ち消す

コミット書き換えシリーズ

"revert"では、
指定したコミットの内容を打ち消すコミットを作り出すことができます。
"rebase -i"や"reset"でコミットを削除することもできますが、
そのコミットが既に公開済みであった場合は勝手に削除できません。
このような場合には、"revert"で内容を打ち消すコミットを作り出すことができます。

[主な利用シーン]
-過去に公開したコミットを安全に打ち消す
【git】amend - 直前のコミットを修正する

コミット書き換えシリーズ

amendオプションを指定してコミットを行うと、
同じブランチの直前のコミットに対して内容を追加やコメントの修正をすることができます。

[主な利用シーン]
-直前のコミット漏れしたファイルを後から追加する
-直前のコミットコメントを修正する
【git】fast-forward とは

Gitがポインターを前に進めること。

mergeするブランチ（issue1）が親ブランチから作成されている。
親ブランチがissue1ブランチをマージするとfast-forwardマージになる。

マージ先のブランチ(master)が指すコミットが
  マージ元(issue1)のコミットの直接の親であるため、
Git がポインタを前に進めたのです。

言い換えると、あるコミットに対してコミット履歴上で
直接到達できる別のコミットをマージしようとした場合、

Git は単にポインタを前に進めるだけで済ませます。
マージ対象が分岐しているわけではないからです。

この処理のことを "fast forward" と言います。
Mecabのインストール方法

EC2インスタンスを立て環境構築し、いざrailsを起動させようとしたところmecabでエラーになり、調べてもなかなか出てこなかったのでメモとして残しておきます。

## Mecabのインストール
Mecab本体をインストールします。この時、ググると以下のようにすればインストールできるとあります。

```
$ wget http://mecab.googlecode.com/files/mecab-0.994.tar.gz
```

実際に行うとこのようなエラーになります。

```
$ wget http://mecab.googlecode.com/files/mecab-0.994.tar.gz
--2016-09-22 08:48:07--  http://mecab.googlecode.com/files/mecab-0.994.tar.gz
mecab.googlecode.com (mecab.googlecode.com) をDNSに問いあわせています... 64.233.187.82, 2404:6800:4008:c01::52
mecab.googlecode.com (mecab.googlecode.com)|64.233.187.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 404 Not Found
2016-09-22 08:48:08 エラー 404: Not Found。
```

どうやらこのURLはもう存在していないみたいです。ではどこからインストールするのか。インストールするにはこのURLにアクセスして行います。
http://taku910.github.io/mecab/#download

![behave.gif](https://qiita-image-store.s3.amazonaws.com/0/74580/e8590899-adc8-41b5-970e-9a49399e5ed9.gif)

ただこのままだとlocalにファイルをダウンロードされてします。できることなら、インスタンス上でダウンロードしたいなと思いました。

なのでこのように対処しました。

1.上記URLにアクセスし、開発ツールを開く。
2.「ダウンロード」となっている箇所のhtmlを見てそこのurlを使用する

これで問題なくインストールに成功しました。コードは以下です。

```
    wget -O mecab-0.996.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7cENtOXlicTFaRUE"
    tar zxvf mecab-0.996.tar.gz
    cd mecab-0.996
    ./configure
    make

```

ダウンロードする時に名前、ファイル形式を指定しないとちょっと意図通りにできなかったので変更をしています。今回だと最新がmecab-0.996だったのでこのようにしています。

## 辞書の登録
Mecabが使用する辞書を登録します。こちらも同様です。よくあるコマンドが以下です。

```
$ wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
```

がこちらも例のごとくエラーになるのでこちらも同様に対処します。結果コードは以下です。

```
    wget -O mecab-ipadic-2.7.0-20070801.tar.gz "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7MWVlSDBCSXZMTXM"
    tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
    cd mecab-ipadic-2.7.0-20070801
    ./configure --with-charset=utf8
    make
```

今回だと最新がmecab-ipadic-2.7.0-20070801だったのでこのようにしています。
C言語のポインタ渡し

C言語で*(アスタリスク)や&(アンパサンド)って何だっけ？となったときのポインタ基礎です。

 *a：ポインタの値渡し
 &a：ポインタ渡し

`*a`はaのアドレス(番地)の中の値を、`&a`は番地そのものを渡します。
実際にサンプルコードで見てみます。

```C:sample.c
#include <stdio.h>

int main(void) {
    int a = 100;
    int *b;
    
    printf("1: %d\n", a);
    printf("2: %p\n", &a);
    
    b = &a;
    printf("3: %p\n", b);

    *b = 255;
    printf("4: %d\n", a);
}
```

結果
---
```
1: 100
2: 0x7ffcd185a1bc
3: 0x7ffcd185a1bc
4: 255
```

解説
---
1：aの中身は100
2：aの番地は0x7ffcd185a1bc
3：bの中身はaの番地(0x7ffcd185a1bc)
4：aの中身は255

コードについて見てみます。

`int *b`

は番地を格納するint型のポインタ変数bを宣言しています。bは番地を入れる変数として使います。

`printf("2: %p\n", &a);`

これでaの番地を表示しました。結果が0x7ffcd185a1bcであるのは実行したコンピュータのメモリ番地範囲が64bitだからです。番地範囲は実行環境に応じて以下のようになります。

| bit | 範囲 |
|:---:|:---|
| 64 | 0xffffffffffffffff |
| 32 | 0xffffffff |
| 16 | 0xffff |
| 8 | 0xff |


値そのものも実行環境によって変化します。このときはたまたま0x7ffcd185a1bcでした。

`b = &a`

↑これはaの番地(0x7ffcd185a1bc)をbに代入しています。

`*b = 255`

↑これはbの中身が示す番地に255を代入しています。さて、aの番地は0x7ffcd185a1bcでした。この番地には255を代入したので、最後にaの中身を表示してみると結果が255になっていることが分かります。

bは番地を使ったaのショートカットとして使うことができそうです。その他にも大きな数値を渡したりする場合には値そのものを渡すのではなく、型と番地を渡してあげれば無駄なメモリを消費せずに高速に処理ができるところがポインタの役割でもあります。

左辺と右辺のときの考え方
---
 *a：ポインタの値渡し
 &a：ポインタ渡し

冒頭でこのように定義しました。この変数が左辺または右辺に置かれた場合は以下のようになります。

```C:
int *a, b, foo, *bar;

foo = *a;// aの(番地が示す)値を渡す
*a = foo;// aの(番地が示す)値としてfooを代入

bar = &b;// bの番地をbarに渡す;
&b = bar;// 番地自体は変数ではないのでコンパイルエラーが生じる。代入できるのは番地が示す中身。
```
注意点としては、参照を使った変数の処理では予めポインタ変数として宣言する必要があります。(例：int *a)
マイコンなどは決められたメモリアドレスに対して特有の機能が割り当てられているため、ポインタを使って番地の値を変更することで様々な機能を使い分けることができるようになっています。
出力されたHTMLに、テンプレートファイルのパスをコメントとして埋め込む

* [出力されたHTMLを見ただけで、CakephpのどのViewの内容なのかすぐに分かるようにする - Qiita](http://qiita.com/endam/items/c8128efc487d027e01d0)

便利そう。CakePHP3.x向けに書いてみた。View::render()系を拡張すればテンプレートにコードを増やさなくても良さそう。

`View::element()` → `View::_renderElement()` → `View::_render()` という風に呼び出されていたので`View::_render()`を拡張してみました。


## src/View/AppView.php

```php
<?php
namespace App\View;

use Cake\Core\Configure;
use Cake\View\View;

class AppView extends View
{
    /**
     * {@inheritDoc}
     */
    public function initialize()
    {
    }

    /**
     * {@inheritDoc}
     */
    protected function _render($viewFile, $data = [])
    {
        $content = parent::_render($viewFile, $data);
        if (Configure::read('debug')) {
            $content = $this->addViewPathComment($content, $viewFile);
        }
        return $content;
    }

    /**
     * @param string $content
     * @param string $viewFile
     * @return string
     */
    public function addViewPathComment($content, $viewFile)
    {
        $template = "<!-- START %s -->\n%s\n<!-- END %s -->";
        $content = sprintf(
            $template,
            $viewFile,
            $content,
            $viewFile
        );
        return $content;
    }
}

```

## 効能

```php
<?php // src/Template/Sample/index.ctp ?>
<p>This file is index.ctp</p>
<?= $this->element('element1') ?>

<?php // src/Template/Element/element1.ctp ?>
<p>This file is element1.ctp</p>
```

と書くと出力されたHTMLは

```html
<!-- START /var/www/app/src/Template/Layout/default.ctp -->
<!DOCTYPE html>
<html>

<!-- 中略 -->

<!-- START /var/www/app/src/Template/Sample/index.ctp -->
<p>This file is index.ctp</p>
<!-- START /var/www/app/src/Template/Element/element1.ctp -->
<p>This file is element1.ctp</p>

<!-- END /var/www/app/src/Template/Element/element1.ctp -->
<!-- END /var/www/app/src/Template/Sample/index.ctp -->

<!-- 中略 -->

</html>

<!-- END /var/www/app/src/Template/Layout/default.ctp -->
```

となります。
R > データ操作 > スプライン補間

```txt:動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
```

R機能マップ http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

データにスプライン補間してみる。

参考 http://astrostatistics.psu.edu/su07/R/html/stats/html/splinefun.html

```R
> x<-c(1,11,20)
> y<-c(1,10,1)
> plot(x,y)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/af1eb5c7-f61b-f2dc-c4e8-7cbedf0990c2.png)

```R
> z<-spline(x,y,n=100)
> plot(z)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/5fa57a4e-5c64-9c20-edfa-5bda13d36540.png)
Unity で VR モード時にカメラの位置を固定する

Unity で VR モードにして Oculus Rift, HTC Vive などのヘッドマウントディスプレイでプレイすると、自動的に hmd とセンサーとの距離からカメラの位置が動く。

これは、 [Unity 公式ドキュメント：VR 概要](https://docs.unity3d.com/ja/current/Manual/VROverview.html) の "カメラを理解する" のセクションに記載されている。

> カメラの Transform は、ヘッドトラッキングされた姿勢で上書きされます。

カメラの位置 (position) は固定して回転 (rotation) のみ有効にしたい場合がある。そのためには、カメラの親となるゲームオブジェクトにカメラの動きを無効化するための処理を加える必要がある。

> もしもカメラを動かしたい場合は、別のゲームオブジェクトの子としてアタッチし、そのゲームオブジェクトのルートを動かしてください。

続きは元記事で＞[Unity で VR モード時にカメラの位置を固定する](http://monopocket.net/blog/vr/unity-hmd-position/)
ステータスバーの色が決まるロジック


ちゃんと理解してなかったので覚え書き。

## まず、大きく分けて２種類

Info.plist の
`View controller-based status bar appearance` が

① YESなら画面ごとで設定(デフォ) 👈 これについて
② NOならアプリ全体で統一



②のようにアプリ全体で統一する場合は以下のようなコードでいつでも変更可能だけど、画面ごとにステータスバーの色が決まるような普通のアプリだと管理が大変なのであまり使われない。(と思う)

``` swift
UIApplication.sharedApplication().statusBarStyle = .LightContent
```



この記事では①についてまとめようと思います。(覚え書き)


## UIViewControllerの２つのメソッドで決まる

``` swift
func preferredStatusBarStyle() -> UIStatusBarStyle
```
スタイルを返す。


``` swift
func childViewControllerForStatusBarStyle() -> UIViewController?
```

スタイルを **子のViewControllerに委託** するときにつかう。
何かを返した場合は、そのChildViewControllerのpreferredStatusBarStyleが呼ばれて、自身のは呼ばずにずスルーする。
(デフォルトはnil)




## 気をつけるべきなのはUINavigationControllerがある場合の挙動

以下の２点を気をつける必要がある。

1. 中身のViewControllerに委託してると思いがちだけど、なにもしなければUINavigationController自身がスタイルを決定する。
(こいつも普通のUIViewControllerと挙動は変わらずchildViewControllerForStatusBarStyleが nilを返す)

2. navigationBarHiddenがtrueの場合はスタイルを中身のViewControllerに委託するようになっている。
(childViewControllerForStatusBarStyle が visibleViewController を返す)


つまり

`navigationBarHidden` が false の場合は 自分で決める(デフォ)
`navigationBarHidden` が true  の場合は visibleViewController に委託


``` こうなってんのかなUINavigationController.swift
override func childViewControllerForStatusBarStyle() -> UIViewController? {
	return navigationBarHidden ? visibleViewController : nil
}
```

### navigationBarHiddenがfalseだけど中身のViewControllerで色を決めたい場合は
* 継承して childViewControllerForStatusBarStyle で visibleViewController を返す

or

* UINavigationBarのbarStyleを設定 (UINavigationBarを黒にすると自動でステータスバーが白くなることを利用するやりかた。継承せずに済むけど綺麗なやり方ではない。)


## 動的なステータスバースタイルの更新

例えばChildViewControllerを閉じた場合など、自動で `preferredStatusBarStyle()` が呼ばれないときは`setNeedsStatusBarAppearanceUpdate`を呼んで更新を促す。


これを利用して、ViewController内で動的にステータスバーを表示/非表示したり、色を変えたりすることも可能。

``` 動的なスタイルの変更

// この変数に値をいれたときに変わる
var statusBarStyle: UIStatusBarStyle = .Default {
    didSet {
        guard oldValue != statusBarStyle else { return }
        UIView.animateWithDuration(0.4) {
            setNeedsStatusBarAppearanceUpdate()
        }
    }
}

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return statusBarStyle
}

```

``` 動的な表示/非表示の変更
// この変数に値をいれたときに変わる
var statusBarHidden = false {
    didSet {
        guard oldValue != statusBarHidden else { return }
        UIView.animateWithDuration(0.4) {
            setNeedsStatusBarAppearanceUpdate()
        }
    }
}

override func prefersStatusBarHidden() -> Bool {
    return statusBarHidden
}

```


ちなみにステータスバー変化のアニメーションは以下で指定する


```
override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
	return .Fade
}

```

## 他にもStoryBoardやTargetの設定項目にもあるらしい
優先順位もあるらしい


ステータスバーのスタイル(色)変更方法優先度 まとめ
http://qiita.com/ux_design_tokyo/items/8e62977b7609e68755c7

# 参考
http://cockscomb.hatenablog.com/entry/2013/11/12/190905
http://qiita.com/yimajo/items/7051af0919b5286aecfe
（PayPal）メールまたは電話番号がわかっている場合、PHP APIを使用してPayPalアカウントのステータスを確認するにはどうすればよいですか?

[GetVerifiedStatus API](https://developer.paypal.com/webapps/developer/docs/classic/api/adaptive-accounts/GetVerifiedStatus_API_Operation/)を使用してPayPalアカウントのステータスを取得できます。以下のアカウント情報を入力する必要があります。

- メールアドレス
- 電話番号
- 名
- 姓
 
[GetVerifiedStatus API](https://developer.paypal.com/webapps/developer/docs/classic/api/adaptive-accounts/GetVerifiedStatus_API_Operation/)を使用するためには、下記URLでAdaptivePaymentのAppIDを申請してください。
https://www.paypal-apps.com/user/my-account/applications
上記サイトでログインし、[New Application]をクリックすると、申請画面が表示されます、申請画面で要求されている内容を入力/アップロードしてください。
GetVerifiedStatusの利用を利用したい場合、AppIDを申請する時、Adaptive Accountsの下に、「Get Verified Status」をチェックしてください。
申請した後、PayPal関連部署より審査が行われます。審査の更新情報がありましたら、Applicationのサイトで更新されますので、定期的にApplicationのStatus Messagesのチェックしてください。



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal SDKの使用時にエラー「Class 'PayPal\Rest\ApiContext' not found (クラス’PayPal\Rest\ApiContext’が見つかりません)」が出るのはなぜですか?

このエラーは、PHP SDKのファイルパスが見つからなかったことを示しています。

この問題を解決するには、[Composer](https://getcomposer.org/)を使ってベンダーフォルダーを更新してください。以下に例を示します。
 
```
require('vendor/autoload.php');
$api = new \PayPal\Rest\ApiContext(
 new \PayPal\Auth\OAuthTokenCredential(
    $client_ID,
    $client_Secret
  )
);
$api->setConfig([
 'mode'=>'sandbox',
 'http.ConnectionTimeOut'=>30,
 'log.LogEnabled'=>false,
 'log.FileName'=>'',
 'log.LogLevel'=>'FINE',
 'validation.level'=>'log'
]);
```



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPalのREST APIとClassic APIの主な違いは何ですか?

[REST API](https://developer.paypal.com/docs/api/overview/)は [OAuthフレームワーク](https://developer.paypal.com/docs/integration/direct/paypal-oauth2/?mark=oauth)を中心に構築され、OAuthを必要とするモバイルプラットフォームなどの環境向けに設計されています。REST API:

- より単純な承認スキームが組み込まれています。
- HTTP動詞とRESTfulのエンドポイント構成を使用します。
- API承認フレームワークとしてOAuth 2.0を使用します。
- リクエストおよびレスポンスのペイロードをJSONにフォーマットします。

[Classic API](https://developer.paypal.com/docs/classic/api/)は、NVP (Name-Value Pair)または SOAPによりAPIコールを行います。これらのAPIは長く使用されており、RESTがサポートしていない多数のコールに対応しています。



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
新しいPayPal UIでは、ウェブサイトの設定と即時支払い通知はどこにありますか?

ウェブサイトの設定は、以下の方法で確認できます。
1.	[PayPalアカウント](https://www.paypal.com/)にログインします。
2.	[ウェブサイトの設定](https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-website-payments)にアクセスします。
即時支払い通知は、以下の方法で確認できます。
1.	[PayPalアカウント](https://www.paypal.com/)にログインします。
2.	[即時支払い通知](https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-ipn-notify)にアクセスします。



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
（PayPal）自分のECサイトでチェーン型支払いのテスト中、エラー「Account not found. Unilateral receiver not allowed in chained payment is restricted」が出るのはなぜですか。

質問：
自分のECサイトでチェーン型支払いのテスト中、エラー「Account not found. Unilateral receiver not allowed in chained payment is restricted (アカウントが見つかりません。チェーン型支払いで許可されていないメールアドレス未登録/未確認の受取人が制限されています)」が出るのはなぜですか。



回答：
このエラーは通常、受取人のメールアドレスが未確認の場合に発生します。

この問題を解決するには、受取人にメールアドレスを確認するよう依頼してください。手順は次のとおりです。
1.	[PayPalのメール設定](https://www.paypal.com/us/cgi-bin/webscr?cmd=_profile-email)にアクセスします。
2.	確認するメールアドレスを選択します。
3.	選択内容を確認してください。PayPalからメールをお送りします。
4.	メール内のリンクに従って確認手続きを完了します。



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPalのAPIエラー10413「引数が無効なため取引が拒否されました。詳細については、追加のエラーメッセージを参照してください。カートの商品の合計金額が注文金額と一致しません」が出るのはなぜですか?

このエラーは、PAYMENTREQUEST_0_AMTの値が以下の合計と異なる場合に発生します。

- PAYMENTREQUEST_0_ITEMAMT (必須)
- PAYMENTREQUEST_0_TAXAMT (オプション)
- PAYMENTREQUEST_0_SHIPPINGAMT (オプション)
- PAYMENTREQUEST_0_HANDLINGAMT (オプション)
- PAYMENTREQUEST_0_SHIPDISCAMT (オプション)
- PAYMENTREQUEST_0_INSURANCEAMT (オプション)

この問題を解決するには、値の合計がPAYMENTREQUEST_0_AMTの値と必ず等しくなるようにしてください。

例を以下に示します。:
 
PAYMENTREQUEST_0_AMT=524.20                              // 合計
PAYMENTREQUEST_0_ITEMAMT=458.00                     // 商品 * 数量 + その他の商品 * 数量 = ITEMAMT
PAYMENTREQUEST_0_SHIPPINGAMT=20.00              // 配送料合計
PAYMENTREQUEST_0_TAXAMT=46.20                        // 合計税額
L_PAYMENTREQUEST_0_NAME0=Books
L_PAYMENTREQUEST_0_AMT0=154.00                       // 154.00 * 2 = 308.00
L_PAYMENTREQUEST_0_QTY0=2
L_PAYMENTREQUEST_0_NAME1=CDs
L_PAYMENTREQUEST_0_AMT1=50.00                         // 50.00 * 3 = 150.00
L_PAYMENTREQUEST_0_QTY1=3

308.00 + 150.00 = 458.00 (ITEMAMTと同じ)
+20.00//配送料
+46.20//税額
=524.20//金額



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPalで配送先住所なしで即時支払いを受諾する方法を教えてください。

マーチャントのウェブサイトから送られた下記パラメータを「1」に設定すると、配送先住所がなくても支払いを受諾することができます。
ウェブサイトペイメントスタンダードの場合、「no_shipping」パラメータ、https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/
エクスプレスチェックアウトの場合、SetExpressCheckout APIの「NOSHIPPING」パラメータ
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/#id08A6HI0J0VU

また、サードパーティーショッピングカートをご利用の場合は、上記パラメータの設定方法についてはショッピングカートに問い合わせてください。



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal REST APIで定期支払いの実装方法を教えてください。

定期支払いのPayPal REST APIを実装するには、次の4つのステップがあります。
1. 請求設定の作成（Create a plan）
2. 請求設定の有効化（Update a plan(Active a Plan)）
3. 請求処理規約の作成（Create an agreement under a plan）
4. 請求処理規約の実行（excute the agreement）
開始する前に、ご使用の [REST APIアプリの設定](http://developer.paypal.com/webapps/developer/applications/myapps)で、REST APIのアプリ購読（Subscriptions）がオンに切り替えられていることを確認します。

**請求設定の作成**
https://developer.paypal.com/docs/api/#create-a-plan

```
curl -k -v -H 
“Content-Type:application/json” 
-H “Authorization: Bearer ACCESS_TOKEN” 
-d '{“name”:”Test REST Club Plan”,
“description”:”Template creation.”,
“type”:”fixed”,
“payment_definitions”:[{“name”:”Regular Payments”,
“type”:”REGULAR”,
“frequency”:”MONTH”,
“frequency_interval”:”2”,
“amount”:{“value”:”100”,
“currency”:”USD”},
“cycles”:”12”,
“charge_models”:[{“type”:”SHIPPING”,
“amount”:{“value”:”10”,
“currency”:”USD”}},
{“type”:”TAX”,
“amount”:{“value”:”12”,
“currency”:”USD”}}]}],
“merchant_preferences”:{“setup_fee”:{“value”:”1”,
“currency”:”USD”},
“return_url”:”http://returnurl”,
“cancel_url”:”http://cancelurl”,
“auto_bill_amount”:”YES”,
“initial_fail_amount_action”:”CONTINUE”,
“max_fail_attempts”:”0”}}' https://api.sandbox.paypal.com/v1/payments/billing-plans
```
 
PayPalは、「P-」で始まる請求設定IDを返します。

**請求設定の有効化**
https://developer.paypal.com/docs/api/#update-a-plan

```
curl -k -v -H 
“Content-Type:application/json” 
-H “Authorization: Bearer ACCESS_TOKEN” 
-d '[{“path”:”/”,
“value”:{“state”:”ACTIVE”},
“op”:”replace”}]' https://api.sandbox.paypal.com/v1/payments/billing-plans/
```

**請求処理規約の作成**
https://developer.paypal.com/docs/api/#create-an-agreement

```
curl -k -v -H 
“Content-Type:application/json” 
-H “Authorization: Bearer ACCESS_TOKEN” 
-d '{“name”:”Test REST Club Plan”,
“description”:”Template creation.”,
“start_date”:”2015-03-20T07:49:27-07:00”,
“plan”:{“id”:”PLAN_ID_HERE”},
“payer”:{“payment_method”:”paypal”},
“shipping_address”:{“line1”:”111 First Street”,
“city”:”Saratoga”,
“state”:”CA”,
“postal_code”:”95070”,
“country_code”:”US”}}' https://api.sandbox.paypal.com/v1/payments/billing-agreements
```
PayPalは、以下のように、ECトークンでエクスプレス チェックアウトのリダイレクトURLを返します。
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-xxxxxxxxxxxxxxxxx
顧客を、復帰URL経由でPayPalサイトにリダイレクトする必要があります。請求処理規約が承認されると、顧客は、[請求設定の作成]で設定されたreturn_urlであるお客さまのECサイトにリダイレクトされます。

**請求処理規約の実行**
https://developer.paypal.com/docs/api/#execute-an-agreement

```
curl -k -v -H 
“Content-Type:application/json” 
-H “Authorization: Bearer ACCESS_TOKEN” 
-d '{}' https://api.sandbox.paypal.com/v1/payments/billing-agreements/EC-TOKEN_HERE/agreement-execute
```



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
私のPayPalペイメント スタンダードの決済ページがデモと違う表示になるのはなぜですか?

お客さまの決済ページがデモと同じように表示されないのは、ご使用のコンピュータのCookieによって、表示する決済ページが決定されるためです。

- PayPalアカウントにログインする際、ログインCookieがご使用のコンピュータに保存されます。
- システムでは、決済ページの選択時にこのCookieがチェックされます。
- Cookieが存在する場合は、支払い明細と、「現在PayPalアカウントをお持ちでなければ、こちらをクリックしてください」というメッセージが表示されたページが開きます。
- 顧客は、[PayPalアカウントをお持ちでない場合]をクリックすると、PayPalアカウントを開設せずにクレジットカード情報を入力することができます。

PayPalアカウントを持たずに支払いを行う顧客の多くは、PayPalアカウントにログインしていないため、コンピュータにログインCookieがありません。初期設定では、これらのユーザーには、ログイン情報とともにオプションのクレジットカードによる支払方法を含む支払い画面が表示されます。

この画面を表示するには、Cookieを消去してブラウザを再起動し、支払い処理を再度実行してください。Cookieを消去する手順は、 [こちら](https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1451)をクリックしてご覧ください。



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPalのREST APIを使用して、Sandboxで購読のネガティブテストを開始する方法を教えてください。

現在、REST APIは[ネガティブテスト](https://developer.paypal.com/docs/classic/lifecycle/sb_error-conditions/?mark=negative%20testing)に完全には対応していません。ただし、エラーの一部をシミュレートするため、RESTを使ってエクスプレス チェックアウトのネガティブテストを開始することはできます。

たとえば、[INSTRUMENT_DECLINED](https://developer.paypal.com/docs/api/index.html#INSTRUMENT_DECLINED)を再作成する場合は、エクスプレス チェックアウトでの拒否についてネガティブテストを完了する必要があります。



<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
機械学習自分用勉強ノート（１）概論

# 背景
今までこの分野から私はちょっと逃げていて、「数学苦手だしなー」とか「なんだか難しいしな」とか「pythonあんまり好きじゃないしな」とか、本当にどうでも良い理由で逃げていました。しかし、真剣に向き合わなきゃいけない事例が出てきて、これを気にちょっと真剣にがんばろうと思い立ちました。

どうでも良いことに頑張らなくて良くするために頑張ろう＼(^o^)／


# 書いている人のアセット
 - プログラムはある程度は書ける。
 - Python は2 なんだか3なんだかよくわからないという理由だけで避けていた
 - 機械学習を使ってすげーサービスを作ろう！！ というよりは、自分の秘書みたいな、自分のサポートをしてくれるシステムを作れたら良いなーくらいのモチベーションでやっています。
 - そんなに数学ができるわけではない。理論がわからなくてどうしようもなくても、実際に実装してみれば感じ取れるんじゃないか？というスタンスで行きます。
 - いつも書いていることですが、備忘録です。もし間違っていること等があれば、ご指摘していただければ本当に嬉しいです。何卒、よろしくお願いします。

# 機械学習とは何か

wikipedia によると以下のように記述がある。
> 機械学習（きかいがくしゅう、英: machine learning）とは、人工知能における研究課題の一つで、人間が自然に行っている学習能力と同様の機能をコンピュータで実現しようとする技術・手法のことである。

大きく分けて以下の体系に分類できる。

 - 教師あり学習（supervised learning）
 - 教師なし学習 （unsupervised learning）
 - 強化学習（reinforcement learning）

## 教師あり学習（supervised learning）

予め、データとラベルと大量に学習機に与え、予測モデルを立てる手法。入力に対して出力がいくつかに限定されており、既知のものを予測・分類するときに有効だが、未知のものを発見することは出来ない。

教師あり学習に分類されるアルゴリズムの例

 - ニューラルネットワーク（neural network）
 - サポートベクタマシン（suppoert vector machine）
 - 決定木（decision tree）

## 教師なし学習（unsupervised learning）

教師あり学習と違い、何が正解かどうかが、事前にわからないときに使う。（？）

教師なし学習に分類されるアルゴリズムの例

 - 主成分分析
 - クラスター分析

※ 人間で言うとブレインストーミングみたいなものだろうか？？？　クラスタリング以外に教師なし学習のアルゴリズムってあるのだろうか？？まだちょっと理解出来ていない。

## 強化学習（reinforcement learning）

現在の環境に対して最も有効な選択肢を選ぶためのアルゴリズム。ゲームのAIとかに利用されている？？？

強化学習に分類されるアルゴリズムの例

 - マルコフ決定過程？？


# 開発環境の整備
2016年9月現在、以下の構成で環境を作る

 - Mac OS X El Captain
 - Homebrew
 - Anaconda 3-4.1.0

```setup_python.sh

# pyenv のインストール
brew install pyenv

# pyenv の設定をbash_profile に書き込み
echo 'export PATH="$HOME/.pyenv/shims:$PATH"' >> ~/.bash_profile

# anaconda のインストール
pyenv install anaconda3-4.1.0
pyenv local anaconda3-4.1.0
pyenv global anaconda3-4.1.0

# anaconda のアップデート
conda update conda
conda update --all

```

# 次
 - 現在勉強中

# 参考にした資料
 - [機械学習 - Wikipedia](https://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92)
 - [Python機械学習プログラミング 達人データサイエンティストによる理論と実践 - Amazon](https://www.amazon.co.jp/gp/product/4844380605/ref=s9_simh_gw_g14_i1_r?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=desktop-1&pf_rd_r=138EE8MWZZF9G8X8EPKZ&pf_rd_t=36701&pf_rd_p=9d539fa0-72bc-4756-8b94-2163f0a38a88&pf_rd_i=desktop)
PayPalのホスト型ボタンに適用されるページスタイルを指定する方法を教えてください。

ウェブ ペイメント製品を使用すると、PayPalのランディングページに表示されるロゴやヘッダー画像を追加することにより、決済ページをカスタマイズできます。セキュア(https)サーバーに保存されている画像のみ利用することをおすすめします。セキュアサーバーに画像が保存されていない場合、PayPalのページには壊れた画像のアイコンのみが表示されます。


ご自分のボタンにページスタイルを追加する前に、[ページスタイルの作成](https://www.paypal-knowledge.com/infocenter/index?page=content&id=FAQ1543&expand=true&locale=ja_JP)の手順に従ってください。
 
以下の手順で、PayPalのアカウント設定に保存されている、「支払いページのカスタマイズ」ページのスタイルのいずれかを、お客さまのECサイトのボタンに追加します。
1.	[ここ](www.paypal.com)をクリックしてPayPalアカウントにログインします。
2.	[アカウント設定] > [プロフィール設定] > [販売ツール]をクリックします。
o	旧バージョンのUIのユーザー: [マイアカウント] > [個人設定] > [販売ツール]を選択します。
o	新バージョンのUIのユーザー: [マイアカウント] > [プロフィール設定] > [販売ツール] > [PayPalボタン]
3.	[新しいボタンの作成]をクリックするか、一覧から既存のボタンを選択して、[ボタンの編集]を選択します。
4.	ステップ1および2で、ご自分のボタンに適したオプションを入力します。
5.	[ステップ 3: 高度な機能をカスタマイズする(オプション)]をクリックします。
6.	[高度な変数]の下の[高度な変数を追加する]をチェックします。
7.	page_style=pagenameを 入力フィールドに入力し、 pagenameを お客さまのPayPalアカウント設定に保存されている、[支払いページのカスタマイズ]の名前に置き換えます。
8.	[ボタンを作成]をクリックします。

注: 使用する基本ページスタイルは、特にボタンやリンクの指定がなければ、お客さまのすべての既存および新規のページに常に適用されます。


<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
PayPal支払い時に、「売り手は、暗号化されたウェブ ペイメントのみを受取っています。」というエラーが表示されるのはなぜですか?

顧客が支払おうとすると、「売り手は、暗号化されたウェブ ペイメントのみを受取っています。暗号化されていないボタンを使用して売り手に支払うことはできません。詳細については売り手までお問い合わせください。」、「The seller accepts encrypted website payments only」というエラーメッセージが表示されます。

このエラーは、アカウント設定が原因です。アカウント設定では、暗号化されているボタンからの支払いのみ受け付けるように設定されていますが、使用されているボタンは暗号化されていないためです。
このオプションをオフにするには、以下の手順を行ってください。
 
1.	　www.paypal.comでPayPalアカウントにログインします。
 
2.	[アカウント設定]をクリックします。
o	旧バージョンのUIのユーザー: [マイアカウント] > [個人設定] > [販売ツール]を選択します。
o	新バージョンのUIのユーザー: [マイアカウント] >  [プロフィール設定] > [販売ツール] > [ウェブ ペイメントの設定]を選択します。
3.	[暗号化ウェブ ペイメント]のセクションで[オフ]を選択します。
 
4.	[保存]をクリックします。

<br />

PayPalではテクニカルサポートの部署がありますので、何かPayPal実装関連の質問や技術的な質問がありましたら、下記URLで記事を検索してみてください。
https://jp.paypal-techsupport.com/
上記URLの一番下の「お問い合わせ」リンクをクリックしてまたは下記URLをアクセスして質問を送信してください。
https://jp.paypal-techsupport.com/app/ask
R > データ構造 > データフレーム > 特定の部分だけ変更する実装

```txt:動作環境
RStudio 0.99.903 on Windows 7 pro
R version 3.3.1
```
 
R機能マップ http://qiita.com/7of9/items/0f911bcb95d3a8bbd703

データフレームの一部の値を変更してみる。
変更箇所は以下

- 2列2行目
- 2列3行目
- 3列2行目
- 3列3行目

```R
> x<-data.frame(V1=c(1,0,0),V2=c(0,2,2),V3=c(0,2,1))
> x
  V1 V2 V3
1  1  0  0
2  0  2  2
3  0  2  1
```

上記で作ったデータフレームを変更する。

```R
> x[2:3,2:3]=data.frame(V1=c(1,1),V2=c(1,1))
> x
  V1 V2 V3
1  1  0  0
2  0  1  1
3  0  1  1
```

- 左側の`[ , ]`に変更したい位置を指定
- 右側のframe()内に値を指定
  - 2列なのでV1, V2とする

```R
> x[1:1,2:3]=data.frame(V1=c(3),V2=c(3))
> x
  V1 V2 V3
1  1  3  3
2  0  1  1
3  0  1  1
```

- 左側の`[ , ]`の指定は最初が「行」で次が「列」のようだ