OmniAICreator/Qiita-1.07M huggingface dataset:
トラブル解決の精神論！

以前よりまとめたいなぁと考えていたのですが、トラブル解決に関しての心がまえ集を作ってみました。
追加でこんなのあるよ。みたいなご意見大募集です。

# トラブル解決に向けての心がまえ
## エラー表示を大切に扱う
エラー表示は神の啓示です。それまで積み重ねてきた作業は一旦忘れ、まずはエラー表示の箇所を丁寧に確認しましょう。「あそこは設定した」とか「ここは直した」といった思い込みは遠回りです。

## 公式ドキュメントをちゃんと見る
多くのトラブルは、公式ドキュメントをちゃんと見ることで解決できます。
英語のドキュメント？最近の翻訳は優秀です。原文と比較しながらなら、それなりに読めますよ。がんばって！

## 何をやったか思い出す
動いていたものが動かなくなったらトリガーがあります。大体なんかやっちゃってます。あなた、何やっちゃったんですか？

## 自身の間違いを最初に疑う
ある程度のスキルが付くと、「俺が間違うわけないじゃない。他のどっかが悪いのよ」と、トラブルの原因を他所に探す時期があります。が、それは病気です。まず自分が間違っているのではないかと疑いましょう。

# 番外編

## 寝る
いやぁ、なぜか解決策、思いついちゃうんですよねぇ。噂では、寝てる間にいろいろ脳内再構築されてるらしいです。

## 外に出てコーヒーを飲む余裕を持つ
一度リフレッシュしましょう！なぜか良い回答が浮かぶものです。まぁ、余裕は持てないけどなｗ

## 白紙に戻す勇気を持つ
どうしても前に進めない場合、全部まっさらにして初めからやり直す勇気を持つことも重要です。いくらやっても直らなかった現象が、ナゼカ直ったとの報告多数です。

## くまのぬいぐるみに話しかける
一度やってみ。ちゃんと解決するから！
決してこれが書きたくて記事書いたわけではない！

## テラてる
QAサイトに質問してみる。まぁ半分くらいはまとめてる間に解決しちゃいますよ。

# 何で書いたか
トラブルって、ワリと心の持ち方で、解決までの時間が変わると思ってたんですけど、あんまりその方向性からまとめた人がいないっぽかったんで。
あと、プログラミングにおける精神的ブレイクスルーポイント のお題で質問した時頂いたコメントが秀逸なのが多く、まとめておきたかったんです！
herokuへpushするためにGemfile.lock必要だけどクロス開発環境なのでlockファイルをcommitしたくない場合

長い題名だけどやりたいことは標記の通りです。

bundle install するとローカルに適応したGemfile.lockが作られるため
クロス開発環境の場合、Gemfile.lockまでcommitしてしまうと都合が悪く、あえて ignoreしています。
その状態でherokuへデプロイする際、Gemfile.lockがリポジトリに存在しないことが原因でエラーになるため今回の手順を試しました。

```bash
>git push heroku master
Username for 'https://git.heroku.com':
Password for 'https://git.heroku.com':
Counting objects: 297, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (279/279), done.
Writing objects: 100% (297/297), 198.96 KiB | 0 bytes/s, done.
Total 297 (delta 109), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/NoLockfile
remote:  !
remote:  !     Gemfile.lock required. Please check it in.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to frozen-inlet-xxxxxx
remote:
To https://git.heroku.com/frozen-inlet-xxxxxxx.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/frozen-inlet-xxxxxx.git'
```

## 環境
- Windows7でコーディング
- virtualbox(ubuntu)開発環境でdeploy確認
- Windows7→herokuへdeploy
- gem install heroku実施済み
- bundle install 済み

## 手順
 - heroku用ブランチを切る

.gitigonreにGemfile.lockを記載しているならコメントアウトしてください。

"for_heroku" というブランチ名でブランチを作って移動します。

```bash
$ cd <to_app_dir_path>/
$ git checkout master
$ git checkout -b for_heroku
$ git add Gemfile.lock && git commit -m "add Gemfile.lock for heroku."
```

 - ブランチ指定してherokuへpush

```bash
$ git push heroku for_heroku:master
```

- ブラウザで確認
![](https://qiita-image-store.s3.amazonaws.com/0/12060/790b8ef0-f2d4-8758-f8be-1b09b3780994.png)
できた！

## 参考
http://qiita.com/pugiemonn/items/bd79abbc72c20d8ee9a7
SQLメモ


#AND OR 

orよりandのほうが優先順位が高い．

# NULLの比較
NULLかどうか比較するときは，IS NULL を使う．

#なぜ主キーが必要なのか?

テーブルが全く同じ項目になっているとき，一つだけ削除できない．
ここで，DELET文を使いたいが，主キーがないため削除できない．


|日付|費目|メモ|出金額|
|---|---|---|---|
|2016-03-11|食費|チョコレートを購入|300|
|2016-03-11|食費|チョコレートを購入|300|

#参考図書
スッキリわかるSQL入門
String、Date、LocalDateの変換

`String` を `java.time.LocalDate` に変換

```java
static final private String DATE_FORMAT = "yyyy-MM-dd";

public static LocalDate string2LocalDate(final String date) {
  return LocalDate.parse(date, DateTimeFormatter.ofPattern(DATE_FORMAT));
}
```

`java.util.Date` を `java.time.LocalDate` に変換

```java
public static LocalDate date2LocalDate(final Date date) {
  return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
```

`java.time.LocalDate` を `java.util.Date` に変換

```java
public static Date localDate2Date(final LocalDate localDate) {
  return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
```
Oracle Database 新機能(12c R2)索引圧縮

# Oracle Database 新機能(12c R2)拡張索引圧縮(アドバンスト索引圧縮)

これまでOracle Databaseの索引を圧縮して格納領域を節約する場合、複数列に対する索引を圧縮する接頭辞圧縮(キー圧縮)がありました。
Oracle Database 12c ではAdvanced Compression Optionの機能が拡張され、拡張索引圧縮(アドバンスト索引圧縮)として単一列の索引に対しても圧縮が可能になり、
Relese2（12.2）からは、高い圧縮率および単一列の一意索引の圧縮も可能になりました。

## 利用例
索引の作成、再作成のDDL文に COMPRESS ADVANCED句を追記する(create index/ alter index ~ rebuild 共通)

- 12.1 で有効になった圧縮 ( COMPRESS ADVANCED LOW )
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/108635/2a098c0e-664a-74e6-0002-78dc9951610c.png)

- 12.2 で有効になった圧縮（ COMPRESS ADVANCED HIGH ）
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/108635/28cd88bb-d739-03b5-750e-d0d3b5b171f0.png)

## 圧縮効果
圧縮の効果は圧縮アドバイザ（ DBMS_COMPRESSION パッケージ）で確認が可能
### SH スキーマの SALES表（918843件）のtime_id列への索引(BLEVEL2 , リーフブロック数2440)での例
Advanced Low：1.7倍の圧縮 （圧縮後のブロック 1421）
Advanced High:9.9倍の圧縮 （圧縮後のブロック 246）

参考スクリプト
![image.png](https://qiita-image-store.s3.amazonaws.com/0/108635/9433779f-1ecc-bc3f-6118-dc30911f8b84.png)



参考：複数列に対する索引の接頭辞圧縮イメージ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/108635/9e1bfc38-2278-97fe-a267-75d8c85606e0.png)
ruby pg install on Macbook Pro (Late 2015)

rubyでpostgresqlにアクセスするだけの環境構築についてです。
gem install pgで失敗したので以下を実行したらうまくいきました。

env ARCHFLAGS="-arch x86_64" gem install pg

参考サイト: http://kgmx.hatenablog.com/entry/2014/08/26/091657
EXCELでメアドの簡単入力チェック

EXCELでメアドの入力チェックをしたいという要望があったので、調べた内容をまとめてみました。


# STEP1
まずはEXCELを開き、メアドを入力するセルを選択して、メニューから「データ」を選んで、「検証」をクリックします

