OmniAICreator/Qiita-1.07M huggingface dataset:
JSON > Link > 複数行を扱うJSONファイルの例

関連 http://qiita.com/7of9/items/af34daf6c79ca8e004a7

複数行設定の保存について考える中、以下の情報を見つけた。

http://stackoverflow.com/questions/2392766/multiline-strings-in-json

> answered Oct 12 '11 at 18:21
> errordeveloper

による回答で複数行を扱いたいときのJSONフォーマットが例示されている。

- 項目の前後を`[`と`]`で囲う
- 項目内の行ごとにダブルクォーテーションでくくる
- 行末に","をつける
ansibleで自分自身(localhost)を制御する場合はlocalで

Vagrant で作った CentOS 7.x VM の中で、ansible の復習をしています。

CentOS 7.x のデフォルトでは ansible の 1.9 系が入りますが、epel リポジトリを入れれば 2.1 系が入ります。1.9 系で作った *.yml を 2.1 系で動かすと、概ね動きますが、以下の設定により様々な depricated 警告を出してくれるので、せっせと 2.1 用に直している最中です。

```bash
vagrant@localhost:/etc/ansible$ grep _warnings ansible.cfg
#system_warnings = True
#deprecation_warnings = True
command_warnings = True
```

さて、Vagrant で VM を作ると、VM 側には authorized_keys(*1) という公開鍵が、ホスト側には <DIR>\.vagrant\machines\default\virtualbox\private_key という秘密鍵が生成されます。

