OmniAICreator/Qiita-1.07M huggingface dataset:
CakePHP3 アソシエーションしてますか？

# まえおきなど
[私の記事のまえおき](http://qiita.com/tulist/items/ea7bae62138575d52b6b)
関連技術のバージョン：CakePHP3.3

# アソシエーションしてますか？
![アソシエーションしてますか？.png](https://qiita-image-store.s3.amazonaws.com/0/155677/87019320-8757-f144-334a-ea05d044ae40.png)
※2次利用のための表記
ブラックジャックによろしく / 著作者名: 佐藤秀峰 / サイト: [漫画 on web](http://mangaonweb.com/)

※アソシエーションの詳細については下記を参照してください。
[アソシエーション - モデル同士を繋ぐ(公式)](http://book.cakephp.org/3.0/ja/orm/associations.html)

今日は、CakePHP3のアソシエーションを支える、強力なORM機能の事例をご紹介。

## アソシエーションへの拒絶反応
見知らぬフレームワークを使う上で足かせとなるのが、フレームワークの学習コストである。

強力なORM機能を持つフレームワークは、通常のSQLで実装すれば3分で事足りるところを、慣れない人が実装すると10倍以上かかることもある。

上記のような状況から、せっかくのORM機能を利用せずにSQLを直接実行するような現場も多く見てきた。

かくいう私も、プロジェクトでいきなり見知らぬフレームワークを使うことを余儀なくされれば、おそらく納期を優先してSQLを直接実行するシーンも増えるだろうと思う。

「[私の記事のまえおき](http://qiita.com/tulist/items/ea7bae62138575d52b6b)」でも紹介している個人プロジェクトでは、納期など無いので思う存分アソシエーショナブルなシステム開発をしている。

そんなプロジェクトで、感じたメリットを１つ事例としてご紹介したい。

## プロトタイプ開発の罠
プロトタイプ開発をしていると、データ設計が後付けになりがちとなってしまう。
（少なくとも私はそうなることがある）
今回はそんなプロトタイプ開発をしていた際の事例である。

## status・・・ってなんだっけ？
プロトタイプ開発も順調に進み、大方の機能の[CRUD]のうちのD以外が実装された。
私の場合、DELETEに関する機能を後回しにする習慣がある。

ふと、show full columns form hoges; を実行しふとstatusなる情報が目に付く。
> status （略） ステータス 1: 有効 2: Youtube上で非表示 3: このサービス上で削除

オーマイガッ！！参照時にstatus見てねーよ・・・しかもこのデータ一番参照されるデータだよ・・・

余談だが、このサイトでは動画の説明などを取り込んでいるため、Youtube側で非表示となったことを検知した場合、極力表に出ないように設計するべきだと考える。


## 対応案
前述のような場合の対応案を、下記2パターンで検証してみたい。

- SQL直接実行による実装時
- ORM機能を利用した実装時

そもそも、statusなんていうREAD時の大前提となる条件の実装を忘れるなよ！という突っ込みはいったん忘れてくれると大変ありがたい。

## 前提
修正箇所：20か所
試験の方法：手動による機能テスト
　⇒SQLをべた書きするようなプロジェクトではPHPUnitは利用しないだろうという予想から

## SQL直接実行による実装時
### 修正プロセス
べた書きのSQLに対して、そもそもの大前提となるstatusのような条件を加える場合、一つ一つ修正するしか方法がない。
この場合、下記のようなプロセスとなる。

1. 対象となるテーブル名をグレップ検索
2. ヒットしたSQLを一つ一つ修正
3. 修正した機能を一つ一つテスト

### 修正コスト
- グレップ：1回3分
- SQLの修正：1か所30秒
- 動作試験：1か所4分

合計：93分

SQLの修正に30秒もかからないだろうとは思うが、20か所の修正コストの見積もりとして93分はまぁまぁ妥当だろう。

## ORM機能を利用した実装
ORM機能を利用した実装の場合、効率的な対応案としては下記２つがあげられる。
（そのほかにも案をお持ちの方はお教えいただけると幸いです）

- アソシエーションの定義による修正
- query()のオーバーライドによる修正

今回私がとった修正方法はquery()のオーバーライドである。

### ・アソシエーションの定義による修正
今回の対応では採用していないため、ドキュメントの紹介だけしておく。

先にもリンクを張ったが[「アソシエーション - モデル同士を繋ぐ」](http://book.cakephp.org/3.0/ja/orm/associations.html#id2)このページを”condition”で検索すれば、アソシエーションの定義でフィルタすることができる。

大変便利な機能ではあるが、~~一つ一つアソシエーションを直すのが面倒~~今後の設定漏れなどのことも考え採用しなかった。

先ほどの余談でもふれたが「極力表に出ない設計」とした場合、毎回のアソシエーションの定義に依存すべきではないと判断した。

### ・query()のオーバーライドによる修正
ブログになれていないため、長々と書いてしまった・・・
この方法のプロセスとコストは下記のとおり。

### 修正プロセス
1. Tableクラスの修正
2. 1機能を代表して試験

### 修正コスト
- メソッドのオーバーライド：1分
- 動作試験：4分

合計：**5分**

実に、役19分の1の修正コストである。

試験を1機能代表でよいかどうかは議論が分かれると思うが

- find()系メソッドはquery()が実行されること
- アソシエーション適用時にはquery()が実行されること

から1機能を代表すればよいと判断。

### 実際のソース
実際に実装したコードは下記のとおり。
管理画面などで、statusが1以外の情報を取得することも考慮して、$__isAllによってすべての情報にもアクセスできるようにしている。

```php:HogesTable.php
	public function query($type = 'all', $options = []) {
		$query = parent::query();

		if ($this->__isAll) {
			return $query;
		}

		$query->where([
			$this->alias() . '.status' => self::STATUS_ENABLE
		]);
		return $query;
	}
```

# まとめ

SQLの直接実行が消して悪いとは思わない。
パフォーマンスを優先する場合など、とても有効だと思う。

以前、「フレームワークのORMのメリットって何なの？」という問いに答えられなかったことがある。
今後はこのような問いに対して一つの答えを用意できて、非常に有意義な事例が得られたと思う。
30分で作る360度動画プレイヤー

様々な表現が可能なGrimoire.jsでは360度画像なども簡単に表示することができます。そこで今回はElectronと組み合わせて簡易**360度動画プレイヤー**を作りました。

##　360度動画の表示

Grimoire.jsでは３６０度動画の表示も簡単にできます！
![](https://gyazo.com/074bef5a454c1dcb94fa40981531a69f.gif)

この機能とElectronを用いてアプリケーションを作りましょう！
## Electronについて
http://electron.atom.io/

HTMLとjavascriptを用いてデスクトップアプリケーションを制作できます。
Electronについては以下の記事を参考にしました。
http://qiita.com/Quramy/items/a4be32769366cfe55778

実際にElectronでは基本的なアプリケーションの開始、終了の記述しかしていません。
Grimoire.jsで360度動画を全画面に表示してそれをそのままデスクトップアプリケーションにしました。gomlは以下のようになります。

```xml
<goml width="fit" height="fit" containerId="drop-zone">
    <import-material typeName="skybox" src="index.sort" />
    <material id="skybox" type="skybox" texture="video(./sample.mp4)" />
    <scene>
        <camera/>
        <mesh class="geo" scale="50" geometry="sphere" material="#skybox" />
    </scene>
</goml>
```

GOMLは基本的に360度動画を表示するために`sphere`ジオメトリーを`scene`に配置しただけです。一応これだけの記述で360度動画を読み込むことができるようになります。`texture`属性には`video(動画のパス)`と記述しましょう。


閲覧する360度動画を変更できるようにjavascriptを記述します。またマウスホイールで回転できる機能を追加しました。

```javascript
! function() {
    let i = 0;
    gr(function() {
        setInterval(function() {
            gr("#main")(".geo").setAttribute("rotation", "y(" + i / 5 + "d)");
            i++;
        }, 10);

        function handleFileSelect(evt) {
            evt.stopPropagation();
            evt.preventDefault();
            var file = evt.dataTransfer.files[0];
            var reader = new FileReader();
            reader.onload = function(e) {
                console.log(e.target.result)
                gr("#main")("material").setAttribute("texture", "video(" + e.target.result + ")");
            };
            reader.readAsDataURL(file);
        }

        function handleDragOver(evt) {
            evt.stopPropagation();
            evt.preventDefault();
            evt.dataTransfer.dropEffect = 'copy';
        }
        var dropZone = document.getElementById('drop-zone');
        dropZone.addEventListener('dragover', handleDragOver, false);
        dropZone.addEventListener('drop', handleFileSelect, false);
        document.addEventListener('mousewheel', mousewheel, false);
        const camera = gr("#main")("camera").get();
        let num = 0;

        function mousewheel(e) {
            let posY = camera.getAttribute("rotation").Y;
            num += e.deltaY / 100;
            camera.setAttribute("rotation", `0,${posY + num},0`);
        }
    });
}();
```

javascript側ではドラッグアンドドロップのイベントの登録、またその際に動画をGrimoire.jsのAPIを使用して、`mesh`の`texture`属性を変更しています。

基本的にはGrimoire.jsの記述はこれだけです。360度動画プレイヤーも簡単に制作することができました。

### まとめ

Electronを使いGrimoire.jsを組み合わせて簡単に360度画像プレイヤーを制作することができました。もっと機能を追加すれば実用に耐えうるものになってくると思います。
私の記事のまえおき

# 記事を書くにあたり

私の記事の前提となっている事柄を記事としてまとめておきます。
この記事で紹介しているサービスに関連しない場合を除いて、この記事のリンクを冒頭に張っておきます。


# 記事の方向性
先日、とあるサービスを公開しました。
個人的なプロジェクトのため、企画・開発・運用を試行錯誤しながら1人でPDCAしています。
サービスの運用での想いや、蓄積されたTipsやハプニングなどを記事にしていく予定です。
特にTipsはCakePHP3を使われる方にとって有意義なものを提供できればと。

下記は私の記事で取り上げる予定をピックアップしたものです。
## 技術

- LAMPによるWebサービスの公開に関する技術
- 今この記事を書いている時点のバージョンは下記のとおり
<br />※バージョンはあまり変わることはないですが毎回記事に記載する予定ではある
    - PHP：7.0系
    - MySQL：5.6系
    - CakePHP：3.3系
- その他利用しているAPI
<br />※現時点で利用している他社サービス
    - [Youtube Data API](https://developers.google.com/youtube/v3/getting-started?hl=ja)
    - [YouTube JavaScript Player API](https://developers.google.com/youtube/js_api_reference?hl=ja)
    - [Yahoo 検索データ](http://searchranking.yahoo.co.jp/)
    - そのたソーシャル連携（facebook / twitter / hatena など）
- 開発環境
    - Windows 10
    - Eclipse 4.6
    - Vagrant

## 運用
- SEO・アクセス解析などのサイト運用時に必要な情報
- そのた実際の運用で起こったハプニングなど


# 提供しているサービス
- サービス名：TuList
- Description：Yahooで公開されている検索データを利用して、その日のトレンドをYoutube動画でお届けします
- URL：https://tulist.jp/
- スマホ用にQR<br />
![QRcode.gif](https://qiita-image-store.s3.amazonaws.com/0/155677/4619ef57-8ba4-cb4a-e3e4-d9d5cd5e9b97.gif)
【PHP】ループ処理

この記事は [一人PHP総復習 Advent Calendar 2016](http://qiita.com/advent-calendar/2016/php_beginner) 8日目の記事です！
条件分岐同様に頻出するループ処理の基本についてだよ( 厂˙ω˙ )厂

foreach文、for文、while文などがあります！

## foreach文
配列を要素ごとに処理したい時に使います！

### 使い方

```php
<?php

foreach (配列 as 変数名) {
	// 配列の要素ごとに行う処理
}
```
配列の要素を変数に詰めて処理します。

```php
<?php

$animals = ['dog', 'cat', 'caw'];

foreach ($animals as $animal) {
	echo $animal;
}

// dogcatcaw
```

要素を代入した変数（ここでは`$animal`）はループ内でのみ有効。
添字配列でも連想配列でも同様の扱いです。（[【PHP】配列](http://qiita.com/tokutoku393/items/ea2a61765eda1dee8f2e)を参照！）

配列のキーを使って操作したい時は、「キー => 要素」のセットで処理できます。

```php
<?php

$animals = ['dog' => 'John', 'cat' => 'mary', 'caw' => 'moo'];

foreach ($animals as $type => $name) {
	echo $type. 's name is '. $name. '.';
}

// dog's name is John.cat's name is mary.caw's name is moo.
```

## for文
### 使い方

```php
<?php

for (式1; 式2; 式3) {
	// 繰り返し実行する処理
}
```

式1が初期化の式
式2が条件式
式3が増減式

for文の開始時に式1を実行し、式2がtrueだったら式3を実行してループを継続、falseの場合は終了します。

文字にすると難しいですが、主なユースケースは数値を評価して1ずつ増やしていく方法です。

```php
<?php

for ($i=0; $i<5; $i++) {
	echo $i;
}

// 01234
```

`$i++`は加算子で、`$i`に1加えることを表します。
`$i`はただの変数名ですが、特にfor文などの数値を代入する時によく使います。（integerのiかな）

## while文
### 使い方

```php
<?php

式1;
while (式2) {
	繰り返しする処理
	増減式
}
```

式1が初期化の式
式2が条件式
式3が増減式

考え方はfor文と同じですね。

```php
<?php

$i = 0;
while ($i < 5) {
	echo $i;
	$i++;
}

// 01234
```

forとwhileは似たような処理ができるのですが、よく言われる区別は

* for文はあらかじめ回数の決まった連番処理
* while文は数の決まっていない条件を満たす要素の抽出

という感じです。

私はwhile文あまり使わないかも。割と好みで使っても良さそうです。
ただwhile文は増減式を書き忘れると無限ループしやすい（クラッシュする）ので注意が必要ですね！

## do..while文
これまで使ったことがないのであえて省略してみます！！！

## まとめ
foreach文でのループ処理は、PHPでは添字配列と連想配列の処理が同様なのであまり苦しむことはなさそう。
逆に他の言語で処理を書くときに困ると思うので、「違いがある」ことを覚えておきたいです。

よくわからない方は[【PHP】配列](http://qiita.com/tokutoku393/items/ea2a61765eda1dee8f2e)もぜひ参照してください乁( ˙ω˙ )厂
2016年Qiita改善案AdventCalendarを振り返って


2016年Qiita改善案AdventCalendar最後の投稿です。

Qiitaにいいね機能がついてから1ヶ月ちょっと経ちましたが、未だにいいね機能に対する戸惑いを表明する投稿がちらほらあります。
Qiitaを運用しているのは運営会社のIncrementsさんですので、いいね機能をはじめとする様々な機能の導入に関する決定権はもちろんIncrementsさんにあります。
ですが、Qiitaに投稿するユーザーが存在しなければ成り立たないサービスでもあります。
いいね機能導入のタイミングで起きたQiitaの運営に対する不満/要望の投稿を見て、運営に対しての意見をユーザーが発言できる場があってもいいのではないかと思い、このAdventCalendarを始めました。

ちなみに、このAdventCalendarを始めた時には本当に人が集まるのかどうかが不安でした。
最悪自分一人ですべての日を埋めてもいいかとも思っていました。
ですが多くの皆様に参加していただきとても嬉しいです。
参加いただいた皆様ありがとうございます。
これからのQiitaがより良いものになったらいいなと思っています。

<a href='http://qiita.com/shiozaki/items/1483be88d1c624fa9ac8'>[Qiita改善案 AdventCalendar] 人気のあるタグを簡単に見つけられるようにしてほしい</a>
<a href='http://qiita.com/shiozaki/items/e7a49219e64ebeba1ff8'>[Qiita改善案 AdventCalendar] appというタグを勝手にa++にするのをやめてほしい</a>
<a href='http://qiita.com/shiozaki/items/c77cbf1b52b51bb40255'>[Qiita改善案AdventCalendar] Organization一覧ページをContribution順に並び替えてほしい</a>
<a href='http://qiita.com/bezeklik/items/e28ab36e1071e761a277'>「いいね」が使えないのはどう考えてもQiitaが悪い</a>
<a href='http://qiita.com/shiozaki/items/8f4ead32751ab1bf91ed'>kobitoでも```mathで数式を入力できるようにしてほしい</a>
<a href='http://qiita.com/shiozaki/items/41f27dbcdd8e0085c2fe'>ページグパラメーターが大きいときにレスポンスタイムが遅くなる問題</a>
<a href='http://qiita.com/shiozaki/items/601ee53227ec081c3cb4'>[Qiitaのバグ] 他人の書いた限定共有の記事を公開できる(?)</a>
<a href='http://qiita.com/shiozaki/items/e18305e4f82241d6bd8d'>Kobitoでタグの先頭文字を勝手に大文字にするのをやめてほしい</a>
<a href='http://qiita.com/shiozaki/items/54f7e94362f7659e7900'>タグのフォロー解除が分かりづらい</a>
<a href='http://qiita.com/shiozaki/items/26a6fc98e53d86087adb'>kobitoでもプレーンテキスト用のシンタックスハイライトが欲しい</a>
<a href='http://qiita.com/mdstoy/items/933e4112cc2ee9b59b65'>技術でできることの壁（いいねとはなんなのか）</a>
<a href='http://qiita.com/shiozaki/items/a799d5670bbbfd6b3f2b'>[Qiitaのバグ] Contribution数がズレる</a>
<a href='http://qiita.com/shiozaki/items/9ac6011d981e04a47e18'>[Qiitaのバグ] ブラウザの戻るで右上の通知が更新されない</a>
<a href='http://qiita.com/shiozaki/items/74c15b58e7d4c6652e4d'>Kobitoでタグを編集した時にそれが保存されないことがある</a>
<a href='http://qiita.com/shiozaki/items/01a34679e87d300bea1e'>Qiitaのスマホページで見出し一覧が一番下にあるのはおかしい</a>
<a href='http://qiita.com/kobake@github/items/9f3406bed89c08052107'>Qiita のフィードは投稿者の存在を蔑ろにしていると思うんだ…</a>
<a href='http://qiita.com/shiozaki/items/ec55f09f53a4074fee75'>Kobitoでも表の入力のスニペットが欲しい</a>
<a href='http://qiita.com/7of9/items/ce0c75a634fb13877377'>Qiita > 要望 > コメント欄の検索機能を検討していただきたいです</a>
<a href='http://qiita.com/kobake@github/items/e749f3cd7c638690d0cc'>Qiita はウェブ魚拓に対応してほしい</a>
<a href='http://qiita.com/niba1122/items/c52b62cb825b07e245dc'>[Qiita改善案 AdventCalendar]見出し3以降のスタイルがイマイチ</a>
<a href='http://qiita.com/aosho235/items/cb3757be998ae69d3cdf'>[Qiita]タブキーでインデントしたい</a>
<a href='http://qiita.com/kaitoy/items/60e723938ef6fc26f0e0'>Qiitaの今のスライドモードはほぼ無価値だと思う件</a>
<a href='http://qiita.com/bezeklik/items/399994e73bdccf4e536e'>履歴差分の精度が悪くて辛い</a>
<a href='http://qiita.com/richmikan@github/items/8831c97598cc095e2b95'>「口やかましい少数派」に翻弄されるQiitaサポートは無能である</a>
MECEなオブジェクトを生成するnode_moduleを作りました

# The Magus

網羅的にオブジェクトを生成してくれるnode_moduleを作りました。

`npm install the-magus`

**網羅的にスクレイピングしたいときに便利**です。

https://github.com/ito-p/the-magus

## 使用例
検索ワードの組み合わせを変えて、検索用のjsonデータを作成します。

### 実装

```js

// 検索ワードの組み合わせを定義
const word = ['the-fool', 'json スクレイピング'];
const tech = ['node', 'node.js'];
const qiita = ['qiita', ''];

// テンプレートとするデータを定義
const templateData = {
  data: [
    ['goto', 'https://www.google.co.jp'],
    ["type", "form[action='/search']", "$word $tech $qiita"], // $マークの後に変数名
    ["click", "form[action*='/search'] [type=submit]"],
    ["wait", "._NId h3 a"],
    ["snatch", "._NId h3 a", "innerText"]
  ]
};

const magus = new Magus({ word, tech, qiita }, templateData); // { word }はes6のshorhandです
magus.produce((product) => {
  console.info(product);
});
```

### 実行結果

```js
/*
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'the-fool node qiita' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'json スクレイピング node.js ' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'the-fool node qiita' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'json スクレイピング node.js ' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'the-fool node qiita' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'json スクレイピング node.js ' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'the-fool node qiita' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
{ data:
   [ [ 'goto', 'https://www.google.co.jp' ],
     [ 'type', 'form[action=\'/search\']', 'json スクレイピング node.js ' ],
     [ 'click', 'form[action*=\'/search\'] [type=submit]' ],
     [ 'wait', '._NId h3 a' ],
     [ 'snatch', '._NId h3 a', 'innerText' ] ] }
*/
```

the-foolと併せて使うと凶悪ですね！
http://qiita.com/ito-p/items/29398c1385ad48fc71c3

# 注意

ご使用は自己責任でお願いします。
Linux Desktop 随想

## Linux Desktop が使えると感じて来たので、メリットをいろいろかいてみる

* ネット検索するだけなら、十分に使える
* 中古のノートパソコンで、軽く動く
* メジャーなパッケージがあって、日本語も問題なし
* git の連携が楽
* libreoffice もとりあえず使える
* パッケージ管理が整っている
* 多くのパッケージが、Linux Desktop アプリを、windows,Mac と同時に出してくる
* インストールが簡単
モデリングど素人の僕がBlenderを触ってみた。

# BlenderYochi
2016年12/23(金曜)に[UE4よちよち勉強会_特別回Blender会](https://atnd.org/groups/ue4yochi)を開催しました.

BlenderYochiのレポートを書きます。

## なにしたい？
Blenderが使える知り合いのデザイナーにチュートリアルをやっていただきました。
* 粘土遊びがしたい → モデリングをしたい?
* 人形遊び → モーションを作りたい?

ということで, <b>粘土遊び</b> がしたいとおもっていたので、初めてモデリングをやりました.

## 四角から人が作れるですか？
まず、チュートリアルをやっていただいた方に、立方体を出してください!

と言われて,「え、立方体から人って作れるんですか！！！！」と驚愕してました.

## 基本操作
[参考記事](http://qiita.com/nenjiru/items/24a14edfe55b9bdd8d36)

### ショートカット
`ctrl + up arrow` でカーソルのあるウィンドウを全画面表示

* `A`: 全選択／選択解除
* `B`: ドラッグ選択
* `C`: 塗りつぶし選択
* `G`: 移動
* `R`: 回転
* `S`: 拡縮
* `N`: 各数値パネル
* `T`: ツールパネル

## やったこと
### 特に多様したショートカット!!
`EditMode`
* `Ctrl` + `R` : 図形の切断
* `面選択` + `e` : 面を平行に増やす
* `A`: 全選択／選択解除

### 立体を切る

![cut01.png](https://qiita-image-store.s3.amazonaws.com/0/102634/6a4255bb-8130-da66-48aa-864725abe166.png)

`Ctrl` + `R` : 図形の切断

![cut02.png](https://qiita-image-store.s3.amazonaws.com/0/102634/7d14ef36-88a6-b7f8-9801-5ec4661c5bbe.png)

![cut03.png](https://qiita-image-store.s3.amazonaws.com/0/102634/6c2007c3-0e1b-8417-e8fc-70902185c16b.png)

### 立体を増やす
![add01.png](https://qiita-image-store.s3.amazonaws.com/0/102634/5a89640c-ba31-cdf6-430c-efea294bb6b3.png)

`面選択` + `e` : 面を平行に増やす

![add03.png](https://qiita-image-store.s3.amazonaws.com/0/102634/d1f25d42-9f3c-f072-fdd6-ed0e7747869a.png)

### 角を丸くする

![sm_after.png](https://qiita-image-store.s3.amazonaws.com/0/102634/5adb6cf5-7340-c2e3-d421-dafd820ae0ca.png)

`ObjectMode`にすると

![prop01.PNG](https://qiita-image-store.s3.amazonaws.com/0/102634/7b72f346-12f7-f876-4f2f-99496dc206ed.png)

### 色を付ける
マテリアルを選択

![MaterialSetting.PNG](https://qiita-image-store.s3.amazonaws.com/0/102634/7123bcef-41c7-e0e3-a8f2-62d84104f43a.png)

### 完成品
結局、土偶みたいのしかできませんでした…

![comp.PNG](https://qiita-image-store.s3.amazonaws.com/0/102634/32e72737-2e0b-0105-1f6c-0ac66ceaecf6.png)

ひ…人を作ろうと思ってたんですよ…

とりあえず、これから精進します…

次回は、[第２回：2016年2月12日（日）](https://atnd.org/events/84608)
2016年にやった勉強総振返り！

こんにちは。

2016年の一年間を通して読んだ書籍、行った勉強会を羅列したいとおもいます。
（※雑誌、個人で行った勉強会は除く）




## 2016年01月
［勉強会］
関ジャバ Java開発のためのDocker & てらださんせきらら in MS関西
https://kanjava.connpass.com/event/25139/

［書籍］
Guide to ScalaーScalaプログラミング入門
http://amzn.to/2hVG6H4						
								

> 勉強会、てらださんオンパレードがおもしろかったです。
> Scala本は導入がてら、読んでみました。100円だし。
> コップ本は来年よもうかな。
						
								
## 2016年02月						

［勉強会］
JJUG-CCC再演祭 in 大阪
https://kanjava.connpass.com/event/24478/

［書籍］
Web制作の現場で使う jQueryデザイン入門［改訂新版]
http://amzn.to/2hVDYz9						

> 勉強会、Javaはまだまだ奥が深い・・！難しい部分がありましたが、知らないことがたくさんあるんだなと痛感しました。
> 
 							
								
								
## 2016年03月						
［勉強会］
【京都再演】ドメイン駆動設計のためのオブジェクト指向入門
https://kansaiddd.connpass.com/event/25315/
						
> DDDとの出会い？とも言うべき衝撃を覚えました。
> 良い設計を書きたいと感じました。							
								
								
## 2016年04月	
［書籍］					
SCRUM BOOT CAMP THE BOOK
http://amzn.to/2i4u8sx		
> SCRUMマスターにおれはなる！！と感じた一冊。
> 受けるのお金かかるけど。							
														
								
## 2016年06月	
［勉強会］					
Agile Japan 2016 大阪サテライト
https://agilejapanosaka.doorkeeper.jp/events/41429		
> ソラコムの方や、原田さんのカイゼンの登壇が印象的でした。
> やはり、開発手法に興味があるんだなぁと感じた日。

## 2016年07月	
［勉強会］					
Kansai.kt #1
https://kansai-kt.connpass.com/event/33446/									
> こっとりーん♪					
									
## 2016年08月
［勉強会］								
カンバンを作ってみよう
https://devlove-kansai.doorkeeper.jp/events/50185

［書籍］
カンバン仕事術
http://amzn.to/2hDM0tk								
> 勉強会、書籍ともにカンバン一色でした。
> カンバンやってみたい〜！								
									
									
## 2016年09月	
［勉強会］						
SIerから飛び出して、それからどうするの？
https://devlove-kansai.doorkeeper.jp/events/51174

Developers Summit 2016 KANSAI
http://event.shoeisha.jp/devsumi/20160916/
> この２つの勉強会は連日だったような気がする。
> 刺激しか受けない。デブサミは毎年行きたい勉強会の１つ。									
									
									
## 2016年10月
［勉強会］							
ドメイン駆動で開発する〜初期のラフスケッチから実装まで〜
https://devlove-kansai.doorkeeper.jp/events/52780

【大阪】【再演】Git入門【女性も男性もOK】
https://javajok.connpass.com/event/40780/			
	
［書籍］
デザインの教室 手を動かして学ぶデザイントレーニング
http://amzn.to/2hDHFGN
> 再度DDDの勉強会へ。このときにはすでにDDD本を読見始めているので、
> ことばとか、ついていける部分が増えていた。嬉しい。
> Gitは体系的に学べ、周りにも広めようと思いました。
								
						
## 2016年12月	
［勉強会］								
Angular2勉強会
https://gdgkobe.doorkeeper.jp/events/54256

［書籍］
エリック・エヴァンスのドメイン駆動設計
http://bit.ly/2iqPjZb
> Angurar2、ハンズオンがたのしかった。
> 初心者でも途中まではついていける。
> 念願のエヴァンス先生読了はうれしかった。

　　
と、2016年もインプットインプットした一年だったと思う。
IT業界でも、自分がどの分野に興味があるのかが、目に見えてわかるようになってきた。
つまり偏りができてきたかな。
　　
来年は、少し業界以外に触れ、リフレッシュしながら注力できたらいいなと思います。
読みたい本、やりたいこと、体感したいこといっぱいあるのがいい悩み。

アウトプットして、ちしき固めていくぞ〜。
ツールやサービスを探す際にお世話になっているサイトまとめ

ツールやサービスを探す際にお世話になっているサイトをまとめました
(筆者の利用頻度が高い順に並んでいます)

## Stackshare

https://stackshare.io/

[ここ](http://qiita.com/syui/items/28b231196eb191ab91b2)にもあるとおり、ツールやサービス、それらの流行を把握する際に利用しています。
現在hotなstackとその構成toolsが確認できるのは便利ですね。

![スクリーンショット 2016-12-25 16.55.49.png](https://qiita-image-store.s3.amazonaws.com/0/24177/9f329175-e4d3-7eaa-9044-e1c59013eb32.png "スクリーンショット 2016-12-25 16.55.49.png")



## Slant

https://www.slant.co/

[Slant is a product recommendation community](https://medium.com/building-slant/what-is-slant-5a836b200c0#.kmqwp5idq)とあるとおり、色々なものが質問と共にオススメされています。

よく[Development](https://www.slant.co/tags/development)タグ下を覗いています。

Slantの良いところは質問ベースで検索ができるところです。
例えば"continuous inte..."で検索した場合、以下のような質問からより要件に沿った絞り込みが可能です。

![スクリーンショット 2016-12-25 16.53.14.png](https://qiita-image-store.s3.amazonaws.com/0/24177/d7e6d128-e1d9-32af-729b-cd5eb080ff74.png "スクリーンショット 2016-12-25 16.53.14.png")


## Crozdesk

https://crozdesk.com/

ビジネス用ソフトウェアを探す時に利用しています。
比較表の作成が簡単な所が良いですね。

![スクリーンショット 2016-12-25 17.01.44.png](https://qiita-image-store.s3.amazonaws.com/0/24177/bf2c5681-91c3-2039-1482-b884f58ac9ad.png "スクリーンショット 2016-12-25 17.01.44.png")


## LibHunt

https://www.libhunt.com/

[BYOSなソフトウェア](https://selfhosted.libhunt.com/)や[SysAdmin向けソフトウェア](https://sysadmin.libhunt.com/)を探す時に確認しています。


![スクリーンショット 2016-12-25 17.02.57.png](https://qiita-image-store.s3.amazonaws.com/0/24177/f13961b4-56e6-f98e-50b4-e2bbbed7b408.png "スクリーンショット 2016-12-25 17.02.57.png")
ElectronでCSSをJSのrequireを使って読み込む

Electron Advent Calendar 25日目が空いていたので今思いついた適当な記事で埋めてみる。

Electronでは`babel-register`を使えばwebpackとかを使わないで変換できるし、そもそもChromiumの新しいバージョンで動くのでBabelもいらないケースもある。async/awaitも55には乗るしね（今はまだ53）。

CSSも同じように、CSS Variablesは使えるし、コンポーネントごとにCSSを分割していけばセレクタのネストもなくてもほとんど問題ないのでSassもpostcssもいらない。そうすると`./node_modules/.bin/electron`だけで開発環境が起動できてハッピーだ。

ただ、コンポーネントごとにCSSを分けるとめんどうなのがいちいち`main.css`とかに`@import`を買いてCSSを読み込まないといけない点。せめてwebpackのstyle-loaderみたいにJSの中で`import './Foo.css'`みたいにできればコンポーネント内で解決できるので嬉しい。

そこでNode.jsの`require.extensions`でこんな感じにしてみるとどうかと思った。

```javascript
require.extensions['.css'] = function(m, filename) {
  let link = document.createElement('link');
  link.setAttribute('rel', 'stylesheet');
  link.setAttribute('href', filename);
  document.head.appendChild(link);
};
```

これで

```javascript
require('./Foo.css');
```

みたいにすると`head`内に`link`要素がappendされてCSSが読み込まれる。リリース時にbundleしたいときはwebpackのcss-loaderとstyle-loaderを使えばたぶん動く（未確認）。

実際にこれで読み込まれるのは確認したけど実際のプロジェクトでは試してないので何か問題はあるかも。どうだろうか。
nginxやってみた


備忘録として...

# nginxとは
読み方はエンジンエックス。Apacheと同様でフリーでオープンソースなWebサーバ。

**環境**

- OS : Windows 10
- ngimx 1.10.2

# とりあえず動かしてみた

## nginx起動

nginx-X.X.Xのディレクトリ直下へ移動して

```nginx
start nginx
```

と入力する。

これで起動と思ったら、起動しない。
調べてみると

```
failed (1113: No mapping for the Unicode character exists in the target multi-byte code page)
```

と出ている。どうやらnginxを保管したディレクトリに日本語が含まれているのが問題。そこで、日本語が含まれないディレクトリへnginxを保管して再度、nginxを起動後、ブラウザを開いてhttp://localhost と入力。

すると、

![nginx1.PNG](https://qiita-image-store.s3.amazonaws.com/0/144079/06473411-6053-4659-faf2-e70212d65c13.png)

と表示されてとりあえず成功。

## nginxを止めるときは

```nginx
nginx -s quit
```

でおｋ。

## nginxの設定の更新

nginxの設定ファイル(~\nginx-1.10.2\conf\nginx.conf)を変えて、更新するときは

```nginx
nginx -s reload
```

と入力。

## help

```nginx
nginx -h
```

# nginxの設定(nginx.conf)
nginx.confファイルを開くといろいろと書かれているが、そこは後でやるか置いといて、一部抜粋。

```nginx
http {
    server {
    }
}
```

これが基本的な設定の構造となり、このserverの中にいろいろ設定を加えていく。

## locationブロック

例えば、こんなの

```nginx
location / {
    root html;
}
```

これは元々設定されている物を抜粋したものだが、これは
locationの後にポート番号もしくはサーバー名の後に続く接頭辞を設定し、rootの所でnginx-x.x.x下のディレクトリ（ここではルートディレクトリ）を設定している。

では、新しいディレクトリを設定してみることにする。
ここで、locationブロックを追加するのだが、これは同じserverブロック内で大丈夫。nginx-x.x.xフォルダの中に元々、htmlというフォルダがあるのでその中にtestというフォルダを作ってそのフォルダ内にhello.htmlを作る(Hello Worldが表示される)。

```nginx
location /test/ {
    root html;
}
```

`nginx -s reload`と入力して更新してから、ブラウザでhttp://localhost/test/hello.html と入力する。無事にHello Worldと表示されるはずだ。
これでhtmlフォルダ内のtestフォルダ内のファイルを覗くことができるようになった。

# Basic認証
nginxでBasic認証をしてみました。

まず、windowsで.htpasswdの設定をしないといけない。
一番楽だったのが、[このサイト](http://www.htaccesstools.com/htpasswd-generator-windows/)。このサイトにあるUserとPasswordに好きなものを入れてCreate .htpasswd Fileをクリックして出てきたテキストをコピー&ペーストしてローカルのどこかに.htpasswdのファイル名で保存すればいい。

nginxのBasic通信の設定


```nginx
location / {
    root   html;
	auth_basic "Restricted";  #この部分を追加
	auth_basic_user_file .htpasswd;  #この部分を追加
    index  index.html index.htm;
}
```

これを保存して`nginx -s reload`してhttp://localhost/ でアクセス（一応ブラウザの機能でプライベートウィンドウで開いてください）。

すると、

![キャプチャ3.PNG](https://qiita-image-store.s3.amazonaws.com/0/144079/70096a9a-9a43-27b1-068c-6988ad561f07.png)

と認証の確認をしてくれて、これでBasic認証はできた。登録したユーザー名とパスワードを入力して、

![nginx1.PNG](https://qiita-image-store.s3.amazonaws.com/0/144079/b20e12ce-08a6-5904-9456-37a36b4b5f33.png)

がなのが表示されれば成功。
認証を拒否してアクセスすると、

![キャプチャ1.PNG](https://qiita-image-store.s3.amazonaws.com/0/144079/915e71b0-8db8-ac6c-813e-e9d45df79e79.png)

が出て確認終了。

# おわり
まだまだnginxでできることややりたいことがあると思うので、その都度更新していければいいかと。
js 二つの配列の差分を求める

##お題
二つの配列の差分を求める。


```js
function diffArray(arr1, arr2) {
//write your code.
}
diffArray(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]);
```

##出力結果　例

```js
[1, 2, 3, 5], [1, 2, 3, 4, 5] // [4]
[1, "calf", 3, "piglet"], [1, "calf", 3, 4] // ["piglet", 4]
[], ["snuffleupagus", "cookie monster", "elmo"] // ["snuffleupagus", "cookie monster", "elmo"]
[1, "calf", 3, "piglet"], [7, "filly"] // [1, "calf", 3, "piglet", 7, "filly"]
```

##使ったもの
indexOf()
for文
if文
push()

##考え方
・newArrを宣言してここに差分を代入する。
・for文にてarr1とarr2を比較して、indexOfが−1になった数値をnewArrにpushする。
 for文二つで、arr1にあってarr2にないもの、arr2にあってarr1にないものをそれぞれpushする。
・return newArryで差分を返しておわり。



##コード

```js
function diffArray(arr1, arr2) {
  var newArr = [];
  for(var a = 0 ; a < arr1.length; a++){
    if(arr2.indexOf(arr1[a]) === -1 ){
      newArr.push(arr1[a]);
    }    
  }
  for(var b = 0; b < arr2.length; b++){
    if(arr1.indexOf(arr2[b]) === -1 ){
       newArr.push(arr2[b]);
       }
  }
  return newArr;
}
diffArray(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]);
```

##アロー関数を使ったコード

```js
function diffArray(arr1, arr2) {
   return arr1.concat(arr2)
    .filter(item => !arr1.includes(item) || !arr2.includes(item));
}
```

###他にもコードが浮かんだ方、コメントおまちしております。
2016年 ETロボコンAdvent Calendar まとめ

本記事は [ETロボコン Advent Calendar](http://qiita.com/advent-calendar/2016/etrobo) の最終日の記事です。

まだまだ完走を目指して続いているようですが、本来の最終日なので一足先に振り返りたいと思います。


# 今年のカレンダーを振り返る

始動が他のカレンダーに比べて遅かったのでとても不安でしたが、協力してくださったみなさんのおかげで予想をはるかに超えた「来年の参加者に紹介できるノウハウページ」ができました。ありがとうございました。

## 実行委員カレンダーの危機
最初に登録してくれたのは実行委員ばかりで、まるで実行委員カレンダー（笑）と言われたりしましたが、そんな状況を破ってくれたのは[@taketomato](http://qiita.com/taketomato)さんでした。

## 『「ETロボコン Advent Calendar 2016」が有るではないかｯ！！！』

あまりに嬉しかったので記事の内容をタイトルにしてみました。
今年のAdvent Calendar をするかどうか結構悩んだのですが[てぽ丼](http://teppodone.hatenadiary.jp/entry/chromebook_for_ETrobocon)さんの記事の最初３行を見て、今年もやってよかったと思いました。
来年もこういう、チャレンジしてみた記事を書いてくれる人が現れることを期待しています[^fn1]
ついでに言っておくとMacもつい最近までは開発環境としてはありえない部類でした。地道な布教次第では充分に第三の開発環境となり得るとおもいます :wink:  

## 参加者OBも大活躍

今年は忙しかったり、書く勇気がなかったりして投稿はしなかったけど、読んでくれていたあなた、読者がいることも大変励みになりました。ありがとうございました。
今年のカレンダーに書いてくれた実行委員の多くはOBでもあります[^fn4]。
来年もきっとAdvent Calendarを立てていると思うので、来年は参加しないという人もOB枠での参加をお待ちしています！

## TOPPERSからも参加
今年はTOPPERS方面からもmruby on EV3RT + TECSの開発チームを代表して[＠robotan0921](http://qiita.com/robotan0921)さんが投稿してくれました。
告知に協力してくれた中の人もありがとうございました。

## 告知協力のお礼とお願い
twitterやFacebookで記事を紹介してくれたり、RTしてくれた人、職場や学校の人に薦めてくれた人、ありがとうございました。
来年もやると思うので、何か面白いことをしてるチームがいるなと思ったらAdvent Calendarへの投稿を薦めてみてください。


# これからあなたができること

Advent Calendarとしては最終日を迎えましたが、これで終わりではありません。

幸い？まだ空きがあります。25日過ぎても投稿できそうですw[^fn2] 投稿してみたかったけど、忙しくてできなかった方、冬休みにチャレンジしてみてはいかがでしょうか。来年の参加者が読むにはまだ間に合います。(完走させようとがんばってる人もいるので、書こうと思ったら先に「参加登録」しておいてください。もし、枠が埋まった後に紹介してほしい記事ができたら本記事のコメント欄で教えてください。リンク貼ります！)

## 来年の参加者に伝えよう
あなたがこのカレンダーを気に入ってくれたなら、来年の参加者にこのカレンダーを紹介してください。


# コメントやissueで情報を充実させよう

これが今日の記事で一番お伝えしたかったことです。
もし、記事を読んでいて間違いに気づいたらコメント等で補足してあげてください。今正しい情報も時と共に古くなってしまうこともあります。また、特定の環境だとエラーになる場合もあり得ます。

私自身が今年、コメントに助けられたので、事例として紹介します。
以前、[Mac OS X でETロボコンに出よう！(EV3RT 環境構築編）](http://qiita.com/yamanekko/items/3cee3991ea9472a1f6b6)という記事を書いていました。今年(2016年)はEV3RTのビルドコマンドが変更されましたね。多忙で更新しそびれていたら、コメント欄にて[@noanoa07](http://qiita.com/noanoa07)さんが補足してくれました。（ありがとうございました！）
本文を見てあれ？エラーになる！？と思ったけど、コメントに助けられた方もいたんじゃないでしょうか。
このようにあなたの一手間が他の人を救い、情報を生き返らせることができるのです。
必要な情報が出てきて助かったわーで終わるのではなくて、あなたの発見もみんなに教えてあげてください。

ちなみに[ETロボコンのGithubページ](https://github.com/ETrobocon/etroboEV3)も[issue](https://github.com/ETrobocon/etroboEV3/issues)が書けるようになっているので、ミスや古くなっているところ等があればぜひお知らせください。

# 最後に

このような素晴らしい企画をETロボコンに運んできてくれた[@Y_uuu](http://qiita.com/Y_uuu)さん[^fn3]どうもありがとう！

Happy Holidays! :christmas_tree:

[^fn1]: とはいえ、CS大会でネタを拾えなかったのは申し訳ないです。（私が参加してたら全力で拾いに行ってたのですが・・・）

[^fn2]: 去年のAdvent Calendar　の投稿するボタンも生きているようなので

[^fn3]: 2014, 15年のCalendar作成者

[^fn4]: 実行委員OBさんもいましたね
fluentdからrtailにログを送る

[rtail](http://rtail.org/)というリモートサーバからログを受信してまとめて表示するCloudWatch LogsのようなOSSがありまして、クライアントのソースコードを読んだところUDPでメッセージを送っているだけだったので、fluentdのプラグインを書いてみました。

[winebarrel/fluent-plugin-rtail: Fluentd output plugin for rtail.](https://github.com/winebarrel/fluent-plugin-rtail)

# インストール

```bash
gem install fluent-plugin-rtail
```

# 動かしてみる

rtail-serverを起動して、[localhost:8888](http://localhost:8888)にアクセスします。

```bash
rtail-server
```

fluentdを以下のような設定で起動します。

```
<source>
  @type forward
  @id forward_input
  @label @forward_input
</source>

<label @forward_input>
  <match **>
    @type rtail
    flush_interval 0s
  </match>
</label>
```

fluentdにログを投げます。

```bash
echo '{"id":"foo","content":"Zzz.."}' | fluent-cat -t rtail.data
```

rtailのほうで、fooというストリームが作成されて、fluentdから送られてきたログが表示されます。

<img width="498" alt="スクリーンショット 2016-12-25 16.38.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/20100/3a7cd557-d44e-acea-72d9-4705e219fb3b.png">

# そのた

* `use_tag_as_id: true`とすると、タグをストリームIDにします
* `use_record_as_content: true`とすると、フィールドの値ではなくレコードそのものをrtailに送信します（rtailはJSONを構造化されたデータとして扱います）


どうぞご利用ください。
メリークリスマス
畳み込みニューラルネットワーク体験

ひょんなことから深層学習を勉強しています。これまでQiitaにて深層学習のさわりについて書いてきました。

[Chainerを用いた簡単なニューラルネットワーク実装](http://qiita.com/moroku0519/items/101958f25feff759c0e0)
[Chainerを用いた簡単なニューラルネットワーク実装〜データの準備編〜](http://qiita.com/moroku0519/items/aed0ad38040a234cc9ed)
[Chainerを用いた簡単なニューラルネットワーク実装〜モデルの記述編〜](http://qiita.com/moroku0519/items/e6ef1fd0a3ee87bfd570)
[Chainerを用いた簡単なニューラルネットワーク実装〜最適化アルゴリズムの設定〜
](http://qiita.com/moroku0519/items/0952ed5b24a77aed7fe6)

目標としては画像を読み取り、それがなにであるのか分類するアプリを作りたいため、畳み込みニューラルネットワークについて勉強をします。理論の勉強ももちろんですが、実際にマシンに画像を学習させるとはどういうことなのか体験してみることにしました。

#先人の知恵にあやかる
以前、こんな記事を見つけておもしろいな〜と思ったことがあります。
[ディープラーニングでおそ松さんの六つ子は見分けられるのか 〜実施編〜](http://bohemia.hatenablog.com/entry/2015/11/22/174603)

こちらの分類器にはchainerのNINモデルという[ImageNet](http://image-net.org/)を元に改造したモデルを使っています。
参考にしていたブログは
Hi-kingさんの
http://hi-king.hatenablog.com/entry/2015/06/11/021144
と
shi3zさんの
http://d.hatena.ne.jp/shi3z/20150709/1436397615
です。

サンプルのImageNetを動かしたかったのでこれらのブログを参考にすることに。（特にshi3zさんのブログはいつも読ませて頂いています!!!）

ただし、chainerはバージョンが変わるたびに仕様がころっと変わるため、１年以上前の記事であるこれらを参考にする際、注意が必要でした。
躓いた点は[こちら](http://qiita.com/moroku0519/items/c50bc6558a34c3b29e4d)にまとめてあります。

あとは上記ふたつの記事を参考にすれば学習してくれます。

#実行環境
参考までに実行環境を書いておきます。
OS:Ubuntu14.04
GPU:GeForce GTX 750 Ti
memory:8GB

#実践
##学習中の様子

![Screenshot from 2016-12-25 16:14:02.png](https://qiita-image-store.s3.amazonaws.com/0/28622/5202aa4f-98c5-c6f3-beb7-912c4b5e2e73.png)

errorが0.2付近に近づけば学習を終了します。あまりにerrorが低すぎると過学習になってしまいます。

epochというのが学習のサイクルです。回数が増えるほど学習が進んでいます。
例えば、今回認識させてみた画像がこちら。

![dalmatian.jpg](https://qiita-image-store.s3.amazonaws.com/0/28622/3667b001-6fb0-703b-5daf-9f6af5e7feaf.jpeg)

かわいらしいダルメシアンです。
ImageNetの画像にダルメシアンがいたため、今回はダルメシアンを採用しました

ImageNetのダルメシアン画像
![Screenshot from 2016-12-25 16:25:30.png](https://qiita-image-store.s3.amazonaws.com/0/28622/8c896634-3120-b424-ee2d-8cafa06a5c84.png)

他にもサッカーボールとは陰と陽など、ダルメシアンと似た特徴（白黒の斑点）をもつ画像もちらほら。

##学習結果
まずは1epochだけ学習した場合の結果がこちら
![Screenshot from 2016-12-25 16:18:56.png](https://qiita-image-store.s3.amazonaws.com/0/28622/3c3de199-e664-d353-22e6-32be83ae3f67.png)

飛行機である確率43.1%、、、と。

![おまえは何を言っているんだ.jpg](https://qiita-image-store.s3.amazonaws.com/0/28622/fc55ec3a-a4d9-925d-7440-72e1b84551bb.jpeg)

さすがにまだ賢くありません。

しかし、これが28epoch進むと、

![Screenshot from 2016-12-25 16:19:35.png](https://qiita-image-store.s3.amazonaws.com/0/28622/bfead69c-1f87-d504-6de1-f9b3bed8f3e2.png)

ダルメシアンである確率99.9%

![20c003f3.png](https://qiita-image-store.s3.amazonaws.com/0/28622/6b5265e3-86fe-a994-af53-2808cb78de62.png)

見事賢くなりました。

#おわりに

まずは画像をマシンに分類させるということがどういうことか体験することが出来ました。
今後の予定としては、
-サンプルではなく、自分の好きな画像を学習させる
-畳み込みニューラルネットワークの原理を理解すること
を目標に、勉強をしていきます。

#参考
ディープラーニングでおそ松さんの六つ子は見分けられるのか 〜実施編〜
http://bohemia.hatenablog.com/entry/2015/11/22/174603

PFN発のディープラーニングフレームワークchainerで画像分類をするよ(chainerでニューラルネット1)
http://hi-king.hatenablog.com/entry/2015/06/11/021144

ChainerのNINで自分の画像セットを深層学習させて認識させる
http://d.hatena.ne.jp/shi3z/20150709/1436397615
bcdeditのメモ

# bcdeditとは
* windowsのブートローダーデフォルト起動や表示順の設定をするツール。
* わかりにくいしわかりにくい。
* EFIの起動の設定もできるとか聞いてなかった

デュアルブートをするときは参考にしてね

# 環境
* surface pro 3

# とりあえず動かそう
```
>bcdedit
```

もしくは

```
>bcdedit /enum
```

管理者権限が必要です（そりゃあそうだよね）
するとwindows ブートマネージャーとかwindowsブートローダーとか出てきます。
この中身はwindows側のブートローダーの設定です
こっちの説明は比較的多いので今回はこっちは省略します（えっ

# uefiの設定を変えたい
```
>bcdedit /enum firmware
```
ここからデフォルトの起動を変更できます
biosの設定のように上から順番に読み込まれますのでデフォルトにしたいものをあげればOKです
wreqでSSL通信が遅い場合の対処法

[wreq](https://hackage.haskell.org/package/wreq) はデフォルトで [http-client-tls](https://hackage.haskell.org/package/http-client-tls) を使ってSSL通信するのだけど、これが結構遅くてビビった[^1]。

[^1]: プロファイルしてみた感じ Data.ByteString.Base64 周りで時間喰ってそう

そこで、 [tls](https://hackage.haskell.org/package/tls) パッケージではなく OpenSSL の Haskell バインディングである [HsOpenSSL](https://hackage.haskell.org/package/HsOpenSSL) に差し替えてみたら、手元で 40 秒かかっていたバッチの実行時間が 30 秒まで短くなった。 25% の改善。

差し替えるには、 `HsOpenSSL` パッケージと `http-client-openssl` パッケージへの依存を `*.cabal` へ追加して、

```haskell
import qualified Network.Wreq as Wreq

main :: IO ()
main = do
  res <- Wreq.get uri
  ...
```

的な部分を、

```haskell
import Control.Lens ((&), (.~))
import qualified Network.HTTP.Client.OpenSSL as COpenSSL
import qualified Network.Wreq as Wreq
import qualified OpenSSL
import OpenSSL.Session (context)

opts :: Wreq.Options
opts = Wreq.defaults
     & Wreq.manager .~ Left (COpenSSL.opensslManagerSettings context)

main :: IO ()
main = OpenSSL.withOpenSSL $ do
  res <- Wreq.getWith opts uri
  ...
```

としてやるとよい。ってことは、 [wreqのドキュメント](https://hackage.haskell.org/package/wreq-0.4.1.0/docs/Network-Wreq.html#v:manager) にさらっと書いてあった。
マテリアルデザインの「色」について見返したいとこだけ抜粋してまとめる

# 前置き

普段 iOS しか作らない&触らないけど Android を作ることになり、せっかくならマテリアルデザインっぽくしてみようとちょっとだけ調べてみたら **ここまで細かく決まってたのか** と驚いた。

これから書くことはほぼ全部以下リンク先に書いてあります。(しかも分かりやすい)
この投稿は下記を読むのが面倒くさい且つとりあえず触りだけ知っておきたい人用です。
https://material.io/guidelines/style

この投稿の目的は2つ

* 上記ページの繰り返し見返したい情報だけを抜粋してまとめておく
* マテリアルデザインって **ここまで細かく決まってたのか** という驚きを誰かに共有したい

※「色」についての話しかしません
※注釈の内容は参照元ページからのコピペと超ざっくりした意訳です

# 目次

* [Primary color、Accent color](#primary-coloraccent-color)
* [テキストの色](#テキストの色)
	* [黒か白か](#黒か白か)
	* [Opacity](#opacity)
		* [テキスト](#テキスト)
		* [アイコン](#アイコン)
* [背景色](#背景色)
* [参考リンク](#参考リンク既に紹介済み)

# Primary color、Accent color

まず Primary color[^1]、Accent color[^2] なるものを決める。

**選べる色は限られている。**
以下サイトで好みの色を2つポチポチしてダウンロード。

https://www.materialpalette.com/

* Primary darkってのもよく使うけどこれは勝手に決まる
* Accent colorの使いどころの説明は難しいので割愛。これも参照元ページに書いてある。

# テキストの色

## 黒か白か

当然ながら、背景色が暗ければテキストの色は白、淡ければ黒を用いる。
判断に迷う場合はパレット上の文字が黒か白かを確認する。

https://material.io/guidelines/style/color.html#color-color-palette


## Opacity

テキストの色はグレーにせずOpacity(不透明度)で調整する。
Opacityはあらかじめ決められた値を指定する。

### テキスト

|黒いテキスト|Opacity|
|:------------------|:------|
|Primary text[^3]|87%|
|Secondary text[^4]|54%|
|Disabled text, hint text[^5], and icons|38%|
|Dividers|12%|

|白いテキスト|Opacity|
|:------------------|:------|
|Primary text|100%|
|Secondary text|70%|
|Disabled text, hint text, and icons|50%|
|Dividers|12%|

### アイコン

アプリのアイコンではなくアプリ内でボタンとなるようなアイコン。
黒か白を使うのが望ましい。

|黒いアイコン| Opacity |
|:---|:---|
|Active icon|54%|
|Inactive icon|38%|

|白いアイコン| Opacity |
|:---|:---|
|Active icon|100%|
|Inactive icon|50%|

# 背景色

Light theme, Dark theme それぞれの背景色も指定されている。
**Status bar と App bar は  Primary color とか使うんじゃないの？**と思うけどとりあえず載っけとく。

|Light theme|Color|
|:----------|:------|
|Status bar|#E0E0E0|
|App bar|#F5F5F5|
|Background|#FAFAFA|
|Cards/Dialogs|#FFFFFF|

|Dark theme|Color|
|:----------|:------|
|Status bar|#000000|
|App bar|#212121|
|Background|#303030|
|Cards/Dialogs|#424242|


# 参考リンク(既に紹介済み)

* https://material.io/guidelines/style/color.html
* https://www.materialpalette.com/

[^1]: When using a primary color in your palette, this color should be the most widely used across all screens and components.
[^2]: FAVボタンやインディケータなどインタラクティブな箇所に使う色。The accent should be used for the floating action button and interactive elements, such as: Text fields and cursors, Text selection, Progress bars, Selection controls, buttons, and sliders, Links
[^3]: The most important text
[^4]: 比較的優先度が低いテキスト。Secondary text, which is lower in the visual hierarchy
[^5]: テキストフィールドのプレースホルダとかの文字。Text hints (like those in text fields and labels)
js 配列の範囲の中の数字を合計する

##お題
与えられた配列の二つの数の範囲の数字を合計する。
二つの数は小さい順に並んでいるとは限らない。

```js
function sumAll(arr) {
//write your code.
}
sumAll([4,1]);// 10
```

##出力結果　例

```js
sumAll([1, 4]) // 10
sumAll([4, 1]) // 10
sumAll([5, 10]) // 45
sumAll([10, 5]) // 45
```

##使ったもの
Math.max()
Math.min()
for文


##考え方
配列の最大値と最小値をMath.max() Math.min()で判別する。
最小値をfor文の初期値に、最大値を処理回数の上限に設定する。
初期値が最大値と同じになるまで1を足す。
二つの数の範囲の数字を合計が返ってくる。

```js
function sumAll(arr) {
  var max = Math.max(arr[0],arr[1]);
  var min = Math.min(arr[0],arr[1]);
  var i = 0;
  for(var j = min; j <= max; j++){
    i += j;
  }
  return  i;
}
sumAll([4,1]);// 10
```

###他にもコードが浮かんだ方、コメントお待ちしてます。
備忘録_IE7 / 8 / 9 バージョン別使用できるセレクタまとめ


自分用の早見表

## IE7

- チャイルドセレクタ
- 属性セレクタ
- 隣接セレクタ
- 間接セレクタ
- :hover 疑似クラス
- :first-child 疑似クラス
- :first-line 擬似クラス
- :first-letter 擬似クラス


## IE8

※IE7対応セレクタを含む

- 兄弟セレクタ
- :before :after 疑似クラス
- :focus 擬似クラス
- E[attr~=value]
- E[attr|=value]
- E[attr^=value]
- E[attr$=value]
- E[attr*=value]


## IE9以降

※IE7 / 8対応セレクタを含む

- ::before ::after 疑似クラス
- ::first-letter 擬似クラス
- ::first-line擬似クラス
- :not(s)
- :root
- :nth-child(n)
- :nth-last-child(n)
- :nth-of-type(n)
- :nth-last-of-type(n)
- :last-child	
- :first-of-type
- :last-of-type
- :only-of-type
- :only-child
- :empty
- :target
- :enabled
- :disabled
- :checked
【PHP】条件分岐

この記事は [一人PHP総復習 Advent Calendar 2016](http://qiita.com/advent-calendar/2016/php_beginner) 7日目の記事です！
処理の基本の条件分岐について簡単にまとめてみます( 厂˙ω˙ )厂

PHPは書いた内容を上から順番に処理していきますが、条件分岐を使うと、文字どおり条件によって処理を分岐させることができます。
PHPではif文とswitch文という構文を使います。

## if文
### 書き方

```php
if (条件) {
	// 条件がtrueの時実行
} else {
	// 条件がfalseの時実行
}
```

簡単ですね！
また条件を複数判定することも出来ます。

```php
if (条件1) {
	// 条件1がtrueの時実行
} else if (条件2) {
	// 条件1がfalseで条件2がtrueの時実行
} else {
	// 条件1・条件2がfalseの時実行
}
```

注意したいのは、条件2は「条件1がfalseの時に判定される」という点です。
条件1がtrueだった場合はそこでif文の処理は終了となり、条件2に到達しません。

上から順に優先度の高くなるよう処理を記述します。

### 注意点
ありがちなミスとして、ifである条件の時だけ宣言した変数を、その後の処理で扱おうとするケースです。

```php
<?php

if ($score >= 60) {
	$result = 'success!';
}

echo $result;
```

上記の場合、`$score`が60以上の場合は通常どおり処理されますが、59以下だった場合`$result`が存在せずエラーとなってしまいます。

if自体がtrueかfalseを判定するため、下記は同様の意味になります。

`if ($result === true) { ・・・ }`

`if ($result) { ・・・ }`

ただし、`==`を使うと厳密な型一致にならないので、特別な理由のない限り使わないほうが良いです。

## switch文
### 書き方

```php
<?php

switch (対象) {
	case 条件:
		・・・
		break;
	case 条件:
		・・・
		break;
	default:
		・・・
}
```

### 注意点
switch文の大きな特徴は、`==`で比較を行うという点です。厳密な型比較ではありません。

```php
<?php

$age = '18'; // string

if ($age === 18) {
	$result1 = true;
} else {
	$result1 = false;
}

switch ($age) {
	case 18:
		$result2 = true;
		break;
	default:
		$result2 = false;
}

echo $result1; // false;
echo $result2; // true;
```

if文では`===`を使用して厳密な型比較をしているので`false`、switch文では文字列の`'18'`をint型に変換して比較するので`true`が返ります。


## まとめ
複数の条件が固定値として決まってる場合はswitch文のほうがスッキリするような。（拡張子の判定とか？）
比較の特性などに注意しつつ使い分けていきましょう！
socialcalc-rails gem を作ってみた

## SocialCalc とは

あまり知られていませんが、[SocialCalc](https://github.com/marcelklehr/socialcalc) というウェブ上で動くスプレッドシートがあります。
Google Spreadsheet を自分のサイトにインストールしたもの、みたいなイメージで考えるとよいかもしれません。

[EtherCalc - リアルタイムコラボレーションできるWebベースの表計算](http://www.moongift.jp/2014/08/ethercalc-%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%B3%E3%83%A9%E3%83%9C%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%81%8D%E3%82%8Bweb%E3%83%99%E3%83%BC%E3%82%B9/)

[EtherCalc](https://ethercalc.net/)

上では EtherCalc という名前になっていますが、これは一部でもソースコードを改変したら、名前を別にしなければならない、というライセンス上の制約からこうなっているみたいです。

なかなか使いやすいです。Microsoft Excel や Google Spreadsheet に比べれば、当然機能は劣りますが、基本的なワークシート関数も実装されていますし、基本的な用途にはとりあえず十分かと。
 
スプレッドシートの中身を簡単にシリアライズできるので、データベースやファイルに保存すれば、中身を永続化することもできます。

ただ、ネット上で情報が少なく、使いこなすのに少し手間がかかりました。
そこで、これを Ruby on Rails で使いやすくするため、Gem を作成してみました。

https://github.com/elm200/socialcalc-rails

## インストール方法

Gemfile で、

```Ruby
gem 'socialcalc-rails'
```

## サンプル

https://github.com/elm200/socialcalc-rails-sample

![image](https://qiita-image-store.s3.amazonaws.com/0/26146/8bf1665f-b963-946f-bd45-a471f78dc70a.png)

普通に `git clone` して、`rails s` して `http://localhost:3000` にアクセスしてください。スプレッドシート上のデータを保存することもできます。

# 技術的ポイント

https://github.com/elm200/socialcalc-rails/blob/master/vendor/assets/javascripts/socialcalc_plugin.js

あたりが私が工夫したところです。jQuery プラグインを作っています。放っておくと画面の全部のキーイベントを SocialCalc が奪ってしまい、ほかのコントロールを置けないので、そうならないようにしています。

## 所感

はじめて Gem を作ったので、いろいろ要領を得ていない部分があります。こうしたらもっといいよ、という点があれば教えてください。Gem を作るのは思ったよりずっと簡単でした。オープンソースは人々の協力によって支えられているのだ、ということがよくわかりました。ここに至るまでおもったより時間がかかってしまいましたが、とてもよい勉強になりました。
勉強会のご案内

<p>参加していた勉強会の運営に変更があり、今年度は、主に池袋と松戸で定期的に勉強会が解されるようになった。</p>

<p>渋谷で開催された勉強会は、以下のとおり。</p>

<ul>
<li>Cocoa Study at Shibuya #1<br />日時：2016/03/17(木)　19:30-21:00<br />会場：電源カフェbeez 渋谷</li>
<li>Cocoa Study at Shibuya #2<br />日時：2016/04/14(木)　19:30-21:00<br />会場：電源カフェbeez 渋谷</li>
</ul>

<p>渋谷の会場が都合で使えなくなったため、池袋で開催されるようになった。</p>

<ul>
<li>Cocoa Study at Ikebukuro #1<br />日時：日時：2016/06　19:30-22:00<br />会場：池袋コワーキングスペース OpenOffice FOREST</li>
<li><a href="https://cocoa-study.connpass.com/event/35231/">Cocoa Study at Ikebukuro #2 (2016/07/25)</a></li>
<li><a href="https://cocoa-study.connpass.com/event/36657/">Cocoa Study at Ikebukuro #3 (2016/08/29)</a></li>
<li><a href="https://cocoa-study.connpass.com/event/39170/">Cocoa Study at Ikebukuro #4 (2016/09/26)</a></li>
<li><a href="https://cocoa-study.connpass.com/event/41244/">Cocoa Study at Ikebukuro #5 (2016/11/14)</a></li>
<li><a href="https://cocoa-study.connpass.com/event/45262/">Cocoa Study at Ikebukuro #6 (2016/12/05)</a></li>
</ul>

<p>松戸でも開催されるようになった。松戸では、今後は、初心者向け、かつ、macOS関連の発表を充実させて行く予定だ。ただ、会の内容を決めるのは発表者なので、参加者次第となるが。</p>

<ul>
<li><a href="https://connpass.com/event/39468/">Cocoa Study at Matudo #1 (2016/10/02)</a></li>
<li><a href="https://connpass.com/event/42564/">Cocoa Study at Matudo #2 (2016/11/19)</a></li>
</ul>

<p>今年度から、NPO法人MOSAの理事になり、MOSA自習室という勉強会を開催。</p>

<ul>
<li><a href="https://mosa.connpass.com/event/35229/">第1回 MOSA自習室 (2016/07/11)</a></li>
<li><a href="https://mosa.connpass.com/event/36300/">第2回 MOSA自習室 (2016/08/08)</a></li>
<li><a href="https://mosa.connpass.com/event/37729/">第3回 MOSA自習室 (2016/09/05)</a></li>
<li><a href="https://mosa.connpass.com/event/39740/">第4回 MOSA自習室 (2016/10/14)</a></li>
<li><a href="https://mosa.connpass.com/event/42888/">第5回 MOSA自習室 (2016/11/25)</a></li>
</ul>

<p>どんな内容なのかは、各勉強会のページに発表資料のリンクがあるので、それで確認してほしい。</p>

<p>年明けも、以下の勉強会の開催が決まっているので、興味がある方は、申し込みを。</p>

<ul>
<li><a href="https://cocoa-study.connpass.com/event/46759/">Cocoa Study at Ikebukuro #7 (2017/01/16)</a></li>
<li><a href="https://connpass.com/event/46754/">Cocoa Study at Matudo #3 (2017/01/28)</a></li>
</ul>

<p>自分が考えている発表は、一つは、よりCoolなSwiftによるプログラミングを調べた『Swiftyを試してみる』と、macOSの開発をしたくなったので、近年、大きく変わったmacOS関連の基本的なアプリケーションについてを考えている。</p>

関連情報
<a href="https://cocoa-study.connpass.com/event/45262/">Cocoa Study at Ikebukuro #6 (BUKURO.swift)</a><br />
<a href="https://cocoa-study.connpass.com/">Cocoa Study (connpass グループ)</a><br />
<a href="https://atnd.org/groups/cocoa-study">Cocoa Study (ATND グループ)</a><br />
<a href="http://www.cocoa-study.com/">Cocoa勉強会</a><br />
<a href="http://wp.cocoa-study.com/">Cocoa勉強会（関東）</a><br />
<a href="https://connpass.com/series/499/">Cocoa勉強会 関東 (connpass グループ)</a><br />
<a href="https://www.facebook.com/cocoa.kansai/">Cocoa勉強会関西</a><br />
<a href="https://www.facebook.com/cocoa.kansai.beginners/">Cocoa勉強会関西ビギナーズ</a><br />
<a href="http://www.mosa.gr.jp">MOSA</a><br />
<a href="https://mosa.connpass.com">MOSA (connpass グループ)</a><br />

【Cocoa練習帳】
<a href="http://www.bitz.co.jp/weblog/">http://www.bitz.co.jp/weblog/</a><br />
<a href="http://ameblo.jp/bitz/">http://ameblo.jp/bitz/</a>（ミラー・サイト）<br />
<a href="https://t.co/6P3h2jtbRk</a>note<br />
jQueryで複数要素をdivなどの要素でまとめて囲むやり方 + 要素内の特定の要素の数を取得するやり方

■要素数を数えるやり方

```javascript
$(element).length;
```
http://www.koikikukan.com/archives/2014/08/08-005555.php

■複数要素をまとめて囲むやり方

```
wrapAll()
```
http://semooh.jp/jquery/api/manipulation/wrapAll/html/
MMD4Mecanimでアニメーションが動かないとき

* キズナアイちゃんのMMDを読み込んでアニメーションさせたい
* MMD4Mecanimで持ってくる。fbxになる。SetPassCall=39...
* Animator Controllerでアニメーションつけても動かない
* Avatarのconfigureがx(バツ)になっている
* MMD4MecanimのAdvancedオプションでImportする

![advanced.jpg](https://qiita-image-store.s3.amazonaws.com/0/12309/3dfa9963-5ee8-0188-5b9c-da9e68245541.jpeg)

* Avatarのconfigureがo(マル)になった。一歩前進
* fbx選んでAvatarのConfigure押す

![AnimationCheck.unity - KizunaAi - PC, Mac & Linux Standalone (Personal) <OpenGL 4.1> 2016-12-25 15-05-23.jpg](https://qiita-image-store.s3.amazonaws.com/0/12309/fa5707d7-50ff-beb2-ee25-1ba8d395a807.jpeg)

* configureで緑表示なのでよさそう。ただ、「Tボーン姿勢じゃないよ」と赤文字でSceneに表示されている
* InspectorからEnforce T-poseを選んでApply
* アニメーションが動いた。Done!

![AnimationCheck.unity - KizunaAi - PC, Mac & Linux Standalone (Personal) <OpenGL 4.1> 2016-12-25 15-08-08.jpg](https://qiita-image-store.s3.amazonaws.com/0/12309/e632bee9-e8be-6d96-0bdf-33bb5f4bfcd4.jpeg)
TF-IDFのDF (Document Frequency) の部分をWebAPIで公開した

## はじめに
自然言語処理では、しばしば[TF-IDF](https://ja.wikipedia.org/wiki/Tf-idf)が使われます。Term Frequency - Inverse Document Frequencyの略で、文書内の単語の重要度を計算する手法です。今回は日本語Wikipediaの記事を文書とみなした[Document Frequencyの取得APIを公開](https://apitore.com/store/apis/details?id=16)しました。

## API
- [Document Frequency API](https://apitore.com/store/apis/details?id=16)

## サンプルコード
- [Javaサンプル](https://github.com/keigohtr/apitore-response-parent/tree/master/summarize-response)

## 使ってみる
とてもシンプルなAPIです。入力は単語で、出力はDocument Frequency (単語が出現する文書数) です。試しに「犬」を入力してみます。

```
{
  "log": "",
  "startTime": "1482618692860",
  "endTime": "1482618692860",
  "processTime": "0",
  "word": "犬",
  "documentFrequency": 14348
}
```

続いて「猫」。猫のほうが犬より記事が少ないんですね。

```
{
  "log": "",
  "startTime": "1482618725303",
  "endTime": "1482618725303",
  "processTime": "0",
  "word": "猫",
  "documentFrequency": 11885
}
```

全体の文書数は「。」で分かります。

```
{
  "log": "",
  "startTime": "1482618784632",
  "endTime": "1482618784632",
  "processTime": "0",
  "word": "。",
  "documentFrequency": 1014094
}
```

## おわりに
とてもシンプルで地味なAPIですが、自分でWikipediaのDocument Frequencyを計算すると面倒なので、地味に役立つAPIではないでしょうか？

## 元記事
[【API】日本語WikipediaのDocument Frequencyを取得する](http://blog.apitore.com/2016/12/25/api-document-frequency/)
HerokuのPush先を変更

# git herokuのpush先を変更

間違って、リモートのリポジトリを消してしまい、うまくpushできなかったので
git remoteの使い方を調べたので、メモメモ

## 現在リモート接続されているURLを確認する

```
$ git remote -v
```

![スクリーンショット 2016-12-25 14.47.58.png](https://qiita-image-store.s3.amazonaws.com/0/123597/2098931b-e683-9cfa-c5d8-36cecdba4393.png)
みたいに出るはず。
originのURLを変更したいのか、herokuのURLを変更したいのかを決める

## herokuの接続先URLを変更する
変更したいURLをまずはコピーして、

```
$ git remote set-url heroku {ここに変更するURLを貼り付け}
```

例えば、`https://git.heroku.com/pinkcatbot.git`に変更したいのであれば、

```
$ git remote set-url heroku https://git.heroku.com/pinkcatbot.git
```
とする。

ちなみに...
**herokuではなく、originを変更したい**場合は、

```
$ git remote set-url origin {ここに変更するURLを貼り付け}
```

とする。

## 確認

もう一度、

```
$ git remote -v
```

とすると、
![スクリーンショット 2016-12-25 14.57.12.png](https://qiita-image-store.s3.amazonaws.com/0/123597/8141ebbc-63eb-6ed7-0251-228b92039c46.png)

変更されたか確認できる

無事pushできるようになります！！

やったーーー


## 参考

[つまブロ](http://halucolor.blogspot.jp/2013/02/githerokuherokupush.html)
fluentd でマッチしなかったレコードを再送したい

例えば、こんなコンフィグがあって、

```apache
<source>
  @type forward
</source>

<match hoge.**>
  # ...
</match>

<match **>
  @type file
  path /tmp/td-agent.log
</match>
```
タグを typo するとかして `/tmp/td-agent.log.*` に

```
2016-12-25T12:34:56+09:00       hgoe    {"merry":"xmas"}
```

こんなログが吐き出された時に、これを再送するための雑なコードがこちら。

```ruby:retry.rb
require 'time'
require 'json'
require 'fluent-logger'

logger = Fluent::Logger::FluentLogger.new
STDIN.each_line do |l|
  time, tag, msg = l.split("\t")
  time = Time.parse(time)
  map = JSON.load(msg)
  logger.post_with_time(tag.sub(/hgoe/, 'hoge'), map, time)
end
```
(※`out_file` の `format` とか `delimiter` が違ってたらそれに合わせて変更する必要あり)

`cat /tmp/td-agent.log* | grep hgoe | ruby retry.rb` みたいに実行する。