![スクリーンショット 2017-01-26 11.35.11.png](https://qiita-image-store.s3.amazonaws.com/0/56914/e514ef2b-39c3-288d-4455-f7198800c9b7.png)

# STEP2
入力値の種類から「ユーザ設定」を選びます

![スクリーンショット 2017-01-26 11.40.04.png](https://qiita-image-store.s3.amazonaws.com/0/56914/134a1d77-d8fe-aefe-34d5-32a51a4aafea.png)


# STEP3
数式に以下を入力

```
=NOT(ISERROR(FIND("@example.com",A1)))
```

example.comの部分には実際に入力すべきメアドの@以下に変更
A1の部分には、メアドを入力セルを番号に変更してください。

![スクリーンショット 2017-01-26 11.44.41.png](https://qiita-image-store.s3.amazonaws.com/0/56914/82293006-9360-2af4-3888-fba87a641ab7.png)

# STEP4

エラーメッセージのタブを選択し、
タイトルとエラーメッセージに適宜内容を入力してください。

![スクリーンショット 2017-01-26 11.46.12.png](https://qiita-image-store.s3.amazonaws.com/0/56914/643ccb31-7e3d-3b90-1c88-13aeabf29028.png)


# 検証

セルに「hoge@」と入力すると、エラーが正しく表示されることを確認

![スクリーンショット 2017-01-26 11.48.03.png](https://qiita-image-store.s3.amazonaws.com/0/56914/18088491-5c51-5cff-a677-7d1c7ac19969.png)

セルに「hoge@example.com」と入力すると、エラーが出ないことを確認

![スクリーンショット 2017-01-26 11.49.59.png](https://qiita-image-store.s3.amazonaws.com/0/56914/84153f0b-b294-0b55-de90-a6b07e1e4723.png)

# まとめ
今回、EXCELの検証機能を使って、簡単にメアドの入力チェックが出来ることが分かりました。
今回紹介したものは、１つのドメインにしか対応していないので、あまり汎用性はないですが、
次回、複数のドメインにも対応できるものを調査して、紹介できればと思います。

もっと良い方法などありましたら、アドバイスお願いします :bow:
はじめてElectron

他にいい記事がたくさんあるので自分のメモ用に。

# Electron

* js + html5 + css でデスクトップアプリ
* マルチプラットフォーム(windows, mac, linux)

# 開発環境
* 要npm
* 今回は OSX 10.13(El Capitan) にて実施

# アプリ作成

### デバッグビルド用のモジュールダウンロード

```shell-session
$ npm install electron-prebuilt -g
```

### 最低限必要なファイル用意


* ~/dev/electron/src/package.json

```json
{
  "name": "myFirstElectron",
  "version": "0.1.0",
  "main": "main.js"
}
```

* ~/dev/electron/src/main.js

```js
// electronモジュールを読み込み
const electron = require('electron');
const {app} = electron;
const {BrowserWindow} = electron; //ウィンドウを表す[BrowserWindow]はelectronモジュールに含まれている

// 新しいウィンドウ(Webページ)を生成
let win;
function createWindow() {
  // BrowserWindowインスタンスを生成
  win = new BrowserWindow({width: 800, height: 600});
  // index.htmlを表示
  win.loadURL(`file://${__dirname}/index.html`);
  // デバッグするためのDevToolsを表示
  win.webContents.openDevTools();
  // ウィンドウを閉じたら参照を破棄
  win.on('closed', () => {   // ()は function ()と書いていい
    win = null;
  });
}
// アプリの準備が整ったらウィンドウを表示
app.on('ready', createWindow);
// 全てのウィンドウを閉じたらアプリを終了
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});
app.on('activate', () => {
  if (win === null) {
    createWindow();
  }
});
```

* ~/dev/electron/src/index.html

```html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    We are using node <script>document.write(process.versions.node)</script>,
    Chrome <script>document.write(process.versions.chrome)</script>,
    and Electron <script>document.write(process.versions.electron)</script>.
  </body>
</html>
```

### アプリ実行

```shell-session
$ electron ~/dev/electron/src
```

* ウインドウが立ち上がります

# アプリのパッケージング

### パッケージングビルド用モジュールダウンロード

```shell-session
$ npm install electron-packager -g
```

### パッケージング実行

```shell-session
$ electron-packager ~/dev/electron/src myFirstElectron --platform=darwin,win32 --arch=x64 --version=1.4.13 --overwrite

--platform: all, linux, win32, darwin から１つ or CSVで複数設定
--arch: all, ia32, x64 から１つ設定
--version: Electronのバージョン
--overwrite: ２回目以降は上書き
```

* ~/electron/myFirstElectron-darwin-x64 ディレクトリが作成され、その中に実行ファイルが出来る
RecyclerViewでSeparatorを表示する方法

iOSでいうところのTableViewに相当するRecyclerViewだがUI周りは思ったより痒いところに手が届かない。

iOSでいうところのTableViewに相当するものを作るにはちょっと面倒でSeparator一つとっても実装がいる。以下のコードは拝借したコードに一部変更点を加えたものだ。

[ItemDecolator](https://developer.android.com/reference/android/support/v7/widget/RecyclerView.ItemDecoration.html)というClassを拡張してCellの描画に追記する形になる。
この辺はデフォルトで欲しいと思った。


```kotlin

class DividerItemDecoration: RecyclerView.ItemDecoration{
    private val ATTRS = intArrayOf(android.R.attr.listDivider)

    private var mDivider: Drawable

    constructor(context: Context){
        val a = context.obtainStyledAttributes(ATTRS)
        mDivider = a.getDrawable(0)
        a.recycle()
    }

    override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
        drawVertical(c, parent)
    }

    fun drawVertical(c: Canvas, parent: RecyclerView) {
        val left = parent.paddingLeft
        val right = parent.width - parent.paddingRight

        val childCount = parent.childCount
        // ここで-2にしているのは、最後のCellはSeparatorを出さないため
        for (i in 0..childCount - 2) {
            val child = parent.getChildAt(i)
            val params = child.layoutParams as RecyclerView.LayoutParams
            val top = child.bottom + params.bottomMargin
            val bottom = top + mDivider.getIntrinsicHeight()
            mDivider.setBounds(left, top, right, bottom)
            mDivider.draw(c)
        }
    }

    override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
        outRect.set(0, 0, 0, mDivider.getIntrinsicHeight())
    }
}

```

```kotlin
// setする
recyclerView.addItemDecoration(DividerItemDecoration(context))


```
PythonでFM変調、復調 その3

#概要
PythonでFM変調、復調やってみた。
復調器は、GNURadio FM Demod。

#写真
![figure_4.png](https://qiita-image-store.s3.amazonaws.com/0/18104/3a1fa58f-bac6-a0a9-3a47-1397d0c21619.png)


#フローグラフ
![test17.grc.png](https://qiita-image-store.s3.amazonaws.com/0/18104/9be31c08-d83c-c582-edba-aa1ef5e63484.png)


#サンプルコード

```
from gnuradio import analog
from gnuradio import audio
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import filter
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
import sys
import scipy
import numpy as np
import scipy.signal as sg
import pylab

class radio(gr.top_block):
    def __init__(self, vfm):
        gr.top_block.__init__(self)
        self.samp_rate = samp_rate = 32000
        self.blocks_vector_source_x_0 = blocks.vector_source_f(vfm.tolist(), False, 1, [])
        self.hilbert_fc_0 = filter.hilbert_fc(65, firdes.WIN_HAMMING, 6.76)
        self.blocks_vector_sink_x_0 = blocks.vector_sink_f(1)
        self.analog_fm_demod_cf_0 = analog.fm_demod_cf(channel_rate=samp_rate, audio_decim=1, deviation=75000, audio_pass=15000, audio_stop=16000, gain=1.0, tau=75e-6, )
        self.connect((self.hilbert_fc_0, 0), (self.analog_fm_demod_cf_0, 0))
        self.connect((self.analog_fm_demod_cf_0, 0), (self.blocks_vector_sink_x_0, 0))
        self.connect((self.blocks_vector_source_x_0, 0), (self.hilbert_fc_0, 0))
def main():
    sample_rate = 32000.
    nsamples = 320
    F_1 = 440.
    A_1 = 1.0
    F_2 = 10000.
    A_2 = 6.0
    t = np.arange(nsamples) / sample_rate
    vin = A_1 * np.sin(2 * np.pi * F_1 * t) 
    vfm = A_1 * np.sin(2 * np.pi * F_2 * t + A_2 * -np.cos(2 * np.pi * F_1 * t))
    put = radio(vfm)
    put.run()
    data = scipy.array(put.blocks_vector_sink_x_0.data())
    f1 = pylab.figure(1, figsize = (12, 10), facecolor = 'w')
    s1 = f1.add_subplot(2, 2, 1)
    s1.plot(vin)
    s3 = f1.add_subplot(2, 2, 2)
    s3.plot(vfm)
    s4 = f1.add_subplot(2, 2, 3)
    s4.plot(data)
    pylab.show()
if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        pass

```
PythonでAM変調、復調 その2

#概要
PythonでAM変調、復調やってみた。
復調器は、GNURadio AM Demod。

#写真
![figure_3.png](https://qiita-image-store.s3.amazonaws.com/0/18104/58f89906-9b3d-f487-83bb-24a94e5a80c1.png)


#フローグラフ
![test16.grc.png](https://qiita-image-store.s3.amazonaws.com/0/18104/4d0c6314-08f3-d268-f76a-80a04dc7ec08.png)


#サンプルコード

```
from gnuradio import analog
from gnuradio import audio
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import filter
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
import sys
import scipy
import numpy as np
import scipy.signal as sg
import pylab

class radio(gr.top_block):
    def __init__(self, vam):
        gr.top_block.__init__(self)
        self.samp_rate = samp_rate = 32000
        self.blocks_vector_source_x_0 = blocks.vector_source_f(vam.tolist(), False, 1, [])
        self.hilbert_fc_0 = filter.hilbert_fc(65, firdes.WIN_HAMMING, 6.76)
        self.blocks_vector_sink_x_0 = blocks.vector_sink_f(1)
        self.analog_am_demod_cf_0 = analog.am_demod_cf(channel_rate=32000, audio_decim=1, audio_pass=8000, audio_stop=8100,)
        self.connect((self.hilbert_fc_0, 0), (self.analog_am_demod_cf_0, 0))
        self.connect((self.blocks_vector_source_x_0, 0), (self.hilbert_fc_0, 0))
        self.connect((self.analog_am_demod_cf_0, 0), (self.blocks_vector_sink_x_0, 0))
def main():
    sample_rate = 32000.
    nsamples = 320
    F_1 = 1000.
    A_1 = 1.0
    F_2 = 10000.
    A_2 = 0.5 
    t = np.arange(nsamples) / sample_rate
    vin = A_1 * np.sin(2 * np.pi * F_1 * t) 
    vam = (A_1 * np.sin(2 * np.pi * F_1 * t) + 1.0) * A_2 * np.sin(2 * np.pi * F_2 * t)
    put = radio(vam)
    put.run()
    data = scipy.array(put.blocks_vector_sink_x_0.data())
    f1 = pylab.figure(1, figsize = (12, 10), facecolor = 'w')
    s1 = f1.add_subplot(2, 2, 1)
    s1.plot(vin)
    s3 = f1.add_subplot(2, 2, 2)
    s3.plot(vam)
    s4 = f1.add_subplot(2, 2, 3)
    s4.plot(data)
    pylab.show()
if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        pass




```
２点間の座標が分かると出来ること #UE4Study

# ２点間の座標が分かると出来ること (随時更新中)

## ベクトル
### 距離

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/2543ac8e-c463-35a3-d945-4b920910e2d4.png)

### 正規化
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/05491e3a-de99-460f-d7f2-f6cd853e7758.png)

3Dを基礎から勉強する　正規化
http://yaju3d.hatenablog.jp/entry/2013/06/09/154950

その１　内積と外積の使い方
http://marupeke296.com/COL_Basic_No1_InnerAndOuterProduct.html

## ターゲットの方向

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/e244278b-ed6c-9d88-23d0-9adb5e04e033.png)
WordPressに学ぶHTML 5.1srcsetの使い方

HTML 5.1で実装されたレスポンシブイメージの機能の一つは、`img`タグの`srcset`属性・`sizes`属性を用いて環境に応じて最適な画像をブラウザが判断して表示する機能です。例えば次のような出し分けが期待できます。

- デスクトップブラウザで画面サイズ800px以下の時は横幅800pxの画像
- スマートフォンブラウザで画面サイズ600px以下の時は横幅1200pxの画像

**[Wordpress](https://ja.wordpress.org/)のバージョン4.4からは、このレスポンシブイメージのコードが自動生成されるようになりました**。Wordpressのコードを通して、`srcset`属性・`sizes`属性の使い方を学びましょう。

# Wordpressで生成されるレスポンシブイメージのコード

Wordpress 4.4以降で記事内に画像を挿入した場合、次のようなHTMLコードが生成されます。

```HTML:Wordpressにおけるsrcset
<img class="aligncenter size-full wp-image-12922"
     src="path/image.jpg"
     width="1920"
     height="1080"
     srcset="path/image.jpg 1920w, 
     　　　　　　　　　　　　　　　　path/image-400x225.jpg 400w, 
     　　　　 　　　　　　　　　　path/image-512x288.jpg 512w, 
     　　　　　　　　　　　　　　 path/image-768x432.jpg 768w, 
     　　　　　　　　　　　　　　 path/image-1280x720.jpg 1280w"
     sizes="(max-width: 1920px) 100vw, 
　　　　　　　　　　　　　　　　　　　　　　　　　1920px"
/>
```

**`srcset`と`sizes`を指定することで、「画像の情報」と「表示したい画像のサイズ」をブラウザに伝えます。ブラウザは、この2つの情報を元にユーザーの閲覧環境（画面幅、デバイスピクセル比）に最適な画像を表示します**。

<sup>鹿野</sup>あああ

## `srcset`
`srcset`は、表示したい画像ファイルのパス横幅をブラウザに伝えます。Wordpressでは次のようなコードが生成されます。

```HTML
srcset="path/image.jpg 1920w, 
        path/image-400x225.jpg 400w, 
        path/image-512x288.jpg 512w, 
```

これは、次の意味を示しています。「ファイルの横幅」は「画像をwebページ上で表示する際の横幅」では無いことに注意してください。

- `image.png`の横幅は1920px
- `image-400x225.png`の横幅は400px
- `image-512x288.png`の横幅は512px
- (以下、略)

## `sizes`
`sizes`は画像をwebページ上で表示する際の横幅をブラウザに伝えます。

```HTML:WordPressでのsizes
sizes="(max-width: 1920px) 100vw, 
　　　　　　　　　　　　　　1920px"
```

これは次のことを示しています。

- 画面幅が1920px以下ならばビューポートに対して100%の横幅で画像を表示してほしい
- デフォルトでは、1920pxの横幅で画像を表示してほしい

# レスポンシブイメージを使おう
以上がWordpressで自動生成されるレスポンシブイメージ用のコードです。**画像をアップロードするだけで、複数サイズの画像ファイル生成とレスポンシブイメージ用のHTMLコードの書き出しを行うので便利です**。レスポンシブイメージは人気のブログソフトウェアWordPressで採用されたこともあり、将来的に使用事例が増えていくと予想しています。今のうちにレスポンシブイメージを学んでおきましょう。

`srcset`、`sizes`のより詳しい解説や、レスポンシブイメージのもう一つの「アートボード機能」については、記事「[レスポンシブイメージで画像の表示を最適化 〜CSSもJSもいらないHTML 5.1の新機能 - ICS MEDIA](https://ics.media/entry/13324)」を参照ください。
pandas を使って，グリッドデータを行持ち(?)データに変換する 


グリッドデータを変換したい時に悩んだのでメモ．

## やりたいこと
こんなグリッドデータがあって

```python
import pandas as pd

df = pd.DataFrame(
    np.arange(9).reshape(3, 3),
    index=["y01", "y02", "y03"],
    columns=["x01", "x02", "x03"]
)
```

| |x01|x02|x03|
|:--- |:--- |:--- |:--- |
|y01|0|1|2|
|y02|3|4|5|
|y03|6|7|8|

これをこんな風に変換したい．

|column0|column1|column2|
|:--- |:--- |:--- |
| y01 | x01 | 0
| y01 | x02 | 1
| y01 | x03 | 2
| y02 | x01 | 3
| y02 | x02 | 4
| y02 | x03 | 5
| y03 | x01 | 6
| y03 | x02 | 7
| y03 | x03 | 8

## 解決方法
pandas では，以下のメソッドでイケる．

```python
df.stack().reset_index()
```
するとこんな感じで出てくる．

| |level_0| level_1 | 0 |
|:--- |:--- |:--- |:--- |
0 | y01 | x01 | 0 |
1 | y01 | x02 | 1 |
2 | y01 | x03 | 2 |
3 | y02 | x01 | 3 |
4 | y02 | x02 | 4 |
5 | y02 | x03 | 5 |
6 | y03 | x01 | 6 |
7 | y03 | x02 | 7 |
8 | y03 | x03 | 8 |

Happy ！！
もっといい方法あったら教えてくださいー
画像リサイズのためだけにドローツール使うのやめよう

```sips -Z <最大サイズ> *``` で一括処理しましょうって話です。

# 私の使い方

素材揃ったら、素材用ディレクトリに画像コピって、 ``` sips -Z <最大幅> * ``` ってやれば一括でリサイズされて、捗ります。
例えば、最大サイズ640pxに統一する場合、
素材用ディレクトリに移動してこんな感じ

```
cd <images-directory>
sips -Z 640 * 
```

注意点としては、対象ファイルが直接編集されることですかね？
この挙動が嫌な人は```-out <target>``` で出力先指定しましょう

# まとめ

スマフォの写真とか、手軽に撮れるけど解像度よすぎて、そのまま資料に貼っつけたらバカでかくなるじゃないですか。
リサイズしたくなるじゃないですか。
そのためだけにプレビューアプリとかgimp立ち上げて、めったに使わないのでやり方忘れてて、その都度やり方ググって〜みたいな、スーパー非効率なことしてました。

この存在知らなかった自分にパンチしたくなりました

# 参考

- なんか質問してる記事がhitして存在に気づきました。
http://lifehacker.com/5962420/batch-resize-images-quickly-in-the-os-x-terminal

- そしてこの記事書いてる時、発見してしまったQiitaの記事
 http://qiita.com/mattintosh4/items/4c7fad60b47463d1e51d
Hipchatの通知が表示されないときに確認すべきこと


HipchatにおけるSend room notification（いわゆるHipchat通知）を作っていて、こんな不思議な事に遭遇したことはないだろうか。

* **未読マークが出ない**
* **通知センターやスマートフォンに通知が来ない**
* **他の人には通知が来るのに、自分だけ来ない**

この辺でハマって原因判明に時間を要したので、僕のような人が出ないようにQiitaに書いておこうと思う。

# 正しく通知されないときの確認項目

## 1.HipchatのAPI経由メッセージは、デフォルト「非通知」
ちゃんと[Hipchat Send room notification APIv2](https://www.hipchat.com/docs/apiv2/method/send_room_notification)を読めば書いてあるが、通知(=notify)は、明示的に設定しないと無効(false)である。

> notify:
> Whether this message should trigger a user notification (change the tab color, play a sound, notify mobile phones, etc). Each recipient's notification preferences are taken into account.
Defaults to false.

Hipchatに通知するプログラムを書く時は、 **必ず`notify`パラメータを「true」** にしてメッセージを送信する必要がある。

## 2.APIv1はもう古い
APIv1(管理者がアクセスキーを発行するやつ)を使っているような古いサービスでは、上記フラグが設定されていないことが考えられる。

**そんな時はもうどうしようもない。**

そういうサービスは意外と多いので注意。
誰かが昔作ったようなライブラリとか、送信例とかも、APIv1を想定していることがあるので注意。


## 3.自分のアクセスキーで作成したメッセージは、自分に通知されない
APIのv1とv2の大きな違いは、アクセスキーの発行者だ。v1はグループの管理者（≒システム管理者）、v2は個人のアカウントとなる。APIv2を使うなら、自分のアカウントで通知を出せるわけだ。これは個人用のツールを作るときや、開発時のテストのときに便利である。

そこに罠がある。

自分のアクセスキーで送信したメッセージは、自分が送信したメッセージとなる。

**自分が送ったメッセージは自分には通知されない。**　(2017/01/26現在)

APIを使って送ってるんだから、通知するほうが自然だと思うのだが・・・・

# さいごに
この記事は2017/01/26に書いたものであり、また仕様が変わってしまうかもしれない。
常に最新のドキュメントを読むのが当然だが、 **ドキュメントの更新が追いついていない** ことも多々あるので注意。
Docker for Macの旧バージョンをインストールする

Doekr 1.13.0 にアップグレードすると、マウントディレクトリのファイル変更が検知できない問題に当たってしまいました。1.13系初リリースなのでおそらく不具合の可能性が高いと思われるため、一旦安定していた1.12.6に戻しました。

公式には旧バージョンのリンクが存在しないのですが、Issueにダウンロードする方法が載っていたので共有します。

※旧バージョンのリンクが存在しないのは常に最新を使ってもらいたい意図だと思うで、落ち着いたら適宜最新バージョンをインストールする事をおすすめします。

詳細は次のIssueを参照してください。

[Ability to download old releases · Issue \#1120 · docker/for\-mac · GitHub](https://github.com/docker/for-mac/issues/1120)

## 旧バージョンのインストール方法

### 1. 直接ダウンロード

私はこちらの方法で旧バージョンをインストールしました。
Docker for Macのインストーラーは次の法則でサーバにアップロードされています。

```
https://download.docker.com/mac/{{ beta | stable}}/{{ version }}.{{ build number }}/Docker.dmg
```

例として、1.2.6の場合は次のようになります。

```
https://download.docker.com/mac/stable/1.12.6.14937/Docker.dmg
```

ビルド番号はメニューの "About Docker" から確認できますが、アップグレード後に知ることは難しいらしいです。

![260a59a4-e176-11e6-8fdf-0ecc556f3898.png](https://qiita-image-store.s3.amazonaws.com/0/5774/2b795c41-8559-ae83-2280-de13bcfa3326.png "260a59a4-e176-11e6-8fdf-0ecc556f3898.png")

### 2. ゴミ箱から旧バージョンを取得

こちらの方法は試していません。Issueからの転記です。

Docker for Macはアップグレード後に旧バージョンのDocker.appをゴミ箱に移動させます。まず現在のバージョンを "Preferences... -> Uninstall / Reset -> Uninstall" から削除して、旧バージョンをゴミ箱から "/Applications" に戻して起動します。
Sublime Text > aa_00とbb_00 / aa_03とbb_03 / aa_06とbb_06 を比較する工夫

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Sublime Text 2 version 2.2.0, Build 2221
```

以下のファイルがあるとする。

- aa_00, aa_03, aa_06
- bb_00, bb_03, bb_06

以下の比較をしながら、bb_XXのファイルを編集したいとする。

- aa_00とbb_00
- aa_03とbb_03
- aa_06とbb_06

Sublime Textを使用して、以下とした。

- Sublime TextにてLayout > Singleとしておく
- $ sublime -n aa_* &
   - 新しいSublime Textウィンドウにaa_00, aa_03, aa_06がタブ別に開く
- $ sublime -n bb_* &
   - 新しいSublime Textウィンドウにbb_00, bb_03, bb_06がタブ別に開く

これで、ファイル数が3つでなく、24個あってもaa_XXを参照しながらbb_XXを編集できる。

こういう処理はbash scriptで組んで自動処理することも可能だろうが、bash scriptのデバッグを考えると、時にはエディタで作業することもいいかもしれない。
LOAD DATA INFILEで気を付けること

忘備録として

***

###### 環境
- MySQL 5.6.22
- Windows10 64bit


# ①改行コードに気をつけろ

LOAD DATA INFILEはデフォルトでは改行コードをLFとして扱う
データを作成したソフト等によって改行コードを指定してあげるのが良い
たとえば、Excelで作成するとデフォルトはCR+LF

```sql:CR+LF
LOAD DATA INFILE 'hoge.csv' INTO TABLE `scheme`.`table` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
```

改行コードがCRならば、`'r'`
改行コードがLFならば、`'n'`


#### 参考
- [MySQLのLOAD DATA INFILEで大はまりした話](https://www.infoscoop.org/blogjp/2014/07/23/about-load-data-infile/)
- [改行コードの話](http://ash.jp/code/return.htm)

#### 追記
csvファイルをsakuraエディタで編集していて、普段は上記コードでインポートできていたはずが、
なぜか一番上の一行しか読み込まれないという現象が起こりました。
まさかと思って改行コードをCR+LFに指定して保存してみると、案の定無事インポートできました。
改行コードが変わってしまっていたんですね…いつのまに…


# ②LOAD DATA INFILEのパスには日本語を使うな

簡単なことだしそもそもパスに日本語使うなって話なんですが…
クライアント側に一時的に置いたcsvファイルでLOAD DATA LOCAL INFILEしようとしたときに、
お恥ずかしながら1時間ほど無駄にしました。

```sql:ダメな例
LOAD DATA LOCAL INFILE 'C:/Users/name/Desktop/ほげ/data.csv' INTO TABLE `scheme`.`table` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
```

```sql:これでOK
LOAD DATA LOCAL INFILE 'C:/Users/name/Desktop/hoge/data.csv' INTO TABLE `scheme`.`table` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
```
Docker上で動作するRails5 & npm環境のプロジェクト雛形をgithubに公開した

[10ステップでMac OS XにRails5のDocker開発環境を構築する](http://qiita.com/hiraokashi/items/3f712c90b59845c6a77d)
[DockerでRails5 + npm 環境構築からReact + MaterialUiのサンプルコードを書くところまで](http://qiita.com/hiraokashi/items/549b9fdb5667a33c0193)
前回まで、RailsとNpmの環境の作り方を記事にしました。

今回は、そのプロジェクト雛形をgithubにアップしましたので公開します

[https://github.com/hiraokashi/project_template_rails_npm](https://github.com/hiraokashi/project_template_rails_npm)

こちらのプロジェクトをcloneしていただいて、Readmeに沿って設定いただければ、開発環境が整うながれになります。browerifyの設定も入っているので、Reactのアプリをつくれるようになっています！！！！！

## Docker Version
dockerは以下のバージョンで動作することを確認しています

 ```
 Docker version 1.13.0, build 49bf474
 docker-compose version 1.10.0, build 4bd6f1a
 docker-machine version 0.9.0, build 15fd4c7
 ```
 
## Application Version

 * Ruby 2.3.1
 * Ruby On Rails 5.0.0
 * Nodejs v7.2.0
 * npm 3.10.9
 
## Docker Installation
 お持ちのPCに合ったものインストールしてください
 * [Install On Mac](https://docs.docker.com/docker-for-mac/ )
 * [Install On Windows](https://docs.docker.com/docker-for-windows/ )
 * [Install On Linux](https://docs.docker.com/engine/installation/linux/)

## 設定手順

### 1.Folk this Project
 * まずは
[https://github.com/hiraokashi/project_template_rails_npm](https://github.com/hiraokashi/project_template_rails_npm)をフォークしてください。
 
### 2.Clone As your project
 * フォークしたプロジェクトをあなたの環境にcloneしてください
 
### 3.Bundle install and npm install
```shell
 docker-compose run --rm web bundle install
 docker-compose run --rm web npm install
```
 
### 4.Build Container
 ```shell
 docker-compose build
 ```
 
### 5.Database Initialization

```shell
 docker-compose run --rm web bundle exec rails db:create
 docker-compose run --rm web bundle exec rails db:migrate
``` 

### 6.Run Container

```shell
 docker-compose up
```
Laravel で開発用ユーザーとテストユーザーを Seeder で作成する方法

## やること
- 実際にログインできる開発用ユーザー 1 つと、テストユーザーを 20 程作成する 



## ModelFactory
```database/factories/ModelFactory.php

<?php

$factory->define(App\User::class, function (Faker\Generator $faker) {
    static $password;

    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

```

## UsersTableSeeder

```database/seeds/UsersTableSeeder.php

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // 開発用ユーザーを定義
        App\User::create([
            'name' => 'develop_user',
            'email' => 'my_email@gmail.com',
            'password' => Hash::make('my_secure_password'), // この場合、「my_secure_password」でログインできる
            'remember_token' => str_random(10),
        ]);

        // モデルファクトリーで定義したテストユーザーを 20 作成
        factory(App\User::class, 20)->create();
    }
}

```

## DatabaseSeeder.php

```database/seeds/DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // UserTableSeeder を呼び出すよう登録
        $this->call(UsersTableSeeder::class);
    }
}

```

## 実行コマンド
```

※ seeder すべて実行
$ php artisan db:seed

※ seeder のクラスを指定して実行
$ php artisan db:seed --class=UsersTableSeeder

※ データベースをリセットして seeder すべて実行
$ php artisan migrate:refresh --seed

```

## 検証環境

```

$ php -v
PHP 5.6.8 (cli) (built: Apr 15 2015 15:07:09)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
    with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans



$ cat composer.json | grep laravel/framework
        "laravel/framework": "5.3.*",

```

## 所感
- seeder 実行は基本的に `php artisan migrate:refresh --seed` でやったほうがデータベースを清潔に保てていい感じ。
- 消したらまずいデータがある場合には使わないように注意

EOF
pymc2のインストール

pymc（バージョン2.3.6）のインストール方法．（本家のドキュメントは[こちら](http://pymc-devs.github.io/pymc/INSTALL.html#anaconda)）

初めての人は「Anacondaを使っている場合」を推奨します．

（なおpymc3（バージョン3.0以降）のインストール方法は，[ここ](http://qiita.com/tttamaki/items/7177ba996c1c73880392)を参考にしてください）


# Anacondaを使っている場合

Windowsならまず[Anacondaをインストール](https://www.continuum.io/downloads)しましょう．
MacでもAnacondaをインストールしたほうが便利です．

condaでコンパイル済みバイナリをインストールします．

```bash:mac/linuxならターミナルで，winならコマンドプロンプトで
conda install pymc
```


# Win（anacondaを使わない場合）

できません．．．（結構頑張ればできるかも）


# Mac（anacondaを使わない場合）


## brewの場合

pyenv経由でanacondaを入れてからpip3でインストール．．．

```bash:pyenvをインストール
brew install pyenv
```

```bash:anacondaをインストール
pyenv install anaconda3-4.2.0
pyenv global anaconda3-4.2.0
```

このあとpyenvのパスの設定をしてから設定をしてから

```:pipでインストール
pip install --upgrade pip
pip install pymc
```



## portsの場合

### py27, py34の場合

```
sudo port install py27-pymc
```

または

```
sudo port install py34-pymc
```

### py35, py36の場合

提供されていないのでpipでコンパイル．

```bash:フォートランコンパイラとlapack関連が必要です．atlasのコンパイルはかなり長い．．．
sudo port install gcc6 gcc_select
sudo port select gcc mp-gcc6
sudo port install atlas lapack
```

```bash:pipをインストール
sudo port install py36-pip
sudo port select --set pip pip36
```

ようやくインストール

```:pipでインストール
pip install pymc
```




# Linux（anacondaを使わない場合）

パッケージマネージャを利用．

## Ubuntu16.04の場合

### python2

```:aptでインストール
sudo apt-get install python-pymc
```

### python3

提供されていないのでpipでコンパイル．

```bash:フォートランコンパイラとlapack関連が必要です
sudo apt-get install gfortran libblas-dev liblapack-dev
```

```bash:pipをインストール
sudo apt-get install python3-pip
sudo apt-get install python3 python3-scipy python3-numpy python3-matplotlib
```

ようやくインストール

```:pipでインストール
sudo pip3 install pymc
```
Fashion Tech Night #02で印象に残ったセッション

[Fashion Tech Night #02](https://eventdots.jp/event/609703?utm_source=top&utm_medium=social&utm_campaign=feed&utm_content=tw968004655)というイベントに参加した際のセッションの内容
※オープニング・第１部・第２部と3セッション構成で、どのセッションも技術的な内容ではなかったが、オープニングセッションの内容が印象に残ったので記録。

###イベント概要
---
今現在のファッション業界の潮流や、各ファッションブランドがどのようにITテクノロジーを活用しているのかを紹介する。

###目的
---
ECサイトがどういったテクノロジーを活用しているのか興味があり、そういったナレッジ共有があると期待して参加した。

###Fashion Tech業界の動向について（小関 翼 氏）
---
####小関氏が前職のAmazonで感じたこと
・ Amazonは、ライフスタイル系の苦手分野。
・ Amazonのようなカタログ型UIで、自分が知らない物を購入するというのはコンバージョンに繋がりにくい。
・ 売り手、買い手で情報に差があるライフスタイルの分野で、スタンドアップを起こしたいと思った。

####ファッション業界の動向
- #####○○Techという言葉は、様々な種類がある。
金融系は、FinTech（フィンテック）/Finance（金融）× Technology（技術）
教育系は、EdTech（エドテック）/Education（教育）×Technology（科学技術）
広告系は、AdTech（アドテック）/Advertisement(広告)×Technology（科学技術）
etc.

- #####今までのWeb系の会社は、競争が激化しており差別化がしにくく、アパレルや不動産やHRなどに技術を応用している傾向にある。

- #####5〜10年でtech業界はなくなるのではないか。
なぜかというと、テクノロジーというのはコモディティー化しておりネット系の業界でも使用できる、かつネット系を振り返ると広告やゲームくらいしか成功している会社がないから。
→リアルビジネスに進出するべきではないか。

- #####日本の旧来型の大手企業は、驚くほどネットについて知見がない。かつ、日本は産業毎にむらがあるのでテクノロジーの活用が遅れるのではないかと言われている。

- #####日本は、ミス雇用のミスマッチが起きやすい。それは、新卒で入社してそのまま働き続ける人が多いため。また、他の業界との交流が少ないという理由もある。

- #####海外の転職状況は、スキルベースのため業界を跨いだ転職が普通に行われており、ナレッジの交換が行われ産業に繋がっている。

- #####リアルのビジネスにテクノロジーを応用しようという世界的潮流になっている。
ベンチャーキャピタルの市場規模でいうと、日本より韓国・中国の方が大きな金額が動いている。中国に関しては、日本の２０倍程の投資金額が動いてる。

- #####中国の３企業（BAT）、Baidu（百度/バイドゥ）、Alibaba（阿里巴巴）、Tencent（騰訊・TengXun/テンセント）などが投資に積極的。
件数・金額ベースどちらとも半数近くIT業界に投資している（主にO2O）。
このBATは、既に大規模なプラットフォームを握っているため、インターネット上で重要な情報を得るのは難しく、オフラインを押さえようと動いている。

####ファッションでテクノロジーをどのように活用する？？
1. #####生産の効率化（生産と販売の壁を取り払う動き）
（生産と販売の結びつきは希薄で、数ヶ月後の需要を予測して商品を大量生産して店頭に並べる。市場規模が大きいため、トレンドに乗れば勢いづいて上場する企業もあるが、一旦それが外れると沈没なんていうことが伝統的に起きていた）
    - 生産を短期化
    - ユーザーのニーズをフィードバックして逃さない
    - 販売面で情報提供機能、情報回収

2. #####オフラインとオンラインの統合
    - 売り上げベースでは、オフラインの利益は無視できない
    - 粗利は、ECの方が良い
    - 良い顧客体験を提供するには、オフラインとオンラインの連携が必要
    →オフンラインで購入している顧客もオンライン経由で商品情報などを確認したり、オンラインで購入している顧客もオフラインの店舗で商品の確認を行ったりしている。

3. #####アジア市場の開拓
    - 国内のアパレル市場は大きいが、これから市場の拡大は期待しにくい
    - アメリカよりも中国・東南アジアの市場拡大が目まぐるしい
    - 中国・東南アジアは、技術革新のテンポが日本やアメリカとは違い、急激に技術革新したためスマートフォンを媒介にしてコミュニケーションしてから購入するというのが普通
    （店頭のスタッフがオンライン上でお客とコミュニケーションをとるケースが普通になっている。むしろ、コミュニケーションをとってからでないと買わない）
    - 中国や東南アジアは、AlipayやWeChatペイなどのスマホ決済が普及している
    →クレジットカードやバンクアカウントを持っておらず、デビットカードを使っているためECサイトで決済画面でのユーザー体験が悪かったという背景からモバイルペイメントが普及した。

####ユーザー体験の重要性
#####最近は、会話型UIの販売が増えているが、それが必ずしも優れているとは限らない。
なぜなら、Botなどを使って自分がよくわからないものを探す際に会話型のUIに様々な条件を伝えなくてはいけないため、結局は検索と同じになってしまう。
それよりは、カタログ型UIでオススメされた方が選びやすい。
→何でもかんでも会話型UIでなくて良い。

###考察
---
内容は、ファッション業界を軸にしたものだったが、ITを軸としたサービスを行っている業界には当てはまると感じた。
（参加前は、技術的な側面からEコマースの話をするのかと思っていたが、実際参加してみたら想像とは違ってた…。）
Windows VM で localhost:8000 をホストの 8000 に通す

Mac 等で開発サーバを 8000 番ポートで立てていて、[Windows の VM](https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/) から `http://localhost:8000/` でつなぎたい時のためのコマンドです。

Windows 側のコマンドプロンプトや PowerShell で実行できます。

```
netsh interface portproxy add v4tov4 listenport=8000 connectaddress=[ホストのIPアドレス]

例:
netsh interface portproxy add v4tov4 listenport=8000 connectaddress=192.168.1.3
```

`http://localhost:8000/` なんてしなくても `http://192.168.1.3:8000/` で事足りるのが普通だと思いますが、今回はどうしても localhost にしたかったのでこの方法を使いました。

参考:

- [netsh の port proxy で お手軽パケットキャプチャ \- Qiita](http://qiita.com/noc06140728/items/f05d0b3e4ee3762c2122)

----

(2017/01/30 追記)

- OS を再起動しても設定は保持されるようです。便利。
- コマンドプロンプトや PowerShell で管理者権限が必要なので適宜設定してください。
- VM からホストに接続する時の IP アドレス指定は `connectaddress=10.0.2.2` が便利です。
    - [ゲストOSからホストOS内にアクセスする \- Qiita](http://qiita.com/tjinjin/items/f5a750b049b47d1ce2fd)
    - [Chapter 9\. Advanced topics](https://www.virtualbox.org/manual/ch09.html#idm7783)
Xcode開発を少し速くしてくれるショートカット

勉強会に行って思い出したので
Xcodeで使う
ちょっと忘れがちなショートカットコマンドをメモ

## ctrl+shift+command+H 
call hierarchy

## command + shift + j
メソッド元のファイルを選択状態にする

## control + command + e
ローカル変数をまとめて編集できる

## command + / + option
コメントテンプレができる

```
/**
 <#Description#>

 @param reachability <#reachability description#>
 */
```
## option + command + ← 
フォルダリング

## option + command + → 
フォルダリングオープン

## option + command + ← + shift 
全メソッドフォルダリング

## option + command + ← + shift
全メソッドフォルダリングオープン

## control + command + m
エラー表示 on/off

## command + shift + 7(シングルクォーテーション)
修正可能コマンド

参考URL:
https://developer.apple.com/library/content/documentation/IDEs/Conceptual/xcode_help-command_shortcuts/MenuCommands/MenuCommands014.html
Ionic 2でよく使うUIコンポーネント集

[Ionic 2](http://ionic.io/2)でアプリを作っていて、UIコンポーネントをありがたく使っているのですが、コンポーネントの数が多すぎて[公式ドキュメント](http://ionicframework.com/docs/v2/components/)内を行ったり来たりするのがけっこう面倒なので、（個人的に）よく使うものを備忘録も兼ねてまとめておきます。

# Alert

[AlertController](https://ionicframework.com/docs/v2/api/components/alert/AlertController/)

![ionic_01.png](https://qiita-image-store.s3.amazonaws.com/0/55103/034a82db-48f5-2cdb-dea1-2be4b6dedb05.png)

# Button

[Button](https://ionicframework.com/docs/v2/api/components/button/Button/)

![ionic_02.png](https://qiita-image-store.s3.amazonaws.com/0/55103/1c244a1d-2ec3-93b5-ed52-68242f6d6a8c.png)

# Checkbox

[Checkbox](https://ionicframework.com/docs/v2/api/components/checkbox/Checkbox/)

![ionic_05.png](https://qiita-image-store.s3.amazonaws.com/0/55103/811c8b27-7b55-e098-4a0f-81910de4dda0.png)

# Icon

[Icon](https://ionicframework.com/docs/v2/api/components/icon/Icon/)

Ionicで用意されているアイコンは[Ionicons](http://ionicframework.com/docs/v2/ionicons/)で一覧になっています。検索もできるので使いやすし。

![ionic_03.png](https://qiita-image-store.s3.amazonaws.com/0/55103/4795d7bb-7aa8-e7f1-258a-6cc77c7febb0.png)

# Input

[Input](https://ionicframework.com/docs/v2/api/components/input/Input/)

![ionic_11.png](https://qiita-image-store.s3.amazonaws.com/0/55103/048b02f6-7655-8773-5f0d-9606935d08ed.png)

# ItemSliding

[ItemSliding](https://ionicframework.com/docs/v2/api/components/item/ItemSliding/)

![ionic_04.png](https://qiita-image-store.s3.amazonaws.com/0/55103/f47407f9-face-6902-81a5-8d436f224b1d.png)

# List

[List](https://ionicframework.com/docs/v2/api/components/list/List/)

![ionic_10.png](https://qiita-image-store.s3.amazonaws.com/0/55103/f0fccda0-5f69-ff52-1493-68269cfdd282.png)

# Loading

[LoadingController](https://ionicframework.com/docs/v2/api/components/loading/LoadingController/)

![ionic_12.png](https://qiita-image-store.s3.amazonaws.com/0/55103/167d1018-8692-63ba-af90-5459f64d91d6.png)

# RadioButton

[RadioButton](https://ionicframework.com/docs/v2/api/components/radio/RadioButton/)

![ionic_09.png](https://qiita-image-store.s3.amazonaws.com/0/55103/d1ed9d8c-360f-4ac8-db24-166bbc992673.png)

# Select

[Select](https://ionicframework.com/docs/v2/api/components/select/Select/)

![ionic_08.png](https://qiita-image-store.s3.amazonaws.com/0/55103/0b0a551d-6544-a954-40c1-a350692b22b9.png)

# Toast

[ToastController](https://ionicframework.com/docs/v2/api/components/toast/ToastController/)

![ionic_07.png](https://qiita-image-store.s3.amazonaws.com/0/55103/fd7850bf-9e7b-de92-3998-21b980f29161.png)

# Toggle

[Toggle](https://ionicframework.com/docs/v2/api/components/toggle/Toggle/)

![ionic_06.png](https://qiita-image-store.s3.amazonaws.com/0/55103/d4d70bb2-7fce-8049-390a-2218feb2d608.png)
chibi:bit(micro:bit)2個でワイヤレス温度モニター

# はじめに

寒くなってきました。「いま外は何度だろう」を知る事が出来るワイヤレス温度モニターを、Aruduinoやラズパイで作ろうと思うとそれなりに準備が必要です。ところがBBC micro:bitの互換機chibi:bitを使うと5分あれば作る事が出来ます。

![vlcsnap-2017-01-26-08h40m40s163.jpg](https://qiita-image-store.s3.amazonaws.com/0/44523/9f0fb1ff-2ead-6d83-050c-ebe26477713e.jpeg)

# 用意するもの

chibi:bitを２つだけ

# 開発環境

ブラウザだけ

# プログラム（シンプル版）

Qiitaに書くのも馬鹿馬鹿しいのですが、
## 送信側
![題名未設定   chibi bit IDE.png](https://qiita-image-store.s3.amazonaws.com/0/44523/caeb1b3e-aa1a-7598-d3e3-81bab8203a62.png)
## 受信側
![aa.png](https://qiita-image-store.s3.amazonaws.com/0/44523/07bcbfc0-3cb5-ca24-f5e4-2111b78cbc80.png)
たったこれだけ。

# プログラム（省エネ版）

ただこれだと、常時bluetooth通信が発生するので、エネループで数日は持つようにちゃんと書くと

## 送信側
![Temperature transmitter   chibi bit IDE.png](https://qiita-image-store.s3.amazonaws.com/0/44523/e2c54dea-ab26-370c-7d6b-b9d71437c7c2.png)

## 受信側
![Temperature receiver   chibi bit IDE.png](https://qiita-image-store.s3.amazonaws.com/0/44523/9f01caa5-3da6-3649-a365-e2882e639184.png)

な感じでしょうか？
https://github.com/asondemita/microbit-wireless-temperature-monitor

# 実行動画

[![](http://img.youtube.com/vi/b-s18SFTDuE/0.jpg)](https://www.youtube.com/watch?v=b-s18SFTDuE)
https://www.youtube.com/watch?v=b-s18SFTDuE



# 温度センサーの動作範囲

カタログスペックを探したのですがよくわかりませんでした。実際に、冷凍庫に入れたり、ストーブの前に置いたりして確認できたのは-8度～69度でした。

# 感想

chibi:bitが2つあれば、子供達の工作ネタやエコネタ、観察ネタにサクッと使えそうです。
GNU coreutils > ls >  wrfoutを含む、symbolic linkのみのファイル名を取得する > ls -l wrfout* | grep lrw | awk '{print $9}'

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
GNU coreutils 8.4
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
```

以下の条件のファイル名を取得したい

- symbolic linkのファイル
- wrfoutを含むファイル

http://stackoverflow.com/questions/1412423/display-only-files-and-folders-that-are-symbolic-links-in-tcsh-or-bash
を参考に、以下とした。


```
$ ls -l wrfout* | grep lrw | awk '{print $9}'
wrfout_d01_2016-10-19_00:00:00
wrfout_d02_2016-10-19_00:00:00
wrfout_d03_2016-10-19_00:00:00
```

最後のawkはファイル名のみの表示とするため。

findコマンドは特定のパラメータ以外は記憶していない。上記なら「そら」で入力できる。
<Swift> iOS 10.3からアプリ内レーティングが可能に！- SKStoreReviewController - 

# TL;DR
タイトルのままです。これまではユーザーをAppStoreにリダイレクトさせ、レビューやレーティングをお願いする必要がありましたが、iOS 10.3から`SKStoreReviewController`を使うことで、下記のようなアラートでアプリ内レーティングが可能になりました。

<img width="300" alt="Simulator Screen Shot Jan 26, 2017 8.05.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/119686/8788dfaa-0996-03e0-4213-7fe3fcedfb68.png">


# SKStoreReviewControllerインターフェース
`requestReview()`メソッドしか現在のところはありません。

```swift
@available(iOS 10.3, *)
open class SKStoreReviewController : NSObject {

    
    /** Request StoreKit to ask the user for an app review. This may or may not show any UI.
     *
     *  Given this may not succussfully present an alert to the user, it is not appropriate for use
     *  from a button or any other user action. For presenting a write review form, a deep link is 
     *  available to the App Store by appending the query params "action=write-review" to a product URL.
     */
    open class func requestReview()
}

```


# 使い方
従って、使い方もすごくシンプルです。

```swift
// Xcode Version 8.3 beta (8W109m)
import StoreKit
SKStoreReviewController.requestReview()
```

# いつ使う？ 使える？
>Although you should call this method when it makes sense in the user experience flow of your app, the actual display of a rating/review request view is governed by App Store policy. Because this method may or may not present an alert, it's not appropriate to call it in response to a button tap or other user action.

要約します。

* ユーザー体験上、自然な場面で使いましょう。
* 実際の表示はApp Storeポリシーによって管理されます。
* 必ずアラートが表示されるわけではないため、ボタンタップやその他のユーザーアクションをトリガーとするのは適切ではありません。

>When you call this method while your app is still in development mode, a rating/review request view is always displayed so that you can test the user interface and experience. However, this method has no effect when you call it in an app that you distribute using TestFlight.

* 開発モードでは常にアラートが表示されます。
* TestFlightではこの動作はしません（＝ 本番と同じく表示は保証されない）

以上

# 参考
https://developer.apple.com/reference/storekit/skstorereviewcontroller
https://developer.apple.com/reference/storekit/skstorereviewcontroller/2851536-requestreview
機械学習論文読みメモ_30


[Learning Simple Algorithms from Examples](http://www.jmlr.org/proceedings/papers/v48/zaremba16.pdf), ICML2016
Copy, multi-digit addition, single digit multiplicationといったシンプルなアルゴリズムを例から直接学習させるフレームワークを提案する。
このフレームワークはinterface、1-Dor2-Dグリッド、とcontroller、NNモデル、から成り立っている。
NNモデルはQlearningによって学習する。
実験より、controllerの性能はQlearningによる探索性能よりもNNモデルのcapabilityに依存する事が分かった。

[The Information Sieve](https://arxiv.org/pdf/1507.02284.pdf), ICML2016
階層的な情報分解に基づいた教師なし表現学習手法を提案する。
このモデルは階層毎にだんだんと情報抽出の粒度を細かくしていくような構造を持つ。
各層は、与えられたデータの多変量関係を最も表現するような潜在変数を１つずつ抽出する。
これはエントロピーに基づく情報測量でなされる。
ある層で表現しきれなかった情報は次の層へ渡されていく。そして理想的には最後に独立なノイズのみが残る事になる。

[Training Neural NetworksWithout Gradients: A Scalable ADMM Approach](http://www.jmlr.org/proceedings/papers/v48/taylor16.pdf), ICML2016
昨今のNN学習手法はgradient descentに頼っているが、それはマルチコア処理に対してスケールしづらく、また非凸最適化において収束が遅くなる現象が起こる。
本論ではgradient descentではなく、alternating direction methodを用い、bregman iterationによる最適化を用いた手法を提案する。
この手法ではNN最適化問題をいくつかのclosed formで解けるsubproblemに分解して、それぞれを閉形式で解き全体解を求める。
この手法はgradient descentであった問題を回避する事ができる、またマルチコア処理にも対応している。
機械学習論文読みメモ_29


[Unsupervised Deep Embedding for Clustering Analysis](https://ai2-website.s3.amazonaws.com/publications/unsupervised-deep-embedding.pdf), ICML2016
Deep learningを用いて、データのクラスタリングのための低次元埋め込み特徴表現を行い、またクラスタリングを行う手法を提案する。
従来の特徴表現学習は主に教師あり学習の文脈において研究されてきた。
本論では教師なしであるクラスタリングにおいてそれを考える。
この設定では、ラベルありデータが存在しないためデータから直接モデルを改善する事はできず、代わりに１つ前のiterationで得られたクラスタリング結果を元に特徴表現、クラスタリングassignmentを改善していく方法を取る。

[Matrix Eigen-decomposition via Doubly Stochastic Riemannian Optimization](http://www.jmlr.org/proceedings/papers/v48/xub16.pdf), ICML2016
行列固有値分解を扱う。
本論ではgradient ascent(GA)とcoordinate ascent(CA)をリーマン多様体上で同時に行う手法を用いて固有値分解を行う提案。
GAはデータ行列の部分集合をサンプリングする際に用いられ、CAはリーマン多様体上の勾配行列に対して、座標方向をサンプリングで決める際に用いられる。
この手法は計算のcomplexityを改善し、行列のinversionを回避可能である。

[Variable Elimination in the Fourier Domain](https://cs.stanford.edu/~ermon/papers/icml16_fourier_elim.pdf), ICML2016
グラフ表現における高次元で複雑な確率分布をコンパクト形で表現するための手法として、フーリエ領域を活用する手法を提案する。
従来のコンパクト化の手法は、変数間の条件付き独立性に注目して分解された表現を獲得する事で達成してきた。
しかし決定木モデルなどは条件付き独立性では分解が出来ず、決定ルールを利用して分解するなど別なアプローチも存在している。
本論では、その中でもフーリエ表現を利用した分解方法を提案する。
フーリエ領域においてはスパースな表現を獲得する事が可能で、コンパクト化が達成できる。
また多くの確率グラフはコンパクトなフーリエ表現が可能である事を示し、理論解析により新たな確率分布近似の方向性を示した。
機械学習論文読みメモ_28


[Isotonic Hawkes Processes](http://www.cc.gatech.edu/~ywang/papers/WanBoDuSon16.pdf), ICML2016
Hawkes processモデルは相互活性、何かイベントが起きるとそれがきっかけに次のイベントを誘発するような現象、をモデル化する時に有用である。
従来このモデルは誘発の強さ、intensity functionは線形性を持っており、現実の非線形を持つ現象を適切にモデル化できていない。
本論ではこのintensity functionに非線形接続関数加えたモデルとしてisotonic hawkes processを提案する。
また対応する学習アルゴリズムも提案し、非線形関数とその他のパラメータを同時に学習できるようにする。

[Network Morphism](https://arxiv.org/pdf/1603.01670.pdf), ICML2016
既存の学習済モデルをその実現している関数を維持したままネットワーク構造を変化させるためのシステムスタディを行う。
このネットワーク構造変化には層の深さ、幅、サブネット構造が含まれる。
これらの変化を実現するためにmorphism equationを提案し、これを元にネットワーク変化のためのアルゴリズムを提案する。
またネットワークの非線形性にも対応するため、パラメトリックな非線形関数を同様し、それに基づいて任意の非線形関数に対するネットワーク変化の可能性を促進した。

[Discrete Deep Feature Extraction: A Theory and New Architectures](https://arxiv.org/pdf/1605.08283.pdf), ICML2016
特徴抽出を目的としたCNNの数学的理論は連続時間系(waveletなど)において提案されてきている。
本論では離散時間系においてこれを行い、対応する新たなCNN構造を提案する。
特に、局所的、あるいは全体的なdeformation、translation sensitivityを解析し、入力信号の構造がどのように抽出される特徴ベクトルへ影響を与えるかを明らかにする。
提案した理論は一般的なフィルタ、リプシッツ連続な非線形性、プーリングへ適用できる。
機械学習論文読みメモ_27


[The Variational Nystrom Method for Large-Scale Spectral Problems](http://jmlr.org/proceedings/papers/v48/vladymyrov16.pdf), ICML2016
スペクトル法を用いた次元削減、クラスタリングは、スパースな隣接行列に対する固有値分解を要求する。
この行列が大きい時には近似手法が用いられる。
その中でもNystrom法はランドマークとなるようなサンプルを集めた部分集合行列に対して固有値分解を適用し、残りのサンプルに対しては隣接行列の情報を用いて線形補間近似を行う。
この時ランドマークとなる点が少ないと近似精度が落ちてしまうため、ランドマーク数を一定数確保する必要がある。
この課題に対して、locally linear landmarks(LLL)という手法がある。
この手法はランドマークでない各データ点がその近傍のランドマーク点によって再構成できるような制約を加えた問題として構築するため、削減された固有値問題が結局隣接行列全体を活用できる事となる。
本論ではこの手法に関して、LLLの制約ではなく、Nystrom法で行う線形補間近似を制約として代わりに導入したものを解く。
Nystrom法による制約は計算効率が良く、かつ全ての隣接行列の情報を利用できるようになる。

[Parameter Estimation for Generalized Thurstone Choice Models](http://jmlr.org/proceedings/papers/v48/vojnovic16.pdf), ICML2016
Generalized Thurstone choice modelにおける最尤パラメータ推定問題を扱う。
このモデルでは、与えられるデータは２つあるいはそれ以上の比較対象アイテム集合に対してどのアイテムが最も良い(top-1)かの情報である。
この情報は良く扱われるペアワイズ比較問題も含んでいる。
このモデルのパラメータは、各アイテムの強さを表すパラメータと、累積確率分布関数である。
各アイテムのパフォーマンスはその強さと累積確率分布によりサンプリングされた値の和によって表される。
様々な選択に関するモデルはこのgeneralized Thurstone choice modelに特殊例として見る事が可能である。
本論ではこのモデルの最尤推定におけるパラメータ推定精度を解析した。
特にgeneralized Thurstone choice modelの具体的な選択と、対象アイテムの構造に、パラメータ推定精度は大きく影響される事が分かった。

[Analysis of Deep Neural Networks with the Extended Data Jacobian Matrix](http://jmlr.org/proceedings/papers/v48/wanga16.pdf), ICML2016
Deep learningの構造に依存しない、解析ツールとしてextended data jacobian matrix(EDJM)を提案する。
EDJMは学習された関数の複雑性に強い相関がある。
深いが各層が小さいネットワークと浅いが各層が大きいネットワークは同じ関数を学習する事ができるが、その学習の軌跡は異なったものとなる。
このように違う構造を持つネットワークにおける学習の軌跡の違いを解析する事はより良いネットワークを構築する上で重要である。
例えば蒸留に関する知見は、教師ネットワークにより学習された生徒ネットワークと、教師に頼らず学習した類似のネットワークとの間の違いは何かという疑問を呈する。
提案するEDJMはdata jacobian matrix(DJM)が元になっており、ReLUを活性化関数とした時に、NNは線形システムの集まり、区分線形関数として考える事ができ、その各データ点周りの微分をDJMと呼ぶ。
DJMを複数のデータ点に関して集めたものをEDJMと呼び、この構造を解析する事でネットワークに関する理解を得る事ができる。
特にdropout、アンサンブル、蒸留の解析を通して、新しいスペクトル正則化手法を提案する。
機械学習論文読みメモ_26


[Black-Box alpha-Divergence Minimization](https://arxiv.org/pdf/1511.03243.pdf), ICML2016
\alpha-divergenceに基づいた近似推論の手法としてBlack-Box \alpha-Divergence minimization手法を提案する。
この手法は確率勾配法に基づき最適化可能なため、大きなデータに対しても適用可能である。
また尤度関数とその勾配値のみを要求するため、複雑な確率モデルに対しても容易に適用可能で、automatic differentiation、任意の関数に対する購買を計算する計算機科学的な手法、を利用する事ができる。
\alphaを変化させる事で\alpha=0ならvariational bayes、\alpha=1ならexpectation propagationの類似手法となり、その間を補完した手法を得る事ができる。
実際、\alpha=0.5とする事で、より高性能なモデルを実現する事が可能である。

[Doubly Decomposing Nonparametric Tensor Regression](http://jmlr.org/proceedings/papers/v48/imaizumi16.pdf), ICML2016
テンソルを入力とし、スカラー値を予測するようなテンソル回帰モデルを扱う。
このモデルでは主に、線形性と低ランク性を仮定したモデル、あるいはカーネル関数を利用したノンパラメトリックモデルが用いられる。
ただし、bias-variance trade-offが課題で、線形低ランクモデルではモデル表現力が制限される事によるbias、ノンパラメトリックモデルでは過剰適合によるvarianceが問題となる。
本論ではこの問題に対処するため、additive-multiplicative nonparametric regression(AMNA)モデルを提案する。
AMNAでは、回帰モデルをランク１テンソルを入力とするような局所関数の和として表現する。
このモデルでは、関数空間と入力空間を同時に分解する事になる。
この同時分解によりモデルの複雑さとノイズの影響を軽減する事が可能になる。
このモデルは従来のノンパラメトリックモデルと同じクラスのモデルを表現できる中で、収束オーダーを大幅に改善できている。

[Gaussian process nonparametric tensor estimator and its minimax optimality](http://jmlr.org/proceedings/papers/v48/kanagawa16.pdf), ICML2016
非線形低ランクテンソル予測問題について扱う。
一般的な線形テンソルモデルを拡張し、ガウス過程事前分布とRKHSを利用した非線形ノンパラメトリックベイズモデルへの拡張を行う。
強い凸性を仮定する事なく、提案モデルの収束性を示し、それはminimax optimal rateである事を示す。
機械学習論文読みメモ_25


[Rich Component Analysis](http://jmlr.org/proceedings/papers/v48/gea16.pdf), ICML2016
同じ現象を指し示す、複数のデータ(multiview data)を学習し、共通する特徴、あるいはあるデータに特有の特徴を抽出する一般的フレームワークを提案する。
特に対象の分布に対するモデルを必要とせず、累積確率に関するmethod of moment法を適用する事で実現する。

[A Kronecker-factored approximate Fisher matrix for convolution layers](https://arxiv.org/pdf/1602.01407v2.pdf), ICML2016
Natural gradient descentを始めとした2次オーダーの勾配法を利用する事で計算効率を改善する事が期待される。
しかしその計算にはFisher matrixなどの損失関数の曲率に関する情報を推測する必要があり、従来その精度には限界があった。
本論ではKronecker Factors for Convolution(KFC)を提案し、これを用いればNNモデルの畳み込み層におけるFIsher matrixを
tractableな形で近似する事が可能になる。
KFCは誤差伝播法において計算する勾配の分布に関する構造を確率モデルとして利用する。
その構造としては例えば、NNモデルの各層間の重み同士には関連がない等を利用する。
推定されたfisher matrixは小さな行列同士のクロネッカー積で表現でき、逆変換が容易である。
KFCは曲率情報を保持しつつ、効率的な勾配法計算を可能にする。

[Continuous Deep Q-Learning with Model-based Acceleration](https://arxiv.org/pdf/1603.00748.pdf), ICML2016
モデルフリーな強化学習のアプローチにおいてsample complexityの大きさは問題である。
本論ではそれを減らすための手法として、Q learningを連続値に拡張したnormalized advantage function(NAF)を提案する。
NAFの利用により連続的なタスクに対してexperience replayが適用可能になり、学習効率が改善できる。
またすでに学習済みのモデルを用いる事で新たに学習するモデルフリー手法の学習効率をさらに改善できる。