- (*1)…Vagrant-1.8.5 では[公開鍵のパーミッションが誤っている](http://qiita.com/hotta/items/b4049969ce00edbcd53f)ため、修正しないと接続できません。

ansible では制御される側にはエージェントが不要で sshd だけ動いていればよいのですが、VM 内でもデフォルトでは ssh 接続を使うので、今までは自分自身を制御するためだけに private_key を VM 側にコピーしていました。

その後マニュアルを読み返していたら、ansible-playbook コマンドに "-c local" オプションを見つけました。これを使えば ssh キーがなくても ansible-playbook を流せるようになりました。

ただ、どうしてもオプションを付けるのを忘れてしまいがちで、そのたびに 

```bash
The authenticity of host 'localhost (::1)' can't be established.
```

とか言われてしまいます。localhost だからデフォルトで local 接続にしてくれればいいのに、と思ったら、ちゃんと設定がありました。

[http://docs.ansible.com/ansible/intro_inventory.html#non-ssh-connection-types](http://docs.ansible.com/ansible/intro_inventory.html#non-ssh-connection-types)

単に、/etc/ansible/hosts に

```/etc/ansible/hosts
localhost ansible_connection=local
```

と書いてやるだけでした。これで幸せになれました。
排他制御でMonitorを使った実装はやめよう

# Monitor.Enter を使った排他制御の問題

とあるプロジェクトで、Monitor を使った排他制御の実装がありました。

```
    Monitor.Enter(syncobj);
    try
    {
        //クリティカルセクション
    }
    finally
    {
        Monitor.Exit(syncobj);
    }
```

しかし、Monitor.Enter が実行された直後にスレッドが Abort されると try ～ finally に到達していないので Monitor.Exit が呼ばれないためデッドロックを起こします。

# .NET4.0 より前に潜む問題

実は lock を使った排他実装は、コンパイルされると .NET4.0 より前は上記の Monitor を使ったコードに変換されていました。

```
    lock (syncobj)
    {
        //クリティカルセクション
    }
```

.NET4.0 以降は次の用に変換されるように変更されているそうです。

```
    try
    {
        bool flg = false; 
        Monitor.Enter(syncobj, ref flg);
        //クリティカルセクション
    }
    finally
    {
        if(flg) Monitor.Exit(syncobj);
    }
```

#  .NET4.0 以降であれば Monitor より lock を使いましょう

lock ではなく Monitor を使って実装するのは趣味の選択かと思いますが、 lock の方が実装量が少ないし。
考察 > 設定の保存/読込み > 改行の扱い

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

### 問題

設定の保存と読込を扱うライブラリを作って使用している。その設定については１項目に対して１つの設定(改行なし)としてこれまで使ってきた。

扱う設定項目に「改行付き文字列」を扱おうとしたところ破綻した。改行付き文字列をそのまま設定として書き込んだとき、改行が悪さをして、次回設定読込み時にパーサの処理の前のファイル読込みが失敗した。ファイル読込みが中途半端になったため、パーサ処理が失敗し異常終了するようになった。

### 対策案

改行付き文字列を設定として扱う場合の案

- 改行を禁止する
  - 保存時: 入力した改行を置換して改行そのものをなくす
  - 読込時: 保存した文字列そのまま読込む (改行はない)
  - メールアドレスリストなどではこちらでもいいかも
- 改行を別の文字列として置換
  - 保存時: 入力した改行を別の文字列に置換する
  - 読込時: 保存した文字列に対して置換して改行を戻す
  - 置換先の文字列をなににするか。入力文字列に含まれない文字列にしないといけない
- パーサーで改行を扱うようにする
  - パーサーを通す前に設定をファイルなどから読むときが問題
  - ファイル内で改行があると1セットの設定を読むときにN行の読込みをしないといけない
  - 終端記号なりの工夫が必要となる
  - 1セット1行の構造でなく、1セット1ファイルとした場合はこちらが使える
型定義ベースのアサーションライブラリ types-assert を書いた

TypeScriptの型定義ファイル（interface）を活用した、型アサーションライブラリです。

[types-assert](https://github.com/KeitaMoromizato/types-assert)

## 使い方

```
$ npm i types-assert -D
```

TypeScriptの型定義ファイルを用意する。

```ts:type.ts
interface Interface1 {
  stringProp: string;
  numProp: number;
}
```

### in node.js

使うのは、`compile()`と`assert()`のみ。`compile()`でtsファイルをロードし、`assert()`で型チェックする。

```js:app.js
const compile = require('types-assert/compiler').compile;
const assert = require('types-assert/assert').assert;

// tsファイルをtypes-assertのオブジェクトに変換
const type = compile('type.ts');

const obj1 = {
  stringProp: "hoge",
  numProp: 2
};

// 型が正しい場合はスルー
assert(obj1, type.Interface1);

const obj2 = {
  stringProp: "hoge",
  numProp: "2"
};

// 型がおかしいのでError
assert(obj2, type.Interface1);
```

### in browser

Webpack用の[types-assert-loader](https://github.com/KeitaMoromizato/types-assert-loader)を作った。

```
$ npm i types-assert-loader -D
```

Webpackにloaderを定義。

```js:webpack.conf.js
{
  module: {
    loaders: [
      {
        test: /\.ts$/,
        loader: 'types-assert-loader'
      }
    ]
  }
};
```

`.ts`ファイルをimportすると、Loaderがコンパイルしたオブジェクトを返してくれるので、それでassertする。

```js:index.js
import { assert } from 'types-assert/assert';

import { Interface1 } from './type.ts';

console.log(Interface1);

const obj1 = {
  stringProp: "hoge",
  numProp: "2"
};

// Error!
assert(obj1, Interface1);
```

## 何故作ったか

もちろんテスト用のアサーションとしても使えるけど、どちらかというと開発用途を想定している。プロダクションのときは[unassert](https://github.com/twada/unassert)とかで削れるはず。たぶん。

### TypeScript好きだけど、辛い
TypeScriptは良い。Objectの型定義を作っておけば、REST APIのレスポンスや、ORMから返ってくるオブジェクトの使いが楽になる。

でも、全てをTypeScriptで書くのは辛い。例えば、バックエンドはnode.jsでTypeScriptを使っているけど、フロントはプレーンなJS、ということがある（コードのライフサイクルや色々な問題で）。そうなると、バックエンド用に作った型定義ファイルがもったいない。

なので、`assert`という関数ひとつでObjectを再帰的に型チェックできたら良いなと思って作った。

### プレーンなObjectを使うことが増えた

Redux（flux)の流行もあり、フロントエンドで標準の型（string、Object、...）だけで構成されたObjectを使う機会が増えた。気がする。

でもReactのpropTypeは嫌い。

なので、`assert`という関数ひとつでObjectを再帰的に型チェックできたら良いなと思って作った。

## TypeScriptの型定義を使う理由

既存のプラットフォームに乗っかる方が楽。また、仮にTypeScriptを使わなくても、型定義ファイルは仕様書としての役割も果たすので、作っておいて損はない。

ただ、今回はTypeScript用に作ったけど、別にコンパイル元のファイルは言語を問わない。JavaやGoのInterfaceからでも（ASTがあれば）同じことは実現できるはず。

## まとめ

ふと思いついて作ってみたものなので、どれだけ実用的かはこれから。
あと、コードは適当だしサポートしてない部分もある。Arrayのgenericsも、独自型（interface）の定義もできていない（サポートするかは置いといて）。

誰かが使ってくれるようなら直していく。
SDKBOX : 罠2: iapManager:purchase("item id")

iapManager:purchase("item id")
item idは下記の画像を見ってください。

![alt](https://qiita-image-store.s3.amazonaws.com/0/74655/679365c7-1262-eca3-07e1-a5bf9940f2e2.png)
[Screen Shot 2016-08-23 at 9.30.33 AM.png](https://qiita-image-store.s3.amazonaws.com/0/74655/679365c7-1262-eca3-07e1-a5bf9940f2e2.png)


sdkbox_config.jsonの設定も合わせて設定する。item1は一緒で、id内容はpackage name + item1の形で。

```json:sdkbox_config.json
"android": {
        "iap": {
            "items": {
                "item1": {
                    "id": "com.chogame.donuts.item1"
                }
            },
            "key": "MIIBIxxxxxxxQAB"
        }
    },
```
CodeIgniterカンファレンス2016が開催されます！

世界的にメジャーなオープンソースのPHPフレームワークである「[CodeIgniter](https://www.codeigniter.com/)」に関するカンファレンスが東京で開催されます。

# イベント概要

* 名称：CodeIgniter Con 2016, Tokyo Japan
* 日時：2016年9月3日（土曜日）10:00〜17:00
* 場所：東京都　[浅草文化観光センター](http://www.city.taito.lg.jp/index/bunka_kanko/oyakudachi/kankocenter/a-tic-gaiyo.html)
* 参加費：無料
* 主催：[日本CodeIgniterユーザ会](http://codeigniter.jp/)
* 公式サイト：[CodeIgniterカンファレンス2016](http://cicon.codeigniter.jp/2016/)

以下より、参加申込できます。定員になり次第締め切りますので、お早めにお申し込みください。

* [参加申込](http://cicon.codeigniter.jp/2016/home/registration)

また、セミナー講師もまだ募集していますので、CodeIgniterに関する発表をしたい方はご応募下さい。

* [セミナー講師募集](http://cicon.codeigniter.jp/2016/home/seminor)

# 参考

* [CodeIgniterカンファレンス2011公式サイト](http://cicon.codeigniter.jp/2011/)
BCD > binary coded decimal > it prevents many rounding errors

@ Code Complete (No. 10077 / 36077)

> here are comon specific solutions to rounding problems:
...
- Change to binary coded decimal (BCD) variables. ... ,but it prevents many rounding erros.

大きい数字になるとそれに合わせ桁が増えるためrounding errorsにはならない、という理解をした。

関連 http://www.wdic.org/w/TECH/BCD
electronにおけるコマンドライン引数の位置とパーサ


electronで起動する場合と、ビルドしたアプリでは引数の位置が変わる。

Electron で起動する場合

```
$ electron . 引数...
```

パッケージで起動する場合

```
$ sample-app 引数...
```

これは以下の記事で言及されている。

[SeaPig 開発中の困ったメモ - Qiita](http://qiita.com/yasumichi/items/5652ed2f34eb97f76bd8#commanderjs-%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E3%81%8C%E6%8C%AB%E6%8A%98)

以前書いたアプリでは開発環境の場合のみ、引数を2つにするようにし、それを`minimist`でパースして使っていた。

```js
const minimist = require('minimist');
const args = minimist(process.argv.slice(process.env.NODE_ENV === 'development' ? 2 : 1));
```

ただ、パースだけしても`--version`とか`--help`とか基本的な処理を毎回書きたくないので、electron用のコマンドラインヘルパを作成した。

[akameco/electron-args: CLI helper for electron](https://github.com/akameco/electron-args)

## インストール

```
$ npm install --save electron-args
```

## 使い方

以下の例はコマンドラインの引数でqiitaかgithubのユーザページを開くサンプル。

```js
'use strict';
const electron = require('electron');
const parseArgs = require('electron-args');

const cli = parseArgs(`
	sample-app

	open github or qiita

	Usage
	  $ sample-app [path]

	Options
	  --help       show help
	  --version    show version
	  --github,-g  open github [Default: true]
	  --qiita,-q   open qiita [Default: false]

	Examples
	  $ sample-app akameco
	  $ sample-app akameco --qiita
`, {
	alias: {
		h: 'help',
		q: 'qiita',
		g: 'github'
	},
	default: {
		qiita: false,
		github: true
	}
});

console.log(cli.flags);
console.log(cli.input[0]);

if (!cli.input[0]) {
	console.log('input required');
	process.exit(1);
}

electron.app.on('ready', () => {
	const win = new electron.BrowserWindow({width: 800, height: 600});
	const target = cli.flags.qiita ? 'https://qiita.com/' : 'https://github.com/';
	win.loadURL(target + cli.input[0]);
});
```

戻り値のオブジェクト

`input`: フラグなしの入力
`flags`: フラグ
`help`: ヘルプのテスト。--helpで出力してアプリを終了する。

`electron`もしくは`electron-prebuild`から起動されているかで引数の数を調整。

パーサは[`minimist`](https://github.com/substack/minimist)。第二引数は`minimist`のオプションなので、`default`や`alias`を設定可能。

`--version`とすれば、electronのアプリの`app.getVersion()`で得られるバージョンを出力する。

あとは、jsなので基本的にキャメルケースがうれしいので、`--fuga-hoge`みたいなのを`fugaHoge`と得られる。

#### 注意点

`app.on('ready')`より前に書くこと。
electronが起動してしまうと出力が奪われて、`console.log`がターミナルに出力されない。

## 参考
- [meow](https://github.com/sindresorhus/meow)
- [SeaPig 開発中の困ったメモ - Qiita](http://qiita.com/yasumichi/items/5652ed2f34eb97f76bd8#commanderjs-%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E3%81%8C%E6%8C%AB%E6%8A%98)
- [substack/minimist: parse argument options](https://github.com/substack/minimist)
- [akameco/electron-args: CLI helper for electron](https://github.com/akameco/electron-args)
csharp > クラスインスタンスの破棄 > スコープを抜ける

```txt:動作環境
Unity 5.3.5-f1 on MacOS X El Capitan
```

関連 http://qiita.com/7of9/items/076cf5aaff7095bb876d

csvから読みこむデータをDataBaseManagerクラスで処理しようとした。

以下のコードでダミーテキストを取得できるようになった。

```DataBaseManager.cs
using UnityEngine;
using System.Collections;


namespace NS_DataBaseManager
{
	public class DataBaseManager {
		public string getString() {
			return "test text";
		}
	}
}
```

```InventoryCS.cs
DataBaseManager dbm = new DataBaseManager ();
T_about.text = dbm.getString ();
```

上記にてdbmをdeleteしようとしたが、deleteが見つからなかった。
以下の情報を見つけた。

http://oshiete.goo.ne.jp/qa/4733785.html
> インスタンスの破棄は、変数に null を代入することで行います(もしくはロジックのスコープを抜ける時)。


@yuba さんの[コメント](http://qiita.com/7of9/items/ed4aa75852ae92c9cc58#comment-3cd34c69333eaf1c2d1e)によると上記の例の場合はnullを入れる必要はなさそうです。

自分の過去記事で関連しそうなもの
[csharp > using > 自動的にDispose()を呼び出してくれ、しかも、例外にも対応してくれる便利な構文](http://qiita.com/7of9/items/f265dd8db30d58c48586)
LEDE(OpenWrt)でPPPoE on VLAN

LEDE（OpenWrtのfork）をインストールしたルータ上で、WAN側ポートにPPPoE用ネットワークとDMZネットワークと2つのVLANを設定してみました。その際の作業記録です。

# PPPoEルータとONU間はケーブル直結でなくても良い

ご家庭のブロードバンドルータのWAN側ポートにはONU（光回線終端装置）をイーサネットケーブルで直結しているご家庭が大半だろうと思います。

ところで、ルータとONUの間にL2スイッチを挟んでも必ず動作するのでしょうか。結論から言えば普通に動きます。PPPoEの通信は名前の通りL2レイヤで行われているものなので、スイッチが1個挟まってるだけなら動作上特に問題とはなりません。

# VLAN上でPPPoEを使いたい状況

ブロードバンドルータによるファイアウォールの外側にDMZを作りたいような場合、PPPoE接続に使っているポートをVLANで使いたくなりませんか？

自分の場合、次のようなネットワークが組みたくなりました。

```
┏━ (1)ONU
┣━ (2)PPPoEルータ ━ 家庭内ネットワーク
┗━ (3)DMZ用ルータ
```

(1)と(2)が参加するPPPoE用VLANと、(2)と(3)が参加するDMZ用VLANを組み、(2)のWAN側ポートに2つのネットワークを乗せるようなイメージです。

この「PPPoE on VLAN」の設定はYAMAHAルータの一部機種で可能なようですが、家庭用ブロードバンドルータのファームウェア対応しているものは皆無だろうと思います。そんなときこそLEDE（またはOpenWrt）の出番ですね。

# スイッチ側設定

今回、VLAN対応L2スイッチを(3)のDMZ用ルータに兼務させる構成を取りました。具体的には、DMZルータのLAN側ポートでVLANを切り、VLAN ID 1をPPPoE用、VLAN ID 2をDMZ用としています。また、(2)のポートは両VLANともtaggedで設定しています。

物理配線としては(3)のルータに(1)と(2)が接続されている形になり非常にスッキリしたのですが、初見でネットワーク論理構成がわかりにくいのでプロの視点ではイマイチかもしれません。

```
(3)DMZ用ルータ
┣━ (1)ONU
┣━ (2)PPPoEルータ ━ 家庭内ネットワーク 
┗━ DMZ配下の他のマシン
```

# PPPoE on VLANの設定

本稿の本題となる(1)のルータ側のPPPoE設定についてですが、実はLEDEのWeb管理画面だけで設定が可能です。

具体的には、Luciから「Interfaces」「WAN」「Physical Settings」「Interface」で「VLAN Interface: "eth1.1"」を選びます。その選択肢が無い場合は「Custom Interface」を選んで `eth1.1`　と入力します。（環境に合わせて`[インターフェース名].[VLAN ID]`とする必要があります。念のため）

このように、PPPoEでのネットワークインターフェースの指定をVLANにするだけで期待通り動作します。

上記作業をコンソールから行う場合は、`/etc/config/network`を編集して次のコマンドを打ちます。

```
uci commit network ; /etc/init.d/network
```

# その他設定

これ以外に、(1)のルータでDMZ用のファイアウォールゾーンの作成を行い、DMZからのアクセスを一部ポートのみ開放するようなファイアウォール設定も行いました。

# 参考URL

- [PPPoE（PPP over Ethernet）とは](http://www.infraexpert.com/study/wan9.html)
- http://www.rtpro.yamaha.co.jp/RT/docs/vlan/
Inventory / unity > csvファイルをResourcesから読込む > Resources.Load()

```txt:動作環境
Unity 5.3.5-f1 on MacOS X El Capitan
```

関連 http://qiita.com/7of9/items/076cf5aaff7095bb876d

Inventoryの情報をどこから読むか。
起動時にResoucesのcsvファイルから読む実装をしてみた。

## 手順

参考 http://hwks.hatenadiary.jp/entry/2014/08/03/023235

1. Assets以下にResoucesフォルダ作成
2. Resoucesフォルダにinventory.csvを作成 (中身は後述)
3. コードに`using System.IO;`を追加。StringReader使用のため
4. Resouces.Load()を実施するコード追加

```inventory.csv
name,caseNo,row,column,url,about
```

```InventoryCS.cs
using System.IO;
...中略...
public void debugReadCsv() {
	TextAsset csv = Resources.Load ("inventory") as TextAsset;
	StringReader reader = new StringReader (csv.text);
	while (reader.Peek () > -1) {
		string line = reader.ReadLine ();
		T_about.text = line;
	}
}
```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/8f9d7938-9cc7-79a0-4503-7d04043c767b.png)

## 補足

[StringReader > Peek](https://msdn.microsoft.com/ja-jp/library/system.io.stringreader.peek(v=vs.110).aspx)
> 読み取り対象の次の文字を表す整数。使用できる文字がないか、ストリームがシークをサポートしていない場合は -1。

`>-1`でなく`!= -1`の方がいいのかもしれない。
技術英語 > Either remove more than one character or [spell out the word].

@ Code Complete (No. 9649 / 36077)

> "Jun" and "Jul."
...
> With most one-letter deletions, it's hard to remember whether you removed the character. Either remove more than one character or <font color=red>spell out the word</font>.

http://ejje.weblio.jp/content/spell+out
> 1 字 1 字読む、1 字 1 字綴る、(…を)はっきり説明する、詳細に説明する

意訳「中途半端に1文字を削除すると、(後でソースを見直す時に)変数名の１文字を取ったかどうか思い出しにくい。２文字以上を抜くか、省略せずに書きなさい」。
【cordova】vh, vw のバグ (android, ios 両方あり)

# vh, vw は使わないほうがよさそうです

vh, vw は親要素に依存せずに、常に画面サイズを基準にしたサイズを返してくれます。

```css:css
/* viewport = 320 なら、親要素に依存せずに width=160px */
width : 50vw;
```

特に、デザインを１画面に納めたい（縦にスライドさせたくない）時には、vhは大変便利そうです。しかし残念ながら ios, androidともにうまく動作しない場合があります。

##iosでvhが崩れる
インプット要素に文字を入力する際にはソフトウェアキーボードが表示されますが、これにより画面の高さが変化したとみなされてしまい、vhを使った要素のデザインが崩れてしまいます。

##android は width : xx% ですら崩れる機種あり
androidでは、device-pixel-ratioを考慮せずに、画面の解像度を基準に計算されてしまう場合があります。私が確認したものでは、width : xx% が倍のサイズで計算されてしまう機種がありました（昔の普段使いのメイン機種）。でもcrosswalkでビルドすれば大丈夫です。

## 解決策
%を使ったデザインは不安なので、jsでサイズを計算するのが確実です。
もしvh, vwが確実に動作する日が待ち遠しいです。
*コードは次回
久々にビルドしたらlintianをhookするところでコケてる（解決済み）

```
...
   dh_builddeb
dpkg-deb: building package 'birdfont-dbgsym' in '../birdfont-dbgsym_2.16.5-1_amd64.deb'.
dpkg-deb: building package 'birdfont' in '../birdfont_2.16.5-1_amd64.deb'.
 dpkg-genchanges  >../birdfont_2.16.5-1_amd64.changes
dpkg-genchanges: info: including full source code in upload
 dpkg-source --after-build birdfont-2.16.5
dpkg-buildpackage: info: full upload (original source is included)
(snip)
 -> Cleaning COW directory
  forking: rm -rf /var/cache/pbuilder/build/cow.19438 
Can't close(GLOB(0xb71cd8)) filehandle: '' at /usr/share/lintian/helpers/coll/objdump-info-helper line 208
/usr/bin/xargs: /usr/share/lintian/helpers/coll/objdump-info-helper: exited with status 255; aborting
command failed with error code 124 at /usr/share/lintian/collection/objdump-info line 81.
warning: collect info objdump-info about package birdfont-dbgsym failed
warning: skipping check of binary package birdfont-dbgsym
/usr/bin/xargs: strings: No such file or directory
command failed with error code 127 at /usr/share/lintian/collection/strings line 91.
Can't close(GLOB(0x1500bc8)) filehandle: '' at /usr/share/lintian/helpers/coll/objdump-info-helper line 208
/usr/bin/xargs: /usr/share/lintian/helpers/coll/objdump-info-helper: exited with status 255; aborting
warning: collect info strings about package birdfont failed
warning: skipping check of binary package birdfont
command failed with error code 124 at /usr/share/lintian/collection/objdump-info line 81.
warning: collect info objdump-info about package birdfont failed
warning: skipping check of binary package birdfont
open3: exec of readelf -lW usr/bin/birdfont failed at /usr/bin/hardening-check line 182.
command failed with error code 123 at /usr/share/lintian/collection/hardening-info line 85.
warning: collect info hardening-info about package birdfont failed
warning: skipping check of binary package birdfont
gbp:error: Postbuild-hook 'lintian $GBP_CHANGES_FILE' failed: it exited with 2
```
gbp?lintian?

…と思ったら、PATHがおかしくなってたのとbinutilsが無いことになっていた…どういうことだ。
診断メーカーのCHART関数を条件分岐してみる

## はじめに
　Twitterの診断メーカーにてチャート関数 CHART()というグラフを表示する関数が公開されました。（[診断メーカー お知らせブログ](http://shindanmaker.blogspot.jp/2016/08/chart.html)：2016年8月17日）
　グラフの表示について条件分岐しようとしたところ、ちょっと手間取ったため備忘録として残しておきます。

## ポイント
* CHART関数の引数にIF関数を用いることで条件分岐可能
* IF関数の引数としてCHART関数は使用不可
* リスト内 (RESULT) にIF関数を記述して、CHART関数に渡しても動作することを確認


## 実装例
　以下にグラフの種類と描写内容を条件分岐する実装例を示す。
　学力試験をテーマとし、コース名・科目名・点数を表示、合計点・偏差値を算出、最後にグラフを表示する。

```js:診断結果テキスト
[USER]さんの試験結果 //名前を表示

//コース名と対応する必須科目名を表示
区　分： =IF( [RESULT1] = 1 , 文系コース
国　語 , =IF( [RESULT1] = 2 , 理系コース
数　学 , 総合コース
外国語  )  )：[RESULT8]点
//IF関数中で改行をすると表示結果にも改行が反映される

//各コースに対応する科目名と点数を表示
[RESULT2][RESULT4][RESULT6]：[RESULT9]点
[RESULT3][RESULT5][RESULT7]：[RESULT10]点
//リスト2,4,6を並べているが、リスト内にIF関数を記述してあるため、最終的には対応する科目名のみ表示

//合計点と偏差値をCALC関数で算出
合計点：=CALC( [RESULT8] + [RESULT9] + [RESULT10] )点
偏差値：=CALC( 10 * (=CALC( [RESULT8] + [RESULT9] + [RESULT10] ) - 150) / 60 + 50 , 1 )

//CHART関数でグラフを描写
=CHART(
  //グラフの種類を指定するTYPEを、リスト1の結果から条件分岐
  =IF( [RESULT1] <= 2 , TYPE:RADAR , TYPE:BAR ), 
  DATA:[
        //DATAに直接IF関数を記述して条件分岐
        =IF( [RESULT1] = 1 , 国　語 , =IF( [RESULT1] = 2 , 数　学 , 国語  )  ):[RESULT8], 
        //リスト内にIF関数を記述しても条件分岐可能
        [RESULT2][RESULT4][RESULT6]:[RESULT9], 
        [RESULT3][RESULT5][RESULT7]:[RESULT10], 
  ], 
  MAX:100 //グラフの最大値
)
```

```js:リスト1
//各コースのフラグ
1 //文系
2 //理系
3 //総合
```

```js:リスト2,3
//文系の科目リスト
=IF( [RESULT1] = 1 , 世界史 , )
=IF( [RESULT1] = 1 , 日本史 , )
=IF( [RESULT1] = 1 , 地　理 , )
=IF( [RESULT1] = 1 , 現　社 , )
=IF( [RESULT1] = 1 , 倫　理 , )
=IF( [RESULT1] = 1 , 政　経 , )
=IF( [RESULT1] = 1 , 英　語 , )
```

```js:リスト4,5
//理系の科目リスト
=IF( [RESULT1] = 2 , 物　理, )
=IF( [RESULT1] = 2 , 化　学, )
=IF( [RESULT1] = 2 , 生　物, )
=IF( [RESULT1] = 2 , 地　学, )
=IF( [RESULT1] = 2 , 情　報, )
=IF( [RESULT1] = 2 , 英　語, )
```

```js:リスト6,7
//総合の科目リスト
=IF( [RESULT1] = 3 , 音　楽, )
=IF( [RESULT1] = 3 , 美　術, )
=IF( [RESULT1] = 3 , 家　庭, )
=IF( [RESULT1] = 3 , 体　育, )
=IF( [RESULT1] = 3 , 保　健, )
=IF( [RESULT1] = 3 , 工　芸, )
=IF( [RESULT1] = 3 , 書　道, )
```

※本来、リストに文字を入力すると「最大文字数」を自動的に算出するが、IF関数を記述した場合は1文字として扱われるため、140字の制限にかからないように注意が必要

```js:リスト8,9,10
//試験の点数（0 ~ 100）
0
1
...
99
100
```

```
オプション
　日替わり：はい
　同じリストを複数使う時：同じ値を表示する（デフォルト）
　重複させない：はい
　縦書き変換：いいえ
```

## 診断結果例
[今回作成した診断メーカー](https://shindanmaker.com/654195)

|文系コース|理系コース|総合コース|
|:-------:|:-------:|:-------:|
| ![文系結果.PNG](https://qiita-image-store.s3.amazonaws.com/0/23691/e0818c80-11ed-cb2b-59ec-298f11f3fe56.png "文系結果") | ![理系結果.PNG](https://qiita-image-store.s3.amazonaws.com/0/23691/8b44d455-3b8b-6c72-0398-6eeb848f42b1.png "理系結果") | ![総合結果.PNG](https://qiita-image-store.s3.amazonaws.com/0/23691/8268eb4f-21d1-7592-adc3-234df75752c7.png "総合結果") |
nkfのmanページ文字化けを直す（UTF-8化≒日本語man修正）とnkfのソースからのインストール

#nkfのmanページ文字化けを直す（UTF-8化≒日本語man修正）
タイトルの通り。
なんかしらんが文字化けしてたのでこれを直す。
※似たような記事があったらごめんなさい

$ LANG=ja_JP.UTF-8 man nkf
 ※すると見事に化けてる。
$ LANG=ja_JP.UTF-8 man nkf | nkf -g
ISO-2022-JP
※これが原因か。
※なので
$ cat /usr/local/man/ja/man1/nkf.1 | nkf --oc=utf8 >  /usr/local/man/ja/man1/nkf.1
※デフォルトの/usr/localにnkfをインストールした場合。

これで直ってるはず。綺麗に日本語(LANG=ja_JP.UTF-8)でman nkfが表示される。
man関係の環境変数設定とかで対応（インストールしたnkfを噛ませたりして）できるのかもしれないけど、よくわからんので力技でやってみました


#補足：nkfのビルドとインストール
公式サイト（sourceforge?)から最新版(この記事時点では2.1.4）のtar.gzを落としてくる。
$ tar -xf nkf-2.1.4.tar.gz
$ cd nkf-2.1.4/
※一応INSTALLに目を通す。Makefileを見ろと書いてある。configureはない。
$ make prefix=/usr/local
$ make install
※インストール完了
~~ ※ところで削除はどうすんだろ？ ~~
「ionic2」まとめ連載（其の７・「ionic run」でテストをする）

#「ionic run」でテストをする

こんにちは、mucunです。

今回の記事では、「ionic serve」について掘り下げたいと思います。
これは、実機にアプリをインストールするテスト方法となります。

ちなみに、テストの実施方法は、３つあります。
　① 「ionic serve」：ブラウザでテストする方法
　② 「ionic emulate」：エミュレータでテストする方法
　③ 「ionic run」：実機でテストする方法

今回は、③「ionic run」です。
こちらのコマンドは、②「ionic emulate」と同様、開発終盤でのテストに使うコマンドとなります。

Android端末を、PCにUSB接続している状態で、「ionic run android」と入力します。
すると、実機上でアプリが立ち上がります。
<img height="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/75ce7623-ecf9-b3a7-f70f-874f5be907be.jpeg">

起動できました！
実機で起動すると、また一段とアプリ開発の実感が、、、( ;∀;)

今回の記事は、ここまでとなります。
ここまで読んで下さった方、ありがとうございました。m(_ _)m

[👈【其の６・「ionic emulate」でテストをする】](http://qiita.com/mucunwuxian/items/00efe6106f5b5a82f92b)　　[👉【其の８・「ionic serve --lab」で、エミュレーターっぽく動かす】](http://qiita.com/mucunwuxian/items/617ba35aaf2e66960978)
「ionic2」まとめ連載（其の６・「ionic emulate」でテストをする）

#「ionic emulate」でテストをする

こんにちは、mucunです。

今回の記事では、「ionic emulate」について説明したいと思います。
このコマンドは、エミュレータでテストするためのコマンドです。

ちなみに、テストの実施方法は、３つあります。
　① 「ionic serve」：ブラウザでテストする方法
　② 「ionic emulate」：エミュレータでテストする方法
　③ 「ionic run」：実機でテストする方法

今回は、②「ionic emulate」です。
これは、従来の開発ツールにおいても、テスト時に使われてきたエミュレータの機能です。
PC上に、仮想のスマートフォンを構成し、そこで動作の確認を行います。

ちなみに、これを実施するには、AndroidSDKをインストールしている必要があります。
その手順については、別途まとめてますので、そちらを参照ください。
（インストール手順('ω')ノ：http://qiita.com/mucunwuxian/items/4b18e1e63c73000834ff ）

AndroidSDKのインストールを終えましたら、早速やってみましょう。
コマンドプロンプトにて、先ほどの「ionic2」モジュールのフォルダに行き、
「ionic emulate android」と入力すると、。
（尚、前回の「ionic serve」等の実行を中止するには、
　コマンドプロンプト上で、「Ctrl＋C」キーを押下することで実現できます）
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/b5835590-e655-d363-de64-7cb5287435d8.png">

起動できました！
ブラウザで起動するよりもアプリ感があります。

エミュレータのメリットは、仮想ですが、複数機種／複数バージョンでの起動が可能な点です。
機種のデータをインストールしてしまえば、それが実現できます。

「ionic serve」と比較してのデメリットを上げると、起動が遅い点や、
デバッグがしにくい点、リアルタイム更新がされない点などがあります。

なので、「ionic emulate」は開発終盤の動作テストなどに使用すると良いかと思います。

ちなみに、「mac OS」でないので、「iPhone」での実施はできません。
それは、いずれ購入して試してみたいと思います。

というところで、今回の記事はここまでとなります。
読んで下さった方、ありがとうございました。( ^^) _旦~~

[👈【其の５・「ionic serve」でテストをする】](http://qiita.com/mucunwuxian/items/c019b00271c0af69c630)　　[👉【其の７・「ionic run」でテストをする】](http://qiita.com/mucunwuxian/items/9f6ab9cb350faa02dd91)
setDisplayHomeAsUpEnabledが使えなかった時の戻るボタン実装方法

なんか

> actionBar.setDisplayHomeAsUpEnabled(true);

が使えないよーって人でもManifestに1行加えると左上の戻るボタンが実装できる


例えばhogehogeActivityに戻るボタンを実装したいときは

```xml:AndroidManifest.xml
<activity android:name=".hogeActivity" />
```
のところを

```xml:AndroidManifest.xml
<activity android:name=".hogeActivity"
            android:parentActivityName=".hogeActivity"/>
```
に変えるだけ実装できる。

parent先のActivityは適当でも動いた

![screenshot_2016-08-23-04-25-43_1024.jpg](https://qiita-image-store.s3.amazonaws.com/0/130973/adef966a-565d-e9ee-4673-4a0aa41ecd5c.jpeg)


さっとググった感じなんでこれだけで実装できるかというと
Activity.classでparentがNullでないときsetDisplayHomeAsUpEnabled(true)を実行するように元々定義されているっぽいです
「ionic2」まとめ連載（其の５・「ionic serve」でテストをする）

#「ionic serve」でテストをする

こんにちは、mucunです。

今回の記事では、「ionic serve」について掘り下げたいと思います。
このコマンドは、ブラウザ上で開発中アプリをテストするためのコマンドです。

ちなみに、テストの実施方法は、３つあります。
　① 「ionic serve」：ブラウザでテストする方法
　② 「ionic emulate」：エミュレータでテストする方法
　③ 「ionic run」：実機でテストする方法

今回は、①「ionic serve」です。
実は、３つのテスト方法の中で、従来にはなかった新形式がこれで、
従来と比較して、非常に効率的にテストを実施することができます。

それでは実施してみましょう。
コマンドプロンプトを起動し、「ionic2」モジュールが格納されているフォルダまで行き、
「ionic serve」とコマンド入力します。
すると、ブラウザ上にアプリが起動します。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/39e2d1da-12c2-3e4d-3407-4800065d23a2.png">
（※前回（[其の４](http://qiita.com/mucunwuxian/items/fea3e0ea464076818de7)）にて作成した、「ionic2」の公式サンプル）

このテスト方法ですが、起動がお手軽という以外に、幾つかメリットがあります。
　①-① 「ionic2」モジュールの変更を、リアルタイムに反映してくれる
　①-② ブラウザ上のデバッグ機能で、デバッグができる

これも１つずつ紹介します。

## ①-① 「ionic2」モジュール変更のリアルタイム反映

実際に試して確認してみましょう。

先ず、「ionic2」モジュールを開きます。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/a02c7474-ec98-4719-76af-602ad51ba069.png">

ちなみに、エディターは何でも良いですが、
私のオススメは、友人から教えてもらった「Visual Studio Code」です。
（ダウンロードはここから('ω')ノ：https://www.visualstudio.com/ja-jp/products/code-vs.aspx )

詳細は次回以降に話をさせていただきますが、
「ionic2」モジュールにて、主に変更を行っていくファイルは、
「(PJフォルダ)/app」配下のモジュールになります。
今回は、初期画面の見た目を構成する
「(PJフォルダ)/app/pages/hello-ionic/hello-ionic.html」を変更してみます。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/013f1fd3-507b-1ebd-2e4a-185e3b823c71.png">

例えば、

```html:10行目
    <ion-title>Hello Ionic</ion-title>
```

というコードがありますが、これを、

```html:10行目
    <ion-title>Good Morning Ionic</ion-title>
```

と変更して、保存します。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/2af90d55-87b8-d0f5-c603-054e8bbaf7b5.png">

すると、どうでしょう。
ヘッダーのタイトルが、"Hello Ionic"から"Good Morning Ionic"に変わっています。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/cdcc7cf9-0c7d-4f92-a695-8d35c0ef5679.png">

こうして、いちいち修正の都度コンパイルして修正内容を確認しなくて良いため、
開発が非常に効率的に行えるという訳です。

## ①-② ブラウザのデバッグ機能が使える

これは単純に、例えば、「Google Cherome」で、「F12」キーを押せば、
デバッグ機能が使えるという話です。
後々、サーバーとの連携機能などを実装した際には、非常に役立ちます。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/1275ab6f-2d54-3fdb-4f64-8d13d07ae6d3.png">

以上が、「ionic serve」でのテスト方法となります。

今回の記事は、ここまでとなります。
読んで下さった方、ありがとうございました。( ;∀;)

[👈【其の４・「ionic2」のサンプルを起動する】](http://qiita.com/mucunwuxian/items/54983981a279cda82376)　　[👉【其の６・「ionic emulate」でテストをする】](http://qiita.com/mucunwuxian/items/00efe6106f5b5a82f92b)
「ionic2」まとめ連載（其の４・「ionic2」のサンプルを起動する）

#「ionic2」のサンプルを実施する

こんにちは、mucunです。

今回の記事では、「ionic2」アプリのサンプルを起動してみたいと思います。

前回（[其の３](http://qiita.com/mucunwuxian/items/fb95e0aa8e673717286f)）で、「ionic2」を使う準備が出来ました。
公式ページが用意しているサンプルを実行してみましょう。
http://ionicframework.com/docs/v2/getting-started/tutorial/
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/91443589-0092-7fcd-efd4-feeece1fb644.png">

以下、チュートリアル上記ページを要約した手順です。

＜手順＞
①先ず、コマンドプロンプトを起動し、作業フォルダをカレントにします。
②次に、「ionic start MyIonic2Project tutorial --v2」とコマンド実行します。
　すると、githubからのサンプルのダウンロードが開始されます。
③最後に、ダウンロードが完了するとフォルダが作成されるので、
　「cd MyIonic2Project」コマンドでフォルダを移動し、
　そこで、「ionic serve」と入力します。

これで、以下のサンプルがブラウザ上で起動されます。
ボタンの動作等試してみてください。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/1b0bb235-6514-c6bc-e7b9-8ad75b92acfe.png">

こんなに簡単に起動ができるなんて、気持ち良いですね！

今回の記事は、ここまでとなります。
読んで下さった方、ありがとうございました。|дﾟ)


[👈【其の３・「ionic2」をインストールする】](http://qiita.com/mucunwuxian/items/fb95e0aa8e673717286f)　　[👉【其の５・「ionic serve」でテストをする】](http://qiita.com/mucunwuxian/items/c019b00271c0af69c630)
「ionic2」まとめ連載（其の３・「ionic2」をインストールする）

#「ionic2」をインストールする

こんにちは、mucunです。

今回は、「ionic2」のインストール方法を紹介します。
尚、この投稿では、「Windows 10（64bit）」でのインストール方法を紹介します。

インストール方法ですが、適用にやると、動作が不安定なことがあります。
皆さんには、そうならないように実績のあるインストール方法を紹介します。
公式ページの手順に従って行うのが、一番安定しているようです。

公式ページは以下です。
http://ionicframework.com/docs/v2/getting-started/installation/
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/c5048161-e3f3-71d8-73c1-2987910c6247.png">
このページに沿って、インストールをしていきます。

以下、上記ページの内容に従った手順を要約したものです。
リンクなども、転載しました。

＜手順＞
①先ず、ionicのインストールのために、NodeJS v5.xをインストールします。
　公式ページのNodeJSバージョン推奨は、v5.x系です。
　［インストールリンク：https://nodejs.org/dist/latest-v5.x/ ］
　<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/f55a6e13-bf46-6697-f045-e588df32c16f.png">
　「Windows 10（64bit）」であれば、「node-v5.12.0-x64.msi」をダウンロードして、
　ファイルを起動すれば、NodeJS v5.xがインストールされます。
　
②次に、npmのバージョンが、公式ページ推奨の3.x系になっているか確認します。
　NodeJSのインストールにより、npmコマンドを実施できるようになっているので、
　コマンドプロンプトを起動して、そこで「npm -v」とコマンド実行しましょう。
　npmのバージョンが表示されますので、3.x.x系になっているか確認してください。
　<img width="400" src="https://qiita-image-store.s3.amazonaws.com/0/126499/1c941604-e75d-8edb-13d2-f5f3f9c56e6a.png">
　ここで、3.x.xと表示されなかった場合は、
　『npm install -g npm<span>@</span>3.8.6』とコマンド実施してください。
　それによって、npmのバージョンが、3.8.6になります。
　（私は、このバージョンで安定しています）

③最後に、「ionic2」をインストールします。
　コマンドプロンプト上で、「npm install -g ionic@beta」とコマンド実行します。
　これで、「ionic2」がインストールされます。

インストール方法は以上です。

コマンドプロンプトに馴染みのない人は抵抗があったかもしれませんが、
今後、「ionic2」を使う上では仲良くなる必要があります。

というところで、今回の記事はここまでとなります。
読んで下さった方、ありがとうございました。(^^)/

[👈【其の２・「ionic2」の大まかな構成を理解する】](http://qiita.com/mucunwuxian/items/04a9750e4f5ea2df738d)　　[👉【其の４・「ionic2」のサンプルを起動する】](http://qiita.com/mucunwuxian/items/54983981a279cda82376)
「ionic2」まとめ連載（其の２・「ionic2」の大まかな構成を理解する）

#「ionic2」の構成を大まかな理解する

こんにちは、mucunです。

今回の記事は、「ionic2」の大まかな構成についてです。
「ionic2」が、なぜ複数プラットフォームに対応できる理由や、
開発する上で使う言語などについて紹介します。
どうぞよろしくお願いします。

（スイマセン、、、先ずは枠だけ、、、近日中に更新します！）

以下について大まかに記載する
・ionic2モジュール全体のフォルダ構成について
・修正対象のモジュールについて
・html、scss、tsの役割について
・app.tsについて
・１ページ１フォルダについて


[👈【其の１・「ionic2」の概要を理解する】](http://qiita.com/mucunwuxian/items/67f4b873a65e552f0fdf)　　[👉【其の３・「ionic2」をインストールする】](http://qiita.com/mucunwuxian/items/fb95e0aa8e673717286f)
パソコン自作してUbuntuインストールからchainerインストールまでの流れ

GTX1070搭載のパソコンを自作した後、Ubuntu14.04をインストールして諸々設定した際のメモ。

スペック：
CPU:Corei7 6700K
GPU:GTX1070
SSD:240GB
HDD:1TB
マザーボード:ASUS H170-pro
など

##Ubuntuが立ち上がるまでの問題点

問題点１：Ubuntu14.04をインストールしても立ち上がらない
→BIOSの設定でBOOT項目のOSなんちゃらをWindowsからその他OSとすることで対応

問題点２：HDDをGPartedを使って設定したところ、再起動したら立ち上がらなくなった
→USB入れて再インストールすると、普通にHDDを認識していた。

##Ubuntuが立ち上がって以降
以下、Ubuntuが立ち上がるようになって以降。

defaultでpython 2.7.6がインストールされているよう
まずchainerのホームページを参考にg++とpython-pipをインストール

```
sudo apt-get install g++
sudo apt-get install python-pip
```

次にここのサイトを参考にchainerの依存ライブラリをインストールしていく
http://qiita.com/manjiroukeigo/items/7399a303530f7ba1a79f

```
sudo apt-get install python-numpy
sudo apt-get install libhdf5-dev
sudo pip install -U setuptools
```
までうまくいったが、cythonをインストールすべく

```
sudo pip install -U cython
```

とすると、Python.hがない、と出た。このサイト
http://zashikiro.hateblo.jp/entry/2012/10/02/130031
を参考にpython-devをインストールした後に

```
sudo apt-get install python2.7-dev
```
再度、インストール。今度は
Could not find .egg-info directory in install record for cython
と表示されるが、一応
Successfully installed cython
と出てるので、先に進む。

##GTX1070用のドライバをインストール
GTX1070＆CUDA7.5に関しては、１周間程度格闘していろんなサイトの手法を真似てみたが、うまくいかず。結局、chainerの利用はあきらめ、CUDA8.0をインストールすることに決定。
ここのサイト
https://cvdreamer.wordpress.com/2016/07/24/gtx-1070-cuda-cudnn-caffe-on-ubuntu-14-04/
を参考に、GTX用ドライバをインストールする。
他のサイトと違って仮想コンソールにいってX windowを消せ！など書かれていないのが気がかりだが・・・
冒頭でFirst of all, I need to change bios to login Ubuntu using integrated graphic card (not GTX 1070), otherwise, there will be “out of range” error on the display (basically, display is black while you are logging in).と書かれているが、とりあえず無視する。
まずは既存のNVIDIAのドライバを除去

```
sudo apt-get purge nvidia*
```
367ドライバはPPAから入手する

```
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-367
```
再起動した後、

```
nvidia-smi
```
と入力すると、それらしき表示が出てきた。ドライバのインストールはうまくいったか？

##CUDA8.0をインストール

まず既存のCUDAパッケージの除去。

```
sudo apt-get purge cuda*
```
次にNVIDIAのサイトからCUDA8.0用のパッケージをダウンロードしてくる。
そしてインストール。

```
chmod +x cuda_8.0.27_linux.run
sudo ./cuda_8.0.27_linux.run
```

この時、graphic card driverはインストールするか？の質問にNoと答える。
viで/etc/profileなどを開いて、CUDAへのパスを追加

```
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
```

この時、以下のようなWarningが表示された。

```
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 361.00 is required for CUDA 8.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file: sudo <CudaInstaller>.run -silent -driver
```

この表示を「ドライバの問題でインストールできなかった」と勘違いしてしまい右往左往したが、chainerをインストールしてみるとCUDAを利用できていた。

##cuDNNのインストール
やはりこのサイト
https://cvdreamer.wordpress.com/2016/07/24/gtx-1070-cuda-cudnn-caffe-on-ubuntu-14-04/
もしくはより詳細なこのサイト
http://robotics4society.com/2016/06/15/ubuntu1604-caffe/
の支持に従ってパッケージをダウンロード＆インストールする。
ダウンロードしたパッケージをCUDAのPATHに持ってきて、

```
tar -zxf cudnn-8.0-linux-x64-v5.0-ga.tgz
sudo cp lib64/libcudnn* /usr/local/cuda/lib64/
sudo cp include/cudnn.h /usr/local/cuda/include
```

でインストール完了。chainerをインストールすると、確かにcuDNNが利用できている。
「ionic2」まとめ連載（其の１・「ionic2」の概要を理解する）

# 「ionic2」の概要を理解する

こんにちは、mucunです。

今回から、「ionic2」まとめ連載と題しまして、
「ionic2」に関することをまとめていこうと思います。
これからアプリ開発を始めようと思っている方、必見です！
どうぞ御付き合い願います。

##「ionic2」とは、何ぞや？

<img width="800" src="https://qiita-image-store.s3.amazonaws.com/0/126499/40ce5730-25d6-e936-56d3-d2c7af79758f.png">
（画像引用元：http://digitalfractal.com/2016/05/evolution-ionic-cross-platform-mobile-application-developement/ ）

「ionic2」とは、携帯アプリ開発用のフレームワークです。
使うことによる恩恵は以下。
　① 無料のオープンソースである
　② シンプルで簡単な仕組みとなっている
　③ １つの実装で、「Android」や「iPhone」など、
　　 複数のプラットフォーム上で、アプリを動作することが出来る
　④ PCのブラウザ上（Google Chrome、Firefox等）で動作確認が出来る
　⑤ 意識しなくても、アプリ画面の見た目をキレイに仕上げてくれる

　　<img width="150" src="https://qiita-image-store.s3.amazonaws.com/0/126499/75939671-e597-8bb1-d6c3-76e1a09fec33.jpeg">　って感じですよね！！
（画像引用元：http://girlschannel.net/topics/238498/ ）

ちなみに、以下複数プラットフォームでの起動イメージです。
<img width="700" src="https://qiita-image-store.s3.amazonaws.com/0/126499/07f32242-a26a-c8ea-6d94-5dcce90a2e71.png">

##従来はどうだったのか？

従来は、「Android」と「iPhone」の両方で動くアプリを作成するとしたら、
一方でアプリ作成し、もう一方にコンバートする手間が必要でした。
なぜならば、それぞれ仕組みや開発条件が全然違うからです。
これにより、２倍近い工数がかかっていました。
（違いについては、このページが詳しいです：https://blog.codecamp.jp/differences_of_apps_development ）

また、従来は、アプリのテストをする時に、
「エミュレータ」という仮想スマートフォンをPC上に構築してテストをしたり、
実機を使ってテストをしたりしていました。
前者は、複雑なスマートフォンをPC上に再現する計算コストが高く、
動作が遅いのが難点でした。
後者は、動作は遅くないですが、細かい修正についても、
いちいち実機に載せて、アプリを起動して、触ってみて、、、と煩わしさがありました。

　<img width="150" src="https://qiita-image-store.s3.amazonaws.com/0/126499/798b3c7b-0d33-0271-1491-6377604f77f9.png">


この辺りの苦労を、「ionic2」は吸収してくれている訳です。

##見た目もキレイに作ってくれる「ionic2」

「ionic2」で作ったアプリは、見た目も非常にキレイです。
ちょうど、Twitterアプリのような見た目になります。
<img height="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/9f7bad51-e302-d171-eae9-750b141d8a43.jpeg">

##「ionic2」の『2』って？

ちなみに、「ionic2」は「ionic」の進化版で、
投稿時点では、Beta版がリリースされている状態です。
今から始める方は、「ionic2」で始めた方がメリットが多いと思います。

　　<img width="100" src="https://qiita-image-store.s3.amazonaws.com/0/126499/421c5baf-1aae-70f9-7653-132c67804182.png">　　<img width="100" src="https://qiita-image-store.s3.amazonaws.com/0/126499/f4eb3a24-7f0e-efaa-276d-a398cf33d563.png">

以上が、「ionic2」の大まかな説明となります。
要するに、「イケてるアプリ開発の仕組み」という訳です。
次回以降、少しずつその実態に踏み込んでいきたいと思います。

という訳で、今回の記事はここまでとなります。
読んで下さった方、ありがとうございました！orz...

　　　　　[👉【其の２・「ionic2」の大まかな構成を理解する】](http://qiita.com/mucunwuxian/items/04a9750e4f5ea2df738d)
Meteorのあんちょこ꒰｡･ω･`;꒱ アカウント管理

# 概要

- アカウント管理は、account-uiパッケージで実装することができる。

- [Users and Accounts @ Meteor Guide](https://guide.meteor.com/accounts.html)

# パッケージインストール

> meteor add accounts-ui
> meteor add accounts-password

# ソースコード

- ユーザ名でログインする。

```js:imports/accounts-config.js
import { Accounts } from 'meteor/accounts-base';

Accounts.ui.config({
  passwordSignupFields: 'USERNAME_ONLY',
});
```

```js:client/main.js
import '../imports/startup/accounts-config.js';
```

```html:client/main.html
  {{> loginButtons}}
```

# Database確認

```bash:console
meteor:PRIMARY> db.users.find()
{ 
  "_id" : "AKXiS8Wp88d44ZJS2", 
  "createdAt" : ISODate("2016-08-22T17:53:58.182Z"), 
  "services" : { 
    "password" : { "bcrypt" : "$2a$10$TItTHVAdvSzkCya6H/B3IeavZQm607OB.6NFXeyrmLYFh.FvUsVdu" }, 
    "resume" : { 
      "loginTokens" : [ { "when" : ISODate("2016-08-22T17:53:58.193Z"), "hashedToken" : "8YMw5S6L47DA0WqGF9fSEzSiVB+ub5qDfrC0gvESCiA=" } ] 
    } 
  }, 
  "username" : "hogehoge" 
}
meteor:PRIMARY> 

```

----
# BCrypt(Blowfish暗号)関連のエラー

- アカウント認証にBCrypt(Blowfish暗号)を使用時に表示されるエラー
-　pure-Javascriptで組み込んでいると、ネイティブより３倍遅いため、プロジェクトルートにてbcryptをインストールする様にという指示あり。

```bash:console
$ meteor
    :
W20160830-11:50:40.866(-4)? (STDERR) Note: you are using a pure-JavaScript implementation of bcrypt.
W20160830-11:50:40.868(-4)? (STDERR) While this implementation will work correctly, it is known to be
W20160830-11:50:40.868(-4)? (STDERR) approximately three times slower than the native implementation.
W20160830-11:50:40.868(-4)? (STDERR) In order to use the native implementation instead, run
W20160830-11:50:40.869(-4)? (STDERR)          
W20160830-11:50:40.869(-4)? (STDERR)   meteor npm install --save bcrypt
W20160830-11:50:40.869(-4)? (STDERR)          
W20160830-11:50:40.870(-4)? (STDERR) in the root directory of your application.

# 
$ meteor npm install --save bcrypt

```
bashで複数のコマンドを一つのコマンドとして扱う方法(複合コマンド)



bashで複数のコマンドの結果(標準出力、標準エラー出力)をまとめて取得したいことが多々あると思う。
思いつく限りの方法をまとめてみた。

## 課題

せっかくなので、実現したい課題として以下のものを作るということで、内容を進めていく。

* テキストファイルの先頭1行、末尾1行をパイプラインへ渡し、grepをかける。

## 別シェルを作成して実行

まず最初に愚直にシェルスクリプトを作成してしまうことが考えられるだろう。

```bash:head_and_tail.sh
input=${1}
head -n 1 ${input}
tail -n 1 ${input}
```

```bash
$ bash head_and_tail.sh input.txt | grep "PATTERN"
```

簡単に実現できるが、この程度のことでわざわざシェルスクリプトを作成していては切りがないだろう。

## 関数を作成して実行

次に思いつくのが関数を作ってしまう方法だろう。

```bash
function head_and_tail() {
  input=${1}
  head -n 1 ${input}
  tail -n 1 ${input}
}
head_and_tail input.txt | grep "PATTERN"
```

ファイルを作成するよりは、実行しているプロンプトで直接打つことができるので現実的だが、まだ冗長だし毎回書くのはめんどくさい。
＃ もしよく利用するならば、このままbashrcに書くのが一番だろう。

## 一度ファイルに書き出す。

head、tailそれぞれの結果を一度ファイルに格納してしまうのも一つの手だろうか。

```bash
head -n 1 input.txt > tmp
tail -n 1 input.txt >> tmp
cat tmp | grep "PATTERN"
```

簡単に実現できる手ではあるが、あまりやりたくはない。

## 複合コマンド

さぁ、今回の本命である複合コマンドを使ってみよう。
複合コマンドとひとくくりに言ってもたくさんあるが、今回利用するのは以下である。

* (list) : サブシェル実行

> (list)
> listはサブシェル内で実行されます(後述のコマンド実行環境の項を参照)。シェルの環境に影響を与えるような変数の代入や組み込みコマンドは、コマンドの終了後に影響を残しません。返却ステータスは list の終了ステータスです。

* { list; } : グループコマンド

> { list; }
> list が単に現在のシェル環境で実行されます。listの最後は改行文字かセミコロンでなければなりません。これは  グループコマンド(group  command)  と呼ばれます。返却ステータスはlistの終了ステータスです。メタ文字である ( や ) と違い、 { と } は予約語であり、予約語として認識される場所に現われる必要があることに注意してください。これらは単語分割の対象とならないため、 リスト との間が空白またはシェルのメタ文字で分かれている必要があります。

説明はいろいろ書いてあるが、結局のところは複数のコマンドを1つのコマンドとして使用することができるということである。
これを使って先の課題を実行してみよう。

```bash
( head -n 1 input.txt ; tail -n 1 input.txt ; ) | grep "PATTERN"
```

```bash
{ head -n 1 input.txt ; tail -n 1 input.txt ; } | grep "PATTERN"
```

こんな感じになる。
若干冗長ではあるが、1行でかけるのはやはり魅力的ではないだろうか。
ちなみに、複数行に分けて記述してもかまわない。
こちらの方が書きやすいかも知れない。

```bash
(
head -n 1 input.txt
tail -n 1 input.txt
) | grep "PATTERN"
```

```bash
{
head -n 1 input.txt
tail -n 1 input.txt
} | grep "PATTERN"
```

## (list)と{ list; }の違い

さて、(list)と{ list; }の何が違うの？と思っただろう。
この2つの書き方の大きな違いは、シェル環境の違いである。

(list)：サブシェル実行
　現在実行しているシェルとは別の環境によって実行される。
 
 { list; }：同一シェル環境での実行
 　現在実行しているシェルと同一の環境で実行される。

具体的にどんな事かというと、変数への代入を取り上げるとわかりやすい。

```bash
var="value1"
echo $var # value1
(var="value2"; echo $var ) # value2 (サブシェル内の変数varを変更している)
echo $var # value1 # サブシェル内の変数とは別もののため、変更されずに残っている。
{ var="value3"; echo $var; } # value3 同一のシェル環境のため、変更が反映される。
echo $var # value3
```

また、サブシェルはちゃんと別のプロセスが立ち上がっている。
サブシェルのPIDを確認する方法は以下である。
＃以下の例だと、(list)のものだけ別のPIDが返ってくる。
＃PIDについて取り上げるのは、かなり面倒なので、ここでは深く触れない。

```bash
echo $BASHPID
( echo $BASHPID )
{ echo $BASHPID; }
```

## その他

複合コマンドを使いたいがために、わざわざhead、tailコマンドを使っていたが、
awkやsedを使えばもっと簡単にできたりするのは当たり前。。。
sedが一番単純ですかねｗ

### awkコマンド
```bash
awk '{if(NR==1){print $0}}END{print $0}' input.txt | grep "PATTERN"
```

### sedコマンド
```bash
sed -n '1p;$p' input.txt | grep "PATTERN"
```
[Swift] iOS10/Swift3でTwitter風のスプラッシュ画面のアニメーションを書き直してみる

# はじめに
iOS10/Swift3で従来のアニメーションの書き方が変わるようなので、
練習がてらに、Twitter風のスプラッシュ画面のアニメーションを書き直してみます。

ちなみに、開発環境は「XCode8.0 Beta5」です。

# 実践
## 1. プロトコルを作る
単純に変換すると、下記のようなイメージになります。
旧来のアニメーションへの変換は、XCode8がリファクタしてくれます。

```:TwitterLikeAnimation.swift
protocol TwitterLikeAnimation {}

extension TwitterLikeAnimation where Self: UIImageView {

    func startSplashAnimation() {

        UIView.animate(withDuration: 0.3,
                       delay: 1.0,
                       options: .curveEaseOut,
                       animations: { [weak self] () in
                        self?.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
            }, completion: nil)

        UIView.animate(withDuration: 0.2,
                       delay: 1.3,
                       options: .curveEaseOut,
                       animations: { [weak self]() in
                        self?.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
                        self?.alpha = 0
            }, completion: { [weak self] (Bool) in
                self?.removeFromSuperview()
            })
    }
}
```
これではつまらないので、iOS10から登場した
「UIViewPropertyAnimator」、「UIViewAnimating」、「UIViewImplicitlyAnimating」などを
利用して書いてみます。

```:TwitterLikeAnimation.swift
extension TwitterLikeAnimation where Self: UIImageView {

    func startSplashAnimation() {

        let timing = UICubicTimingParameters(animationCurve: .easeOut)
        let animator = UIViewPropertyAnimator(duration: 0.7, timingParameters: timing)

        animator.addAnimations{
            self.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
        }

        animator.addAnimations({
            self.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
            self.alpha = 0
            }, delayFactor: 0.8)

        animator.addCompletion { (position) in
            self.removeFromSuperview()
        }
        animator.startAnimation()
    }
}
```

## 2. UIImageViewに実装する

```:TwitterLikeImageView.swift
class TwitterLikeImageView: UIImageView, TwitterLikeAnimation {}
```

## 3. StoryBoardに配置する
Storyboardで設置したUIImageViewのカスタムクラスをTwitterLikeImageViewに変更する

<img width="682" alt="スクリーンショット 2016-08-23 0.02.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/71694/13f997a2-242e-872a-bc1b-813e39316d7a.png">

## 4. UIViewControllerから読み出す

```:ViewController.swift
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var baseView: UIView!
    @IBOutlet weak var logoImageView: TwitterLikeImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        baseView.backgroundColor = UIColor.white
    }

    override func viewDidAppear(_ animated: Bool) {
        logoImageView.startSplashAnimation()
    }
}
```

# まとめ
慣れていないためか、旧来のアニメーションのほうが使いやすい気がしました。
動的なアニメーションの追加や、一時停止等もできるようなので、挑戦してみたいです。

誤り等ございましたら、ご指摘頂けると幸いです。

# 参考
http://qiita.com/KEN-chan/items/f80c17c583ac44d67a58
http://qiita.com/osamu1203/items/a7c78666b18eb499c94b
SeaPig 開発中の困ったメモ

![](https://raw.githubusercontent.com/yasumichi/seapig/master/seapig.png) [SeaPig](https://github.com/yasumichi/seapig) is converter from markdown to html with marked.js and highlight.js.

- [SeaPig v0.6.0](https://github.com/yasumichi/seapig/tree/v0.6.0)で引数としてファイルを指定することで起動時にファイルを開くことができるようになりました。(複数指定した場合、有効なファイルの数だけウィンドウが立ち上がります。あまり推奨しませんが。将来的にバッチモードみたいなのを導入しようと考えています。)

SeaPig の使い方を日本語で読みたい場合は、[Electron でマークダウンからHTMLへの変換ソフトを自作してみた](http://qiita.com/yasumichi/items/b3acec72d740fba4b7f7)を参照してください。

## 筆者の環境

- [VineSeed](https://vinelinux.org/vineseed.html) ([Vine Linux](https://vinelinux.org/) 開発版) 64bit
- [nodebrew](https://github.com/hokaccha/nodebrew) use LTS

## [Commander.js](https://github.com/tj/commander.js/) を使おうとしたが挫折

オプションパーサー系で比較的、使い方が分かりやすそうだった Commander.js を当初、導入して使用しておりました。

Electron でアプリケーションを起動していた際は、これでオプションの追加も楽になるな、と喜んでいたのですが、リリース直前になって、パッケージ化した際に引数なしでまともに起動しないという事象に遭遇しました。

原因は、コマンドの実際の引数の開始位置が変わってしまうこと。分かりにくいので具体的に書きます。

### Electron で起動する場合
```
$ electron . 引数...
```

### パッケージで起動する場合
```
$ seapig 引数
```

### 暫定対処
検索してもこれだという解決策を見つけられず、引数の解釈は、独自に行うことにしました。

Electron で起動されているかどうかを調べて、process.argv から、slice で渡す位置を変更し、受け取った配列を foreach() で回して引数を検査しています。

余談ですが、その後、[Moeditor](https://github.com/Moeditor/Moeditor) では、process.argv.filter() でコールバック関数に処理させていることが分かりました。個人的には、面白い方法だと思ったのですが、結構、使われてたりするんでしょうか。

## デベロッパーツールの操作の違い

デベロッパーツールは、以下のメソッドで操作可能であるが、webview では、toggleDevTool が用意されていない。(大して困らないけど)

- contents.openDevTools()
- contents.toggleDevTools()
- contents.closeDevTools()

## テストを導入してみようとして困った

v0.7.0リリースまでにテストを少しでも導入しようと思いました。

当初、jasmine で構築してみようと思いましたが、ES2015 とかに素だと対応してないみたいで断念。

以下の記事を参考に mocha + power-assert + babel-register + babel-preset-power-assert + babel-preset-es2015 でテスト環境を構築しました。

- [ES6 コードをテストする – アカベコマイリ](http://akabeko.me/blog/2015/05/es6-unit-test/)
- [espower-babel から babel-preset-power-assert への移行 – アカベコマイリ](http://akabeko.me/blog/2016/04/espower-babel-to-babel-preset-power-assert/)

## 一応の mermaid サポート

一応の mermaid サポートを追加しました。ですが、プレビューを更新する度に svg に付与する id が増加していきます。同じセッションで同じ id で mermaidAPI.render 呼び出すと svg が壊れるので。リセットする方法がないか、いずれ調べたいと思います。
講義まとめ：自然言語処理のための深層学習（CS224d）

CS224d(自然言語処理のための深層学習)はスタンフォード大のRichard Socherが2015年から教えている講義で、[動画](https://www.youtube.com/playlist?list=PLXqezZ11Vm4pzLnhV3bZflqaNNBm9uFUb)や[スライド](http://cs224d.stanford.edu/syllabus.html)などの講義資料と演習問題がウェブ上で無料で公開されています。

[CS224d: Deep Learning for Natural Language Processing]
(http://cs224d.stanford.edu/)

会社の勉強会で週1回半年程度かけて講義動画と演習を終えたため、勉強したことを簡単にまとめてみたいと思います。

# なぜ今なのか？
深層学習（Deep Learning）は2000年代後半のRBMやauto-encoderなどの教師なし学習から流行が始まりましたが、それらを教師あり学習の事前学習に使うアプローチは徐々に衰退し、2010年代前半には画像認識のための畳み込みネットワークがImageNetコンテストのおかげで爆発的に有名になりました。詳しくありませんが音声認識の分野でも既存の複雑なシステムを深層学習が置き換える動きがあったようです。

一方で自然言語処理は離散的な記号やテキストデータを扱うため線形モデルなどのベースラインが強く、言語モデルのためのRNNもN-gramと組み合わせてやっと精度が出るようになったのが[RNNLM(Mikolov 2012)](http://rnnlm.org/)でした。その後のLSTM系の改善や文字レベル言語モデルの発展などを経て、2016年のGoogle Brainの研究ではN-gramと組み合わせることなく最高精度を達成できるようになっています。[Exploring the Limits of Language Modeling (Jozefowicz 2016)](https://arxiv.org/abs/1602.02410)

現在も大規模なデータで学習するには訓練時間がかかりすぎるといった問題があるものの、応用面では機械翻訳やチャットボットの実用化の兆しが見えてきて、ツール面ではTensorFlowなどのフレームワークが充実してくることで、自然言語処理にもようやく深層学習が普及してくるなと確信が持てるようになりました。私が働く会社でもニューラルネットワークによる予測変換を搭載したキーボードアプリをリリースしていて、エンジニアが深層学習を使ってアプリを作れる時代が来ていると思います。[スマホの文字入力アプリ「SwiftKey」、ニューラルネットワークで恐ろしいほど賢くなる](http://www.gizmodo.jp/2015/10/swiftkey.html)

前置きが長くなりましたがそんなわけでスタンフォード大の講義資料を使って勉強したので目次を紹介したいと思います。

# 講義内容
- 自然言語処理と深層学習への入門
- 単語のベクトル表現：word2vecとGloVe
- 単語のベクトル表現：言語モデル、ソフトマックス、単層ネットワーク
- ニューラルネットワークと誤差逆伝播法：固有表現抽出
- ニューラルネットワークと誤差逆伝播法：さらなる詳細
- 実用的なアドバイス：勾配チェック、過学習、正則化、活性化関数
- TensorFlow入門
- リカレントニューラルネットワーク：言語モデル
- GRUとLSTM：機械翻訳
- リカーシブニューラルネットワーク：構文解析
- リカーシブニューラルネットワーク：評判分析
- 畳み込みニューラルネットワーク
- ゲスト講義：音声認識（Andrew Maas）
- ゲスト講義：機械翻訳（Thang Luong）
- ゲスト講義：Seq2Seqと大規模学習（Quoc Le）
- 未来の深層学習：Dynamic Memory Networks

なお勉強したのは2015年版でしたが、2016年からはTensorFlowの講義が入ったりしているみたいです。

# 実装してみた
この講義で学んだことの理解を確認するために、word2vec(Mikolov 2013)と NPLM(Bengio 2003)をPython 3.4とnumpyで実装し、Githubで公開しました。

[DL4NLP: Deep Learning for Natural Language Processing](https://github.com/yohokuno/dl4nlp)

勉強目的のためTensorFlowやChainerなどのフレームワークは使わずにSGDなどのアルゴリズムを実装したためパフォーマンスは最適ではありませんが、コードは短くモジュール化されているので勉強用にコードを読むのにはちょういいかもしれません。個人的に最初のうちは自動微分に頼らず自分で紙とペンを使って微分してみる経験は必要なのではないかと思いました。
Yahoo注文APIへのリクエストパラメータの書き方がわからない

Yahoo APIの注文検索APIへのリクエストパラメータの書き方がわからず困窮しております。
**リクエストURL**
`https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderList`

下記のソースの「$params」でパラメータを設定しています。
他にも、多重配列やXMLも試してみましたがいずれもうまくいきません。

```
$params = array(
	'/Req/SellerId'=>'snbx-xxxxxxx',
	'/Req/Search/Field'=>'OrderId',
	'/Req/Search/Condition/OrderTimeFrom'=>$OrderTimeFrom,
	);

$headers = array(
    'Content-Type: application/x-www-form-urlencoded',
	'Authorization: Bearer '.$access_token,
    );

$options = array(
    'http'=>array(
        'method'=>'POST',
        'content'=>http_build_query( $params ),
        'header'=>implode( "\r\n", $headers ),
        )
    );
$stream = stream_context_create( $options );

$order_result = file_get_contents( ORDERLIST_URL, FALSE, $stream );
print_r( array($order_result, $options));
```

上記のコードを実行すると「HTTP/1.0 400 Bad Request」が戻ります。
yahooのエラーコード一覧を見る限りでは「リクエストパラメータエラー」とあるのですが
正しい書き方を見つけられず何日も経過してしまっている状況です。
http://developer.yahoo.co.jp/webapi/shopping/orderList.html


先ほどのコードを実行した時の結果は下記のとおりです。
```
Warning: file_get_contents(https://test.circus.shopping.yahooapis.jp/ShoppingWebService/V1/orderList): failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request
 in /xxx.php on line 107
Array
(
    [0] =>
    [1] => Array
        (
            [http] => Array
                (
                    [method] => POST
                    [content] => %2FReq%2FSellerId=snbx-xxxxxxx&%2FReq%2FSearch%2FField=OrderId&%2FReq%2FSearch%2FCondition%2FOrderTimeFrom=20160822111650
                    [header] => Content-Type: application/x-www-form-urlencoded
Authorization: Bearer XEYz3e・・・
                )
        )
)
```

ご教授お願い致します。