OmniAICreator/Qiita-1.07M huggingface dataset:
構造体のフィールドタグを挿入する go-add-tagsを書きました

![demo](https://github.com/syohex/emacs-go-add-tags/raw/master/image/go-add-tags.gif)

vim-goの GoAddTagsコマンドが欲しいということで Emacs版 [go-add-tags](https://github.com/syohex/emacs-go-add-tags)を書きました. JSONを与えて構造体を吐くようなコマンドはいくつかありますが, 既に書いてしまったものにタグを追加したいような場合だと, go-add-tagsが便利だと思います.

利用方法は `M-x go-add-tags`とするだけです. デフォルトでは現在の行, リージョンを選択して実行した場合はその領域に存在するフィールドのタグを挿入します. タグに出力されるフィールド名はデフォルトでは snake_caseです(vim-goに合わせている). この挙動は `go-add-tags-style`変数を設定するか(デフォルトの変更), `C-u`プレフィックスでコマンドを実行することで変更できます(複数候補からの選択).

`json,yaml`のようにカンマで区切って入力すれば複数のタグを同時に挿入することが可能です.

問題・要望等ありましたら github issuesまでお願いします.
Bootstrap Datetimepicker (Bootstrap 3 Datepicker)で時間のみを使用する場合

Bootstrap Datepickerと Bootstrap Timepicker がひとつのライブラリで使えるようになったBootstrap 3 Datepicker
https://eonasdan.github.io/bootstrap-datetimepicker/
ドキュメントを読んでもTimepicker的な使い方が載っていなかったので、時間のみを使用する場合をまとめました。

# momentjsではまった箇所
Bootstrap 3 Datepickerは時間操作をmomentjsを使ってやっています。
http://momentjs.com/

momentjs自体はドキュメントを読めばそれほど難しくないのと、他にも説明をしているサイトがあるので、使い方はそちらに任せて、使用するにあたりはまった点が1点あるのでそこだけ注意。

ダウンロードできるファイルに、ロケールファイルが内包されている、moment-with-locales.jsとされていないmoment.min.jsがあって、されていないものは必要なロケールだけを選んで使えるような感じになっているのですが、正しい配置をしていてもなぜかロケール設定をするとうまく動かなかったので、locale: 'ja'を設定する場合は必ずmoment-with-locales.jsを利用しましょう。

# 時間入力用のHTML
今回はデータベースから取ってきた日付データの時間のみを操作するため、フォームの初期値には日付がついた状態のデータをセットします。

```html
<div class="input-group time">
    <input name="time" class="form-control" type="text" value="2016-09-12 11:30:00">
    <span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>
</div>
```

# Datepickerの初期化
時間のみを扱う場合、formatに時間だけを指定すると日付選択が無く時間の選択のみのドロップダウンメニューが表示されます。

```js
$('.time').datetimepicker({
    format: 'HH:mm',
    extraFormats: ['YYYY-MM-DD HH:mm:ss'],
    stepping: 5,
    defaultDate: moment('2016-09-12 11:00:00', 'YYYY-MM-DD HH:mm:ss'),
    minDate: moment('2016-09-12 11:00:00', 'YYYY-MM-DD HH:mm:ss'),
    maxDate: moment('2016-09-13 01:00:00', 'YYYY-MM-DD HH:mm:ss'),
    keepInvalid: true
});
```
## オプションの説明
単に時間のみを扱う場合はformatを時間のみにするだけで特に問題なく使用が可能です。
ただし、今回は使用する時間のレンジが日付をまたぐ必要があったため、日付つきのデータを扱う必要がありました。

単にformatを時間のみにすると日をまたいだレンジが使用できません。
そのためminDateとmaxDateに日付をつけてあげる必要があります。
そのとき指定するデータにも日付がないとうまく日またぎの処理をしてくれないので、extraFormatsで受け渡されるデータのフォーマットを指定してあげます。

extraFormatsは入力のフォーマットのパターンを設定できるオプションで、入力フォーマットを配列で指定することができます。
これを指定することで、フォーム上のデータとドロップダウンメニューで出てくるフォーマットを変更することが可能になります。

またminDateやmaxDateを指定すると、初期値が勝手に変わってしまうことがあるため、keepInvalidをtureにすることで、初期値が勝手に変わるのを防ぐことができます。

# サーバ側へのデータの引渡し
最後にDatepickerで作られた日付データをサーバ側へ渡す処理を説明します。
通常のsubmitだとフォームに表示されている時間データのみがサーバへ送られます。
今回は日またぎの処理があるため、データはあくまでも日付のデータが一緒でないと処理が面倒になるので、せっかく日付データをもってるDatepickerのデータをサーバに渡してあげる必要があります。

```js
$('#form').on('submit', function() {
    $('stime').each(function() {
        $(this).find('input').val($(this).data("DateTimePicker").date().format('YYYY-MM-DD HH:mm:ss'));
    });
});
```

フォームがsubmitする前にDatepickerのデータを取り出し、inputのvalueに入れてあげることで、日付つきのデータをサーバに送ることができます。
swap領域を増やす

クラウドやVPSでプログラムを実行するが、
メモリ不足でプログラムが止まってしまう場合、
動作が遅くなるがswap領域を増やすことで解決される場合がある。

以下、swap領域の確認方法とswap領域の追加登録方法を示す。

```:確認
cat /proc/swaps
```

```:登録
dd if=/dev/zero of=/swap.extended bs=1M count=2048
mkswap /swap.extended
chmod 600 /swap.extended
swapon /swap.extended
```
Laravel5.3プロジェクトをさくらレンタルサーバーへ反映する


↓こちらで作成したプロジェクトをさくらレンタルサーバーへ反映します。
[Laravel5.2のチュートリアルを試す](http://qiita.com/hkomo746/items/7b01bca60d34815399c7)

- 【初回のみ】PHPバージョンの確認
PHP 5.6

- 【初回のみ】composerのインストール
ここでは、プロジェクトのファイル一式をコピーするのでcomposerのインストールは不要です。
↓composerが必要な方はこちらを参照してください。
https://getcomposer.org/download/
```bash:composerのインストール
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

- 【毎回】WinSCPでコピー
```bash:前回コピーしたファイルを削除する
rm -rf ~/mytodo
```
その後、WinSCPでプロジェクトのファイル一式を丸ごとコピーする。

- 【毎回】wwwへコピー
```bash:公開するファイルをコピーする
rm -rf ~/www/*
cp -r ~/mytodo/public/* ~/www/
```

- 【初回のみ】.htaccessの編集
```bash:Optionsは削除する
cp ~/mytodo/public/.htaccess ~/www/
view ~/www/.htaccess
```
↓削除
```text:この部分を削除
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
```

- 【毎回】index.phpの編集
```bash:index.phpを編集する
view ~/www/index.php
```
↓変更
```php:index.phpのパスを変更する
require __DIR__.'/../mytodo/bootstrap/autoload.php';
$app = require_once __DIR__.'/../mytodo/bootstrap/app.php';
```

- 【初回のみ】データベースの作成
MySQL 5.5
環境に合わせてデータベースを作成する。

- 【毎回】.envの編集
```bash:.envの編集
view ~/mytodo/.env
```
↓変更
```text:データベースの設定を変更する
APP_ENV=production
DB_HOST=xxxxxxxx
DB_DATABASE=xxxxxxxx
DB_USERNAME=xxxxxxxx
DB_PASSWORD=xxxxxxxx
```

- 【データベース更新時のみ】マイグレーション
```bash:データベースの変更を反映する
cd ~/mytodo/
php artisan migrate
```
マナーとしてのコーディングお作法　7選

# マジックナンバーは定数に置き換える（せめて）
```php
if($x == 12 )
```
★こうする

```php
const SIZE = 12;  // 定数を切って保守性可読性を上げる
if($x == SIZE )
```

# その場限りの一時変数ならばわりきってそのまま使おう
```php
$y = strlen($test);
if($x == $y )
```
★こうする

```php
if($x == strlen(test) )
```

# 大したメソッドではないが汎用性が高そうなメソッドはreturnを活用せよ
```php
function isCorrectSize($a,$b){
    if( $a == 1 && $b == 2){
        return true;
    }
    return false;
}
```
★こうする

```php
function isCorrectSize($a,$b){

    // 下記でOK（成立しなければfalseが返る）
    return ($a == 1 && $b == 2);

}
```


# ガード節によって条件分岐をわかりやすくしよう
```php
$rslt = false;
if($x > 0 ){
    $rslt = true;
}else{
    if( $y > 0 ){
         $rslt = true; 
    }
}
return $rslt;
```

★こうする

```php
if($x > 0 ){  return true; }
if($y > 0 ){  return true; }

以降、複雑な条件を書いていく...

// 要は複雑な判定に入る前に前提の判定ができるならそれを先にしようという考え
```

# for文など繰り返し式の中に関数を埋め込まない
```php
for ( $i=0; $i < count($arr); i++;){
}
```

★こうする

```php
$cnt = count($arr); 
for ( $i=0; $i < $cnt; i++;){
}
// ループのたびにcount関数が実行され効率が悪いので、外に出した。
```

# 「＆＆」や「||」の論理演算子はマッチしやすい条件を先に書こう
```php
if($x == 3 && isset($x)  ){
}
```

★こうする

```php
// 成立させたいのであれば、自明な条件を先に書いたほうが、可読性もよい。
// また || の場合は、左辺からマッチしたら右辺を判定せずに処理が移るため効率的。
if( isset($x) && $x == 3 ){
}
```

# PHPでいうところの@演算子は、エラーレポートを出力しないだけで、エラー発生（throw）を止めるわけではない点に注意。

# 番外Tips

- 三項演算子は、キレイだが、内部的には一時変数に置き換えているので、普通のifelseに比べスピードはほんの少しだけ遅い

- == と === での比較では、===のほうが型の自動変換がスキップされるため効率がよい。
- デザインパターンのうち「FactoryMethod」「Composite」「Adapter」は抑えておく。これが分かれば１メソッドにダラダラと書き綴ることもなく、処理を関数に細かく分割するだけの構造化プログラミングとも、距離をおける。
Elixir文字列まとめ

##Elixirの文字列まとめ
A String in Elixir is a UTF-8 encoded binary.

###普通に表示

```hello.exs
IO.puts "Hello, World!"
```

###文字列結合

####文字列同士の結合

```string1.exs
# "YamadaTaro"
IO.puts "Yamada " <> "Taro"
```

####指定文字列での結合
```string2.exs
res1 = Enum.join(["abc", "efg", "hij"], "-")
res2 = Enum.join(["abc", "efg", "hij"], ",")
# "abc-efg-hij"
IO.puts res1
# "abc,efg,hij"
IO.puts res2
```

###インデックスアクセス

```string3.exs
# "i"
IO.puts String.at "Elixir", 2
```

###最初の文字、最後の文字にアクセス

```string4.exs
# E
IO.puts String.first "Elixir"
# r
IO.puts String.last "Elixir"
```

###部分文字列

```string5.exs
# Eli
IO.puts String.slice "Elixir", 0, 3
```

###文字列への式展開

```string6.exs
a = "Elixir"
# "Hello Elixir"
IO.puts "Hello #{a}"
```

###文字列の長さ
```string7.exs
# 6
IO.puts String.length "Elixir"
```

###指定文字での分割

```string8.exs
hello = String.split "Hello,Elixir!", ","
# Hello
IO.puts hd hello
# Elixir!
IO.puts tl hello
```

###バイト数確認

```string9.exs
# 6
IO.puts byte_size "Elixir"
```

###大文字・小文字変換

```string10.exs
# "ELIXIR"
IO.puts String.upcase "elixir"
# elixir
IO.puts String.downcase "ELIXIR"
```

###置換

```string11.exs
# hello Elixir!
IO.puts String.replace "hello elixir!", "elixir", "Elixir"
```


参考
http://elixir-lang.org/docs/stable/elixir/String.html
素人の言語処理100本ノック:03


[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)の挑戦記録です。環境はUbuntu 16.04 LTS ＋ Python 3.5.2 \:\: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧は[こちら](http://qiita.com/segavvy/items/fb50ba8097d59475f760)からどうぞ。

## 第1章: 準備運動

###03.円周率
>"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し，各単語の（アルファベットの）文字数を先頭から出現順に並べたリストを作成せよ．

出来上がったコード：

```python:main.py
# coding: utf-8
target = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []

words = target.split(' ')
for word in words:
	result.append(len(word) - word.count(',') - word.count('.'))

print(result)
```

実行結果：

```text:端末
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
```

`,`と`.`の扱いがあんまり良くない感じがしています。[`str.split()`](http://docs.python.jp/3/library/stdtypes.html?highlight=str.split#str.split)がデリミタ文字列を複数指定できるときれいでいいのですが。
***
*(2016/09/11追記)*
shiracamusさんよりアドバイス頂きました。ありがとうございます！
問題が「アルファベットの文字」なので、アルファベットのみカウントするようにしてみました。

```python:main2.py
# coding: utf-8
target = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []

words = target.split(' ')
for word in words:
	count = 0
	for char in word:
		if char.isalpha():
			count += 1
	result.append(count)

print(result)
```

先輩方のコードを拝見すると、内包表記を使うことでもっと効率的に書けそうです。ただ、不慣れでパッと見では理解しにくいので、慣れるまでは冗長なままでいこうかと思います^^;
　
4本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。
CUDA > 関数のチェック用関数マクロ > #define CHECK(call)

@ CUDA C プロフェッショナルプログラミング by John Chengら

p.46においてcudaの関数の戻り値をチェックする関数マクロが定義されている。

```cu
#define CHECK(call)                                   \
{                                                     \
    const cudaError_t error = call;                   \
    if (error != cudaSuccess)                         \
    {                                                 \
       printf("Error: %s:%d,  ", __FILE__, __LINE__}; \
       printf("code:%d, reason: %s\n", error,         \
            cudaGetErrorString(error));               \
       exit(1);                                       \
    }                                                 \
}
```

上記の関数マクロを使うと以下のような文を書くことができる。

```cu
CHECK(cudaMemcpy(d_C, gpuRef, nBytes, cudaMemcpyHostToDevice));
```

cuda関連の関数をたくさん書いたときのソースの読みやすさが全然違う。

### CHECKマクロがある時

```cu
CHECK(cudaMemcpy(d_A, gpuRef, nBytes, cudaMemcpyHostToDevice));
CHECK(cudaMemcpy(d_B, gpuRef, nBytes, cudaMemcpyHostToDevice));
CHECK(cudaMemcpy(d_C, gpuRef, nBytes, cudaMemcpyHostToDevice));
```

### CHECKマクロがない時

```cu
cudaError_t error;

error = cudaMemcpy(d_A, gpuRef, nBytes, cudaMemcpyHostToDevice);
if (error != cudaSuccess)                         
{                                                 
   printf("Error: %s:%d,  ", __FILE__, __LINE__}; 
   printf("code:%d, reason: %s\n", error,         
        cudaGetErrorString(error));               
   exit(1);                                       
}                                                 

error = cudaMemcpy(d_B, gpuRef, nBytes, cudaMemcpyHostToDevice);
if (error != cudaSuccess)                         
{                                                 
   printf("Error: %s:%d,  ", __FILE__, __LINE__}; 
   printf("code:%d, reason: %s\n", error,         
        cudaGetErrorString(error));               
   exit(1);                                       
}                                                 

error = cudaMemcpy(d_C, gpuRef, nBytes, cudaMemcpyHostToDevice);
if (error != cudaSuccess)                         
{                                                 
   printf("Error: %s:%d,  ", __FILE__, __LINE__}; 
   printf("code:%d, reason: %s\n", error,         
        cudaGetErrorString(error));               
   exit(1);                                       
}                                                 
```

マクロを使わない時はエラー処理が目立ってしまい、処理の流れが見にくい。

一方でマクロを使った場合に人によって読みにくいということになるかどうか。

このようなマクロの使用はCUDAに限らず自分がかかわる言語、開発環境で応用性が高いようにも思う。

一方で、書きながら考えていたが、関数マクロでなくエラー出力関数`CHECKfunc()`にする場合、との違いは何だろうか。


```
void CHECKfunc(cudaError_t  error)
{                                                     
    if (error != cudaSuccess)                         
    {                                                 
       printf("Error: %s:%d,  ", __FILE__, __LINE__}; 
       printf("code:%d, reason: %s\n", error,         
            cudaGetErrorString(error));               
       exit(1);                                       
    }                                                 
}
```
Bashにアラーム機能を搭載する（改）

以前、[Bashにアラーム機能を搭載する](http://qiita.com/acro5piano/items/5008584c0458354a797e)で、作業中のターミナルに強制的に割り込んでくるアラームを作ったのだが、tmuxで画面分割をしていると、全てのペイン・ウィンドウに牛が割り込んできて甚だうっとおしい。

そこで、アラーム機能の改良版を作成した。

## 設定

1) 下記のファイルをパスが通った場所に置く

```bash:~/bin/cowsay_to_single_pts
#!/bin/bash

for t in `w -s | grep -v tty | grep ':0' | grep $SHELL | awk '{print $2}' | sed s:^:/dev/:`; do
    echo $1 | cowsay > $t
done
```

2) エイリアスを設定

```bash:~/.bash_aliases
alarm(){
    echo "tmux detach-client; sleep 2; cowsay_to_single_pts $1" | at $2
}
```


## 利用方法

```bash
# アラームをセット
alarm 'The meeting with my boss will start in 10 minutes' 9:50
# => job 22 at Thu Jun  1 9:50:00 2016

# アラーム一覧
atq
# => 22 Thu Jun 1 9:50:00 2016 a k-gosho

# JobIDを指定してアラームを削除
at -d 22
```
なお、導入にはatとcowsayコマンドが必要。

以前の記事で紹介した方法では`wall`コマンドを利用していたが、今回は`pts`へのリダイレクトを使って

- tmuxに接続していない
- zshを起動している

ユーザーにのみ、通知されるようにした。

時間になると、こんな感じの画面になる。

![Screenshot_2016-09-11_20-27-12.png](https://qiita-image-store.s3.amazonaws.com/0/103885/3a29c6ba-47fb-e2d0-7fa5-cbce6b386b56.png)

# 雑感

- アラーム発動時にtmuxからデタッチされてしまうので、それが問題といえば問題
- なぜか日本語が使えるようになった
ubuntu 日本語キーボードのショートカットキー 備忘録

Ubuntu の、日本語キーボードでのショートカットキーと
設定変更した内容を忘れないようにするため。

# デスクトップ表示

```
Ctrl + Windowsキー + d
```
# emacs 中で ctrl+space が Mozcと衝突する件の対策

ctrl+Space を emacs中 で実行すると Mozc が起動する件で、解消のために実行したオペ。

```
画面左上の Ubuntu ホーム から fcitx を起動。
[全体の設定] -> [入力メソッドのオンオフ] -> より Ctrl+Space を Hiraganakatakana に変更
※ [カタカナひらがなローマ字]のキーを打てば変更される
```
[Git] 変更のあったファイル名を列挙する(内容の差分は表示しない)

メモ程度。「あのブランチ/コミットからどのファイルを変更/追加/削除したんだっけな～」と確認する時につかう用。
`git diff` の `--name-only` オプションを使います。

```console
$ git diff --name-only <branch_name,commit_id>
```

ちょっといい例がなかったけれども、例えば `README.md` が変更されてた場合は以下のように表示されます。

```console:ファイル名を列挙
$ git diff --name-only origin/master
README.md
```

`git diff` なんで基本的にルートからのパスで表示されます。

```console
$ git diff --name-only origin/master
path/to/README.md
```

変更か追加か削除か知りたい場合は `--name-status` を使ってください。

```console:もうちょっと詳しく
$ git diff --name-status  origin/master
A    README.md      //追加
M    main.c         //変更
```
GameMaker:Studio 一定時間ごとに呼び出される Alarm イベント

GameMaker Studio で移動するキャラの向きを一定時間ごとに変更したいと思いました。
(GameMaker Studio Professional Edition v1.4.1757)

![2016-09-11_1657.gif](https://qiita-image-store.s3.amazonaws.com/0/46088/43fa622b-31aa-bc52-9e9c-158d8a8537ea.gif)

上の動画は、歩行するゾンビキャラが 1 秒ごとに 90 度単位でランダムに向きを変えています。

最初は、[Step] イベントの呼び出しでメンバ変数に
```self.frame_count += 1;```
のようにフレームカウントを更新していき、その余剰(mod)を計算しようかと思っていました。

# Alarm イベントの設置
しかし GameMaker Studio のオブジェクトには、指定したステップ数が経過したときに呼び出される Alarm と呼ばれるイベントが標準で用意されています。
room_speed が 30 の場合なら、1 秒間にゲームサイクルが 30 ステップ実行されるはずなので、 30 を指定することでおよそ 1 秒後に [Alarm] イベントを呼び出すことができます。
![2016-09-11_160314.png](https://qiita-image-store.s3.amazonaws.com/0/46088/e0747d64-00d7-7f32-170d-c7801cc0b6fd.png)

Alarm を呼び出させたいオブジェクトの Properties ウィンドウを開いて、 [Add Event] ボタンを押し、 [Alarm] ボタンを押すと0~11 までの 12 個のアラームをイベントに追加できます。

あとは、他のイベントと同様に、 Action を割り当てます。

# Alarm イベントはインスタンスごとに設定できる
この12個の Alarm はオブジェクトのインスタンスごとに設定できます。

最初に Alarm を呼び出したいステップ数を設定します。
[Execute Code] Action を使う場合は、

```csharp:Event_Object_Create_1
self.alarm[0] = room_speed * 1; // 1 秒後に Alarm0 イベントを呼び出す。
```
のように記述します。
私は、 [Create] イベントの中にこのような設定をしました。


# Alarm イベントは一度きり
Alarm イベントは繰り返し呼び出されません。
もう一度呼び出したい場合は、 [Alarm] イベントの中に次のように再度設定します。

```csharp:Event_Object_Alarm0_1
self.alarm[0] = room_speed * 1; // 再び 1 秒後に Alarm0 イベントを呼び出す。
```

# サンプルの実装
最初にご覧いただいた動画のサンプルは room に obj_zombie_a(ゾンビのスプライトを割り当てたオブジェクト)のインスタンスを 3 つ配置したものです。

obj_zombie_a には次の 3 つのイベントを設定しました。
![2016-09-11_170114.png](https://qiita-image-store.s3.amazonaws.com/0/46088/623684fe-5c6f-f87e-e537-bdf519572377.png)

[Outside Room]イベントはインスタンスが Room の外側にいった場合のイベントで、反対側から再びでてくるように [Wrap] アクションを both で設定しています。
他の２つのイベントは [Execute Code] アクションを指定して次のコードを書きました。

## Create イベントのコード

```csharp:Event_obj_zombie_a_Create_1
self.image_speed = 0.3; // スプライトのアニメーションの速度
self.image_index = 0;   // 最初に表示するスプライトのフレーム番号
self.speed = 1;         // 移動速度
self.alarm[0] = room_speed * 1; // 1 秒後に Alarm0 イベントを呼び出す。
```
Alarm の設定のほかに、スプライトのアニメーション、インスタンスの移動速度を設定しました。

## Alarm0 イベントのコード

```csharp:Event_obj_zombie_a_Alarm0_1
self.direction = 90 * round(random(4)); // インスタンスの向きをランダムに変更
self.alarm[0] = room_speed * 1; // 再び 1 秒後に Alarm0 イベントを呼び出す。
```
Alarm の設定のほかに、向きを90度単位でランダムに変更しました。
余談ですが、 random は小数を返すため round で整数に丸めないと 90 度以外の向きにも変わるようになります。

# 参照
1.[The Alarm Events](https://docs.yoyogames.com/source/dadiospice/000_using%20gamemaker/events/alarm%20event.html)
1.[room_speed](https://docs.yoyogames.com/source/dadiospice/002_reference/rooms/room_speed.html)
1.[image_speed](https://docs.yoyogames.com/source/dadiospice/002_reference/objects%20and%20instances/instances/instance%20properties/image_speed.html)
[Swift]Alamofireのリクエストヘッダ確認


Alamofireが投げるリクエストヘッダやクッキー送信の内容などを確認する方法。

```swift
let request = Alamofire.request("https://httpbin.org/get", parameters: ["foo": "bar"])
debugPrint(request)
```

リクエストの内容がcurlコマンドの形式で出力される。

```bash
$ curl -i \
    -H "User-Agent: Alamofire/4.0.0" \
    -H "Accept-Encoding: gzip;q=1.0, compress;q=0.5" \
    -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \
    "https://httpbin.org/get?foo=bar"
```

## 参考
[GitHub/Alamofire](https://github.com/Alamofire/Alamofire#curl-command-output)
Outlook2010　メッセージを印刷時にユーザ名を印刷しない方法

Outlook2010などでメッセージを印刷

・・すると、用紙上部にユーザ名が必ず印刷されます。また印刷でプリンタをPDFにしてファイル化しても、ファイル名が「Microsoft Outlook - メモ スタイル.pdf」とかで、なんのメッセージか判断できずいちいちメッセージの件名をコピペしてファイル名を変更するしかありません。

これはOutlookの基本仕様のよう

ネットを調べても、MSコミュニティを見ても、Outlookのファイル＞オプションの各種設定を見ても、変更できるような余地は全くないようです。本当に残念な仕様です。
ということで、これを回避する方法を色々試行錯誤（※）して、今の所次が最も便利かと思い皆さんも如何か？として記します。

気付く前は

メッセージを開いて、ファイル＞名前を付けて保存＞ファイルの種類＞HTMLで保存。保存先でそのファイルを右クリック＞編集＞Wordが開き＞Wordのファイル＞保存と送信＞PDFとして送信、でOutlookのメッセージが開きそこにPDFが添付されているのでコピーして保存するとファイル名も件名で上部にユーザ名の表示なし。

それを以下のやり方に変えて

メッセージを開いて、移動のところにあるOne Note（One Noteに送る）をクリック。ここでOne Noteを一度も起動したことないとアカウントなど余計な作業が発生しますが、一度きりで。One Noteの場所を選択というのが開き＞既に存在する一般でも落書きノートでも適当に選んで＞OK＞One Noteが開き＞ファイル＞送信＞ページをPDFとして電子メールで送信、でOutlookのメッセージが開きそこにPDFが添付されているのでコピーして保存するとファイル名も件名で上部にユーザ名の表示なし。

微妙に

メッセージがHTMLだと、以前の方法は表の色がそのままだけどOne Noteだと抜けていたり、逆に以前はなかったが、One Noteは用紙上部に件名が大文字でかつメッセージヘッダがキッチリ出ているのが良かったり、一長一短です。
ただ以前だと中間のHTMLファイルを作成しフォルダ開いたり削除したり、がなくなった分気持ち的に・・ということで。（One Note上はファイル残ってるようですが・・）
ターミナルでカラフルなカレンダーを表示するコマンドを作った

ターミナルでカレンダーを表示する`cal`コマンドはLinuxに標準で付いていますが、色がついていないという不満がありました。

そこで、車輪の再発明感はあるものの、色付きのカレンダーを表示するコマンドを作成しました。

下記でインストールできます。環境によっては`sudo`が必要かもしれません。

`pip3 install console_calendar`

Python3のみ対応です。

表示するには`concal`コマンドを叩いて下さい。

![Screenshot_2016-09-11_18-40-19.png](https://qiita-image-store.s3.amazonaws.com/0/103885/c5184b02-aeeb-43e9-c82b-8db94cc1c467.png)

# 感想

今回利用した、Pythonの`calendar`という標準ライブラリがすごいです。年・月を指定して、週ごとの配列を返す関数があり、それを使えばロジックを考えなくてもカレンダーが作れます。表示に関しては、ターミナル用のカレンダーを出力するだけでなく、HTMLで1年分のカレンダーも作れます。

http://docs.python.jp/2/library/calendar.html

# 参考

PyPIへのアップロードはこちらを参考にさせて頂きました。ありがとうございます。
http://qiita.com/edvakf@github/items/d82cd7ab77ea2b88506c
OctoberCMSをデプロイする

概要
----
独自実装は全くしてませんが、とりあえずデプロイしてみます。
CMSなので、これだけで使えます。

OctoberCMSのドキュメントでは、まっさらなOctoberCMSをサーバなどに直接インストールする方法を説明しています。独自開発を行わずにCMSとしてだけ使用するならば、これでいいですが、OctoberCMSを選択する人ならば、手を加えてデプロイすると思うので、今回はそのメモ。

### 前提
- デプロイ先はUbuntu 14
- デプロイ先のサーバにsshログインできる
- githubなどにソースコードが上がっている
- プライベートレポジトリにアップした場合は、アクセス権がありデプロイ先にsshキーを適宜インストール済み
- webサーバが動いていてPHPが使える
- デプロイ先にcomposerがインストールされている

また、管理画面はアクセス制限を掛ける必要があるので、SSL(TSL)で通信を暗号化した方がいいですね。こちらに詳細書きました→[無料でHTTPS対応！Let’s EncryptでSSL/TSLに対応する](http://qiita.com/pikanji/items/3ee29f4d9cde87d19177)
あるいはAWSならばAWS Certificate Managerも使えるかもしれません。

### 手順概要
1. git cloneでソースコードをダウンロード
2. ソースコードの配置とパーミッションの設定
3. composer installで依存パッケージのインストール
4. 本番用の.envを配置する
5. データベースのマイグレーションを実施する

1. ソースコードをダウンロードする
----------------------------
普通にgit cloneします。
`$ git clone git@github.com:hogehoge/example-project.git`

プライベートレポジトリの場合は、鍵の設定が必要になるので、少しだけ触れておきます。
まず、GitHubにsshの公開鍵をアップしておきます。

で、対応する秘密鍵をデプロイ先の`~/.ssh/`に配置します。ここではファイル名を`id_rsa_hoge`とします。

```:~/.ssh/config
Host github.com:hogehoge
    IdentityFile ~/.ssh/id_rsa_hoge
    User git
    Port 22
```

これだけだと、まだ`git clone`すると"Permission denied"と言われるかもしれません。
そしたら、下記のようにします。

```bash
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa_hoge
```

これで、上記の`git clone`コマンドでソースコードがダウンロードできると思います。

2. ソースコードの配置とパーミッションの設定
-------------------------------------
Webサーバにはこのアプリしか配置しないことを前提に説明します(Apacheのvhostなどを設定しないということ)。
プロジェクトディレクトリを`/var/www/html`ディレクトリとして配置します。

```bash
$ sudo mv /var/www/html /var/www/html_backup
$ sudo mv example-project /var/www/html
```

Webサーバがソースコードを読み込めてログなどを書き込めるようにパーミッションを変更します。

```bash
$ cd /var/www/html
$ sudo chmod a+r *
$ sudo chmod -R a+w storage themes
```

3. 依存パッケージのインストール
-----------------------------
サーバにcomposerが入ってなければ入れます（[参考](http://qiita.com/pikanji/items/7017e4264d960db27210#composer%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)）

cloneしたディレクトリで書きを実行します。

```bash
$ composer install
```

これで、composer.lockに記録されたパッケージ類がインストールされます。つまり、ローカルでインストールされているパッケージと同じものが入ります。

ここでも、composerでOctoberCMSを入れた恩恵に預かれますね。

4. 本番用の.envを配置
----------------------
「[OctoberCMS 環境別の設定](http://qiita.com/pikanji/items/6e2141f05aae224f2553)」で作成した本番用の`.env`を配置します。別名でソースツリーにコミットしていおいたファイルを、コピーして`.env`にファイル名を変更するだけです。

5. データベースのマイグレーションを実施
-----------------------------------
自分のコードをデプロする場合、OctoberCMSのインストーラを使用しません。インストーラはCMSで最低限必要なDBテーブルを作成してくれますが、今回は自分で実行します。簡単なコマンドで一発です。

```bash
$ php artisan october:up
```

以上で、デプロイは完了です。管理画面にアクセスして見てください。

管理画面のパスは`/backend`なので、こんな↓感じです。
`http://your-domain.com/backend/`

デフォルトの管理者ID/パスワードは、admin/adminだったと思います。
カスタムURLスキームでアプリを起動させ、アプリが無ければストアに遷移させる

webページから↓を実現させてみました
- アプリを起動させる
- アプリがインストールされていなければストアへ遷移させたり何かしらアクションを起こさせる

やりたいこととしてはこちらのようなこと
http://qiita.com/oigus-k/items/03044da9a9f7f1754346
http://qiita.com/kenguy/items/9d9a8b7b6ca8b6984eb9


前提として、アプリ側にカスタムurlスキームを設定しておく必要があります。
また、ブラウザ環境ごとで挙動が異なることが多いので全てを網羅しているわけではありません。

## 基本的なロジック
1. iframeかlocation.hrefでアプリ起動を試みる
2. setTimeoutで遅れてフォールバック処理をする(ストアへ遷移など)
3. アプリやストアへ遷移したあとにブラウザに戻ってきたことを検知する

## カスタムurlスキームでアプリを起動させる
アプリを起動させるには2通りあります。
どちらの方法でも大丈夫ですが、iOS9 safariではiframeでは起動しないようになりました。

#### iframeでDOMに追加する

```Javascript:
var url = 'hoge://'; // カスタムURLスキーム
var iframe = document.createElement('iframe');
iframe.src = url;
document.body.appendChild(iframe);
```

#### location.hrefで飛ばす

```Javascript:
var url = 'hoge://'; // カスタムURLスキーム
location.href = url;
```

## アプリが無いことを検知する
アプリを起動しようとした後に、setTimeoutでフォールバック処理を走らせます。
アプリがインストールされていれば、アプリが起動するのでこのsetTimeoutの遅延処理が走らないです。
遅延処理が走ったということは、アプリが起動しなかったということなので、それを利用します。

```Javascript:
// アプリを起動しようとする処理の後に
var _timerId = setTimeout(function() {
  console.log('on fallback'); // ここでストアへ遷移などさせます
}, 500); // 遅延時間はデバイスによりますが、500ミリ秒ぐらいが妥当かと
```

## ブラウザに戻ってきたことを検知する

#### window.focus, blur
blurイベントの後のfocusイベントで検知します。

```Javascript:
window.focus();
window.addEventListener('blur', onBlur);
function onBlur() {
  window.removeEventListener('blur', onBlur);
  window.addEventListener('focus', onFocus);
}
function onFocus() {
  console.log('on return browser');
}
```

#### visibilityChange
visibilitychangeは使えないブラウザやベンダープレフィックスが必要なブラウザがあるので、場合分けします。

```Javascript:
if (document.hidden !== undefined) {
  document.addEventListener('visibilitychange', onVisibilityChange);
} else if (document.webkitHidden !== undefined) {
  document.addEventListener('webkitvisibilitychange', onWebkitVisibilityChange);
}
function onVisibilityChange() {
   if (!document.hidden) {
    console.log('on return browser');
  }
}

function onWebkitVisibilityChange() {
  if (!document.webkitHidden) {
    console.log('on return browser');
  }
}
```

#### requestAnimationFrame
ブラウザから離れた時はrequestAnimationFrameが回らないので、それを利用してブラウザから戻ってきたかどうかを検知します。

```Javascript:
var rafTimer, rafId;
function observe(){
  this.rafId = window.requestAnimationFrame(observe);
  if (rafTimer !== false) {
    clearTimeout(this.rafTimer);
  }

  rafTimer = setTimeout(function() {
    console.log('on return browser');
    window.cancelAnimationFrame(rafId);
  }, 1000);
};
observe();
```

# npmに公開してます
npm
https://www.npmjs.com/package/fallback-custom-scheme

# 参考
http://qiita.com/d2cs-kimura/items/b51ef73528fa66a35a9d
https://havelog.ayumusato.com/develop/javascript/e564-url-scheme-fallback.html
WinterCMS (OctoberCMS) 環境別の設定

Webアプリの開発を行っていると、ローカルマシン、テストサーバ、本番環境などと実行環境を幾つか使い分けると思います。

WinterCMSは環境別の設定を促すものはありませんが、Laravelと同様に.envで環境別に設定を切り替える事ができます。

Laravel (つまりOctoberCMS)では、.envファイルに設定を記述して、`env()`で読み込んで`config/app.php`などの設定ファイルに動的に値を設定します。
.envはコミットせず、ソースとは別管理してデプロイ時に持ってくるようにします。DBパスワードなどが記述されているケースが多いので、特定の人のみがアクセスできるファイルサーバ(S3など)に保管し、デプロイスクリプトで持ってくるようにするのをお勧めします。（ただ、各エンジニアの開発環境を作成する際に.envファイルを作成しやすいように、サンプル.envファイルをソースツリーにコミットしておくと親切ですね。）

これは[OctoberCMSの公式ドキュメント](http://octobercms.com/docs/setup/configuration#environment-config-extended)でも軽く説明されていますね。

以下は、`config/app.php`と`config/database.php`を自分のローカル環境用に設定する例です。

```:.env
# pkanji's .evn
# Do NOT commit this file.

#################################################
# For config/app.php
#################################################
APP_ENV=local
APP_DEBUG=true
APP_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
APP_URL=http://localhost
APP_TIMEZONE=Asia/Tokyo
APP_LOG=single

#################################################
# For config/database.php
#################################################
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=my_database
DB_PASSWORD=khk6Agq1keJ_ke
```

`config/app.php`と`config/database.php`の方へは、`env()`でそれぞれ設定します。Laravel5だとここらへんははじめから設定されていたと思います。

```php:config/app.php
<?php
return [
    'debug' => env('APP_DEBUG', false),
    'url' => env('APP_URL', 'http://localhost'),
    'locale' => 'ja',
    'fallback_locale' => 'en',
    'key' => env('APP_KEY'),
    'cipher' => 'AES-256-CBC',
    'log' => env('APP_LOG', 'single'),
    ...
];
```

```php:config/database.php
<?php
return [
    'fetch' => PDO::FETCH_CLASS,
    'default' => env('DB_CONNECTION', 'mysql'),
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_general_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => null,
        ],
    ...
];
```

簡単ですね。.envに設定値を切り離して、config/*.phpで適宜`env()`で設定するだけです。

### 注意
なお、`env()`は`config/*.php`以外からは使用すべきではないです。なぜなら、.envファイルと`config/*.php`はコンパイルしてキャッシュされ、キャッシュされた後は`env()`は`null`を返します。

[Laravel公式ドキュメント](https://laravel.com/docs/9.x/helpers#method-env)より；
> If you execute the config:cache command during your deployment process, you should be sure that you are only calling the env function from within your configuration files. Once the configuration has been cached, the .env file will not be loaded and all calls to the env function will return null.


### collationについて
話が逸れますが、`collation`でデフォルトcollationが設定できるのは嬉しいですね。これを設定しておかないとcollationのデフォルトは`utf8_unicode_ci`になります。
`utf8_unicode_ci`だと、データベース検索で「ハ」と「パ」が区別されないなどの問題が発生します。逆に、`utf8_general_ci`にすることによる弊害は知る限りありません。（[参考](http://blog.kamipo.net/entry/2015/03/08/145045)）
ということで、わざわざ`utf8_general_ci`に設定しているのでした。
ReactNativeを使ってみて辛かったこと

ReactNativeとは、Reactの記法を使ってネイティブのiOS/Androidアプリを作ることができるSDKです。
https://facebook.github.io/react-native/

今回は、ReactNativeを初めてつかってアプリを作ってみて、主に「つらみ」の部分の感想です。(2016年9月時点)
ReactNativeを採用しようと考えている際の参考にでもしてください。

### 今回作ったアプリ
![スクリーンショット 2016-09-11 17.21.37.png](https://qiita-image-store.s3.amazonaws.com/0/36813/f6ecd7c7-7323-9f86-fa51-a86f9c9811fd.png "スクリーンショット 2016-09-11 17.21.37.png")


弊社の「リピ店」という、近くの飲食店を検索できるアプリのAndroid版を作りました。iOS版がすでにリリースされているので、今回は勉強用にiOS版をReactNativeで作り変えしつつ、Androidをそのままマルチプラットフォームで作りました。ちなみに、リリースできるほど完成度が上がってない状態でつくりっぱなしになってます。
https://github.com/kitagawa/RepeatenReactNative


## 1. バージョンを合わせるのがつらい
- ReactNativeのバージョンが頻繁にリリースされる
ReactNativeは絶賛開発中なので、2週間ごとに新しいバージョンがリリースされています。最近はほとんどなくなりましたが、たまに破壊的な変更があるのが辛い。

- 外部ライブラリがReactNativeのバージョンの更新に追いついていない
ReactNativeのバージョン更新が早いので、外部ライブラリが使用中のReactNativeのバージョンに対応しているとは限らないです。とくに破壊的な変更があった前のバージョンで作られたライブラリだと最新バージョンだと使えないのが辛い。

バージョンが合っていないとこうなります。

- ビルドするとエラーがでる
- リリース版をビルドするとエラーがでる
- iOS版はビルドできたけどAndroid版がビルドできない

外部ライブラリを追加するごとに悩まされたり、そのバージョン自体にバグがあって上げなければいけない、ということもあって辛かったです。
バージョンを固定して進めるか、定期的にバージョンをあげつつビルドが通ることを常に確認しておきましょう。

## 2. Android側の対応が弱くてつらい
基本的にiOS側の方がコンポーネントが充実しています。「~IOS」はあるけど「~Android」はないという場合がわりとあります。コンポーネントが両対応しているかよく確認しておきましょう。

- ルーティングは「Navigator」
「NavigatorIOS」はありますが、Android版はありません。両方対応する場合は「Navigator」を使うことになります。ちなみにNavigatorIOSの方がパフォーマンスはいいそうです。


- 地図が使えない
[ドキュメント](https://facebook.github.io/react-native/docs/mapview.html)にありますが、MapViewのコンポーネントはiOS側しか対応していません。Androidで使うには外部ライブラリの[react-native-map](https://github.com/lelandrichardson/react-native-maps)を使うのが推奨されています。このライブラリも癖があってちょっと手こずりました。。


## さいごに
だいたい大きく辛かったのはこんなところです。また他にあったら追記します。

ReactNative開発の悪い点ばかりあげてますが、良い点も結構あったので感想を少し。

- パフォーマンスがやはり良い
WebViewではなくネイティブで動いているということで、やはり普通のネイティブアプリに負けないくらい違和感なく動きます。

- iOS版とAndroid版で画面崩れが少ない
iOS版を作ってから、そのままAndroid版を動かしてもわりとスタイルが崩れることもなく、ほぼそのままいけました。
Qiita > 要望 > ストック済みをクリックしても(時々)何も表示されない症状の対応

Qiitaで検索した後に「ストック済み」をクリックすると何も表示されない時が時々発生します。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/fe273bc7-12be-6b9f-5942-91b8009aa8f1.png)


その理由が分かりました。

URLの文字列を見ると「page=2」となってました。
ストック済みは9件しかないため、page=2では「ストック済み」をクリックしても表示されない、とのことのようです。

おそらく、「すべて」の状態でページを変更した後に「ストック済み」をクリックするとこのページずれが発生しているのではないかと思われます。

今後のバージョンアップで対応ご検討ください。
ASP.NET MVC のデバッグが -2147023895 (0x800703e9) で終了した理由

# ASP.NET MVC のデバッグが -2147023895 (0x800703e9) で終了した理由

ASP.NET MVC 5 + Entity Framework Code First なアプリをデバッグ中にブレークさせると数秒後にデバッグが終了する問題が発生して困った。

いつもの例外情報を示してくれるポップアップは表示されず、アプリのデバッグはひっそりと終了する。
本件、原因に行きついているのか? と問われれば、否だが、わかったところまで記録しておく。

## 現象

循環参照を持つオブジェクトをデバッガが表示しようとして、スタックオーバーフローで終了していた。

Visual Studio が便利すぎて終了コードの確認を怠っていたが、出力ウィンドウに次のメッセージが出力されていた。

>プログラム '[23844] iisexpress.exe' はコード -2147023895 (0x800703e9) で終了しました。

循環参照は、Entity Framework Code First で多対多関係のエンティティのリンクすることで作成され、
そのメンバを他のオブジェクト (仮に B) に代入し、その B をデバッガが参照すると発生するようだ。

Entity Framework が直接返してくるオブジェクト (以下の `user`) を覗いても問題は発生しないので、**代入** に問題があるのかもしれない。うーん、ありそうだが、理解できていない。

ざっくりと、複数チームに所属できるユーザのログイン処理で発生した。

```csharp
public class User
{
    public int Id { get; set; }
    // : some member 
    public virtual ICollection<Team> Teams { get; set; }
}

public class Team
{
    public int Id { get; set; }
    // : some member
    public virtual ICollection<User> Users { get; set; }
}

public class AccountService
{
    IEnumerable<Team> Teams { get; set; }
    // : some member

    public void Login(User user)
    {
        Teams = user.Teams;
    }
}

// 呼び出し側 (大きく省略)
var dbset = DbContext.Set<User>();
var user = dbset.AsNoTracking().Include(x => x.Teams).SingleOrDefault(somePredicate);
var service = new AccountService();
service.Login(user);

// どこかで、service を直接的、間接的に参照する局面でブレークするとスタックオーバーフロー

```


## 回避策

Teams 自体を持つ必要がなかった、と思うことにして、次のように回避している。

```csharp
public class AccountService
{
    IEnumerable<int> TeamIds { get; set; }
    // : some member

    public void Login(User user)
    {
        TeamIds = user.Teams.Select(x => x.Id);
    }
}
```

そして、
もう少し、派手目に警告してくれると助かるな。と、環境に期待するのであった。


## 確認した環境

- Windows 10 Home 64 ビット
- Microsoft Visual Studio Community 2015 Version 14.0.25425.01 Update 3
- ASP.NET MVC 5.2.3
- Entity Framework 6.1.3
Bash on Ubuntu on Windows に rbenv と nvm をインストールする

Bash on Ubuntu on Windows をいじっていたのですが、複数台の Windows に同じ設定をするのが面倒になってきたので定番アクションを Ansible スクリプトにまとめることにしました。

自分用手順メモとして。

Bash on Ubuntu on Windows 向けと書いていますが Debian/Ubuntu なら動作します。

# 準備

Bash on Ubuntu on Windows の初期状態からの手順を想定していますが、Ansible が動作する環境を作るところまでは準備します。

```shell:
apt-get update
apt-get install libssl-dev libffi-dev python-dev python-pip
pip install -U pip
pip install -U ansible
```

# Ansible スクリプト

## apt source を国内ミラーに変更する

archive.ubuntu.com からだと遅いので国内ミラーに変更します。

locate の変更はお好みで。

sudo が必要です、sudo 時にパスワードが必要な環境であるときは
`ansible-playbook -K ansi_setup.yml` と `-K` をつけて実行します。

```yaml:ansi_setup.yml
- hosts: localhost
  become: yes
  tasks:
    - name: apt source
      replace: dest='/etc/apt/sources.list' replace='/ftp.jaist.ac.jp/pub/Linux/ubuntu' regexp='/archive.ubuntu.com/ubuntu'
    - name: locale to en
      replace: dest='/etc/default/locale' regexp='ja_JP' replace='en_US'
    - name: apt update
      apt: upgrade=dist update_cache=yes
```

## rbenv のセットアップと ruby のインストール

rbenv を使って home に ruby をインストールします。

apt-get も含むので sudo が必要です、sudo 時にパスワードが必要な環境であるときは
`ansible-playbook -K ansi_rbenv.yml` と `-K` をつけて実行します。

```yaml:ansi_rbenv.yml
- hosts: localhost
  become: yes
  tasks:
    - name: apt-get installs
      apt: name={{item}} state=present
      with_items:
        - build-essential
        - git
        - libssl-dev
        - zlib1g-dev
        - libreadline6-dev
        - curl
        - wget

- hosts: localhost
  become: no
  vars:
    rubyver: 2.3.1
  tasks:
    - name: get rbenv
      git: repo=https://github.com/rbenv/rbenv.git
           dest=~/.rbenv
    - name: get rbenv plugin
      git: repo=https://github.com/rbenv/ruby-build.git
           dest=~/.rbenv/plugins/ruby-build
    - name: update bashrc
      lineinfile: dest='~/.bashrc' line={{item}}
      with_items:
        - '#rbenv'
        - '[[ -d ~/.rbenv  ]] && \'
        - '  export PATH=${HOME}/.rbenv/bin:${PATH} && \'
        - '  eval "$(rbenv init -)"'
    - name: rbenv - install ruby {{rubyver}}
      shell: bash -lc "$HOME/.rbenv/bin/rbenv install -s {{rubyver}}"
    - shell: bash -lc "$HOME/.rbenv/bin/rbenv global {{rubyver}}"
```

## nvm のセットアップと node.js のインストール

nvm を使って home に node.js をインストールします。

バージョンはお好みで書き換えてください。

```yaml:ansi_nvm.yml
- hosts: localhost
  become: no
  vars:
    nvmver: v0.31.7
    nodever: v6.5.0
  tasks:
    - name: download nvm
      get_url:
        url: https://raw.githubusercontent.com/creationix/nvm/{{nvmver}}/install.sh
        dest: /tmp/install.sh
    - name: nvm install
      shell: bash -lc "source /tmp/install.sh"
    - file: path=/tmp/install.sh state=absent
    - name: node.js install
      shell: /bin/bash -lc "source ~/.nvm/nvm.sh && nvm install {{nodever}}"
```

# その他メモ

Bash on Ubuntu on Windows ワークファイルを全削除して再インストールする手順。

コマンドプロンプトか PowerShell 上で以下のコマンドを実行する。

```shell:
lxrun /uninstall /full
lxrun /install
```
備忘録：Javaで文字列のi番目をとってくる

JavaでString型の文字列のi番目の文字は、
`String.substring(i, i + 1)`
でとってくる。
String.substring(i, i) とやってしまってて時間を無駄にしてしまった。。。
また、subStringではなく、substring。
~~subString~~ → substring
VirtualBoxの共有フォルダとwindows10で起動しなくなったことのメモ

# windows10でVirtualBoxが起動しないメモ
windows10のアップーデートがかかった後でVirtualBoxでうんともすんとも言わなくなったので、VirtualBoxをバージョンアップしたらあっけなく起動した。

# VirtualBoxの共有フォルダの権限について
で、本題の共有フォルダについて、linuxとwindowsでファイル共有できるんだけど、mountしてるので細かくファイル毎とかフォルダ毎とかで権限の設定ができない！これでは、読み込み専用ファイル（NetCommonsのinstall.inc.phpとか）が設定できず、NetCommonsが動作しない！！
ということで苦肉の策で下記にて対応しました。

①共有フォルダの自動マウントを解除
②下記コマンドで手動マウント フォルダは777、ファイルは555って感じで
`mount -t vboxsf -o  fmode=0555,dmode=0777 public /media/sf_public`
③rc.localに追記して、起動時に実行させる
　起動時にrc.localがエラーになるので、
`sleep 1m`
を追加。したけどエレガントではないなー。debian8特有のものなのか調べ中。教えてエロい人。

とりあえずはこれでNetCommonsの動作を確認しましたとさ。
R > ( オブジェクトxのデータ数を数える > length(x) ) / ( length(x)に基づきplot()する > plot(1:length(x),x) > plot(x)で良かった)

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

### データ数の取得

```R
xtmp<-read.table("excel1650.csv")
x<-xtmp$V1
```

としてxを読込んだとする。

そのxのデータ数を確認したい。

```
> length(x)
[1] 721
```

### plot

上記を調べた理由としては、読込んだデータセットの幅いっぱいにplotしたかった。

length(x)によりデータ数が取得できるので、以下でいい。

```R
> x<-xtmp$V1
> plot(1:length(x),x)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/869071b6-2088-4be1-aa8d-946d9210d222.png)

### v0.2

@r-de-r さんの[コメント](http://qiita.com/7of9/items/d957a3c24050767b45c1#comment-9d9f2742f453d9740a4c)で`plot(x)`だけでよいことを知りました。

情報感謝です。

plot(x)の場合は、横軸は「Index」というのが付くようです。

下記は違うデータでのプロット例。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/0565b9c5-ff9a-f755-6369-be4df5ac034b.png)
arcgis sdk

なんだが、gradleとかあってよくわかんなかったんだが
まあ、まあ、見れたので報告

#gradleのインストール
https://gradle.org/gradle-download/
っで、私の場合はwindowsなんだが、binary-onlyを
ダウンロード解凍、binをpathに設定

#gitのclone
適当なディレクトリに
git colne https://github.com/Esri/arcgis-runtime-samples-java
でclone

#eclipseのインポート
その前に、eclipseの新規スフトウェアのインストールで
フィルターにgradleとするとbuildshipというのがでてくるんで
それをインストール

その後、importでgradleを選んでコピーすると終了
山のようにサンプルができるんで、これを実行して遊んでみる
R > error > line 1 did not have 920 elements > 途中の行で列数が合わない

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

```R
> xtmp<-read.table("excel.csv",sep=",")
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 1 did not have 920 elements
```

参考 http://stackoverflow.com/questions/18161009/error-in-reading-in-data-set-in-r

stackoverflowを見ると、どうもタイトル(920項目)とデータの行(line 1?)の列数が合わないようだ。

実際にexcel.csvを見ると、データの部分を空白にしているなどある。

空白を埋めるなどすればいいのだろうが、使いたい列のデータ(全行にデータがあると仮定)をExcelで切り出して使う方が楽そうだ。

### 確認

```error.csv
1,2,3
2,2,3
3,3
4,4
5,5
```

に対して

```
> xtmp<-read.table("error.csv",sep=",")
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec,  : 
  line 3 did not have 3 elements
```

`3,3`の部分でエラーが出た。これと同じことがexcel.csvにて発生している。
MacOS Xのコントロールキーとコマンドキーを入れ替える

# ねらい
WindowsとMacOS X両方を使っていると、キーボードショートカットに使うキーが異なり操作しづらいので、Windowsに合わせて操作方法を統一する

# 方法
1. アップルメニューから**システム環境設定**を開く
2. **キーボード**をクリック
3. **キーボード**タブの**修飾キー...**をクリック
4. ダイアログが開くので**Commandキー**に**Control**、**Controlキー**に**Command**を指定する。
5. **OK**をクリック
6. **システム環境設定**を閉じる

# 参考
[How to Switch the Control and Command Keys]
(http://www.macinstruct.com/node/433)
R > data.csvを読込んでplot(x,y)する > read.table()使用 

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

## ファイル

D:\TestData\160911_R
に以下のファイルがあるとする。

```data.csv
1
2
3
4
5
```

## 本題 v0.1

- data.csvをread.table()で読込む
- 読込んだ項目は列ごとにV1, V2, V3...となる
   - 今回の例はV1のみ
- plotする時にそのV1というのを指定する

yの値は練習なのでxと同じにした。


```R
> setwd("D:/TestData/160911_R")
> x<-read.table("data.csv")
> y<-read.table("data.csv")
> plot(x$V1,y$V1)
```

結果

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/22166d02-3364-eaa0-b093-f3f6af00b64f.png)


## v0.2

軸ラベルに「$V1」をつけたくない場合は以下のようにする。
別の変数に置く (xtmp -> xなど)。

```R
> setwd("D:/TestData/160911_R")
> xtmp<-read.table("data.csv")
> ytmp<-read.table("data.csv")
> x<-xtmp$V1
> y<-ytmp$V1
> plot(x,y)
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/3cdf57c4-9178-82dd-f0ed-1735f6876d2b.png)


参考 http://stackoverflow.com/questions/17551193/r-color-scatter-plot-points-based-on-values
プログラミング初学の小中高校生に関数やメソッドやサブルーチンの必要性を伝えるには

ツッコミ、ご指導、よろしくお願いいたします。

----------------

# 背景

塾講師のアルバイトっぽいことをして、塾を運営している先生と対話して、
「なるほど」
と思ったので書き留めておく。

## 生徒のスキル

* [苦しんで覚えるC言語](http://www.9cguide.appspot.com/)を、塾を運営している先生と一緒に一通りやったが、色々忘れてる。
* [Scratch](https://scratch.mit.edu/)でゲームは作れるが、「ブロックを作る」の使い方が分からない。
* 高校数学1Aを学び始めた位。

--------------------------------

# なぜScratchに「ブロックを作る」機能があるのか

既に何かを作るのに十分なブロックがあるのに、なぜユーザーが新たにブロックを作る必要があるのだろうか。しかも「数値や文字列や真偽判定を受け付ける」というブロックである。

これにより、プログラムを細分化することができる。そして上手に作ったブロックは、必要以上にブロックを追加する手間を省く。

このブロックに与えた数値や文字列や真偽判定は、作ったブロック内でデータとして使うことができる。

「しかし、そんなこと必要なのだろうか、全てどのスプライトから見れるデータで扱えば良いのではなかろうか」

確かにその考え方もありである。しかし後々困ったことになる。詳しくは後術。

# なぜプログラムを細分化する必要があるのか

「共通した処理をまとめ、それを再利用しやすくする」と言うことに尽きる。
もう少し詳しく話そう。

## 類似した処理をまとめるため

類似した処理、もしくは全く同じ処理は、1つのブロックにまとめてしまったほうが、後々修正するときに、一つのブロックの中身を修正するだけで済むのである。
そういった観点で類似した処理はまとめたほうがよろしい。

## グローバル変数を減らせるため

グローバル変数とは何か。言ってしまえば、全てのスプライトから見たり、変更できたりするデータのことである。

これはあまりよろしくない。なぜかというと、後からスクリプトを修正するときやリミックスされるときに、グローバル変数がどのスプライトのどのブロックに影響を与えているか常に把握しなければいけないからである。

できるか？　私はできない。
少なくとも、作ってる時点で把握していたとしても、3ヶ月後にそのプロジェクトを見てみれば、その複雑さは身を持って知り、
「なんでこんなにわかりづらいスクリプトを組んだんだ」
と自分を恨むことであろう。

## 結果として可読性が上がる

これらの理由により、類似（似たような処理）や全く同じ処理は、イベント毎に新しく組む必要はなく、ブロックを新しく作り、それにまとめてしまったほうが良いことは少しでも分かっていただけただろうか。

また、こうすることにより、3ヶ月後の自分やリミックスを試みたスクラッチャーが、やりたいことを追いやすいスクリプトができるはずである。

# ではどのようにして「ブロックを作る」のか

ここはなかなか難しいところである。
他人のスクリプトを見てみたり、自分で何度もスクリプトを組まないとつかめないところかも知れない。

ただ、自分が曲がりなりにもプログラマとして5年位働いて来た勘を言語化（これもある種の「ブロックを作る」である）してみようと思う。

## 数値や文字列を省けば、ほぼ同じブロックで構成されているものはないか

違う動きをさせようとして、同じブロックで数値や文字列だけを変えてスクリプトを組むことがよくある。

しかし、本当に数値や文字列が変わっているだけで、ブロックの組み方が全く同じ、もしくは似ている処理は無いだろうか？

## そのプロジェクトは、一つのスプライトで必要以上の仕事をしてはいないだろうか、

あるスプライトはたくさんのブロックが並んでいるのに、別のスプライトはブロックが少ない。
そんな時もスクリプトを見直す機会かも知れない。

## 「もし< >なら」ブロックが3重よりも重なってないか

何個にも分かれる条件分岐は、一見複雑な処理をしているかもしれないが、その末端では似たような処理をしていなかったりしていないだろうか。
それこそが「ブロックを作る」のチャンスである。

# 参考（にしたい）資料

* [新人プログラマに知っておいてもらいたい人類がオブジェクト指向を手に入れるまでの軌跡 - Qiita](http://qiita.com/hirokidaichi/items/591ad96ab12938878fe1)
Elasticsearchのお勉強 (Mapping編)

https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html を読んでまとめました。

## 対象読者

例によって主に自分

## Mappingとは？

ElasticsearchはDocumentの登録時に合わせてindexを作成する。そのindexをどのように登録するのかを定義するのがMappingである。(RDBだとMappingはテーブルスキーマにあたる)。Mappingは下記の用途に使われる。

- どの文字列フィールドが全文検索の対象か？
- どのフィールドが数値、日付、geolocationか？
- documentの複製である _all フィールドをインデックス化するかどうか？
- 日付の形式は？
- 動的に追加されるフィールドのマッピング

## Mapping Types

Documentを論理的なグループに分けるため、indexにはいくつかの Mapping Types がある。例えばユーザーのDocumentであれば`user`型、ブログの投稿だったら`blogpost`型になるように定義できる。

Mapping typeとは、Meta-fields及びFieldsと、propatiesだ。

### Meta-fields

Documemtに関係するメタデータについてどのように扱うのかをカスタマイズするのがMeta-fieldsだ。Meta-fieldsに含まれるのは例えば _index、 _type、_id、 _source だ。

### Fields or properties

型は field と property を定義でき、どのようにマッピングするかをMapping typeに定義する。 `user`型であれば `title`、`name`、そして`age`を持ち、`blogpost`型であれば`title`と`body`、`user_id`等を持つ、などだ。同一 index 内にある同一名のFieldは同じようにマッピングされなければならない。

#### フィールド名に `.` を使う時の注意:
	
Elasticserch 2.4では `.` を許容するようになったが、 [利用には注意が必要](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/dots-in-names.html) 、とのこと。

## Field のデータ型

フィールドには下記のようなデータ型がある。

- string, date, long, double, boolean, ipなどのシンプルな型
- JSONのような構造を持つ性質のための object, nested型
  - nested型はarrayのようなobjectを複数持つ時に使う。Luceneは中にオブジェクトを持つようなコンセプトがないので、Elasticsearchがフラットにデータを保持できるように間をとりもつ。
- geo_pointや geo_shape、completion などの特殊型
  - geo_pointやgeo_shapeは位置情報、 completionは前方一致につかう情報を保持する型。

string型のフィールドでもanalyzedとすれば全文検索に使えるが、not_analyzedとするとソートや集約に使える。また、stringフィールドにanalyzerを指定することでどう分かち書きするかを指定できる。

fieldsにmulti-fieldsがあるのは上記をうまくサポートするため。

## Dynamic mapping

FieldやMapping typeは利用し始めるまでに定義されなければならない、というわけではない。 ここで登場するのが Dynamic mapping。ドキュメントにindex作成始まるとともに自動的にmapping typeとFieldを定義する。

Dynamic mappingの作成ルールもカスタマイズできる。

## 明示的にMappingするには？

使い始めはElasticsearchが自動的に推測してくれる。それでもいくらかは明示的にMappingを指定したくなるだろう。

fieldやMapping typeの定義はインデックスの作成時の他、既存のindexに指定するなら [PUT mapping API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html) を使うとよい。

## 既存の Mapping を更新するには？

既存のtype及びmappingは更新できない。Mappingを変更することとはIndexの再作成を意味する。新しくindexを作り、データをreindexする。

## Mapping typeはFieldの内容を共有する

Mapping typeは Field のグループ化に使われる。しかし Mapping type の各々の Field は独立していない。

- 同じ名前で
- 同じindexにあり
- 異なるmapping typeだと
- 内部的には同じfieldにマップされるので
- 同じマッピングを持たなければならない

`user` と `blogpost` mapping typeには`title`というフィールドがあった。そのため、 `title` フィールドは各々の型から同じマッピングをされなければならない。例外として  `copy_to`、 'dynamic'、`enabled`、 `properties` などのパラメータはフィールドごとに設定できる。

もし問題があるようであれば、`user_title`や`blog_title`と指定するとよい。

# 余談

ElasticsearchのRubyのクライアントには [Elasticsearch::Persistence](https://github.com/elastic/elasticsearch-rails/tree/master/elasticsearch-persistence) というgemを本家が作っているのでそれを使うとよさげ
C#で特定タイミングまでスレッドを待機させる

#はじめに
スレッド実行中、特定のタイミングまでスレッドを待機させる方法を紹介します。
なお、サンプルコードを動作させるには、C#4.0 に対応している必要があります。

#方法
特定のタイミングまでスレッドを待機させるには、[ManualResetEvent](https://msdn.microsoft.com/ja-jp/library/system.threading.manualresetevent(v=vs.110).aspx) を使用します。
このクラスを使用し、WaitOne で待機中のスレッドに対して、Set() を呼び出すことで続行することが可能です。
以下にサンプルコードを示します。

#サンプルコード

```csharp:sample.cs
using System;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
	static class Program
	{
		static void Main(string[] args)
		{
			var waitHandle = new ManualResetEvent(false);
			Task.Factory.StartNew(() =>
			{
				Thread.Sleep(2000);
				waitHandle.Set();
			});


			Console.WriteLine("Wait");
			waitHandle.WaitOne(Timeout.Infinite);
			Console.WriteLine("Start");

			Console.WriteLine("Press any key to exit.");
			Console.Read();
		}
	}
}
```
puma がサポートするシグナル


https://github.com/puma/puma/blob/master/docs/signals.md

|シグナル|用途              |
|-------|-----------------|
|TTIN   |workerを1つ増やす|
|TTOU   |workerを1つ減らす|
|TERM   |workerにTERMシグナルを送信。workerを終了する|
|USR2   |workerをリスタートする|
|USR1   |workerをリスタートする（rolling restart)|
|HUP    |ログを再オープンする |
|INT    |Ctrl-C と同様に処理を終了する|
|CHLD   |（？） |
NodeSchool導入資料

#NodeSchoolとは？
- 世界中で行われているJavaScriptに関するもろもろを学べるイベント
- Workshopperを使ってJavaScriptに関するいろんなレッスンをCLIで勉強できる
- メンターが助けてくれる！

![NodeSchool.png](https://qiita-image-store.s3.amazonaws.com/0/99740/7ad8c87d-a0a8-150d-a1ab-1581c6d6e2f6.png)

---

#NodeSchoolの進め方

---

##■node.js/npmのインストールがまだな人
下記記事などを参考にnode.js/npmをインストールしてください
http://liginc.co.jp/web/programming/node-js/85318

---

##■やりたいworkshopperをインストールする
インストールするにはコマンドラインで下記のように入力してください。
```$ (sudo) npm install -g ●●●●●```

例.)
```$ npm install -g learnyounode```

※2017/01/29追記：npmにsudoつけるのは良くないようです。
https://coderwall.com/p/t2mc9g/don-t-sudo-npm

---

##■レッスン一覧
こんなレッスンがあります。

- javascripting (JavaScriptの基礎)
- learnyounode (Node.jsの基礎)
- how-to-npm (npmの基礎)
- tower-of-babel (ES6基礎(babel))
- learnyoureact (React基礎)
- NodeBot Workshop (johnny-fiveの基礎)

※他のレッスンを見たい方はこちら→http://nodeschool.io/ja/

---

##■Workshopperの起動
コマンドラインでレッスン名を打ち込むとレッスン開始
例．）
```$ learnyounode```
```$ javascripting```

あとはレッスン内容に沿って進めてください。
分からないときは手をあげましょう：）

---

#知ってると便利なこと

---

##■日本語にしよう
```$ learnyounode```などでworkshopperを起動したあと、
下から3番目の「CHOOSE LANGUAGE」から変更できます。

![image](https://qiita-image-store.s3.amazonaws.com/0/99740/9df71b1c-ea12-f7e0-a718-59df463d755e.png)

---

##■文字色に気をつけよう
コマンドラインツールん背景を黒にしてる方は、黒文字が分かりづらい可能性があります。

その際は、背景色を変えるか、下記コマンドで着色をなくしましょう
例．）
```$ learnyounode --no-color```

---

##■どうしても分からなさすぎるとき
一応、下記リポジトリ内に答えもあります。

答えが格納されているディレクトリは、```exercises/問題名/solution/solution.js```です。

https://github.com/workshopper/learnyounode/tree/master/exercises

---

#以上です：)

---

##※この資料について
NodeSchool開催される方、導入資料としてご自由にお使いください。:)
CloudWatch Logs Agentの中身を探してみた

#はじめに

[CloudWatch Logsエージェントの中身を（途中まで）調べてみた](https://moomindani.wordpress.com/2014/07/11/cloudwatch-logs-agent-inside/) の続きがきになる! ということで調べてみました。上のブログを読んだという前提で話を進めます。

# 結論
`/var/awslogs/lib/python2.7/site-packages/cwlogs/push.py`

が、監視対象のログを読み込み、CloudWatch Logsのサービスにイベントをプッシュするコードでした。1800行くらいのコードです。慣れない自分には結構よむのつらいですが、主要な処理はこのコード内で完結しているので読めば動作がわかります。`FileEventsReader._run(self)` が実際にログを読みこむ部分です

これから先は余談です。

# awscliにlogsのコードは含まれていない

aws cliに含まれているんだということで、
```
/usr/lib/python2.7/dist-packages/awscli  (awscliのインストール先ディレクトリ)
https://github.com/aws/aws-cli  (awscliのgitリポジトリ)
https://github.com/boto/boto3/  (awscliが使っているライブラリ)
```
配下を散々さがしましたが、何もありませんでした。

# cloudwatch logs agentの実行処理

方向をかえてcloudwatch logs agent の実行時オプションに注目しました。
`/var/awslogs/bin/awslogs-agent-launcher.sh`
をみると以下のようになっています。
```
/usr/bin/env -i \
HTTPS_PROXY=$HTTPS_PROXY \
HTTP_PROXY=$HTTP_PROXY \
NO_PROXY=$NO_PROXY \
AWS_CONFIG_FILE=/var/awslogs/etc/aws.conf \
HOME=/root \
/bin/nice -n 4 \
/var/awslogs/bin/aws logs push \
--config-file /var/awslogs/etc/awslogs.conf \
--additional-configs-dir /var/awslogs/etc/config \
>> /var/log/awslogs.log 2>&1
```

設定を消しつつ実際にこのコマンドを実行したところ、以下があれば動作しました

```
AWS_CONFIG_FILE=/var/awslogs/etc/aws.conf \
/var/awslogs/bin/aws logs push \
--config-file /var/awslogs/etc/awslogs.conf
```

AWS_CONFIG_FILEの中身をみると以下のようになっています。

```
$ cat /var/awslogs/etc/aws.conf
[plugins]
cwlogs = cwlogs
[default]
region = us-west-2
```

# awscli プラグイン

おお。プラグイン！ ということでpythonのパッケージを探すと
`/var/awslogs/lib/python2.7/site-packages/cwlogs`
が存在していて、以下のようなファイルがあります
```
filter.py
__init__.py
kvstore.py
parser.py
pull.py
push.py
retry.py
threads.py
utils.py
```

この中で`push.py`と`pull.py`がコマンドで残りはユーティリティクラスでした。
pullの機能については根性がなくて調べていません。

# おわりに
AWSCLIはプラグインで機能を追加できるというのは初めて知りました。cwlogsを参考にプラグインを作るのもありかとおもいます。

## 参考

[CloudWatch Logsエージェントの中身を（途中まで）調べてみた](https://moomindani.wordpress.com/2014/07/11/cloudwatch-logs-agent-inside/)
[CloudWatch Logs Agent の挙動について調べたことのまとめ](http://qiita.com/szk3/items/dba1071fb9d344bcd48c)
R > 作業フォルダの確認・移動 > getwd() / setwd("D:/TestData/160911_R")

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

csvファイルを読込もうとしたところ、作業フォルダの移動が必要と気づいた。

getwd()
setwd()
というのを使うようだ。

参考 http://rfunction.com/archives/1001

```
> setwd("D:/TestData/160911_R")
> getwd()
[1] "D:/TestData/160911_R"
```

エクスプローラのアドレス欄の文字列をコピーすると「バックスラッシュ」が含まれるが、RStudioではそれらを「スラッシュ」に変更しないといけないようだ。