OmniAICreator/Qiita-1.07M huggingface dataset:
PayPal Tech Meetup #2 でスマートプロパティのデモ発表をした話


[PayPal Tech Meetup #2](http://eventdots.jp/event/588605)にてデモ発表させていただきました。

## 発表資料

![](https://speakerd.s3.amazonaws.com/presentations/ca7796cfed6a498ab4a862525681ed70/thumb_slide_0.jpg)

Speaker Deckにあげてあります。
[PayPal Tech Meetup #2 - ブロックチェーンで資産管理](https://speakerdeck.com/jkkch/paypal-tech-meetup-number-2-burotukutiendezi-chan-guan-li)

## 発表内容

ブロックチェーンをテーマに何か発表したいと思い、詳しい内容は後回しにして、「ブロックチェーンで資産管理」というタイトルで申し込みしました。仮想通貨以外の用途としてスマートプロパティの話を聞いていたためです。

![](https://speakerd.s3.amazonaws.com/presentations/ca7796cfed6a498ab4a862525681ed70/thumb_slide_3.jpg)

スマートプロパティの説明は[@tomigarash](https://twitter.com/tomigarash)さんに作ってもらいました。~~いけあやさんにドン引きされたのは私のせいではないです。~~

（スマートプロパティについては[GLOCOMセミナー](http://www.glocom.ac.jp/events/1622)でのNTT大橋さんの資料が詳しいです。）

何をプロパティとするかですが、デモ時間が5分と短いのでわかりやすいものを、そして、個別取引がそれなりに多いものとして、自分に思いついたのがTCGでした。

![](https://speakerd.s3.amazonaws.com/presentations/ca7796cfed6a498ab4a862525681ed70/thumb_slide_5.jpg) ![](https://speakerd.s3.amazonaws.com/presentations/ca7796cfed6a498ab4a862525681ed70/thumb_slide_6.jpg)

ブロックチェーンフレームワークとして[eris](https://erisindustries.com/)を使い、docker-machineで3つノードを立てて、ゲーム公式サイトとカード販売サイトの2つのWebアプリを用意しました。

# デモ内容

1. ゲーム公式サイトで保有しているカード一覧を表示
2. ~~ゲーム公式サイトで新しいカードを購入~~（時間なくてカット）
3. ~~ゲーム公式サイトで保有カードが増えているのを確認~~（時間なくてカット）
4. カード販売サイトでカードを購入
5. ゲーム公式サイトで保有カードが増えているのを確認
6. ~~ゲーム公式サイトでデュエル！~~（そもそも製作間に合わず）

![duel1.png](https://qiita-image-store.s3.amazonaws.com/0/121144/9d6287f1-6311-ab59-6273-addc4a739680.png) ![duel2.png](https://qiita-image-store.s3.amazonaws.com/0/121144/960c56c5-c833-d885-e0e7-8eb39d7afac6.png) ![duel3.png](https://qiita-image-store.s3.amazonaws.com/0/121144/91778ed7-cc01-5ab9-395a-e67392c1d768.png) ![duel4.png](https://qiita-image-store.s3.amazonaws.com/0/121144/06c55178-0e86-fcd4-d2f3-af7dbfdde9a3.png)

# 感想
* erisについての理解不足でいろいろと困った。
    * eris-contracts.jsでjavascript側にデータを持ってくるときに、複数のデータを一度に取ってくるのは、タプルか単純なデータ型の固定長配列しかできず、カード情報を枚数分だけ繰り返して取得した。
    * ローカルコンパイラを設定しないとエラーになる。
    * チュートリアルに従って`fast_sync = true`にするとデプロイに失敗する。
    * コントラクトのデータ更新を同時にやると壊せる（synchronizedブロックみたいのはあるのかしら）
* 次回9月もデモ大会でTravel Hacksがテーマだそうです。今回はいろいろと余裕がなくて（会場到着直後はデモ環境が動かなくて、作り直していたりした。。。）他の発表をちゃんと見れていなかったので、次回はできれば一般参加でいろいろな発表を落ち着いて見たいです。
べき乗をするならMath.pow()よりもExponentiation Operatorが手軽（ES2016新機能）

2016/06/17、JavaScriptの仕様「ECMAScript」の最新バージョンECMAScript 2016（※）がリリースされました。ES2016で追加された機能は２つです。

- Exponentiation(**) Operator
- `Array.prototype.includes()メソッド`

本エントリーでは、Exponentiation(**) Operatorについて解説します。`Array.prototype.includes()`メソッドについてはこちらの記事で解説しています。
「[配列内の要素の存在確認にはArray.includes()メソッドが便利]( http://qiita.com/tonkotsuboy_com/items/e88e4c4d8006ef67782c)」

※ 言語仕様書：「[ECMAScript® 2016 Language Specification](http://www.ecma-international.org/ecma-262/7.0/)」

#Exponentiation Operatorはべき乗計算のための新しいオペレータ
これまでJavaScriptでべき乗計算（2の3乗や、4の8乗などの計算のこと）は、`Math.pow()`を使って行っていました。

```js
// 2の3乗算
Math.pow(2, 3);
// 4の8乗算
Math.pow(4, 8);
```

![](https://qiita-image-store.s3.amazonaws.com/0/67884/39b46b24-fea1-88bd-96da-e10844446cb5.png)

▲ Google Chromeでの計算結果

**Exponentiation Operatorは、**`**`**を記述することで、このべき乗計算をシンプルに書けるようになります**。ちなみに「Exponentiation」が「べき乗」という意味です。

では、先ほどの計算を書き換えてみましょう。

```js
// 2の3乗算
2 ** 3;
// 4の8乗算
4 ** 8;
```

![](https://qiita-image-store.s3.amazonaws.com/0/67884/e6611783-1d3a-02ad-1972-cfa35f8d59d9.png)

▲ Google Chromeでの計算結果

`Math.pow()`を使うよりもシンプルな記述で可能なことがわかります。

また、次のような記述も可能です。

```js
// 変数aに2を代入する。
let a = 2;
// aの3乗を得る。
a **= 3;
```

![](https://qiita-image-store.s3.amazonaws.com/0/67884/fae800a7-52dd-1bef-2db9-4ae1330f65d3.png)

▲ Google Chromeでの計算結果

便利ですね。

## 対応ブラウザは？
2018/02/06時点では、IE 11を除く全主要ブラウザで対応しています。

参考：[ECMAScript Next compatibility table](http://kangax.github.io/compat-table/es2016plus/)

IE 11でも対応する必要がある場合は、TypeScriptやBabelを経由するのがおすすめです。
ELB, RDSなど一部のリソースにCloudFormationのテンプレートで名前をつけるとスタックのUpdateができなくなる

## 問題

[Name タイプ - AWS CloudFormation](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-name.html)で列挙されたリソースの名前をテンプレートで指定すると、そのテンプレート上でそのリソースに変更が加わったときそのままではupdateができなくなる。

## 対策

### A. 名前を明示的につける

絶対にそのリソースのプロパティを変更しないと確信できるなら有効

### B. 名前を明示的につけない

CloudFormationが独自のルールで名前をつけることになる。
(2016/06/17時点で)ELBのように「{{stack名}}-{{リソース名}}-{{ランダム文字列}}」のようなわかりやすい形で名前をつけてくれるならこれで事足りるがRDSのように「{{ランダム文字列}}」のような名前をつけられると非常に識別性が低く辛い。

### C. 名前を明示的につけ、末尾にバージョン番号をつける

人が識別しやすい形で名前をつけ、その末尾に「-3」や「-11」のようなバージョン番号をつける。
stack更新時にリソース名の問題が出た場合、末尾のバージョン番号を更新する。

### D. 名前を明示的につけ、末尾にランダム文字列をつける

人が識別しやすい形で名前をつけ、その末尾に「-tk8ko3e1」のようなランダム文字列をつける。
stack更新時にリソース名の問題が出た場合、末尾のランダム文字列を更新する。
※ 次のようなコマンドでランダム文字列を生成すると便利

```
cat /dev/urandom | base64 | tr -dc 'a-z0-9' | fold -w 8 | head -n 1
```

### E. 'Name'タグをつけてConsole上の表示カラム設定から'Name'カラムを表示するようにする

EC2インスタンスなどではデフォルトで表示されているNameタグカラムをELB

## まとめ

個人的にはDがおすすめ。
D >= B >>>> C >>>>>>>> A
変更しないリソースとかそうそうないのでAはおすすめしない。
AndroidStudioプロジェクトでバージョン管理時に無視するファイル

SVNを使っているので、各ディレクトリの svn:ignore に以下の内容を設定。

#プロジェクトのルートディレクトリ
```
.gradle
build
local.properties
```

#.ideaディレクトリ
```
*  (全ファイルを無視)
```


と、設定しておいて、以下の3ファイルは手動で追加して管理対象にする。

```
.name
gradle.xml
runConfigurations.xml
```


#appディレクトリ
```
build
*.iml
```
JavaScriptでSSL証明書をリクエストする（AWS SDK + Amazon Certificate Manager）


全部JavaScriptでどうにかしちゃおうというものぐさAWSシリーズ再開です。

今回はAmazon Certificate Manager（以下ACM）の証明書をJavaScriptで取得します。

# 必要最小限のコード
```index.js
var AWS = require('aws-sdk');

var acm = new AWS.ACM({
	apiVersion: '2015-12-08',
    accessKeyId: "ACCESS_KEY_ID",
    secretAccessKey: "SECRET_ACCESS_KEY",
    region: "REGION"
});

var params = {
  DomainName: "YOUR_DOMAIN_NAME",
  DomainValidationOptions: [
    {
      DomainName: "YOUR_DOMAIN_NAME",
      ValidationDomain: "YOUR_SUBDOMAIN_NAME"
    },
  ]
};
acm.requestCertificate(params).promise().then(
	(data) => {
		console.log(data);
	}
).catch(
	(err) => {
		console.log(err, err.stack);
	}
);
```


## 参考になるかわからないメモ
ACMはメール認証オンリーです。
認識メールの送信先ですが、「DomainValidationOptions」の方のDomainNameに入れたドメインを使った以下のアドレス+ whoisに登録されたメールアドレスに送信されます。

admin@example.com
administrator@example.com
hostmaster@example.com
postmaster@example.com
webmaster@example.com

ValidationDomainにサブドメインを入れておくと、

admin@subdomain.example.com
administrator@subdomain.example.com
hostmaster@subdomain.example.com
postmaster@subdomain.example.com
webmaster@subdomain.example.com

にもメールを送信する様子です。サブドメイン特に使わない様子であれば全部同じ値でいいと思います。

「どのメアドも受信できねーよ！」という方は、[S3とSESとRoute53を使ってメールをインターセプトする方法](https://speakerdeck.com/amimoto/ri-ben-yu-amazon-cloudfront-with-aws-certificate-manager)があるのでそれを参考にしてください。ちなみにここも頑張れば自動化できそうです。（ただしつらい）

## 戻り値
nodeをCLIから実行すると、以下のようになります。

```
$ node auto_acm.js 
{ CertificateArn: 'arn:aws:acm:us-east-1:999999999999:certificate/aXXXXXX-99xx-99x9-9x99-x999x9999x99' }
```
ACMのarnが返ってきてますね。
おそらくこれを使って、このままCloudFrontやELBに証明書設定するスクリプトを書けというお告げだと思いますので、引き続きものぐさシリーズを続けていきたいと思います。

続き→[JavaScriptでCloudFrontにACMの証明書を追加する](http://qiita.com/motchi0214/items/cde49b76f9dd83765040)
IPアドレスはゼロパディングしてはいけないという話(v4です)

知っている人はタイトルだけでわかる内容です。処理系によっては当てはまらないものがあるかもしれません。

## 突然クイズ
192.168.100.013
このIPアドレスが示すのは？

`ping 192.168.100.013`

を実行してみよう。

## 答え
192.168.100.11

## 何故か？
013の部分はプレフィックス0が指定された8進数として扱われます。ちなみにプレフィックス0xは16進数になります。3桁区切りが気持ちいいからと言ってゼロパディングはダメ絶対!
iOSアプリ起動時のダイナミックリンクライブラリの読み込み時間を調べる

起動時のダイナミックリンクライブラリの読み込み時間を調べてみました。

XcodeでSchemeのArgumentsのEnvironment VariablesにDYLD_PRINT_STATISTICSとDYLD_PRINT_APISを追加します。

![Voila_Capture 2016-06-17_02-15-09_午後.png](https://qiita-image-store.s3.amazonaws.com/0/2009/979adaf1-8a1a-b835-0ada-d79696633ca1.png "Voila_Capture 2016-06-17_02-15-09_午後.png")

アプリを実行するとログに以下のようなロードやイニシャライズの時間が表示されます。

```
total time: 3.4 seconds (100.0%)
total images loaded:  337 (264 from dyld shared cache)
total segments mapped: 235, into 16189 pages with 3084 pages pre-fetched
total images loading time: 2.8 seconds (83.3%)
total dtrace DOF registration time: 0.11 milliseconds (0.0%)
total rebase fixups:  246,514
total rebase fixups time: 80.71 milliseconds (2.3%)
total binding fixups: 311,397
total binding fixups time: 112.33 milliseconds (3.2%)
total weak binding fixups time: 3.30 milliseconds (0.0%)
total bindings lazily fixed up: 0 of 0
total initializer time: 378.52 milliseconds (10.9%)
    libSystem.B.dylib : 94.67 milliseconds (2.7%)
libBacktraceRecording.dylib : 3.14 milliseconds (0.0%)
       libc++.1.dylib : 0.08 milliseconds (0.0%)
      libobjc.A.dylib : 0.04 milliseconds (0.0%)
       CoreFoundation : 0.85 milliseconds (0.0%)
     libGLImage.dylib : 0.14 milliseconds (0.0%)
               vImage : 0.01 milliseconds (0.0%)
libFosl_dynamic.dylib : 0.23 milliseconds (0.0%)
            CoreImage : 0.01 milliseconds (0.0%)
 libglInterpose.dylib : 176.12 milliseconds (5.1%)
        CoreTelephony : 0.01 milliseconds (0.0%)
       Flurry_iOS_SDK : 1.94 milliseconds (0.0%)
   libswiftCore.dylib : 0.02 milliseconds (0.0%)
                Realm : 5.66 milliseconds (0.1%)
              AppName : 16.54 milliseconds (0.4%)
```
ver3にあげたらsshした時にbgcolorが変わらなくなった

本番環境に繋いだ時に色を変えるのに参考にさせてました
http://qiita.com/k_kinukawa/items/3e5665325a4954e33019

ですがver3にあげたらエラーを出力して動作しなくなってしまいました

```
44:52: syntax error: end of line があるべきところですが identifier が見つかりました。 (-2741)
```

[ver3のドキュメント](https://www.iterm2.com/documentation-scripting.html)を参考にすると`terminal`じゃなくて`window`になっていたので
こんな感じに修正した

```
tell application "iTerm2"
  tell the current window
    tell the current session
      set background color to {$(($R*65535/255)), $(($G*65535/255)), $(($B*65535/255))}
    end tell
  end tell
end tell
```

これで本番に繋ぐのも怖くない
bash / sh | function からの脱出 ( 関数は変数を閉じ込めない )

# 検証コード

```bash
man='CATCH ME' # => 1. function の外で変数を定義しても

function jail() {
  echo $man # => 1. 変数は侵入する
  echo $1
  hope='CAN' # => 2. functionの中で変数を定義しても
}

jail 'IF YOU'

echo $hope # => 2. 変数は脱出する

echo $1 # => 3. こいつは脱走できない
```

# 結論

この監獄は脆い。

# 変数閉じ込める方法

local を宣言すること。

```bash
hope='NOT FOUND'

function jail() {
  local hope='FOUND'
}

echo $hope # => NOT FOUND
```

# 環境

- sh 3.2








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
CakePHP2: JSONを返すコントローラを実装する

CakePHP2ではアクションが終わるとビューの描画に処理が移ってしまう。JSON APIを実装する場合はビューが不要なので、そうならないために、`autoRender`や`autoLayout`の値を`false`にしておく。また、`Content-Type`は`application/json`にしたいので、`response->type()`でJSONを指定しておく。

各アクションにこれらの設定を書いてもいいが、コントローラにJSON APIのエンドポイントのアクションしかない場合は、`beforeFilter`で宣言しておくと重複して書かないで良いので楽。


```php

class ApiController extends AppController
{
  public function beforeFilter()
  {
    parent::beforeFilter();
    $this->autoRender = false;
    $this->autoLayout = false;
    $this->response->type('json');
  }
}
```
flowをWindowsでつかってみる　＋gulpで監視

# flowを使ってみたい人生だった
紆余曲折あってflowをつかってみたくなりました。しかし、全然動かずいろいろ教えていただいたところ、

- OCaml で書かれてて・・・とにかくwindowsでは動かすのはできない
- [こちら](http://www.ocamlpro.com/pub/ocpwin/flow-builds/)をつかうんだ


とのことでした。
windows向けのflowがあります。
http://www.ocamlpro.com/pub/ocpwin/flow-builds/
しかし、調べてみるもイマイチ使い方や環境構築方法がわからず悪戦苦闘しました。それに仕事の都合上windows以外を使うわけにはいかなかったのでいろいろと調べて動かすことができました。

#flowのインストール
こちらのサイトにアクセスして、ダウンロードをおします。
http://www.ocamlpro.com/pub/ocpwin/flow-builds/
すると

```:
  flow-0.19.1-windows-20151211　┬ flow.exe
  　　　　　　　　　　　　　　　　 ├ README.txt
                                └ test.js
```

の３ファイルがあります。
試しに、コマンドプロンプトを開いてこのディレクトリまでcdして

```js:
  flow init
```

と打ってみてください。

この時、フォルダーの中にフォルダーがあるので、しっかりとflow.exeを参照できる階層まで降りてきてくださいね！。

するとフォルダー内に.flowconfigファイルが生成されます。

```:
  flow-0.19.1-windows-20151211　┬ flow.exe
  　　　　　　　　　　　　　　　　 ├ README.txt
                                ├ test.js
                                └ .flowconfig
```

次に

```js:
flow check
```
と打ってください。
すると

```js:
test.js:5
  5: foo('Hello, world!');
     ^^^^^^^^^^^^^^^^^^^^ function call
  3:   return x * 10;
              ^ string. This type is incompatible with
  3:   return x * 10;
              ^^^^^^ number


Found 1 error
```


というエラーがflowから吐かれます。
以上でflow単体でのインストールを動作確認は終了です。


#Gulpで監視させる

コマンドプロンプトで

```js:
  npm init
  npm install --save gulp
```
としてgulpをインストールして、gulpfile.jsを作成します。

```js:
var gulp = require('gulp');

gulp.task('check',function(){
  return gulp.run('flow.exe check').exec();
});

gulp.task('watch',function(){
  gulp.watch('./*.js',['check'])
});

gulp.task('default',['watch'],function(){});
```

package.jsonのスクリプトを

```json:
{
  "name": "flow-0.19.1-windows-20151211",
  "version": "1.0.0",
  "description": "Flow compiled on Dec 04, 2015, commit 97f864abeb1a9866d4daf8662e9a6185046880e4",
  "main": "test.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "gulp":"gulp"
  },
  "author": "",
  "license": "",
  "dependencies": {
    "gulp": "^3.9.1"
  }
}
```

とします。
フォルダ構成は

```text:
  flow-0.19.1-windows-20151211　┬ flow.exe
  　　　　　　　　　　　　　　　　 ├ README.txt
                                ├ test.js
                                ├ .flowconfig
                                ├ node_modules
                                ├ package.json
                                └ gulpfile.js
```

となります。
コマンドプロンプトで、

```js:
npm run gulp
```

と打つことで、

```text:
[12:45:46] Starting 'watch'...
[12:45:46] Finished 'watch' after 25 ms
[12:45:46] Starting 'default'...
[12:45:46] Finished 'default' after 52 μs
```

と監視が走ります。
初めてのことだったので、もっといい方法などございましたら是非お教えいただけますと幸いです！
Linux | mktemp | too few X's in template

というエラーが出た場合。

# 解決

mktemp は `X` をランダムな文字列に置き換えてくれる。

`X` を好きなだけ並べれば良い。

```bash
$ mktemp work.XXXXXX

work_8IQYqz # => 生成されたファイルの名前
```

```bash
$ ls | grep work

work.8IQYqz
```

# 環境

- Mac OSX El Capitan 10.11.4








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
MySQLでフリップフロップ

以下のようなSQL文で、`0`と`1`を交互に入れ替えることができる。

```sql
UPDATE flip_flop SET value = value xor 1;
```
例

```sql
mysql> CREATE TABLE flip_flop (value int not null);
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO flip_flop VALUES (0);
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM flip_flop;
+-------+
| value |
+-------+
|     0 |
+-------+
1 row in set (0.00 sec)

mysql> UPDATE flip_flop SET value = value xor 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM flip_flop;
+-------+
| value |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

mysql> UPDATE flip_flop SET value = value xor 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM flip_flop;
+-------+
| value |
+-------+
|     0 |
+-------+
1 row in set (0.00 sec)
```
Java で iPhone 絵文字の"意味(定義)"を取得する


Character#getName(int codepoint) を使う

```java
package hello;
public class HelloCharacterName {
	public static void main(String[] args) {

		int codepoint = (int) 0x1F603; // 笑顔絵文字
		String name = Character.getName(codepoint);
		System.err.println(name);
	}
}
```

■結果

SMILING FACE WITH OPEN MOUTH
Contact Form 7 で YubinBango を使う

# 仕様
- [Contact Form 7](https://ja.wordpress.org/plugins/contact-form-7/) で郵便番号から住所を自動入力させたい
- ajaxzip3 が GitHub の [Yubinbango](https://github.com/yubinbango/yubinbango) に移行したのでその対応

# Yubinbango をテーマ（あるいはプラグイン）に埋め込む

```php
wp_enqueue_script( 'yubinbango', 'https://yubinbango.github.io/yubinbango/yubinbango.js', array(), null, true );
```

# Contact Form 7 でのフォームの設定

1. `<span class="p-country-name" style="display:none;">Japan</span>` を入れておく
2. 郵便番号と住所に class を入れる  
参照：http://contactform7.com/ja/text-fields/

郵便番号や住所の入力フォームを分ける場合は [YubinBango](https://github.com/yubinbango/yubinbango) の「その他の設定方法」を参照。


```html
<p>お名前 (必須)<br />
    [text* your-name] </p>

<p>メールアドレス (必須)<br />
    [email* your-email] </p>

<span class="p-country-name" style="display:none;">Japan</span>
<p>郵便番号<br />
    [text your-zipcode class:p-postal-code minlength:8 size:8]</p>

<p>住所<br />
    [text your-address class:p-region class:p-locality class:p-street-address class:p-extended-address]</p>

<p>メッセージ本文<br />
    [textarea your-message] </p>

<p>[submit "送信"]</p>
```

# Contact Form 7 のショートコードに form タグの class を指定する

参照：http://contactform7.com/ja/faq/can-i-add-id-and-class-attributes-to-a-form-element/

```html
[contact-form-7 id="5" title="お問い合わせ" html_class="h-adr"]
```

# 完成
![form.png](https://qiita-image-store.s3.amazonaws.com/0/18348/f42436e4-9374-5479-61e4-8d1e2b1a94b5.png)
COBOL脳を解説する（２）

1.はじめに
　前回の記事で、あるデータを取り扱う歳の認識の仕方の違いについて述べました。モダンなプログラミング言語のエンジニアと違い、データを配列として認識するのに対し、COBOLエンジニアは一度に一行のデータを認識し、それを繰り返すと述べました。
　今回の記事では、プロジェクトチームの中でCOBOLエンジニアとモダンなエンジニアが共同作業を行う場合に想定される課題について述べます。

2.データの認識の仕方の違い
　前回の記事でCOBOLエンジニアの頭の中について説明しました。
[COBOL脳を解説する（１）](http://qiita.com/nnnmanatsuxu/items/c853eea91b12e96b8ed5)

　これを元に、あるデータを見た時に、それぞれのエンジニアが頭のなかでどのように認識しているかを図にしてみました。
![COBOL_2_1.png](https://qiita-image-store.s3.amazonaws.com/0/125888/851e0794-4077-ce0e-85d2-9e1eee5f5471.png)

　例えばRDBの結果セットや、テキストファイルを取り扱う際には必ずこのような認識が各エンジニアの中で行われます。こんな基本的なことですら考え方が異なるエンジニアたちが、１つのチームでうまく強調して働くことはできるのでしょうか。実際のところ、うまくいっていないケースはある程度存在するようです。先日、社内の勉強会でもこのような事例が報告されていました。また、ツイッターやブログをみると、COBOLに対する不満が書かれているのをしばしば目にします。いわゆるStaticおじさんも、実はこの認識の違いが遠因なのかもしれません。

3.問題が発生するチーム編成
　すべてのチームで、COBOLやCOBOLエンジニアに起因する問題が発生するわけではありません。問題が発生するのは、チームのリーダーとメンバーで、プログラミング・パラダイムについて考え方の差異がある場合だと考えます。　チームにおけるリーダーの役割は様々ですが、ここではガイド＆レビューという作業に着目して議論を進めます。
　チームリーダーは、プロジェクトのゴールヘ向かうための作業を定義し、メンバーへ指示を出します。この際、暗黙であれ明示的であれ、なんらかのメソドロジーを念頭に置いていると思います。これは、プロジェクト全体の方針による場合もあるでしょうし、リーダーの知見に基づく場合もあるでしょう。そして、メンバーが作った成果物（ドキュメントやソースコード）をレビューするというのも１つの役割です。
　一方、メンバーの方はリーダーのガイドに基づき作業を始め、成果物を提出するわけですが、リーダーの指示が理解できない場合もあるでしょうし、自分なりに作業して提出したら、理解できない理由でレビューがNGになる場合もあるでしょう。この時リーダーは恐らく、うちのメンバーは理解が悪いだとか、なぜ私の言っていることが理解してもらえないのだろうか、とか、そういう不満を持っています。このようなコンフリクトがなぜ発生するのか、次の節でもう少し詳しく書きます。

4.プログラミング・パラダイムの違いがどのようにチームに影響するか
　例えば、次のような要件があったとしましょう。一般に、要件は必ずしもスペシフィックに記述されている訳ではありません。例えば上記2.で

（要件）　
　ファイルに含まれるすべてのデータに10を掛ける

　これは、2.で書いた図のようなデータに対して、なんらかの処理を行うことを想定してください。この要件を読んで設計書を書くとしましょう（設計書をどのレベルまで詳細化すべきかという議論は置いておいて）。恐らく次のように書くと思います。

（COBOLエンジニアによる設計）
　入力ファイルをオープンする
　出力ファイルをオープンする
　最初の１行を読む
　項目１に１０を掛け、ワークレコードにセットする
　項目２に１０を掛け、ワークレコードにセットする
　項目３に１０を掛け、ワークレコードにセットする
　項目４に１０を掛け、ワークレコードにセットする
　ワークレコードを出力ファイルに書き出す
　最後の行まで同じ処理を繰り返す
　出力ファイルをクローズする
　入力ファイルをクローズする

　一方、モダンなエンジニアは次のように書くでしょう。

(モダンなエンジニアの場合)
　入力ファイルオブジェクトのすべての要素に１０を掛け、結果を出力ファイルオブジェクトに代入する

　上記は誇張した表現になっていますが、リーダーとメンバーの頭の中がこんなに違っていたら、ガイド＆レビューが上手くいくわけがないと、私は思います。リーダーがCOBOLエンジニアだとすると恐らくは要件とのトレーサビリティを理由にレビューNGにするでしょう。モダンなエンジニアがリーダーの場合は、冗長な記述だということでNGにすると思います。NGにされた方は不満に思いますよね。特に、モダンなエンジニアの場合、こんなにエレガントに記述しているのに何故だ、と思うでしょう。

5.ではどうすれば良いか
　しっかりしたガイドが提供できていれば、コンフリクトはかなり減ると思います。あらかじめ、逐次処理で書きなさいとか、可能な限り配列を想定しなさいとか、そういったことを、リーダーの頭の中でなく文書にしたものがあれば良いのです。さらに、今行っている設計という作業のゴールがどこなのかを示めせれば、なお良い。要件をスペシフィックにするものなのか、このあとすぐコーディングに入るのか、設計書はユーザー部門のレビューを得る必要があるのかどうか、といったようなことがガイドに書かれていれば、メンバーの不満がかなり減ると思います。書き方そのものより、ゴールを示す方が重要かもしれないですね。

6.最後に
　最近、社内の事例紹介として、若いリーダーがCOBOLプロジェクトで苦労しているというプレゼンテーションを見る機会がありました。それをきっかけに私なりに考察した結果が今回の記事です。どうもCOBOLの言語仕様というよりは、メソドロジーとか、リーダーの役割だとか、そういった部分がCOBOL問題の原因のようです。
　特に今回は設計という作業に力点をおきました。設計という作業を考える時、よく言われるのが、「プログラミング言語に依存しない設計」という言葉です。私はこのようなものが実在するとは思えない。しかし事務計算の領域に限って言うと、もし存在するとしたら、それは結局のところCOBOL向けの設計になっているのではないかと思います。COBOLにアドバンテージがあるとすれば、その点だと私は思います。
[Ruby]リンク先のPDFを保存したい（2）

##苔のサイトでURLを取得する
取得します。nilいっぱいになった。

```ruby:bryophytes.rb

require 'open-uri'
require 'nokogiri'

url = 'http://rbg-web2.rbge.org.uk/bbs/Activities/BBSFGspac.htm'

charset = nil
html = open(url) do |f|
  charset = f.charset
  f.read
end

doc = Nokogiri::HTML.parse(html, nil, charset)

#table内の「maintexttable」の中を取りに行ってほしい
doc.xpath('//td[@class="maintexttable"]').each do |node|
  p node.css('a').url
    
end
```

##PDFダウンロードは別問題
現在、調査中。
wgetも使ってみたけど、サーバーがちがうせいかうまくダウンロードできなかったので、Rubyの力を借りに来た。

*次回に続く*
Milkcocoaでらくらくリアルタイムチャットアプリ作成

# milkcocoaとは？
![milkcocoa.png](https://qiita-image-store.s3.amazonaws.com/0/2781/c30c8a88-d682-9d53-45df-4f08c13caadc.png)
簡単にリアルタイムなデータのやり取りができるようになるクラウドプラットフォーム
https://mlkcca.com/

# milkcocoaを使ってみる
##milkcocoaのアカウントを作成
![sign_up.png](https://qiita-image-store.s3.amazonaws.com/0/2781/8fb9c60b-fd67-3148-310e-7805c903afbb.png)

##アプリケーションを作成
![ addapp.png](https://qiita-image-store.s3.amazonaws.com/0/2781/9eef9c3c-992f-1c08-2bc0-995240520e52.png)

![addapp2.png](https://qiita-image-store.s3.amazonaws.com/0/2781/2ec216cb-f32a-679f-6455-960a2bd125ce.png)

##実装
###HTML部分

```html
<!DOCTYPE html>
<html>
<head>
    <title>milkcocoaサンプル</title>
    <meta charset="utf-8">
    <meta name="description" content="">
    <meta name="author" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style type="text/css">
        body { padding:10px; }
    </style>
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    <script src="https://cdn.mlkcca.com/v2.0.0/milkcocoa.js"></script>


</head>
<body>
    <nav class="navbar navbar-inverse">
        <div class="container-fluid">
            <div class="navbar-header">
                <a class="navbar-brand" href="#">Message送信</a>
            </div>
            <div class="navbar-form navbar-left" role="search">
                <div class="form-group">
                    <input type="text" class="form-control" id="msg_txt" placeholder="Message">
                </div>
                <button id="msg_submit" type="submit" class="btn btn-default">Submit</button>
            </div>
        </div>
    </nav>
    <div id="msg_area">        
    </div>
</body>
</html>
```
###JavaScript部分
```js
var milkcocoa = new MilkCocoa('xxxxxxxxx.mlkcca.com');
//データストアの指定
var ds = milkcocoa.dataStore('messages');

$('#msg_submit').on('click',function(){
    

    var message = $('#msg_txt').val();

    //メッセージの送信
    ds.send({message : message});

    //メッセージの保存
    ds.push({message : message});

    $('#msg_txt').val('');
})

ds.on('send', function(sended) {
    $('#msg_area').append('<div class="alert alert-warning" role="alert">'+ sended.value.message +'</div>');
});
```

###完成形
![milkcocoaサンプル.png](https://qiita-image-store.s3.amazonaws.com/0/2781/21d9b05a-8274-e2d9-d1c0-4b052002e45a.png)
[Ruby]リンク先のPDFを保存したい（1）

##苔について

苔はすばらしいので、苔について学びたい。

##苔を学ぶためには

日本語でもいろいろあるけど、イギリスは苔の宝庫。苔のサイトが充実している。

[BBS Field Guide online pages](http://rbg-web2.rbge.org.uk/bbs/Activities/BBSFGspac.htm)

##障害に出くわす

確かにPDFはたくさんあるんだけど、どれを読んだのかわからなくなるので、一括のデータがほしい。しかし存在しない。

##PDF結合への道
1．すべてのPDFをダウンロード
2．結合

##ダウンロードするには
手作業は無理。スクレイピングを使えばいいのではないか。
[Nokogiri を使った Rubyスクレイピング [初心者向けチュートリアル]](http://morizyun.github.io/blog/ruby-nokogiri-scraping-tutorial/)

##そのままではもちろんだめ
なので、PDFをダウンロードできるように書き換えてみたが……。

*次回に続く*
CSS Variables(カスタムプロパティ)でCSSがより便利に！

CSS Variables（カスタムプロパティ）が、Chrome 49でサポートされましたが、まだ試していなかったのでちょっと触ってみました。

[他のブラウザ対応状況](http://caniuse.com/#search=Variables)

## おさらいでSassの場合

Sassは、非常にシンプルで分かりやすいですね。

```css
$key-color: red;

.hoge {
    color: $key-color;
}
```


## CSS Variablesの場合

```css
:root {
    --key-color: red;
}

.hoge {
    color: var(--key-color);
}
```

変数には、`--`ハイフン2つを先頭につけるのがルールです。
（最初見た時にちょっと抵抗感が。。でもすぐ慣れると思います）

どのセレクタに指定するかは自由ですが、Sassのようにセレクタ無しで定義はできませんので注意が必要です。
また、グローバル変数のように扱いたい場合は、`:root`で指定します。

変数を呼び出す時には、`var()`関数を使います。

ちなみに、`var()`関数は、第二引数にもし変数が定義されていなかった場合のデフォルト値も入れられます。（あまり使うこと無いかもですが。。）

以下の例の場合、`--key-color`が定義されていなくても、blueが設定される形になります。

```css
.hoge {
    color: var(--key-color, blue);
}
```

### calc()関数を使いより便利に

CSS内で計算式ができる`calc()`関数を使うことで、よりCSS Variablesが便利になります。

```css
:root {
    --base-size: 8px;
}
.sample {
    font-size: calc(var(base-size) * 2);
    padding: calc(var(base-size) / 4);
}
```

### JavaScriptでCSS Variablesを取得する
JavaScriptでCSS Variablesを取得することができます。

```css
:root {
    --key-color: red;
}
```

```js
var value = document.documentElement.style.getPropertyValue('--key-color');
console.log(value); // => red
```

CSS側でどんな変数が定義されているのかを見に行き、JavaScriptで何かしらの処理を入れられるようになります。
（が、具体的な使い方は思い浮かばず。。）

~~なお、取得ではなく、変更ができないかちょっと調べましたが、現状変更はできないようです。~~
~~無理やりやるなら、`insertRule`を使い、追記で上書きする方法ですかね。~~

変更できました。（[liner](http://qiita.com/liner)さんコメントありがとうございました）
以下方法で可能です。


```js
document.documentElement.style.setProperty('--key-color', 'blue');
```

## まとめ
現在、SassなどのCSSプリプロセッサを使うのが主流になっていますが、数年後CSS Variablesや[CSS mixin](http://oocss.org/spec/css-mixins.html)などを対応しているブラウザが広まってきたら、ネイティブのCSSでコードを書く時代がやってくるかもしれません。
今後に期待ですね。
ModelAdmin.list_filter: 関連する条件で 絞り込む


- Permission 一覧を ContentType自体と、ContentType.app_labelで絞る
- ContentType.app_labelを指定したら、関連するContentTypeだけ選択肢に表示したい


## CorelatedFilter: 関連フィルター

- admin.RelatedFieldListFilterベース
- 関連フィールド(cofield)がクエリパラメータにあったら、 limit_choices_to を指定する

~~~py
from django.contrib import admin    


class CorelatedFilter(admin.RelatedFieldListFilter):                                

    def field_choices(self, field, request, model_admin):                           
        name = "{}__{}".format(field.name, self.cofield)                            
        covalue = request.GET.get(name, '')                                         
        if not covalue:                                                             
            return field.get_choices(include_blank=False)                           
        return field.get_choices(                                                   
            include_blank=False,                                                    
            limit_choices_to={self.cofield: covalue})                               
~~~

## PermissionAdmin

- コンテントタイプと、その app_label で絞る

~~~py
class PermissionAdmin(admin.ModelAdmin):                                         
    list_filter = [                                                              
        'content_type__app_label',                                               
        ('content_type',                                                         
         type('', (CorelatedFilter,), {'cofield': 'app_label'})),                
    ]                                                                            
~~~
コンソールのRに色をつける方法

# コンソール上のRに色をつける方法
コンソールのRは白黒表示で味気ないので色をつけた。coloroutなる便利ツールがある。　　
今回必要なのは"devtools"と"colorout".
最新版についてはcoloroutの[github](https://github.com/jalvesaq/colorout)を参照ください。

##まずdevtoolを入れる。
```
install.packages('devtools')
library(devtools)
```
##そして次にcoloroutを導入
```
install_github('jalvesaq/colorout')
library(colorout)
```
## Rprofileの記入
毎回、coloroutを起動するのはめんどくさいのでRprofileに覚えさせる。

```$ echo 'library(colorout)' >> ~/.Rprofile" ```

# コンソール上で実行
あとはRを使うだけ
<img width="362" alt="スクリーンショット 2016-06-17 10.50.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/114861/0d8e9f35-cec5-f926-02e4-7b7afd0ad06b.png">
動画に関する知識をつける際に参考にさせてもらったWebサイト

# 概要
最近、動画を扱う機会があり、そのお勉強で参照しているサイト。
どんどん追記していく予定です。

# 動画形式(コンテナ)
[動画形式の種類と違い（AVI･MP4･MOV･MPEG･MKV･WMV･FLV･ASF等）【コンテナ】](http://aviutl.info/dougakeisiki-konntena/#i)
[【HDV】MPEG2-PSとMPEG2-TSと、他](http://dtv.sakura.ne.jp/contents1/010.html)
## MPEG2-TS
[MPEG2 TSの仕様について調べた (1)](http://nomanganolife.blogspot.jp/2009/12/mpeg2-ts.html)
## HLS
[HTTP Live Streaming draft-pantos-http-live-streaming-19](https://tools.ietf.org/html/draft-pantos-http-live-streaming-19)
[Example Playlist Files for use with HTTP Live Streaming　メモ](http://mokumokusan0205.blog.fc2.com/blog-entry-127.html)
# 音声に関して
[サンプリング周波数 - wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AA%E3%83%B3%E3%82%B0%E5%91%A8%E6%B3%A2%E6%95%B0)

# 配信ツール
## OBS
[11.【Win7編】Open Broadcaster Softwareおすすめ配信設定](https://sites.google.com/site/streamsetting/home/open-broadcaster-software)
[普通のノートPC（低スペックPC）でOBS高画質配信に挑戦【ニコ生】](http://ch.nicovideo.jp/mmrmt/blomaga/ar970510)
[ウマソめも：cavetubeで配信するんご](http://umasoumaso.seesaa.net/article/425363048.html)
[Open Broadcaster Software Stream Settings Estimator](https://obsproject.com/estimator) マシンスペックから推奨設定を教えてくれる
# 動画解析
## ffprobe
[ffprobe Documentation](https://ffmpeg.org/ffprobe.html)([日本語訳](http://fixedpoint.jp/ffmpeg/ffprobe.html))
## フレームのドロップ
[ドロップフレームとノンドロップフレームの違いは？](http://eizo-bu.com/question/timecode.php)
## タイムコード
[タイムコードってなに？](http://allabout.co.jp/gm/gc/61031/)
## フレームレート
[フレームレートとは？VFR（可変）とCFR（固定）の違い](http://aviutl.info/vfr-cfr/)
## ビットレート
[解像度とビットレートの関係](http://privategarage100.konjiki.jp/TV/reso-bitrate.html)
## GOP
[GOP(Group Of Picture)](http://www.xucker.jpn.org/keyword/gop.html)
[GOP(Group of Picture)について ～ I・P・Bフレームとは](http://nicostream.php.xdomain.jp/blog/stream/444/)
## プロファイル
[h.264の画質について(Main ProfileとHigh Profileのお話)](http://freesoft.tvbok.com/movie_encode/mencoder/h264-main-high.html)
## エンコード
[高精細な動画エンコードのためにおさえておきたい5つのポイント【前編】](http://www.jstream.jp/resource/detail/20140613/)
[高精細な動画エンコードのためにおさえておきたい5つのポイント【後編】](http://www.jstream.jp/resource/detail/20140704/)
# 音ズレ事例
[音ズレ(ニコニコ大百科)](http://dic.nicovideo.jp/a/%E9%9F%B3%E3%82%BA%E3%83%AC)
## AviUtl
[【AviUtl】音ズレの原因と対策一覧【エンコード】](http://aviutl.info/otozure/)
## OBS
[OBSで微妙に音ズレするのを直す](http://eai.hateblo.jp/entry/2016/03/02/122356)


[VIPで初心者がゲーム実況するには](http://www18.atwiki.jp/live2ch/pages/402.html)
[OBS Studio for Mac](http://ch.nicovideo.jp/kenta0644/blomaga/ar537095)
Windows起動時にvagrant up

#単にバッチファイルを走らせるだけ。

###環境
windows7(x64) Enterprise SP1 

###バッチファイルの設置
<pre>
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
</pre>
に適当な名前でバッチファイルを作る。

```bat:vagrantup.bat
cmd /K "d: & cd D:\Vagrant\CentOS7 & vagrant up"
```
zabbix 70% os Process CPU Load on 

https://support.zabbix.com/browse/ZBX-10158
cpuをそんなに使ってないのに、なんでこれが出るんだよー思っている方
負荷が１０倍に表示されるバグがあるそうです。

ダッシュボード » ホストの設定 » テンプレートの設定 » トリガーの設定 
triggers.php?form=update&hostid=10082&triggerid=13538&sid=5931cd2fd4b0fd2d
ここで値を10倍にしてください。

{Template JMX Generic:jmx["java.lang:type=OperatingSystem",ProcessCpuLoad].last(0)}>0.7

{Template JMX Generic:jmx["java.lang:type=OperatingSystem",ProcessCpuLoad].last(0)}>70
めざせNode.jsライブラリマスター （14）time-taken

#【ライブラリ説明】
　関数の実行時間を計測できる

#【プログラム】
```js
var timeTaken = require('time-taken');

var a = function() {
  console.log("a");
};

var sum = 0
var b = function() {
  for (var i=0; i<100000; i++) {
    sum += i
  }
};

console.log( timeTaken(a) );
// 1.4993199999999973

console.log( timeTaken(b) );
// 1.6483479999999986
```

#【参考サイト】
　[npm](https://www.npmjs.com/package/time-taken)
　[github](https://github.com/hemanth/time-taken)
WebStorm / RubyMine (erbファイル) でダブルクォートの自動挿入を無効化する

# 概要
HTMLの属性を書くときに`=`を押すと勝手に`="`とダブルクォーテーションが入力され不便だったので、無効化する方法を調べました。

**環境**: WebStorm 2016.3, RubyMine 2017.1

# 方法
設定で Editor > General > Smart Keys と進んだ先にある「Add quotes for attribute value on typing '=' and attribute completion」のチェックを外します。

<img width="1006" alt="ss.png" src="https://qiita-image-store.s3.amazonaws.com/0/43328/c3a6ba9c-bbec-04fe-a884-bc420c38ea40.png">


# 参考
http://stackoverflow.com/questions/19993389/how-to-disable-autocompletion-for-quotation-marks-when-writing-html-attributes-i
three.jsテンプレート。ボックス一つ表示

用語の理解はこちらがわかりやすいです。

参考 初心者でも絶対わかる、WebGLプログラミング＜three.js最初の一歩＞
https://html5experts.jp/yomotsu/5225/

![スクリーンショット 2016-06-16 18.25.33.png](https://qiita-image-store.s3.amazonaws.com/0/76843/af90bfcb-3a9c-c868-5c42-b1c64a06b690.png)


```html:hoge.html
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>three.js</title>
</head>
<body>
<div id="stage"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r77/three.js"></script>
<script type="text/javascript">
(function(){
	'use strict';

	var scene;
	var box;
	var camera;
	var renderer;
	var light;
	var width = 500;
	var height = 250;


	// scene シーン
	scene = new THREE.Scene();

	// mesh メッシュ(物体)
	// geometry ジオメトリー(形状)
	// material マテリアル(表面素材)
	box = new THREE.Mesh(
		new THREE.BoxGeometry(50, 50, 50),
		new THREE.MeshLambertMaterial({color: 0xff0000})
	);
	box.position.set(0, 0, 0);
	scene.add(box);

	// light ライト
	light = new THREE.DirectionalLight( 0xffffff, 1); // 色、光の強さ
	light.position.set(0, 100, 30);
	scene.add(light);

	// camera カメラ
	camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
	camera.position.set(200, 100, 300);
	camera.lookAt(box.position);  // boxの位置にカメラを向ける。

	// renderer レンダラー
	renderer = new THREE.WebGLRenderer( {antialias: true} );
	renderer.setSize(width, height);
	renderer.setClearColor(0xefefef);
	renderer.setPixelRatio(window.devicePixelRatio); // 画面のピクセル比を設定
	document.getElementById('stage').appendChild(renderer.domElement);


    function render(){
        requestAnimationFrame(render);

        // レンダリング
        renderer.render(scene, camera);
    }
    render();
})();
</script>
	
</body>
</html>
```
Java8 Optional の使いどころ（自分用）


自分にとってのOptionalの価値は下記と思われる


```java:昔
String result = "";     //初期化
AaaaModel aaaaRec = aaaaMapper.find("the_id");
if(aaaaModel != null){  //null チェック
    String title = aaaaRec.getTitle();
    if(title != null){  //null チェック
        BbbbModel bbbbRec = bbbbMapper.find(title);
        if(bbbbRec  != null){  //null チェック
            String theId = bbbbRe.getId();
            if(theId != null){  //null チェック
                result = theId ;
            }
        }
    }
}
```
↓

```java:java8で書く
String result = Optional.ofNullable(aaaaMapper.find("the_id"))
    .map(aaaaRec -> aaaaRec.getTitle())
    .map(title -> bbbbMapper.find(title))
    .map(bbbbRec -> bbbbRec.getId())
    .orElse("");
```
CentOS7-minimal上に社内向け各種OSSシステム構築 -- (3) Docker

#はじめに
最近はほとんどのOSSの稼働環境がDocker環境下で動作する形で提供されてます。
少なくとも「お試し」として動かしてみて評価するには、Dockerでチャチャっと環境構築して、使わないなら消す、というのはとっても効率的です。
なのでDocker環境をインストールしておきます。
- - -
##Docker Engine
基本公式ページのドキュメント https://docs.docker.com/engine/installation/linux/centos/ の通りです。

リポジトリを作成します。

```
$ sudo vi /etc/yum.repos.d/docker.repo
```

```/etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
```
yumでインストールしてからサービスをスタートさせます。

```
$ sudo yum install -y docker-engine
$ sudo systemctl start docker
```
proxyを設定します。Dockerは環境変数"http_proxy"等を参照しているようなので、それは既に[(1) OSインストールと初期設定](http://qiita.com/nobu182/items/636f2bfaac0fe751aede)で /etc/profile.d/proxy.sh ファイルを作成して指定しているのでOKなんじゃないの？って気がするんですが、ダメっぽいのでおとなしく公式ドキュメント https://docs.docker.com/engine/admin/systemd/ 記載のとおり設定します。

/etc/systemd/system/docker.service.d/http-proxy.conf ファイルを作成して、環境変数を記載します。

```
$ sudo mkdir /etc/systemd/system/docker.service.d
$ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
```

```/etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.sample.co.jp:8080/"
Environment="HTTPS_PROXY=http://proxy.sample.co.jp:8080/"
```
あるいはサービス定義ファイルに直接記載します。

```
$ sudo vi /lib/systemd/system/docker.service
```

```/lib/systemd/system/docker.service
[...]
[Service]
[...]
Environment="HTTP_PROXY=http://proxy.sample.co.jp:8080/"
Environment="HTTPS_PROXY=http://proxy.sample.co.jp:8080/"
[...]
```
動作確認前にサービスを再起動します。

```
$ sudo systemctl daemon-reload
$ systemctl restart docker
```
動作確認です。

```
$ sudo docker run hello-world
```
以下のようなメッセージがコンソールに出力されれば、正しく動作しています。

```
[...]
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.
[...]
```
サービスを自動起動に設定しておきます。

```
$ sudo systemctl enable docker
```
公式ドキュメントでは一般ユーザーを'docker'グループに追加することを推奨してますので、追加しておきます。（この時点で'docker'グループ自体は既に作成されているはずです。）

```
$ sudo usermod -aG docker centosuser
```
一度ログアウト、再ログイン後、

```
$ docker run hello-world
```
が正常に実行できればOKです。

##Docker-Compose

これも基本公式ドキュメント https://docs.docker.com/compose/install/ のとおりですが、要するに以下のコマンドを実行するだけです。

```
$ sudo -i
# curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# exit
$
```

Docker環境の構築は以上です。
autoscanした内容に、必要な値をセットするスクリプト


```pl:a.pl
#! /usr/bin/perl

use strict;
use warnings;

my $package_name = 'mypackage';
my $version = '1.0';
my $contact = 'contact'; # メールアドレスとか、適当に。

my $target_file = "./configure.scan";

unless (-f $target_file) {
    print("$target_file not found.\n");
    exit(1);
}

my $fh;

open($fh, "<" . $target_file) or die;
my @data = <$fh>;
close($fh);

my $output_str = '';

foreach my $line(@data) {
    chomp($line);
    
    if ($line =~ /^AC_INIT/) {
        # AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
        $output_str .= "AC_INIT([$package_name], [$version], [$contact])\n";
        $output_str .= "AM_INIT_AUTOMAKE\n";
        $output_str .= "AM_PROG_LIBTOOL\n";
        next;
    }
    
    if ($line =~ /^AC_PROG_CXX/) {
        $output_str .= "AC_PROG_CXX\n";
        $output_str .= "LT_INIT\n";
        $output_str .= "AC_CONFIG_MACRO_DIR([m4])\n";
        next;
    }
    
    if ($line =~ /^AC_PROG_RANLIB/) {
        next;
    }
    
    $output_str .= "$line\n";
}

print($output_str);

```

autotools、libtoolを使うときの、configure.acを楽に作るためのスクリプト。

autoscanした後に、上記スクリプトを使うイメージ。
同一ディレクトリ上に、autoscanが作成したconfigure.scanがある前提。
（上記perlスクリプト上で実行しても良いです）

以下やりたいこと。
・あらかじめ決めておいたパッケージ名、バージョン、連絡先を書き込む。
・automakeを使うので、AM_INIT_AUTOMAKEを追記。
・libtoolを使うので、AM_PROG_LIBTOOL、LT_INITを追記、AC_PROG_RANLIBが不要なので省く。
・c++使うので、AC_PROG_CXXを追記。

やりたいことは、とても単純だけど、configure.scanを手でいじるのが面倒なので、
perlスクリプトでちゃちゃっと書きました。

シェルスクリプトとsedとかでも良いと思いますが、
個人的にperlのほうが慣れているので、perlで書いてます。
CentOS7ではVMware Tools(VMware非推奨)がそのままでは入らないので、open-vm-toolsをインストールする

# はじめに
CentOS7ではVMware Tools(VMware非推奨)がそのままでは入らないので、open-vm-toolsをインストール手順です。
自分用備忘メモ。
なお、VMware Toolsをどうしてもインストールしたい場合は、net-toolsとかperlのインストールが必要です。

## 環境
 - CentOS71
 - ESXi5.5u2

## 手順
CentOS7にrootでログインしてyum でインストール後に有効化と開始します。

```
yum -y install open-vm-tools
systemctl enable vmtoolsd.service
systemctl start vmtoolsd.service
```

## 参考
[VMware による open-vm-tools のサポート (2074713) ](http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2074713)
2016-06-17 c++ builder / FastReport > [ilink32エラー] Fatal: ファイル'FRXCLASS.OBJ'を開けません

```txt:動作環境
C++ Builder XE4
```

## 状況

プロジェクトAからFastReportを使うユニットファイルをプロジェクトBに取り込んだ。
プロジェクトBをビルドしようとすると以下のエラーが出た。

```
[ilink32エラー] Fatal: ファイル'FRXCLASS.OBJ'を開けません
```

## 対応

FrxClass関連のリンクなりがうまく動作していないようだと思われたので以下のようにしてみた。

1. 適当なフォームを選択 (Main)
2. そのフォームにfrxPDFExportを追加
3. frxReportを追加
4. 上記の2つのコンポーネントを削除
5. プロジェクトビルド

上記でエラーがでなくなった。

関連して追加されたものは

```Main.h
#include "frxClass.hpp"
#include "frxExportPDF.hpp"
```

```Main.cpp
#pragma link "frxClass"
#pragma link "frxExportPDF"
```

上記は取り込んだユニット自体では宣言しているが、エラーがでていた。Mainフォームに追加することで回避できた理由は今のところ未消化。
「世界を動かすプロジェクトマネジメントの教科書」が程よい件

# 自分は世界を動かさないかも知れないけど

プロジェクトマネジメントに関する話題を検索していたら、以下の方のブログに引っかかりました。
プロジェクト・マネジメント、サプライチェーン、時間管理術といった多くの話題についてしっかりとした見解をお持ちで、内容が素晴らしいなと感銘しています。
[タイム・コンサルタントの日誌から](http://brevis.exblog.jp/)

そんな方が執筆された書籍で[「世界を動かすプロジェクトマネジメントの教科書 ~グローバルなチャレンジを成功させるOSの作り方」](http://www.amazon.co.jp/dp/4774176044)というのがありまして、ぜひ読んでみようと思って購入しました。

若手社員が先生の手ほどきを受けてプロジェクトマネジメントを学んでいくというビジネス小説になります。レクチャー形式のおかげで流れが分かりやすく、今日からでも実践してみようと思わせてくれる内容です。
PMBOKを読んである程度実践してみようと思っていましたが、すべてを実践するには重すぎるわけです。そりゃぁ航空産業やオリンピックプロジェクトといった規模のプロジェクトマネジメントをも想定した知識体系ですから盛り沢山です。中・小規模の請負プロジェクトでは仰々しいので、テーラリングは必要なわけです。ただ全般的に理解はしないと下手なテーラリングによって意味が無い状態にもしたくないし、っていうところで悩んでいるときに、丁度よい内容でした。
決して世界を動かすプロジェクトではなく、単なる請負プロジェクトであっても、書籍の内容であれば実践できるんじゃないかと。

# WBSは計画を立てるだけでなく、プロジェクト全体で一貫して扱うもの

という認識はあるのですが、見積もり時に作成してあとは放ったらかしにしていますよね。はい。
この書籍のほとんどはWBSに関する内容です。WBSでスケジュールと予算を立案し、それを使ってスケジュールと費用を監視し、コストと進捗をコントロールしていきます。WBSが全ての核となります。

# 全体の流れ

* 漏れなくアクティビティを抽出するために、「アクティビティマトリクス」を作成する
* クリティカルパス法で工期を計算するために、「プレシーデンスダイアグラム」を作成する
* 「積み上げ法」で全体のコストを見積もる
* WBSを「アップデーティング」して進捗を捉える
* 「コミットメント＋潜在的追加費用」でコストの着地点を予測する
* 「EVMS]でコストと進捗を同時にコントロールする

プロジェクト全体の流れのなかでのマネジメントの役割は上のような感じですが、とくに注目は「アクティビティマトリクス」ですね。要件モレやスコープの誤りといったことがあるとプロジェクトが破綻していってしまいますが、「アクティビティマトリクス」を作成すると、アクティビティがモレなく抽出できます。

# 「アクティビティマトリクス」を使い、成果物とプロセスの二軸でアクティビティを抽出する

WBSに挙げるアクティビティの抽出の見方として、成果物を洗いだしたF-WBS(Functional-WBS)とプロセスを洗い出したP-WBS(Product WBS)に分かれています。前者は「入出庫機能モジュール」「保管機能モジュール」「棚卸機能モジュール」「マスタ管理モジュール」といったサブシステム別にブレークダウンし、入出庫機能モジュールは、さらに「入庫」「出庫」「返品」といったサブモジュールにブレークダウンしていきます。後者は「要求分析」「設計」「実装」「テスト」「移行作業」というプロセスでブレークダウンし、「設計」はさらに「基本設計」「詳細設計」「実装設計」に分けていったりします。
わたしはF派、わたしはP派などという論争もあるようですが、本書籍では成果物とプロセスの二軸でアクティビティを抽出する「アクティビティマトリクス」を作成しましょうとしています。

すごーく簡単に書いてみました。

* プロジェクトが最終成果物に至るまでの「プロセスの構造図」をつくる
* プロジェクトの「成果物の構造図」をつくる
* 両者のマトリクスをつくる

![wbs.png](https://qiita-image-store.s3.amazonaws.com/0/114529/1f548990-1863-1150-85b6-eb25cb080559.png)

![activity_matrix.png](https://qiita-image-store.s3.amazonaws.com/0/114529/b233fc7a-85eb-28be-85ea-70a5a4ae9f59.png)

さらに以下のように続く作業がありますが、ここでの記載は端折ります。

* マトリクスのマス目をグループ化して、適切なワークパッケージを形成する。
* マネジメントの分担を意識して、ワークパッケージに整理番号をふり、WBSに構造化する。
* 各ワークパッケージのインプット・アウトプット・必要なリソースをアクティビティリストに記述する（WBS辞書）

実際にはプロセスも成果物ももっとたくさんあるので、割と壮大なマトリクスになってしまいそうではあります。目的はプロジェクトの進捗と成果物を追いたいわけで、見積もり可能なところで留めなければならないですね。あまりにも詳細化するとだんだんチェックリスト化していき目的とかけ離れていきかねないわけで。

# 「プレシーデンスダイアグラム」を使い、実行可能なスケジュールを立てる

アクティビティリストを元に、スケジュールを組んでいくわけですが、先行・後続作業もあるし、並行で出来る作業もあります。大抵の開発案件はアクティビティが数十個や数百個になるわけで、何かしら図示しないとやってられません。書籍では「プレシーデンスダイアグラム」を用いたネットワーク図を紹介しています。

* 先行・後続と並行作業を意識してアクティビティを並べていきます。
* アクティビティ名の後ろにはアクティビティリストで設定した工数を括弧書きで明記します。

![network_diagram1.png](https://qiita-image-store.s3.amazonaws.com/0/114529/e7b16bbf-dd74-f5c1-b87d-4d634a15f92d.png)

* 左から順に足し算で最早開始日と最早完了日を設定していきます。
* 右から順に逆算で最遅開始日と最遅完了日を設定していきます。

![network_diagram2.png](https://qiita-image-store.s3.amazonaws.com/0/114529/b11d7ee6-8c6b-22c2-8255-f6424727465e.png)

・・・なんか適当なアクティビティのお陰で、参考にならない程度な気もしますが、まぁいいでしょう。
フォワードとバックワードで日程を入れると、余裕日数が無いアクティビティが出てきます。これがクリティカルパスとなり、全体の納期になりますし、遅れると日程の遅れに直結してしまいます。ただ、実際にはアクティビティは大量にあるわけですので、このダイアグラムを手書きで起こすのは気が狂ってしまいます。やはりツールの手助けが必要です。なにかツールがあればご紹介くださいませ。
marked.js使ってみた

* MITライセンス
* IE8では動かない

## 参考

* [htmlでMarkdown記述 + Base64エンコードでドキュメント作成(marked.js) - Qiita](http://qiita.com/blkcatman/items/b1a906dd01330e83339c)

## 使い方

* [TEST CORDING » GithubからJavaScriptを読み込み時は専用のドメインから！](http://testcording.com/?p=1259)

```index.html
<!DOCTYPE html>
<meta charset="UTF-8">
<script src="https://cdn.rawgit.com/chjj/marked/master/marked.min.js"></script>
<div id="mdrender"></div>
<div id="mdraw" style="display:none;">
## ここにMarkdownの記述で本文を書いていく  

　```
画像を使うときは<img>タグを使う
　```

1. aa
1. bb


</div>
<script>
  document.getElementById("mdrender").innerHTML = marked(document.getElementById("mdraw").innerHTML);
</script>
```

![aa.png](https://qiita-image-store.s3.amazonaws.com/0/25728/0180927d-acf1-b9cc-b242-fae18a151b26.png)
Datapalooza Tokyo Day-2 3-3 DMM.comにおけるビッグデータ処理のためのSQL活用術 


## 株式会社DMM.comラボ ビッグデータ部 加嵜 長門
## 株式会社DMM.comラボ ビッグデータ部 鈴木 翔太

# ビッグデータ処理のためのSQL活用術
* 「だれでもデータを分析できる基盤」を作る
	* 社内へのSQLスキルアップ/導入

# システム概要
* スキームの殆どの箇所でSQLを使用
* 要素
	* Hive
	* sqoop
	* Presto

# ビッグデータ処理に役立つSQL構文
## WITH句
## CASE式
## LATERAL句 * テーブル関数

* テーブル関数 = TVFだったｗ
* http://lets.postgresql.jp/documents/technical/lateral/1
* jsonとかをカラムデータとしてもってる時に、テーブルに復元できる

## WINDOW関数
* OLAP関数
* 行をまたがって列を取れる
	* start/end日みたいな奴

# 事例
## レコメンド効果分析
## 障害分析
## セグメント分析
Datapalooza Tokyo Day-2 3-2 位置×範囲×時間で人を知る。-行動分析の事例紹介-


## レイフロンティア 澤田 典宏
* ARから行動情報へ

# これからの社会が抱える課題
* 調査
	* オンライン：なりすまし

# 社会インフラの改善は3軸の時代へ
* 変遷
	* 点の情報
	* 点と面の情報
	* 点と面と線の情報

# 線=人の行動
* 「人を知る」ことで様々な「課題」が「解決」できるはず

# アプリ「SilentLog」
* チラシ
* ライフログアプリ
	* 位置情報を記録
	* つなぐ=線
* 誰に使われる？
	* 健康管理
	* 記憶保管
	* 経費精算
* こだわり
	* バッテリー処理
	* 通知はない(silent)
		* 通知あるとうざい。入ってることを忘れるくらいがいい
# SilentLog Analytics
* 2/14のログ

# IBM製品の活用
* BlueMix
	* Spark

# 行動誘発とは?
* 刺激を受けて、行動に移す
* 「リアルタイム」でその人に「最適な情報」を届けること
	* キーになっているのはウェアラブルデバイス

# 行動誘発点は
* 人それぞれの「時間」*「場所」*「属性」の理解が重要
* この瞬間をのがさないこと

* ここにさらに「気持ち」を重ねていきたいそうな。

# 歩行者の行動を分析する
## ①行動パターンや属性などからモデルとなる行動を見つける
* 課題を持ってデータを見てみること。
* さっきのと同じスライド

## ②選出した一人の行動を分析。モデルの構築や検証を行う。
* 行動を分析すると、おおよそのデモグラフィックがわかる
* 例では、スカイツリーやら浅草寺、明治神宮を回ってる。観光客か?
* だが、東京都在住だ。わざわざこんな行動しないだろう。
* もっと広い期間で見ると、「奈良県」ってキーワードが見つかる。年始に奈良で行動してた
	* 奈良から出てきたばかりで投稿に住んでいる人

## ③行動を基に配信情報を個人向けに最適化。行動を誘発する。

# 77%の利用者
* ライフログという「新しい習慣」を「試してみたい」と回答


# 車(機械)でも
* e燃費やってるらしい！！
* 車にどれだけ乗ったのかとか急発進、急ブレーキの回数なども取得しているそうだ。

# ドライバーの行動を分析する
## ①車の挙動をリアルタイムで分析。ドライバーに安全を促す
* 車の動き、急ハンドルなど、車だけの情報ではなく、別の情報(人のログとってるから歩行者データとか)と照らしあわせていろいろ教えてあげられる。
	* 近くに病院があって多くの人が通るよ、とか。
	* 更には3rdPartyデータとかで、今日はこの辺祭りがあるから人多いよ、とかも
* お酒飲める店舗に滞在している時の注意とか

## ②神奈川県西部から京都府東部までの中部地域における乗り物利用者の動態
* 2016/01/01 00:00 ~ 23:59
* 例えば、3人以上同じ場所で急ブレーキ
	* 落下物とかがあったのだろう、警告してあげよう。

# 健康を誘発
* 「高齢者」の意識は「行動誘発」で変わるか?

## 最短2日
* 完遂率40% 「意識は高かった」のになぜこうなった?
	* IT/デバイスに対するリテラシー
	* 充電してくれない…w
* 笑い話だけど、ほんとにこういうことあるんだね。

## 60%が歩数増
* 継続率94%
* 「意識」をさせるだけでも行動は「誘発」される
	* やったことは、毎日の歩数を通知しただけ。
	* アンケートとっても、みんな意識はしてない、って応える
	* だけど、実際増えてるわけで、「無意識」に行動してる

* この先、運動強度の設定とかもやっていく


# 有事における意思決定に役立てる
* 熊本地震の±24h
* リアルタイムで行動を分析。すぐに仮設を組み立てる

# 行動から取得・分析できる情報
* いろいろわかるね。
* クラスタごとの行動誘発点を導き出し、最適な・・・

# 課題
## 便益の限界
* 行動情報に値する「便益の設定」は難しい
	* ひとつ間違えりゃストーカーとなるくらい精度が高い。。。
	* 性善説で情報とってる
	* 企業規模によっても変わる
		* スタートアップ企業が、こんなことやるよ
		* 大企業が、情報でこんなことやるよ
			* 世間の反応が違う！
## 論理の限界
* 人には「理解できない最適解」の相関
	* まさに、interpritable vs premitivity

## 承認の限界
* 「合理的な答え」を前にしても人は「可能性を否定できない」
	* 機械学習の結果、君は係長止まりだよ
		* もちろん拒否されるよね。

# まとめ
* 少しだけ高いハードルを飛び越える「楽しみ」や「おどろき」が『行動を誘発する』
	* データ分析すりゃいろいろわかるが、「伝え方」を間違うと行動はしてもらえない。
	* この、少しだけ高いハードルの設定の仕方を機械学習で更に磨いていく
Datapalooza Tokyo Day-2 3-1



```
エンジニア目線で見たデータサイエンス
```

# エンジニア目線で見たデータサイエンス

# データサイエンティストってどんな職業か?
## 必要なスキルセットのお話

### ベン図
* engineer
	* ソフトウェア開発
	* 基盤自動運用管理
	* 自動化
* scientist
	* 数学的バックグラウンド
	* 分析を行う
	* DBの経験
* business analyst
	* 業界への分析適用
		* 業界の業務知識に基づく分析観点をだす力
	* ビジネス視点
		* コミット力を出すためのゴールの設定
	* コミュ力
		* ステークホルダーとの調整力

# これからのデータサイエンスの環境
## エンジニアとしてどんな環境を用意しておくと良いのか?

### 基盤の構成要素
* 補足
	* 新しいデータ
		* これは入れたいな〜
		* メモ：気象情報 IBM Weather Company
	* IoT
		* センサーデータ
			* 各デバイスのログをどう収集してまとめていくのか、って観点
* 収集データはScientistにも使ってもらえる方法を確立しておく。
* 出口の設計の大切さ



# とりあえずやってみるデータサイエンス
## notebookへ
* #tokyoにレシピ流した。
*
Datapalooza Tokyo Day-1 2-4 - 材料に基づいて料理の予測：データサイエンス方法論（実習編）


## 登壇
* IBM Canada Analytics Platform, Data Scientist,
* Polong Lin

## 背景
* 前項と同様

## データサイエンス
* Business problem > Data > Actinable ....

* business understanding 
* analytic approach
* data requirentments
* data collection
* data understanding
* data preparation > data collection
* modeling
* evaluation
* deployment
* feedback > modeling

## intro
### what country?
#### 英語名
* 2 pm
* 4 minutes
* BLT
* beast
#### 材料
* コメ
* のり
* わさび
* 醤油

### 材料を元に料理を予想する

* linear regression 
* logistic regression
* clustering
* decision trees
* principal 
.....


* ご飯がある
	* 東アジアかな？
		* わさびがある
			* 日本料理かな？

みたいな。

* 決定木
* ターミナルノード
* recursive partitioning (催奇分割)


* 決定木
	* pro
		* 解釈しやい
		* N/AがあってもOK
			* small or large dataでもOK
	* con
		* overfit or underfitになることが多い
		* 大きい決定木は解釈しにくい
	* a decision tree stops growing when....
		* 情報量がより増えない
		* 分類することがない
		* 予め決めたサイズに到達
		
## Data Collection
* レシピサイトからレシピをスクレイピング
	* 4つのファイルにした。
	* 料理に300個位の食材が含まれているかを分析


# ここから先はWorkbenchのチュートリアルにしたがって…。
* bit.ly/recipesR
* ItalianとかGermanyとかFrance/Frenchとかクリーニング必要

# …Macの充電が切れたw
Datapalooza Tokyo Day-1 2-3 - 「R」イントロ­ダクション (入門・実習編)


## 登壇
* IBM Canada Analytics Platform, Data Scientist,
* Polong Lin

## 背景

### 課題 
#### データサイエンススキルの不足
* BIG DATA UNIVERSITY
	* http://bigdatauniversity.com/
* オンライン学習教材
	* @yourpace, @yourplace
* 5-5-5 rule
	* 5 lessons
	* 5 video lectures , each 5 minutes
* BDU-TOKYO
	* http://www.meetup.com/ja-JP/BDU-Tokyo/?chapter_analytics_code=UA-55533325-5
		* 動画も上がってます
			* www.bigdatauniversity.com/events

#### データサイエンスをもっと身近に
* Data Scientist Workbench
	* https://my.datascientistworkbench.com/tools/rstudio-ide/
	* 結果のシェアとかも可能
		* 別の人のworkbenchにインポートされるそうな。

## Workbench
### Pro
* Rでやるよ
* 人気
* プログラム言語として応用範囲が広い
* コードなので繰り返しがらくだよね
* 無料
* オンラインサポートコミュニティの大きさ
* ビッグデータならプログラミング言語が必須
### Con
* ライブラリの仕様が不統一で微妙・・・

### ツールの差
* R/RStudio/R notebooks(ジュピター)
* ジュピターは過程やインプットや操作も残して置けるらしい。便利そうだね。

# ここから先はWorkbenchのチュートリアルにしたがって…。
* http://bit.ly/introtokyoR
	* これでレシピを取り込める