OmniAICreator/Qiita-1.07M huggingface dataset:
changefinderとはなにかを数式なしで解説

# この記事の立ち位置
- アイスタイル Advent Calendar 2016の4日目の記事です
- この記事は時系列データの分析、統計解析の事前知識がない方向けに、「changefinderとは何か？」を解説する記事です。
- 時系列データの基礎、詳細を知りたいという方は、[沖本本](https://www.amazon.co.jp/%E7%B5%8C%E6%B8%88%E3%83%BB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%8A%E3%83%B3%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E8%A8%88%E9%87%8F%E6%99%82%E7%B3%BB%E5%88%97%E5%88%86%E6%9E%90-%E7%B5%B1%E8%A8%88%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%83%BC-%E6%B2%96%E6%9C%AC-%E7%AB%9C%E7%BE%A9/dp/4254127928)などで

# changefinder
## 概要
changefiderとは、変化点を検出するのに用いられるアルゴリスムの名前です。
変化点とは、時間とともに変化するデータ（PVや温度など）の性質が変わる点です。
外れ値と何が違うの？となりますが、外れ値は一瞬だけ異常値が出た後は、元の数値に戻ります。
変化点は、その外れ値がデータの変化の点となり、元の数値に戻らずにずっーと続くイメージです。
<img width="474" alt="スクリーンショット 2016-12-04 9.48.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/105197/4b81e516-1f81-a640-47a4-497cd4664d10.png">

## モデル
スコアを算出するまでの流れは以下のようになります
<img width="592" alt="スクリーンショット 2016-12-04 10.01.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/105197/e326e9a3-9137-2e80-b176-6558ecb796e0.png">
平滑化とは、ざっくり言いますと **「本当に変化にしている部分以外を取り除こうぜ!」**　というノリで行われる処理です。スコアを求めるまでの、ざっくりとした流れは理解していただいたと思うので、各学習の部分を説明をします。

## 第1段階の学習について
（※ARMAモデルを使う選択肢もありますが、今回はARモデルを用いた場合の説明をします）

第1段階の「外れ値スコアを求める」で、使われているARモデルとは、時点Bでの値を算出する式を立てるときに、その前の時点Aの値に、何かをかけたり、足したりすることで、時点Bの値を算出できるようにしたモデルです。

なんでこんなことするかというと、時点Bの値の算出に、時点Aを用いているのだから、**何かしらの相関が出そうでモデル化できそうだよね！**って考えに基づいたモデルだからです。
このモデルで出した値と、実際のスコアがどれくらい異なるかを調べ、外れ値スコアを算出します。

## 第2段階の学習について
SDARモデルを用いて、第2段階の学習が行われます。このアルゴリズムは、名前にARという名前が入っている通り、先ほどのARモデルの改良版です。また、SDARモデルは**忘却型学習アルゴリズム**とも呼ばれています。

SDARモデルは、**過去の統計量ほど重みを減らす、忘却パラメーター**を採用しています。
このため、定常なデータにしか対応できないARモデルとは違い、非定常なデータにも対応できるようになっています。定常とは、過去の平均、自己共分散が、時間を通して、一定の状態であることを言います。
（※ここでいう定常とは、弱定常のことです）

そうして、SDARモデルを用いて算出した外れ値スコアを、また平滑化することで、変化点を測るスコアを算出します。

## 参考
1. [SDARアルゴリズムと統計的手法による時系列からの外れ値と変化点の検出](http://sssslide.com/speakerdeck.com/matsumoto_r/sdararugorizumutotong-ji-de-shou-fa-niyorushi-xi-lie-karafalsewai-rezhi-tobian-hua-dian-falsejian-chu)
2. [経済・ファイナンスデータの計量時系列分析 (統計ライブラリー) ](www.amazon.co.jp/dp/4254127928)
3. [changefinderライブラリを試してみた](http://qiita.com/anntoque/items/8f230744760dd4cee938)
Web APIを追ってみよう

[Classi Advent Calender](http://qiita.com/advent-calendar/2016/classi) 4日目です。

ここ数年、Web APIが進歩していてwebだけでも様々な情報が取れるようになっています(iOSを除いて)
その中から使えそうなweb APIを選んでみました。

ここに一覧があるので見てみると楽しいです。
https://developer.mozilla.org/ja/docs/WebAPI

## Battery Status API
バッテリーの状態を調べることができます。
バッテリー残量はもちろん充電中か、充電している時間なんかもとれます。

https://developer.mozilla.org/ja/docs/WebAPI/Battery_Status

## Screen Orientation API
端末の傾きを検出することができます。
もともと縦、横などは検出できましたが、betaとgammaも検出できるようです。

https://developer.mozilla.org/ja/docs/Web/API/Detecting_device_orientation

## Vibration API

端末のバイブレーションを制御できます。
通知としての目的ではなくゲームなどのフィードバック向けです。

https://developer.mozilla.org/ja/docs/Web/Guide/API/Vibration

## Bluetooth API

端末のBluetoothを制御できます。
機器を接続したり、解除もできるみたいです。

https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API

## まとめ

というわけで個人的に見たことなかったかつ使えそうなAPIをざっくりまとめてみました。
MDNのWeb APIをみると開発段階のものがあったりChrome, Firefoxのみの対応のAPIもあります。
ここ数ヶ月でも新しく増えてるAPIもあるようなので今後も注目してくと良いんじゃないかと思います。

そのうちアプリと同じくらいの権限が得られればJavascriptが世界統一してくれるんじゃないかと期待してます。
PHP4時代から来ました。

初投稿です。

10年前、PHP4や5の環境で開発をしていたのですが、
しばらく開発から離れていて、2016年再び開発者になりました。

タイトルは大げさですが、PHP5,7を使いこなせていないと言う意味で
僕はPHP4+αくらいの知識しか持っていないと思います。

これから、無知なりに考えている事を書いていきます。
Google Keepで端末間のメモを共有しよう

# Google Keepで端末間のメモを共有しよう

### Google Keepとは
* [Google Keep](https://keep.google.com/)
* 名前の通りGoogleの提供するメモサービス・アプリ
* PCのブラウザ、スマートフォンのアプリから使用することが出来る
* Googleのアカウントが一致していれば、自動的に共有してくれるよ
* 逆に言えばアカウントが別なら共有されずに使える
* 「共同編集者」をメモに追加すれば、メモを他の人とも共有できるよ

### 基本的な使い方
* 初めて使うときにはチュートリアルが表示される
* 基本はタイトルを決めてメモを書くだけ、シンプル
* 機能でわからないことがあればヘルプを見れば大体解決するよ

### 応用的な使い方
* ラベルを付けてメモをジャンル分けする
  * メモの色をジャンルの大枠、ラベルを詳細にしておくと視覚的に分かりやすい
  * とは言えメモなので、とりあえずラベルだけで必要なメモだけ色付けしてもいい

<!-- -->

- メモをアーカイブ化して残しておく
  - アーカイブ化するとトップには表示されなくなる
  - その代わり検索すれば出て来るし、アーカイブのみの確認も出来る
  - 本当に繰り返し必要ないメモなら削除、それ以外はアーカイブ化すると良いよ
  - 削除の判断が面倒ならどんどんアーカイブ化して、たまに整理するくらいでも

<!-- -->

* リスト作成でTODOリストとして使う
  * チェックボックスが付いて、チェックすると取り消し線がつくので分かりやすい
  * メモの固定機能と合わせて使うと、常に先頭に来るので使いやすいよ

<!-- -->

- リマインダーを設定してちょっと高機能なメモ、TODOリストにする
  - 時刻や日付を指定したリマインダーが使える
  - あまり複雑な条件は付けられないけど、繰り返しも設定できるよ
  - 場所なんかも設定できるので、どこに行ったら何をするとかも書ける

<!-- -->

* 画像を添付してミニブログ風に使う
  * 後から文章とかの味付けをして、自分のブログに載せるとかも出来るよ
  * ちょっと違う使い方だけど、画像にコメントつけて保存しておく的な使い方も？

<!-- -->

- 共同編集者とメモやTODOリストの共有
  - まだ使ったこと無いけど、TODOリストの共有は便利かも
  - メモ毎に設定できるのはミスを誘発しなくて良い

### メモやTODOリストを共有化する利点は？
* 単純に便利、端末ごとだと管理が面倒になってメモ自体しなくなったりする
* どの端末を使っていてもアカウントが一致すれば閲覧だけじゃなくて編集もできる
* 検索ができるので紙のメモと違って書いたことそのものを忘れても検索するだけでいい

### 軽量マークアップ言語によるメモとの使い分け
* 本当は一緒にしたいけど今はできない（Google Keepが軽量マークアップ言語に対応してない）
* 整理はそこそこに、とにかくアイデアを残したい時やTODOリストはGoogle Keepで
* Google Keepのアイデアを整理する時やローカルのみに残したいメモは軽量マークアップ言語で
* 業務で使う時は基本軽量マークアップ言語で扱うのが良い
  * 流石に共有化出来るようなサービスに業務の事を書くのは微妙

### Google Keepのもっと良くなって欲しいところ
* 軽量マークアップ言語への対応
  * いっそGoogle独自の軽量マークアップ言語作ってくれても良い

<!-- -->

- TODOリストの項目ひとつずつのリマインダー対応
  - ちょっと複雑になりすぎる気もするので対応しなくてもいい

<!-- -->

* リマインダーの繰り返し設定の充実
  * 月末とか週末、平日毎日みたいなのが設定できると嬉しい
  * 祝日対応もあるといいけど、優先度はどうしても下がるよね

### あとがき
* メモはデジタルで残すに限る
  * ただし、あんまり依存すると紙で取るメモが面倒で仕方なくなる

<!-- -->

- メモに限らず多重管理すると情報が腐る
  - どれも最新じゃなくなって自分の頭だけが最新になる
  - 使い分けするときは明確に立ち位置を決めないとすぐ陳腐化する

<!-- -->

* Googleは平気でこういうサービスを無料で提供してくれるので強い
  * 名前すら知られずになくなっていったサービスも多数あるけどね
  * Google依存が強くなってくるとOSの縛りがなくなってくるのも面白い
littleBits温度センサーで摂氏と華氏を学べることと使用上の注意点をひとつ

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/ce389595-f1d1-8ae3-0674-83d591adbcfe.png)

先日、littleBits温度センサーの使用に際して、摂氏と華氏の切り替えツマミがあるので、その流れで摂氏と華氏の違い（変換式）を調べていたのですが、結構違いがあるんですね。

<a href="https://ja.wikipedia.org/wiki/%E8%8F%AF%E6%B0%8F" target="_blank">華氏 - Wikipedia</a>

こちらにある早見表を見てみると

華氏 32.0 → 摂氏 0.0
華氏 60.0 → 摂氏 15.6
華氏 68.0 → 摂氏 20.0

摂氏0度華氏32度を基準で見てみても、摂氏15.6度をみてみると単純に華氏が32足したものではないわけです。

いままで摂氏で温度を測るネタをただただやっていたので、このとおりに華氏と摂氏がツマミによってちゃんと切り替わるかやってみました。

# 早速実験

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/10307441-a295-241e-347c-43be78855bea.png)

ただいまの室温は摂氏20度。華氏にツマミを切り替えて変換してみます。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/c7290fc6-d623-1edd-86b2-9c09953d7fcd.png)

おお。上記の早見表通りですね。すごい。

ちなみに**手元でセンサー自体を摂氏30度に温める荒業で温度変化させましたが、華氏86度になりました。** これはちゃんと回路上で変換式を含めた出力を行っていますね！

ということで、ツマミを切り替えるだけで簡単に摂氏華氏が視覚的に分かるので、お子さんに世界では温度の計測方法に華氏というものもあって・・・と簡単に説明するときに興味を引くネタとして使えそうです。

しかし、littleBitsのモジュールの作りからみればグローバル展開がデフォルトの製品ですので、よくよく考えると摂氏華氏両方が正確に対応していなければ、世界中で使いにくいものになってしまうので、このあたりは開発初期段階から意識されているものなのかもしれませんね。

# 使用上の注意点をひとつ「熱の出るものからは離そう」

さて、さきほど「手元でセンサー自体を摂氏30度に温める荒業を行った」と言いましたが、つまみの横にある温度チップを指で温めました。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/ce389595-f1d1-8ae3-0674-83d591adbcfe.png)

つまみの横ですね。このチップは指で触れるとすぐ反応が変わります。ちょうど温度計を直接手で温めたような反応に似ています。ですので、littleBitsの板部分はコの字に抜いた加工が施されて熱が伝わりにくいように配慮されています。

さて、使用上の注意点をひとつですが、このデリケートな温度チップで、電源モジュールのように場合によってほんのり熱を持つモジュールで熱の影響が出ないために、以下のようにワイヤーモジュールを使って隣接しないようにする手法が推奨されています。

![image](https://qiita-image-store.s3.amazonaws.com/0/56170/8a9647d0-e229-1632-a946-0cd0f5fdf1f8.png)

このようなつなぎ方です。モジュール同士での熱もそうですが、なるべく正確に計測したいときに測りたいもの以外の熱源から避けるというときにも使えると思います。

また、電子工作での温度センサーを使ったでの実装を調べてみたときも、測りたいもの以外に熱が出てしまってうまく計測できない問題はいろいろな解決方法があるので、センサーの性質や設置の仕方など参考にすると良いかもしれません。

# 参考文献

littleBits温度センサーそのものではないですが、調べる上で出会った参考文献、面白かったです。

* <a href="http://www.sii-ic.com/jp/semicon/products/sensor/temperature-sensor-ic/intro/" target="_blank">温度センサICのご紹介 | エスアイアイ・セミコンダクタ（セイコーインスツルグループ）</a>
* <a href="http://www.anritsu-meter.co.jp/tec/measure/measure_4.htm" target="_blank">正しい温度計測4(温度測定時の現象・注意点)</a>
* <a href="http://www.keyence.co.jp/keisokuki/special/recoder/labo/thermometry/base.jsp" target="_blank">測定部の基礎｜測定の改善｜温度計測｜温度計測・ひずみ計測の改善と効率化を学ぶサイト「計測器ラボ」│キーエンス</a>

こうみると温度センサーと言っても色々あり、littleBits温度センサーを作る上でも、温度センサー自体の選定や、あの小さいモジュールに華氏摂氏の変換も含める設計、作るにあたっての費用感など色々背景を想像でき、littleBitsのまた違った一面が垣間見えました。
PostCSSのプラグインを作ってみる

3日目では、PostCSSのASTを簡単に、効率よく操作するためのAPIをいくつか紹介しました。今日は、実際にPostCSSのプラグインを作り切るところまで説明します。

## 作るプラグイン

今回は、PostCSSのプラグインの例として、`overflow-wrap` プロパティが使われたとき、フォールバックとして `word-wrap` プロパティを追加するためのプラグインを考えます。

```css
a {
  overflow-wrap: break-word;
}
```

上記のようなCSSを、下記のように変換します。

```css
a {
  word-wrap: break-word;
  overflow-wrap: break-word;
}
```

## PostCSSプラグインの開発ガイドライン

PostCSSのプラグインを開発するためのガイドラインがあるので、そこからいくつか紹介します。

https://github.com/postcss/postcss/blob/master/docs/guidelines/plugin.md

### パッケージ名に `postcss-` プリフィックスを付ける

名前を明確にするために `postcss-` プリフィックスをパッケージに付けたほうが良いです。（e.g. `postcss-mixins`,  `postcss-simple-vars`）ただし、Autoprefixerやstylelintのようにそれ自体がPostCSSのプラグインとしてだけではなく、独立したツールの場合は必須ではありません。

### 一つのことを上手くやる

[Unix philosophy](https://en.wikipedia.org/wiki/Unix_philosophy) の1つですね。

### `postcss-plugin`キーワードを`package.json`に書きましょう

npmパッケージとして作られる場合は、`package.json`に`postcss-plugin`キーワードを指定することで、PostCSSエコシステムのフィードバックを受けやすくなります。npmパッケージとして公開しない場合は必須ではありません。

### 可能な限り非同期なメソッドを使いましょう

PostCSSのプラグインは順に読み込まれるため、プラグイン内で同期的なメソッドがあると処理がブロックされます。例えば、`fs.writeFileSync()` ではなく、`fs.writeFile()` を使うようにしましょう、ということです。

### 他

- プラグインのドキュメントは英語で書きましょう
- 入力と出力の例を書きましょう
- CHANGELOGをメンテナンスしましょう
- etc...


## PostCSSプラグインの実装

それでは、`overflow-wrap` プロパティをフォールバックするPostCSSを作っていきましょう。パッケージ名を「`postcsss-overflow-wrap`」とします。

プラグインを作るときは、`postcss.plugin(name, initializer)` を `module.exports` します。`postcss.plugin()` はプラグイン名とプラグインの関数（ASTを受け取って変換し、ASTを返す関数）を引数にとり、プラグインを返します。

```js
var postcss = require('postcss')

module.exports = postcss.plugin('postcss-overflow-wrap', function () {
  return function (root) {
    return root
  }
})
```

そして、`walkDecls()`でプロパティを探索し、`overflow-wrap`プロパティを見つけたら、その直前に`word-wrap`プロパティを挿入します。

```js
var postcss = require('postcss')

module.exports = postcss.plugin('postcss-overflow-wrap', function () {
  return function (root) {
  
  	// overflow-wrapプロパティを探索し、
  	// 発見したら直前にword-wrapプロパティを挿入する
    root.walkDecls(function (decl) {
      if (decl.prop === 'overflow-wrap') {
        decl.cloneBefore(decl.clone({ prop: 'word-wrap' }))
      }
    })

    return root
  }
})
```

これで`postcss-overflow-wrap`は完成です。簡単ですね！

---

今日までで、PostCSSの仕組みとPostCSSのプラグインとはどういうものなのか、ということを理解していただけたのではと思います。明日からはPostCSSのプラグインとして有名なもの、便利なものを紹介していこうと思います。
Papertrail Addonが意外に便利というお話

[Papertrail](https://elements.heroku.com/addons/papertrail) Addonのログ保存・検索機能は結構前から知っていたんですが、最近分かったのは、検索条件を保存しておくと、マッチしたら通知してくれる機能もあります。これは意外に便利！！！

## 使い方
- 自分の app に Papertrail Addonを追加する
- 検索・通知したいキーワードを入力してから、「Save Search」ボタンをクリックする
  ![Screen Shot 2016-12-04 at 09.28.02.png](https://qiita-image-store.s3.amazonaws.com/0/4777/578be35b-442c-3150-71e3-6a37704b6293.png)

-   ![Screen Shot 2016-12-04 at 09.30.59.png](https://qiita-image-store.s3.amazonaws.com/0/4777/137ae628-bdef-40f5-5e4a-ebda3956eb61.png)

- Editクリックして編集画面に行くと、アラートを作成できます
  ![Screen Shot 2016-12-04 at 09.47.19.png](https://qiita-image-store.s3.amazonaws.com/0/4777/68f5f220-3846-d3f5-0135-0e2cf444d2c2.png)

- Slackを選択して、Webhook URL を入力しておけば、下記のように通知してくれます。
  ![Screen Shot 2016-12-04 at 09.41.02.png](https://qiita-image-store.s3.amazonaws.com/0/4777/49626396-9e5c-b9bd-5b0e-e6d4773872b7.png)

**注意：リアルタイムではない、最短は１分単位** 

## 補足
- 検索条件も、正規表現や除外など、意外にいろいろ出来ます。 [search-syntax](http://help.papertrailapp.com/kb/how-it-works/search-syntax/)
Bash on Ubuntu on Windowsを全部消して再インストールするコマンド

たいして使ってなかったけれどパスワードを忘れたので。

コマンドプロンプトから

```
lxrun /uninstall /full /y
```
で完全にアンインストール。

```
lxrun /install
```
で再インストール開始(ユーザーとパスワード設定あり)
C# HTTPクライアントまとめ

| クラス | 名前空間 | アセンブリ | 説明 |
|----|----|----|----|
| WebRequest | System.Net | System.dll | 抽象クラス。CreateメソッドでURIに応じてHttpWebRequestやFtpWebRequestを返す |
| HttpWebRequest | System.Net | System.dll | WebRequestを継承したクラス |
| WebClient | System.Net | System.dll | HttpWebRequestを簡単に使えるようにしたラッパー | 
| HttpClient | System.Net.Http | System.Net.Http.dll | .NET 4.5から。async/await対応 | 
| RestClient<br>RestRequest | RestSharp | RestSharp.dll | サードパーティ製。内部でHttpWebRequestを使っている。JSON, XMLのシリアライズ・デシリアライズ機能を備えている | 

`HttpClient`はリクエストの度にインスタンス生成・破棄をしてはいけない。メンバーに持って使いまわすことが推奨されている。インスタンス生成・破棄をするとその度にTCPコネクションが張られ、パフォーマンスを低下させる（[開発者を苦しめる.NETのHttpClientのバグと紛らわしいドキュメント](https://www.infoq.com/jp/news/2016/09/HttpClient)）。

しかしそれって`WebClient`や`HttpWebReqeust`では大丈夫なんだろうか？

→`WebClient`でこのようなコードを書いて`tcpdump -n port 80`で見てみたところ、大丈夫だった。
ちゃんとTCPコネクションが使いまわされていた。

```WebClient.cs
            using (WebClient client = new WebClient())
            {
                client.DownloadDataCompleted += (_, args) =>
                {
                    var headers = client.ResponseHeaders;
                    string s = "";
                    for (int i = 0; i < headers.Count; ++i)
                    {
                        string header = headers.GetKey(i);
                        foreach (string value in headers.GetValues(i))
                        {
                            s += string.Format("{0}: {1}\r\n", header, value);
                        }
                    }
                    txtHeaders.Text = s;
                    var bytes = args.Result;
                    var html = Encoding.UTF8.GetString(bytes);
                    txtResponse.Text = html;
                };
                client.DownloadDataAsync(new Uri(url));
            }
```
GitHub のスターされた日付を取得したい

GitHub のスターがつけられた日付を取得したい場合には Accept ヘッダーが必要。

```bash
# これでは取得できない
$ curl https://api.github.com/repos/ma2gedev/power_assert_ex/stargazers

# こうすると starred_at で取得できるようになる
$ curl -H 'Accept: application/vnd.github.v3.star+json' https://api.github.com/repos/ma2gedev/power_assert_ex/stargazers
```

[公式](https://developer.github.com/v3/activity/starring/#list-stargazers)にレスポンス結果もあるので、そっち見た方が早いです。


## Octokit を使ってリポジトリにつけられた星を取得する

ruby の GitHub API クライアントである Octokit を使って日付つきのスターを獲得する方法をメモしておく。

```bash
$ bundle init
$ echo "gem 'octokit'" >> Gemfile
$ bundle install --path vendor/bundle
$ bundle console
irb(main):001:0> stargazers = Octokit.stargazers 'ma2gedev/power_assert_ex', accept: 'application/vnd.github.v3.star+json', per_page: 100
# あとはお好きに
```

## SEE ALSO

- GitHub API 公式にやり方も含め全て記載がある
  - https://developer.github.com/v3/activity/starring/#list-stargazers
- Octokit Ruby version
  - https://github.com/octokit/octokit.rb
- Star history というリポジトリのスターされた履歴をグラフ表示できるサービスがあったが、スターがよほどついていないと表示が微妙
  - http://www.timqian.com/star-history/
入社8ヶ月の営業の頭の中

みなさん、はじめまして。
アプレッソ入社８ヶ月の営業、鵜澤です。

技術ブログと聞いて、何を書こうかこの1週間考えました。（ちょっと盛りました。）
ブログを書いたことがない自分が、楽しく読んでもらえるブログを書けるのか心配です。

師走というだけで、なんとなく気持ちも忙しなく眉間にしわを寄せながら、
スマホ片手に読んでいませんか？

12月に入り始まったばかりのAdvent-Calendar 4日目にして、
早くもコーヒーブレイクにしてしまおうと決めました。

自己紹介というほどではないですが、人となりを少しでもわかってもらえるよう
入社から8ヶ月の振り返りと仕事に対する想いを書いてみたいと思います。

ご存知の通り、アプレッソはDataSpiderを始めとした製品のメーカーであり、
直接販売をしていません。
代理店制度を採用しビジネスをしています。
代理店以外にもパートナー企業と協業を進めています。

普段、どんな業務をしてるんだろう。
営業として自分が担当しているタスクを洗い出してみました。

1. 担当パートナーからのお問合せ、見積り対応
2. 担当パートナーとの案件確認、施策検討（定例会など）
3. イベント調整、準備、販促物作成、ブース対応
4. 協業促進
5. ハンズオンの製品紹介と講師
6. webからお問合せ対応
7. 製品説明とデモ

私の担当パートナーの内訳です。（）内は期初→現在の担当数です。

- 代理店・VAR（4社→5社）
- OEM（3社）
- アライアンス（4社→6社）

担当パートナーと共にタスクも増え、様々な経験ができています。

入社当初は、パートナー属性の違い、
これまで各パートナーとどんなことをしてきたのか
などを考え、前任者と早く同じにならないとダメだと頭でっかちになっていました。

しかし・・・

乱暴な言い方ですが、DataSpiderが売れたらいいのです。
言い換えると、パートナーと我々のビジネスが成立し、
E/Uの役に立ち、メリットを提供するということです。

前任者と同じことが大切ではなく、
E/Uのために何ができるか、どうしたらいいのかを考える。

DataSpiderはデータ活用のニーズが高まる中、価値と効果を提供できる製品なのです。

変に頭でっかっちにならず、柔軟性をもってできることをするために、
注意していることがあります。

自分に甘く他人に厳しい仕事はしたくない。

2つ目は、自分が率先して手を動かす。
遠い昔、自分が若い頃にいた口だけマネージャーのようにはならない。
最もらしいことを言って、行動しない。ということはしたくない。

最後は、自分が責任をとれるために自分で決める。
まだまだ、日々の業務でもわからないことだらけです。
それでも、決めなければ先に進まない。

ならば、いろいろアドバイスを聞いたり、教えてもらえる環境なので、
自分の責任の範囲で、最適だと思うことを決断しよう。
今のビジネススピードに置いて行かれないようドライブかけていこうと思っています。

この3つを最近のテーマにしています。

***
#### ★本当のコーヒーブレイク

某スタバの窓際に座りコーヒーを飲みながらブログを書いてたとき、目に入ってきた光景。

某運送会社が台車に荷物を乗せて配送してたところ、台車に積みすぎた荷物が落ちました。
後ろの歩行者が親切に荷物を拾い、手渡そうとしています。

業者は落とした荷物を拾うため台車を道端に止めようとしたところ、
台車のバランスが崩れ、他の積荷が落ちました。

業者は、落ちた荷物を台車に乗せることに必死となり、
歩行者が拾ってくれた荷物を持たせたまま自分のタスクに集中してます。
その間、歩行者は拾った荷物を持ったまま、待ってくれています。

台車への積荷が落ち着いたとき、歩行者に背を向けたまま、
手を伸ばし荷物を受け取り台車に乗せ、
言葉をかけることなく台車を押して自分の仕事に戻りました。

どう思いますか？

***

2020年東京オリンピック招致の際の「おもてなし」が流行語になりましたが、
おもてなしの欠片もなく、あまりにも自己中心的で、もったいなく感じました。

結果的におもてなしのある仕事ができるようシステムだけでなく、
人の気持ちまで「つなぐ」ことができたら最高です。
（話の展開が強引すぎた気もします（笑））

そのために自分のタスクが増えたとしても、
「手一杯だー！」と愚痴？を言いながらもやっていきたいと思います。

社内外のみなさん、どうぞ、よろしくお願いします。
フラットデザインは単なるデザインスタイルの話ではない

この記事は Retty Advent Calendar 4日目です。
昨日は、すずたく(@takumi-suzuki)の [MySQLのquery_logを可視化する part2](http://qiita.com/takumi-suzuki/items/3ebbde82f29b018e75dd) でした。

![スクリーンショット 2016-12-03 18.30.44.png](https://qiita-image-store.s3.amazonaws.com/0/76942/decc9fe7-12fb-fe93-f503-61cd24ee11f2.png)

*http://designmodo.github.io/Flat-UI/*

最近では当たり前のように開発現場に浸透している「フラットデザイン」ですが、単にグラデーションやシャドウがないというものではありません。
過去に書いた記事を一部改変した内容になりますので、もはや当たり前の内容かもしれませんが、意匠の本質について改めて考えるきっかけになれば幸いです。

# 今までのデジタルデザインにおいて有効なデザイン手法は「メタファ」だった

デジタルデザインやインターフェイスにおいて「メタファ」というデザイン手法がよく用いられた。これはコンピューターの持つ無限の可能性を人間に理解しやすくするためで、コンピューターの世界に存在する概念などを、デスクトップ、フォルダなど実世界に存在する物体に置き換えて「見立てる」ことが、最も有効なデザインの手法だったため良く用いられていた。

### メタファを用いたデザインの例
##### ▼ページめくりのインターフェイス
![064890f2-ae23-f199-8a1a-875b32a62268.png](https://qiita-image-store.s3.amazonaws.com/0/76942/5629f60d-1220-1a91-66d5-202f2a459b27.png)

*紙をめくる、めくっている紙の下に影が入る、という自然界の原理に見立てた表現にすることで、「ページ送り」という動作を分かりやすく表現している。*

##### ▼Photoshopのツールデザイン
<img width="49" alt="bb4a6666-716c-5aff-b9cc-45814772026e.png" src="https://qiita-image-store.s3.amazonaws.com/0/76942/869b7884-8b7d-f50a-8a1e-8a2a17fd98fa.png">

*ペン→書く、消しゴム→消す、ペンキ→塗りつぶす
など、普段目に触れているものに見立てることで、説明がなくても機能を理解できる。*

##### ▼iPadのブックスタンド
![c0aea5bc-4423-99d2-c255-96d03f8822ed.png](https://qiita-image-store.s3.amazonaws.com/0/76942/a6c12b6a-d476-58bb-6c4d-07c749b26f7a.png)

*家具に見立てることで、デバイスという端末上にリアルに本棚が存在しているかのような表現。木目も不規則な模様になっていてリアルに表現されている。*


# フラットデザインが示すデザインの変化

![8468788107_bb6c21b0e4_k (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/76942/03b22084-8f50-4cfd-81e0-acaf3cc30323.jpeg)
*https://www.flickr.com/photos/mkhmarketing/8468788107*

コンピューターの価値や表現、インターネットサービスが進化したことで、現実世界にはない価値を提供するようになり、何かに見立てる表現では理解しがたいものが世の中に出てきた。

facebookやtwitterなどのSNSサービスは現実世界を超越した価値を提供していて、これらをメタファで表現すると正しい意図で伝わらず、誤解を与える表現になってしまう可能性が出てきた。このような時代の変化によりデザインはメタファ以外のアプローチが求められてきた。その流れで生まれたのがフラットデザイン。

# フラットデザインは単なるデザインスタイルの話ではない

フラットデザインは「グラデーションとか影がない」という表層的なデザインのスタイリングの話ではない。上記のとおり、メタファからの脱却であり、コンピューターの価値や表現、インターネットサービスが現実世界にはない価値を提供するようになり、メタファとしての手段が有効でなくなった時代の変化に伴うデザイン手法のひとつだと思う。

何かに見立てるのではなく、提供する価値や体験に重きを置いて設計をすることで、インターネットの持つ万能性の高さを引き出し、人間にとって都合の良い形で表現する手法、とも言える。

# インターフェイス設計とは「コンピューターと人間の関係を設計すること」

インターフェイスデザインとは画面のレイアウトデザインだけではなく、マクロな視点でコンピューターと人間の関係を設計すること。また、人の行為や活動をつくること。

ユーザーとデザイナーのメンタルモデルの違いが製品に対するイメージ齟齬を生むので、インターフェイスでこれを解消していく必要がある。前述のように、進化したインターネットを表現する上でメタファが有効でなくなったように、デザインも共に進化が求められている。

PCと人間を結びつけるGUIとしてカーソルビンディングとマウスが発明された。しかしタッチパネルの出現はその境目をさらに一つ削り、人間が直前手で操作することで新たなアフォーダンスの形を発明した。改めてiPhoneのデザインは奥深く、人間の心理や自然界の原理原則を理解していないとできないデザインだなーと思う。


# さいごに

スマホやwebのみならず様々なデジタルプロダクトにおいてフラットデザインに触れる機会が増えてきました。改めて本質をきちんと理解しておきたいです。

![66d806be-68ae-dd42-a9f9-78e1cf5c7163.png](https://qiita-image-store.s3.amazonaws.com/0/76942/12e5a117-e91c-cb5e-587a-6976ae897479.png)

*https://www.behance.net/gallery/17998561/Star-Wars-Long-Shadow-Flat-Design-Icons*

あと、スターウォーズの次回作の公開が待ち遠しい^^
Ruby でニューラルネットワーク

## MNIST のデータを使って Ruby で手書き数字を認識する

[ゼロから作るDeep Learning ――Pythonで学ぶディープラーニングの理論と実装](https://www.oreilly.co.jp/books/9784873117584/)
は deep learning の入門書として、素晴らしい本です。

Python で書かれた多数の例題を通じて、具体的に deep learning の仕組みについて学んでいくことができます。

ただ、私はふだん、Ruby でプログラムを書くことが多いので、Ruby でニューラルネットワークを実装してみたら、どうなるか興味がありました。

[「3章　ニューラルネットワーク」のある例題](https://github.com/oreilly-japan/deep-learning-from-scratch/blob/master/ch03/neuralnet_mnist.py)を Ruby に書き直してみました。

https://github.com/elm200/nn-mnist-ruby/

使い方は、Github レポジトリの README.md を参照してください。

[NMatrix](https://github.com/SciRuby/nmatrix) という行列のライブラリを使っているだけで、他には特別なニューラルネットワーク用のライブラリは使用していません。そのため、ソースコードを読んでみると、ニューラルネットワークの雰囲気がつかめるかもしれません（今回は、3層のニューラルネットワークを使用しています)。

学習済みの重みとバイアスに関しては、元の Python の例題のものを使わせていただきました。

## Python を Ruby に書き換えてみての感想

行列のライブラリとして、[SciRuby](http://sciruby.com/) の一部らしい [NMatrix](https://github.com/SciRuby/nmatrix) を使ってみたのですが、NumPy より明らかに使い勝手が悪かったです（ただ、チュートリアルがあまりなくて、私の使い方が間違っているせいかもしれませんが）。NumPy だと行列を含む数式を自然にプログラム上で表現できるのに対して、NMatrix はそこまで自然にかけませんでした。あと、スカラー・ベクトル・行列が混ざった式で、適当に型変換をしてくれるブロードキャスティングの機能もいまひとつでした。

私は、普段 Ruby を使うので、できれば Ruby でやりたいのですが、やはり機械学習は Python でやるのが、すくなくとも2016年の現在は、正解であるようです。

## 私について

普段は、Ruby on Rails でウェブサイトを作る仕事をしている。機械学習については、まだ初心者。大学レベルの線形代数を復習して、いま deep learning について学んでいるところ。deep learning 以外の機械学習の手法はほとんど知らない。
macOS Sierra にVim 8 をインストールしてみた。

[Vim 8.0](http://www.vim.org/)が発表されてしばらく経ったので、試してみようとbrew でアップデートしようとすると、7.4で止まっているらしく、ソースからインストールしたが、ちょっとハマったのでメモ。

[Vim 8.0](http://www.vim.org/)のインストール自体は問題なく完了した。

[spf13](http://vim.spf13.com/)を利用しているが、プラグインに必要なLuaがないとメッセージが出てします。

vim を起動して。
luaが入っているかを確認すると、有効にしていると思っていたLuaが入っていない。


```shell

:version

Huge version without GUI.  Features included (+) or not (-):
+acl             +conceal         +file_in_path    +libcall         +mouse_sgr       +profile         +tag_old_static  +viminfo
+arabic          +cryptv          +find_in_path    +linebreak       -mouse_sysmouse  -python          -tag_any_white   +vreplace
+autocmd         -cscope          +float           +lispindent      +mouse_urxvt     +python3         +tcl             +wildignore
-balloon_eval    +cursorbind      +folding         +listcmds        +mouse_xterm     +quickfix        +termguicolors   +wildmenu
-browse          +cursorshape     -footer          +localmap        +multi_byte      +reltime         +terminfo        +windows
++builtin_terms  +dialog_con      +fork()          -lua             +multi_lang      +rightleft       +termresponse    +writebackup
+byte_offset     +diff            -gettext         +menu            -mzscheme        +ruby            +textobjects     -X11
+channel         +digraphs        -hangul_input    +mksession       +netbeans_intg   +scrollbind      +timers          -xfontset
+cindent         -dnd             +iconv           +modify_fname    +num64           +signs           +title           -xim
-clientserver    -ebcdic          +insert_expand   +mouse           +packages        +smartindent     -toolbar         -xpm
+clipboard       +emacs_tags      +job             -mouseshape      +path_extra      +startuptime     +user_commands   -xsmp
+cmdline_compl   +eval            +jumplist        +mouse_dec       +perl            +statusline      +vertsplit       -xterm_clipboard
+cmdline_hist    +ex_extra        +keymap          -mouse_gpm       +persistent_undo -sun_workshop    +virtualedit     -xterm_save
+cmdline_info    +extra_search    +lambda          -mouse_jsbterm   +postscript      +syntax          +visual
+comments        +farsi           +langmap         +mouse_netterm   +printer         +tag_binary      +visualextra
```


```shell
./configure
```

のメッセージを見返すとlua.hとluaJitが見つからないと言われている。普段はbrewでインストール指定なので、どれを入れると正しく動くのかわからないが、brewで入れたバージョンをアンインストールして、それぞれソースから入れ直すと無事にLuaが入るようになり、プラグインも動くようになった。

[lua](https://www.lua.org/)
[luajit](http://luajit.org/)

ポイントは　**--with-lua-prefix=/usr/local/**で~~--with-lua-prefix=/usr/local/bin/lua~~としてしまうと、brewのluaと同じエラーメッセージになった。試していないが、最初から指定のパスを変えるだけでよかったのかもしれない。

```shell
./configure --enable-python3interp --enable-luainterp  --enable-perlinterp --enable-rubyinterp --enable-tclinterp --enable-multibyte  --enable-fail-if-missing --with-lua-prefix=/usr/local/ --with-local-dir=/usr/local/include --with-luajit
```
TF-Slim > Variables > regular variables / local (transient) variables / model variables / non-model variables

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 14.04 LTS desktop amd64
TensorFlow v0.11
cuDNN v5.1 for Linux
CUDA v8.0
Python 2.7.6
IPython 5.1.0 -- An enhanced Interactive Python.
```

TF-Slimを使っていると、以下のvariablesがあるようだ。

- TensorFlow標準Variables ([参考](http://qiita.com/7of9/items/28127bd39aca0cfaefb2))
   - regular variables
   - local (transient) variables
- TF-Slim Variablesで加わったもの ([doc](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim))
   - model variables
   - non-model variables


https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim

> **Model variables** are trained or fine-tuned during learning and are loaded from a checkpoint during evaluation or inference. Examples include the variables created by a slim.fully_connected or slim.conv2d layer. 

...

> **Non-model variables** are all other variables that are used during learning or evaluation but are not required for actually performing inference. For example, the global_step is a variable using during learning and evaluation but it is not actually part of the model.

TF-SlimのNon-model variablesとTensorFlowのlocal variablesの区別は未消化。

したいことはweightとbiasの出力。
TensorFlow > Variables > regular variables / local (transient) variables

TF-slimからweightとbiasを出力しようとしている。

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim

> Note that in native TensorFlow, there are two types of variables: **regular variables** and **local (transient) variables**. The vast majority of variables are regular variables: once created, they can be saved to disk using a saver. Local variables are those variables that only exist for the duration of a session and are not saved to disk.
技術英語 > the class should [be cleaved] into multiple classes along the lines of the separate responsibilities.

@ Code Complete (No. 18203 / 36077)

> the class should **<font color=red>be cleaved</font>** into multiple classes along the lines of the separate responsibilities.

http://www.merriam-webster.com/dictionary/cleave
> 1 :  to divide by or as if by a cutting blow :  split

### 覚え方

部活動 (**フィクションです**)。

名称: 栗部（<font color=red>くりーぶ</font>）
活動内容: ひたすら栗を<font color=red>分割する</font>活動を今年で10年続けてきました。
まずは、栗を集めます。[協調動作で網を動かしながら、落ちてくる栗を拾います](https://youtu.be/5VYn_syTFVY?t=618)。
集めた栗はまずはTensorFlowにより食べられる栗と食べられない栗に分類されます。MNIST for Expertsの多クラス分類から変更した2クラス分類器を使用。ReLUを使用。conv層は2層、maxpooling層2層。[参考](http://googlecloudplatform-japan.blogspot.jp/2016/08/tensorflow_5.html)
食べられる栗は自作の[栗・皮分割装置](https://www.aliexpress.com/item/free-shipping-Automatic-Electric-Chestnut-Opener-Machine-Automatic-Chestnut-Opening-Machine-chestnuts-roasting-machine/32557157490.html)に送られ、１つ１つ渋皮が開かれます。栗・皮分割装置の制御MCUはESP8266を使用し、Unityで作ったWindows ソフト上からWiFi経由で開閉速度を変更可能です。

こんだけしておけば記憶に残るだろうか。。。

an intermittent errorやdefy、terse、transgressionは幸い記憶に残っている。
Amazon CloudSearch で 商品検索を実現する - No.3 日本語トークン分割

# もう少しいい感じに検索したい

[前の記事](http://qiita.com/akym03/items/1172503e0bd4200bb15f)ではグループとエイリアスを明示的に使うことで表記の揺れと誤記に対応できることが分かりました。しかし、「ファイアーエムブレム」は英語表記では「Fire Emblem」なので、「ファイアー」と「エムブレム」の2単語から構成されています。前回の記事の「ファイアーエムブレム」の検索を単語単位の誤りを試すと下の様になりまいた。

|入力した単語|入力内容|検索結果|
|:--|:--|:--|
|ファイアーエムブレム|正しい単語|ヒットする
|ファイ**ヤ**ーエムブレム|ファイアーを誤る|ヒットしない|
|ファイアーエ**ン**ブレム|エムブレムを誤る|ヒットしない|
|ファイ**ヤ**ーエ**ン**ブレム|エイリアスで定義されている誤り|ヒットする|

というように、エイリアスに定義した通りに誤るとは限らず、全ての組み合わせをエイリアスに入れるのは手間がかかります。

# 日本語トークン分割 を使ってみる
前回の記事では持て余してた[Tokenization Dictionary](https://docs.aws.amazon.com/ja_jp/cloudsearch/latest/developerguide/configuring-analysis-schemes.html#customizing-japanese-tokenization)タブから 日本語トークン分割 を設定し、グループと組み合わせてみます。

## Tokenization Dictionary タブ
前回に暫定で入れた値を削除し下の内容を入力します。区切り文字が無く入力された単語を「Fire」と「Emblem」に分けます。正しい単語と両方を間違えている単語の両方をいれておきます。

```json:TokenizationDictionary 
[
  [
    "ファイアーエムブレム",
    "ファイアー エムブレム",
    "ファイアー エムブレム",
    "カスタム名詞"
  ],
  [
    "ファイヤーエンブレム",
    "ファイヤー エンブレム",
    "ファイヤー エンブレム",
    "カスタム名詞"
  ]
]
```


2階層目の配列の意味は下の通りです。

* テキスト - 分割前の単語
* 分割した単語
* 読み仮名
* 品詞


## Synonymタブ - Alias
日本語トークン分割を利用するのでJSON形式の空の配列にします。

```json:Alias
[
]
```


## Synonymタブ - Group
「ファイアー」と「ファイヤー」、「エムブレム」と「エンブレム」を同じグループとして定義します。

```json:Groupタブ
[
  [
    "ファミリーコンピューター",
    "ファミコン",
    "FC"
  ],
  [
    "ファイアー",
    "ファイヤー"
  ],
  [
    "エムブレム",
    "エンブレム"
  ]
]
```

## インデックスを再構築

分析スキーマの定義を変更したら、分析スキーマの画面にインデックス再構築のボタンが表示されるので、押下して再構築を実行します。

<img width="501" alt="AnalyzeTokenRebuild.png" src="https://qiita-image-store.s3.amazonaws.com/0/145742/ef4d240f-0b0c-3d7d-0584-24d2f71f1abf.png">


## 再構築後

日本語トークン分割で単語を分割し、グループにより分割された単語が同一視することで表記の揺れを吸収できるはずです。

|入力した単語|入力内容|検索結果|
|:--|:--|:--|
|ファイアーエムブレム|正しい単語|ヒットする
|ファイ**ヤ**ーエムブレム|ファイアーを誤る|ヒットしない|
|ファイアーエ**ン**ブレム|エムブレムを誤る|ヒットしない|
|ファイ**ヤ**ーエ**ン**ブレム|エイリアスで定義されている誤り|ヒットする|
変わりませんでした。グループがあることを考えて、間に半角スペースを入れると上手くいきました。

|入力した単語|入力内容|検索結果|
|:--|:--|:--|
|ファイ**ヤ**ー[半角スペース]エムブレム|ファイアーを誤る|ヒットする|
|ファイアー[半角スペース]エ**ン**ブレム|エムブレムを誤る|ヒットする|

別案を考えてみます。

# 日本語トークン分割 の登録単位を変更する
「ファイアーエムブレム」は二つの単語で構成されているゲームタイトルなので、日本語トークン分割を「ファイアー」と「エムブレム」の二つを登録し、表記の揺れの「ファイヤー」と「エンブレム」も登録します。グループは残しておきます。

```json:SynonymのGroup
[
  [
    "ファミリーコンピューター",
    "ファミコン",
    "FC"
  ],
  [
    "ファイアー",
    "ファイヤー"
  ],
  [
    "エムブレム",
    "エンブレム"
  ]
]
```

```json:Tokenization_Dictionary
[
  [
    "ファイアー",
    "ファイアー",
    "ファイアー",
    "カスタム名詞"
  ],
  [
    "ファイヤー",
    "ファイヤー",
    "ファイヤー",
    "カスタム名詞"
  ],
  [
    "エムブレム",
    "エムブレム",
    "エムブレム",
    "カスタム名詞"
  ],
  [
    "エンブレム",
    "エンブレム",
    "エンブレム",
    "カスタム名詞"
  ]
]
```

インデックスを再構築した後にもう一度検索を行います。

|入力した単語|入力内容|検索結果|
|:--|:--|:--|
|ファイアーエムブレム|正しい単語|ヒットする
|ファイ**ヤ**ーエムブレム|ファイアーを誤る|ヒットする|
|ファイアーエ**ン**ブレム|エムブレムを誤る|ヒットする|
|ファイ**ヤ**ーエ**ン**ブレム|エイリアスで定義されている誤り|ヒットする|

これで表記の揺れの組み合わせも意図した通りにヒットしました。
VS2013 開発で使えそうなライブラリたち

# インストーラ作成
## [Microsoft Visual Studio 2013 Installer Projects](https://marketplace.visualstudio.com/items?itemName=UnniRavindranathan-MSFT.MicrosoftVisualStudio2013InstallerProjects)
Visual Studio 2013 でインストーラを作成できるようになります。

- オフィシャルサイト
 - https://marketplace.visualstudio.com/items?itemName=UnniRavindranathan-MSFT.MicrosoftVisualStudio2013InstallerProjects

# ログ出力
## [NLog](http://nlog-project.org/)
[Log4Net](https://logging.apache.org/log4net/)より簡単にログ出力ができます。

- オフィシャルサイト
 - http://nlog-project.org/

# エクセルファイル入出力
## [epplus](http://epplus.codeplex.com/)
xlsx,xlsm ファイルの読込・作成ができます。xls ファイルには対応していません。xls ファイルなら[NPOI](https://npoi.codeplex.com/)が使えます。読むだけなら[ExcelDataReader](https://github.com/ExcelDataReader/ExcelDataReader)が良いかも。各々の速度比較等が[こちら](http://qiita.com/shimitei/items/ad74478705665e02f209)のサイトにありました。

- オフィシャルサイト
 - http://epplus.codeplex.com/

# 文字列計算式の処理
## [CoreCLR-NCalc](https://github.com/sklose/NCalc2)
## [NCalc-Edge](https://github.com/pitermarx/NCalc-Edge/)
- オフィシャルサイト
 - https://github.com/pitermarx/NCalc-Edge/
数学ガールの秘密ノートについて

[機械学習に必要な高校数学やり直しアドベントカレンダーAdventCalendar 2016](http://qiita.com/advent-calendar/2016/math_for_ml)の４日目の記事です。
[３日目の記事](http://qiita.com/mash0510/items/f3ac9e8d973dd5d055b0)は、[mash0510](http://qiita.com/mash0510)さんでした。自分も大学への数学の読者でした。

***

## 数学ガールについて

数学ガールシリーズに大きく分けて２種類あって、「数学ガール」と「数学ガールの秘密ノート」があります。
このAdventCalendarの内容にぴったりなのは、「数学ガールの秘密ノート」です。
「数学ガール」の同じ登場人物が高校数学を題材に対話形式で解説しています。

## 著者「結城浩」について

数学ガールの秘密ノートの著者は
[Java言語プログラミングレッスン第3版](http://www.hyuki.com/jb/)
[増補改訂版Java言語で学ぶデザインパターン入門](http://www.hyuki.com/dp/)
[増補改訂版Java言語で学ぶデザインパターン入門マルチスレッド編](http://www.hyuki.com/dp/dp2.html)
[Java言語で学ぶリファクタリング入門](http://www.hyuki.com/ref/)
などの入門書の著者でもあります。
なので、Qiitaユーザーにぴったりだと思います。

著者の記事
[『数学ガール』とプログラミングの関係](https://codeiq.jp/magazine/2015/12/34755/)

## 最後に

図書館で「数学ガールの秘密ノート　丸い三角関数」を借りたので感想とかも、書こうと思っていたのですが、まだ全部、読んでいません。
そして、これを書いているのが、１２月３日というか、日付が変わってもう１２月４日なので、後日、感想などが書けたらと思っています。

***

[機械学習に必要な高校数学やり直しアドベントカレンダー Advent Calendar 2016](http://qiita.com/advent-calendar/2016/math_for_ml)の５日目は、[ysk24ok](http://qiita.com/ysk24ok)さんです。
UbuntuのUSBオートサスペンドの無効化　ver16.04

このサスペンド機能は場合によっては便利だが、スピーカー等の場合はサスペンド、及び復帰の度に大きなノイズが発生して、非常に不愉快である。
この問題のFixは海外等の情報からpowernapというツールを利用する方法もあるが、
外部ツールに頼らず以下のスクリプトがベストプラクティスだろう。

```bash
$ sudo -i
# for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 2 > $i; done
# for foo in /sys/bus/usb/devices/*/power/level; do echo on > $foo; done
```

２つのコマンドの実行後、すべてのデバイスはサスペンドされなくなる。
Vagrant入門④〜LNMP環境構築編

# はじめに
早いものでVagrant入門シリーズもラストです。
これを読み終わる頃にはLNMP環境ができているはずです。

# LNMPとは
L:Linux
N:Nginx
M:MySQL
P:PHP
でございますよ。

# 動作環境
OS : Mac OS X El Capitan 10.11.6
ちなみにMac OS X Sierra 10.12.1でも動いてます。

# 事前準備
[Vagrant入門①〜Vagrant概要とインストール編](http://qiita.com/izumaru_akippa/items/ac63cc5ea48ad702c359)を参考にVagrantとVirtualBoxのインストールを済ませておきましょう。
[Vagrant入門②〜Vagrantコマンド一覧編](http://qiita.com/izumaru_akippa/items/06f0c8c58aab3de93fcc)をよーく熟読しておきましょう。
[Vagrant入門③〜Vagrantfile設定編](http://qiita.com/izumaru_akippa/items/d6aef518bff20dc39530)を参考にVagrantfileを作っておきましょう。

# 今回つくるもの
Ubuntu 16.04.1
Nginx 1.10.0
MySQL5.7
PHP7.0.8
Composer

# やること
前回こんなことを書きました。
![名称未設定.png](https://qiita-image-store.s3.amazonaws.com/0/149554/b774cbb1-9ff1-9852-788a-f77654e083ee.png)
はい。今回はsetup.shを書くだけです。
別にVagrantあんま関係ないですねー。
UbuntuにLNMP環境構築するだけですねー。
個別に説明していくけど、中身全部setup.shに書けばいいだけですねー。

おもむろにアップデート

```bash
$ apt-get update -y
$ apt-get upgrade -y
$ apt-get install -y python-software-properties
```

デフォルトでapacheが入ってるようなのでさよならを告げて、こんにちはNginx

```bash
$ apt-get remove -y apache2
$ apt-get install -y nginx=1.10.0-0ubuntu0.16.04.4
```

PHP7.0.8をインストール

```bash
$ apt-get install -y php7.0.8
```

MySQL5.7をインストール
プロビジョン経由だとCIとの対話ができませんのでね。debconf-set-sectionsを指定しておきますよー。

```bash
$ debconf-set-selections <<< 'mysql-server-5.7 mysql-server/root_password password [ルートのパスワード]'
$ debconf-set-selections <<< 'mysql-server-5.7 mysql-server/root_password_again password [ルートのパスワード再入力]'
$ apt-get install -y mysql-server-5.7
$ apt-get install -y php7.0-mysql
```

最後にNginxを再起動して完了

```bash
$ service nginx restart
```
Vagrant入門③〜Vagrantfile設定編

# はじめに
Vagrant入門シリーズ。
いよいよVagrantfileに触れていきますよ。

# 動作環境
OS : Mac OS X El Capitan 10.11.6
ちなみにMac OS X Sierra 10.12.1でも動いてます。

# 事前準備
[Vagrant入門①〜Vagrant概要とインストール編](http://qiita.com/izumaru_akippa/items/ac63cc5ea48ad702c359)を参考にVagrantとVirtualBoxのインストールを済ませておきましょう。
んでもって、[Vagrant入門②〜Vagrantコマンド一覧編](http://qiita.com/izumaru_akippa/items/06f0c8c58aab3de93fcc)もよーく熟読しておきましょう。

# Vagrantfile作成
ターミナルで任意のディレクトリに移動しましょう。
で、

```bash
$ vagrant init
```

はい。Vagrantfileができます。

# Vagrantfile編集
デフォルトで書いてあるコメントを参考に編集していきます。
設定内容は
Vagrant.configure("2") do |config|
〜
end
の中に書いていきますよ。

とゆーわけで、こちらが編集が終わったあとのVagrantfileになります。
コメント書いてみたから読んでね！

```text
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # box名。たまに使うから短くてわかりやすい名前にしましょう。
  config.vm.box = "akippa_ubuntu"

  # boxのURL Ubuntu16.04はこれ
  config.vm.box_url = "http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box"

  # 仮想マシンのネットワーク環境設定。
  # 目的に応じて以下のどちらかを使いましょう。
  # "private_network"を指定するとホストOSからのみアクセス可
  config.vm.network "private_network", ip: "172.16.16.1"
  # "forwarded_port"を指定するとhostの8080ポートへのアクセスがguestの80ポートへ転送されます。
  # http://[ホストのIPアドレス]:8080でアクセスできるってことですよ。
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # ホスト側とゲスト側で共有するフォルダ。この場合Vagrantfileが存在するフォルダが/var/www/akippaになりまっせ。
  config.vm.synced_folder "./", "/var/www/akippa"

  # プロバイダの指定
  config.vm.provider "virtualbox" do |vb|
    # GUIはいらないね
    vb.gui = false
    # 仮想マシンの名前
    vb.name = "akippa"
    # 仮想マシンが使うメモリ(MB)
    vb.memory = "2048"
    # 仮想マシンが使うCPU
    vb.cpus = 4
  end

  # プロビジョンの内容をsetup.shに書いておきます。
  # setup.shの内容についてはまた次回。
  config.vm.provision "shell", path: "setup.sh"
end
```

お疲れ様でした！次回はいよいよLNMP環境構築ですよ！
COBOLを触ってみる


# 前置き

いつもPHPとJavaScriptとワイワイやってる者です :lollipop: 
「ちょっと興味あるんだよね〜」ぐらいの関心度の方に見ていただければ良いのやもしれません。
（以下、自分なりの解釈を入れています。間違いがありましたらご教授いただけると幸いです。）

# 実行環境

Mac (El Capitan)
※ なんかめんどくさくてVMとか使いませんでした:wink: 

# 基礎

* 区切りには「.」をつける
* コメントには先頭に「*」をつける
* 一行あたり80文字まで
* 次の行にわたって書く場合、「-」を使う

## 構成（*のついた部門は、基本的に必須項目）

### IDENTIFICATION DIVISION : 見出し部※

```
PROGRAM-ID. [プログラム名].
AUTHOR.　[作成者].
INSTALLATION.　[設置環境].
DATE-WRITTEN. [作成日].
DATE-COMPILED. [翻訳日].
SECURITY.　[セキュリティ].
```

- **PROGRAM-ID** のみ必須

（ **SECURITY**って何書くんですかね・・・ ）

### ENVIRONMENT DIVISION : 環境部※

実行に必要な環境を書くらしい。ハードウェアとの連携？する場合もここに記述するみたいです。
（プリンターとかね）
特に I/O がない場合は書かなくてもいい項目。

● 構成節（CONFIGURATION. SECTION.）
● 入出力節（INPUT-OUTPUT. SECTION.）

### DATA DIVISION : データ部

データを扱う上で、名前・型・文字数等々を定義する箇所。
ここにまとめて書く。

● ファイル節（FILE. SECTION.）
　データファイル
● 作業場所節（WORKING-STORAGE. SECTION.）
　ファイル内だけで使用するデータ項目
● 連絡節（LINKAGE-STORAGE. SECTION.）
　外部プログラム内で使用するデータ項目

### PROCEDURE DIVISION : 手続き部*

● 宣言部分
● 手続き部分

ここまでで、私の理解は２割程度。
手を動かさないと、頭で覚えられないので・・・

# れっつとらい！

## 実行環境を整える

[こちらの記事](http://qiita.com/xxxamxxx/items/34247c250ba73d2929de)を参考にさせていただきました。

### Homebrewを入れる

```shell
$ sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/
install)"
```

### brewコマンドから、COBOLのコンパイラを入れる

```shell
$ brew install open-cobol
```

終了！さっくり環境ができました〜

## 実際に動かしてみる

### 最低限のフォーマット

```cobol:temp.cob
IDENTIFICATION DIVISION.
PROGRAM-ID. TEMPLATE.
PROCEDURE DIVISION.
    STOP RUN.
```

※ PROGRAM-ID. の [TEMPLATE] は動的に変わる部分です。

● 実行コマンドどーん！！！

```shell:shell
$ cobc -x --free temp.cob # コンパイルされ、tempディレクトリが生成される
$ ./temp # 実行！
```

エラーも出ないので、問題なさそうです！

### Level 1 : 文字列を書き出す

みんな大好き「Hello world!」

```cobol:hello.cob
IDENTIFICATION DIVISION.
PROGRAM-ID.HELLO.
PROCEDURE DIVISION.
    DISPLAY "Hello World!".
    STOP RUN.
```

@ 文字を出力する時は「DISPLAY」を使います

### Level 2 : データ項目を用意し、その中身を書き出す

```cobol:hello2.cob
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO2.
DATA DIVISION.
    WORKING-STORAGE SECTION.
        01 STR PIC X(15) VALUE "Hello World!".
        01 NAME PIC X(30).
PROCEDURE DIVISION.
    DISPLAY STR.
    MOVE "My name is Cyber Mergina." TO NAME.
    DISPLAY NAME.
    STOP RUN.
```

@ "DATA DIVISION." > "WORKING-STORAGE SECTION."

「01」…独立した変数ですよ〜という意味
「STR/NAME」…定義したデータ項目
「PIC」…必須みたいです
「X(n)」…英文字がn文字まで入る、という定義
「VALUE "HOGE"」…初期値として"HOGE"という文字列を入れる

@ "PROCEDURE DIVISION."
「MOVE "abc" TO NAME」…NAMEというデータ項目に、"abc"という文字列をセットする

ここで学生時代を思い出せた（？）ので、ここまでにしたいと思います！
たまには、こういう言語を触るのも良い気分転換になりそうです！

# 何故COBOLを触ったのか（超余談）

私が初めてプログラミングに触れたのは商業高校生の頃でした。
全国商業高等学校協会主催のプログラミング検定があったので取得したのがきっかけです。
言語はCOBOL。
でも、検定は筆記だったので、実際に動かしたことはなかったのです。
（自宅にネット環境なかったしね・・・・）

現在４年半ほどプログラマをしていますが、COBOLを動かしたことは一度もありません。

Studentカレンダーに何故か呼ばれたので折角だし、動かしてみようと思った次第です。

今もプログラミング検定はCOBOLなのかなぁw
FreeRTOS のメモ

FreeRTOS を使っていて調べたことをメモしました。

# 待つ
* タスクを待たせるには[vTaskDelay()](http://www.freertos.org/a00127.html)を使う。
 * 引数にtickを指定する。1tick待たせる場合は、```vTaskDelay(1);```とする。
 * 指定したtickの期間だけタスクを待たせる。
* ms単位で待たせたい場合はportTICK_RATE_MSで割る。
 * 10ms待たせたる場合は、```  vTaskDelay(10/portTICK_RATE_MS);``` とする。 

# タスク
* タスクの生成は[xTaskCreate](http://www.freertos.org/a00125.html)を使う
* タスクの優先度は、数字が大きいほど優先度が高い。
* タスクの優先度の範囲：0 から (configMAX_PRIORITIES-1) 
* スタック深さを指定する。ARMの場合はスタック幅は4バイトなので、 スタック深さ100を指定すると、400バイト使用する。

# 周期処理
* 周期処理は[xTimerCreate()](http://www.freertos.org/FreeRTOS-timers-xTimerCreate.html)と[xTimerStart()](http://www.freertos.org/FreeRTOS-timers-xTimerStart.html)を使う。
* 10ms毎に文字列を表示する例 

```c
#include <timer.h>

TimerHandle_t handle;
uint32_t count=0;

void interval_func(TimerHandle_t pxTimer)
{
  count++;
  printf("count=%u\n", count);
}

void start_interval_func(void)
{
  handle = xTimerCreate("print_every_10ms",(10 / portTICK_RATE_MS), pdTRUE, (void *)0, interval_func);
  if(handle != NULL)
  {
    xTimerStart(handle, 0);
  }
}
```

# 時間を測定
* xTaskGetTickCount()を使ってtickを取得する。

```
portTickType StartTime, EndTime;

StartTime = xTaskGetTickCount();
vTaskDelay(1)
EndTime = xTaskGetTickCount();

printf("Elapsed %d[ticks] %d[ms]", ( EndTime - StartTime ),( EndTime - StartTime ) * portTICK_RATE_MS);
```

# SysTick
* ARM Cortex-M で FreeRTOSを使う場合、OSのタイマにはARMが提供する NVICのSysTickを使う。
* SysTickの仕様：Cortex-M3 テクニカルリファレンス マニュアル→ネスト型ベクタ割り込みコントローラ→NVICのプログラマモデル→NVICレジスタの説明→SysTick制御およびステータスレジスタ
* 通常は、1ms毎の割り込みを発生する設定にして、割り込みハンドラでxPortSysTickHandler()を呼び出す。

#HEAP
* heapはアルゴリズムの違う、hap1　から heap5までの５種類がある。
* pvPortMalloc()でメモリを割り当てる。

# 割り込みハンドラ
* 割り込みハンドラ内では、関数名の末尾がFromISRがあるならそちらを使う。使わないと固まる。



# OSの設定
* FreeRTOSConfig.hにOSの各種設定値を定義する。

* TICKの設定

| config | description |
|:--|:--|
|configTICK_RATE_HZ|1秒間に何回TICKを刻むか。1000なら1ms毎にtickを刻む。|


* HEAPの設定

| config | description |
|:--|:--|
|configTOTAL_HEAP_SIZE|トータルのヒープサイズ (OSがタスクの生成などで使うヒープ)|
|configTOTAL_APP_HEAP_SIZE|アプリのヒープサイズ|

* タイマの設定

| config | description |
|:--|:--|
| configUSE_TIMERS  | 1ならタイマを使う  |
| configTIMER_TASK_PRIORITY  | タイマタスクの優先度  |
| configTIMER_QUEUE_LENGTH | タイマキューの長さ |
| configTIMER_TASK_STACK_DEPTH | タイマタスクのスタック深さ |

# ソースコード
* ソースコードの公式なリポジトリはsouceforgeにある。svnだよ。
 * https://sourceforge.net/p/freertos/code/HEAD/tree/
SQlite(データベース)学習メモ①　~windowsでの学習　テーブル作成~

今回はsqliteの学習メモとして投稿します。

コマンドが多くて纏めきれないので、
テーブル作成のみ。

#引用/参考サイト
<a href="http://dotinstall.com/">Dotinstall</a>

#準備
##環境
- ローカル開発環境
  - vagrant
  - Putty
  - Cyberduck
  - Oracle VM VirtualBox
- cmd/powershell（windows元々入ってる）
- エディタ：ATOM

##必要となる知識
- Unixコマンド


##公式サイト
- <a href="http://sqlite.org/">SQlite</a>

##SQliteの特徴
- 軽量
- データベース

<font color="blue">※今回は外部ファイルから扱っています</font>

データベースをざっくり画像で
![Screen 1 (3).png](https://qiita-image-store.s3.amazonaws.com/0/142313/5eee324a-b2fe-09b9-13cb-d145bb9c1b0b.png)

- データを管理する入れ物
- 実際のデータはデータベースの中にテーブルを作成し、そこへ格納。（いくつも作成可能）
- テーブルは表のような構造になっている。
- 属性値（id,title,body等）をフィールド/カラムなどと言う。
- 行データをレコード/ロウ（意味：行）と言う。

上記、データベースを扱う言語を
**SQL(Structured Query Language)**と言う。
###SQLコメントの書き方
--コメント
/**コメント* */

###SQLヘルプ参照コマンド
.help
<br>
テーブル作成方法
※postsという名前のテーブル作成

```sqlite3:posts
//テーブル作成
//if not existsはすでに「posts」というテーブルが存在する場合はエラーになるので、存在していなかったら作ってねという意味。
//()の中はフィールドになります。
create table if not exists posts(
 id integer primary key,
 title text,
 body text
);


//テーブルが作成されているか確認するコマンド
.tables

//テーブルの構造確認コマンド
.schema + テーブル名
//.schemaのみだと全てのテーブル構造を表示。
.schema
```

実行方法
1.ファイル転送ツール（Cyberduck）で一度保存し、cmdで、**$ .read + ファイル名**でリターン。
2.cmdで、**$ sqlite3 データベース名.db　<　ファイル名.sql**でリターン。
実行結果
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/142313/c3c0a509-8395-de3f-35a8-da505f4e83e4.jpeg)

纏めきれないので、ここまで。続きは次回。
SwiftにFloat系の余り演算メソッドが2つある理由

前回、SwiftのFloat系の余りの%演算子が廃止になり、その代わりに2つのメソッドを使うようになったという記事を書きました。
[Float系の演算で余り演算子(%)が廃止、それに変わるメソッドはだるま落としと最寄駅](http://qiita.com/samekard/items/81e095832b1cde9b71ba)

しかし、整数の方は引き続き%演算子があり、2つのメソッドも使えないのでそれがなぜかという疑問を書いたところ、以下のメール（？）の紹介を受けました(Dさん、ありがとうございました)。
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160411/014983.html

#メールに書いてある内容
たとえば10.0を0.1で割ったときの余りを考えます。
![FloatGaiyou.png](https://qiita-image-store.s3.amazonaws.com/0/46631/e9d79e2c-b7e2-1634-08f7-b515ddb1d560.png)
数式の上では余りは0ですが、2進数では0.1が正確に表現できないため、これは0.1より少し大きい値になります。
![Float_0_1_Kakudai.png](https://qiita-image-store.s3.amazonaws.com/0/46631/7c826ebf-cc1c-64da-2acd-ea62c206243b.png)
そのズレが蓄積して10.0のところもズレてしまいます。
![10_0Kakudai.png](https://qiita-image-store.s3.amazonaws.com/0/46631/d66dec91-16e7-86b5-f0ad-acbcf985f371.png)
ここから普通に余り(10.0と同じまたは低いところまでの距離)を求めると下の図のような9.9に近いポイントとの距離が余りになってしまいます。
![9_9_and_Amari.png](https://qiita-image-store.s3.amazonaws.com/0/46631/45807104-6975-8912-7e9e-adbb858361f7.png)
この現象を避ける（被害を軽減する）ために、最寄り駅方式のメソッドがあるそうです。
![Float_Moyorieki.png](https://qiita-image-store.s3.amazonaws.com/0/46631/18e992a9-eb66-79e8-1f69-2b455d6565d6.png)
Pythonでフォルダにある音楽をランダムに再生したい

初心者なので変なところあるかもしれません。何かあれば指摘してください。

環境　windows10　64bit　1607
　　　atom 1.12.6
　　　Python 3.5.2
　　　pygame 1.9.2b1

#mp3を再生する
まずmp3をpythonで再生する方法を探しました。
ディレクトリ構造はこうなっています。

```
music_play
      |--music.py
      |--test
          |--text1.txt
          |--text2.txt
          |--music1.mp3
          |--music2.mp3
          |--music3.mp3
          |--music4.mp3
```
音楽を再生するに当たってPygameが便利そうだったのでこれを使うことにしました。

```
 >pip　install　pygame
```

```Python:music.py
import pygame

# mixerモジュールの初期化
pygame.mixer.init()
# 音楽ファイルの読み込み
pygame.mixer.music.load("test\music1.mp3")
# 再生回数を指定-1だとループ
pygame.mixer.music.play(1)

print("ctrl+c stop")
while True:
    x = 1

pygame.mixer.music.stop()
```
pipでpygameをインストールします。
pygameをインポート、初期化、ファイルの読み込み、再生回数の指定といった具合です。
music.playは-1にするとループします。ctrl+Cでストップすることができます。

#フォルダの中にあるmp3をリスト化する
今回はフォルダ内のファイルをパス付で取得したかったので「glob」を利用しました。

```python
import glob

x = glob.glob("test\*.mp3")

print(x)
print(x[1])

```
```:出力結果
['test\\music1.mp3', 'test\\music2.mp3', 'test\\music3.mp3', 'test\\music4.mp3']
test\music2.mp3
```
これでxにtestの中の.mp3だけをリスト化できます。
余談で私だけかもしれないですが、atomでプラグインのatom-runerで実行したら違うプロジェクトフォルダの中を表示した?cmdで実行するとうまく表示された。

#リスト化したのをシャッフルする
```python:
import glob
from random import shuffle

x = glob.glob("test\*.mp3")

shuffle(x)

print(x)
print(x[1])
```
```:出力結果例
['test\\music1.mp3', 'test\\music4.mp3', 'test\\music2.mp3', 'test\\music3.mp3']
test\music4.mp3
```
「glob」でtestの中にあるmp3のファイルをリスト化して「random」でシャッフルします。
さっきはtest\\music1.mp3、test\\music2.mp3...と続いていたのが1,4,2,3に変化しました。
出力結果は実行するたび毎回変わるので例として挙げておきます。

#合わせる
```python:music.py
import pygame
import glob
from random import shuffle

x = glob.glob("test\\*.mp3") #testの中のmp3をリスト化
shuffle(x) #リストをシャッフル

print(x[1])

pygame.mixer.init()
pygame.mixer.music.load(x[1])
pygame.mixer.music.play(2) 

print("ctrl+c stop")
while True:
    x = 1

pygame.mixer.music.stop() # 再生の終了

```
これで毎回実行するたびに音楽がランダムに再生されるようになりました。

#参考
http://nwpct1.hatenablog.com/entry/2013/10/19/161008
http://qiita.com/Nyanpy/items/cb4ea8dc4dc01fe56918
http://qiita.com/da1/items/e1aa136c7ef8fa1c3636
一般社団法人　診断群分類研究支援機構主催　DPCセミナー@済生会第二新潟病院

http://www.dpcri.or.jp/index.php?SeminarPage%E2%80%8B%2F2016_12_03%E6%96%B0%E6%BD%9F%E3%82%BB%E3%83%9F%E3%83%8A%E3%83%BC

質問１）
質問相手：大谷氏
病院単位で行う分析のノウハウや手法は、全く統一されていないように見受けられます。（様式１、EF／DファイルをDBに取り込む際、テーブル定義すらネット上に乗っていない現状です。）
どこかに共有できるようなスペースはありますか？SQLクエリの共有などは、大変有用かと思います。
→ネット上にそういったものが存在しているか分かりませんが、基本的にDPCファイルは全てテキスト型で格納することを推奨しています。というのもテキスト型であれば後々日付型や数値型にいくらでも変換可能だからです。

質問２）
質問相手：大谷氏、石川氏
様式１のDBへの取り込みについて。現在はペイロードを用いた縦持ち形式ですが、DBに取り込む前に横持ちになるよう変換をかけていますか？
それとも、DB上でも縦持ちのままで、CASE式やcrosstabなどを使って、問い合わせのたびに横持ちに変換しているのでしょうか？
このあたりのノウハウは全く情報がなく、当院でも手探り状態です。
(様式１だけMongoDBのようなNoSQLを使う、という考えもあります)
→生データ格納のメリットがありますので、そのまま縦持ちでDBに格納することをお勧めします。なおその後横持ち変換するツールを産業医大の講座のほうで作成済みです。ぜひご利用ください。

質問３）
質問相手：大谷氏
EFファイルと様式１だけで仮想Dファイルを作成したいのですが、その際、DPC包括対象（またはDPC包括対象外）となるレセプト電算コード集（マスタ）はありますか？もしあれば、各病院単位での病棟再編（とりわけ地域包括ケア）にあたって、コストのシミュレーションが容易になるのですが…
→そのようなものがあるか調べたうえで後日お伝えいたします。
Support Libraryを23から24にしたときのPlay Servicesのエラー


layout_dodgeInsetEdgesが使いたかったのでSupport Libraryを23から24にしてみたところ、(GCMの処理で)IncompatibleClassChangeErrorというエラーが発生。これはGoogle Play services 9.0.1で修正されていたため、そちらも更新が必要になった。

Google Services Gradle Pluginを3.0に

```groovy:build.gradle
buildscript {
    ...
    dependencies {
        ....
        classpath 'com.google.gms:google-services:3.0.0'
    }
}
```

app/build.gradleの修正。
Google Services Gradle Pluginの行を最後に移動する。これは、利用するGoogle Play servicesのバージョンを確定させてからプラグインを実行する必要があるため。

```groovy:app/build.gradle
def support_library_version = '24.2.0';
def play_services_version = '10.0.1';    // 9.0.1以上
...
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "com.android.support:appcompat-v7:$support_library_version"
    compile "com.android.support:design:$support_library_version"
    ...
    compile "com.google.android.gms:play-services-gcm:$play_services_version"
}
apply plugin: 'com.google.gms.google-services'
```

app/google-services.jsonの修正。
再生成するのが良いが、おそらくapi_keyを足せばビルドできる。

```json:app/google-services.json
{
  ...
  "client":[
    {
      ...
    "api_key":[
      {
        "current_key":"AI......"
      }
    ],
    ...
}
```

フレーバーでpackage nameを変更しているときは、google-services.jsonもフレーバー毎に用意しなければならなくなった。
例えばdebugの場合はapp/src/debug/google-services.jsonを用意する。

### 参考
- [Google Play Services 9.0.0 へのアップデート手順](http://qiita.com/KeithYokoma/items/ff52e22702f9bfd48e22)
- [Version conflict updating to play-services 9.4.0 Android studio 2.2](http://stackoverflow.com/questions/38834042/version-conflict-updating-to-play-services-9-4-0-android-studio-2-2)
- [Google APIs for Android Release Notes](https://developers.google.com/android/guides/releases)
Vagrant入門②〜Vagrantコマンド一覧編

# はじめに
書こうと思ったんだけどさ、これでいいじゃんね...
http://raqda.com/vagrant/cli/index.html

# Vagrantとはなんぞやって方はこちら
[Vagrant入門①〜Vagrant概要とインストール編](http://qiita.com/izumaru_akippa/items/ac63cc5ea48ad702c359)

# 次回はこちら
[Vagrant入門③〜Vagrantfile設定編](http://qiita.com/izumaru_akippa/items/d6aef518bff20dc39530)