OmniAICreator/Qiita-1.07M huggingface dataset:
Slack備忘録


# 文字の装飾
| 記法 | 内容 | 画像 |
|:-:|:-:|:-:|
|slack|通常|![スクリーンショット 2016-08-08 17.41.20.png](https://qiita-image-store.s3.amazonaws.com/0/135589/089ab5d4-7db3-8af6-e9f1-188b129bf306.png)|
|\_slack\_|斜線|![スクリーンショット 2016-08-08 17.38.41.png](https://qiita-image-store.s3.amazonaws.com/0/135589/c8a9574e-5171-ed84-2a22-72f4061f84f2.png)|
|\*slack\*|太字|![スクリーンショット 2016-08-08 17.39.25.png](https://qiita-image-store.s3.amazonaws.com/0/135589/9054df3e-6ec4-d507-f64b-cf2265852c5a.png)|
|\~slack\~|取り消し線|![スクリーンショット 2016-08-08 17.39.55.png](https://qiita-image-store.s3.amazonaws.com/0/135589/1da0c9c2-ca64-2f5d-244c-24c496f64274.png)|
| >slack|引用|![スクリーンショット 2016-08-08 17.06.29.png](https://qiita-image-store.s3.amazonaws.com/0/135589/35f256d7-4c75-acc0-9974-ae5c75271d8e.png)|
|\`slack\`|灰色背景、赤字|![スクリーンショット 2016-08-08 17.08.18.png](https://qiita-image-store.s3.amazonaws.com/0/135589/3398b898-1402-7001-aa7b-52b17645193d.png)|
|\`\`\`slack\`\`\`|灰色背景|![スクリーンショット 2016-08-08 17.36.38.png](https://qiita-image-store.s3.amazonaws.com/0/135589/54d54c2d-92ce-8a7f-2f8d-6148c3d23085.png)|
|#ff00ff|カラーコードサンプル|![スクリーンショット 2016-08-08 17.40.22.png](https://qiita-image-store.s3.amazonaws.com/0/135589/e5581650-118d-7805-b1ed-8a58b1ec33b1.png)|


#スラッシュコマンド

| コマンド | 概要 |
|:-:|:-:|
|/who|チャンネル内にいるメンバーリストを表示|
|/remind|指定した時間にリマインドをしてくれる|
|/collapse|チャンネル内の画像を非表示にする|
|/expand|チャンネル内の画像を表示する| 
|/call|通話する|
|/shrug|メッセージの語尾に ¯\\_(ツ)_/¯ を付けてくれる|

## /who：チャンネル内にいるメンバーリストを表示



```
/who
```
> Users here: @sato, @suzuki, @tanaka, @hashimoto... and you!

## /remind：リマインダを設定
### リマインダの設定
```
/remind [対象] to [メッセージ] in/at/on [日時] every [頻度]
```
> [対象]に対して指定した時間に[メッセージ]を[頻度]のたびに送る

 * in : 〜分後、〜時間後
 * at : 時刻指定
 * on : 日付指定（時刻指定の無い場合、**9:00**で設定される）


### リストを表示
```
/remind list
```
> \*Recurring\*​:
>• To “進捗MTG” at 2pm every Tuesday. Delete
>
​> \*Past and incomplete\*​:
>• “進捗どうよ”. Complete · Delete · Snooze: 15 mins · 1 hr · Tomorrow

 * 予約リマインダのキャンセル
 * 通知済みリマインダのスヌーズ　等が可能


###例
```
/remind me to 進捗どうよ？ in 30 minute
/remind me to 進捗どうよ？ in 30 minutes
```
> 30分後に「進捗どうよ？」メッセージが飛んで来る

```
/remind me to プランナーに仕様確認 at tomorrow
/remind me to プランナーに仕様確認 at tomorrow 9:00
```
> 翌日9時に「プランナーに仕様確認」メッセージが飛んで来る

```
/remind me to 進捗MTG at 14:00
```
> 14時に「進捗MTG」メッセージが飛んで来る

```
/remind me to 進捗MTG at 14:00 every Tuesday
```
> 毎週火曜日の14時に「進捗MTG」メッセージが飛んで来る

```
/remind me to 朝会 at 11:00 every weekday
```
> 平日の毎朝11時に「朝会」メッセージが飛んでくる

```
/remind me to アップデート on 8/7 15:00
/remind me to アップデート on August 7 15:00
/remind me to アップデート on August 7 at 15:00
```
> 8月7日15時に「アップデート」メッセージが飛んで来る


## /collapse、/expand ：画像の表示・非表示の切り替え

```
/collapse
```
> 画像をすべて非表示（折りたたみ状態）

```
/expand
```
> 画像をすべて表示（折りたたみ解除）


## /call :特定のユーザ・チャンネル内で通話を行う
```
/call @[ユーザ名]
```
> *@[ユーザ名]*との通話を開始する

```
/call #[チャンネル名]
```
> *#[チャンネル名]*内のユーザ全員との通話を開始する（未確認）


## /shrug：煽り用(笑)

```
/shrug なにやってんですか
```
> 「なにやってんですか ¯\\_(ツ)_/¯」 というメッセージが送られる
Bash on Ubuntu on Windows 上で PyMOL をインストールして起動したまでは良いものの分子を表示できなかった話（2016 年 8 月上旬）

UNIX 系のソフトウェアが Windows 上でも動くと便利だよねということで１つ１つ人柱していこうのコーナー

#Bash on Ubuntu on Windows のインストール
Windows 10 Anniversary Update をまず適用。
2016 年 8 月上旬時点、まだ自動更新のほうには来ていなかったりするので、
[このへん](https://support.microsoft.com/ja-jp/help/12387/windows-10-update-history?ocid=update_setting_client) から手動でダウンロードしてアプデかけましょう。
ディスク空き容量が 20 GB 要求されるので空けますが、20 GB ギリギリだとダメのようで、23 GB くらい C ドライブに空けてあげるとうまくいきました。

更新が済んだら、設定から開発者機能を有効化すれば bash が使えるようになります。
参考 → [Qiita: Bash on Ubuntu on Windowsをインストールしてみよう！](http://qiita.com/Aruneko/items/c79810b0b015bebf30bb)

#PyMOL のインストール
Ubuntu なので apt-get するだけです。

```
sudo apt-get install pymol
```

これで pymol コマンドが使えるようになりますが、ウィンドウシステムがないので立ち上がりません。

#Xming の導入

PyMOL の GUI を表示するためにウィンドウシステムを入れます。

[Qiita: Bash on Ubuntu on Windows + XmingによるGUI](http://qiita.com/makky0620/items/e31edc90f22340d791ff)
この通りにやりましょう。

Xming 自体は exe 形式インストーラーで Windows 側にインストールするものです。

![image](https://qiita-image-store.s3.amazonaws.com/0/54184/45384201-ac78-e6a2-bd06-bdd66caab517.png)

起動した Xming は ↑ このように右下に隠れているかも。
環境変数 DISPLAY を設定すれば OK。

#PyMOL 起動

あとは pymol とコマンドを打てば

![image](https://qiita-image-store.s3.amazonaws.com/0/54184/58f7f6b7-c921-269d-a92b-2cd985b66c78.png)

起動したヤッター！

、、しかしながら試しに PDB ファイルをロードしてみると

![image](https://qiita-image-store.s3.amazonaws.com/0/54184/e6929995-00a0-7062-8642-d1d70e7db565.png)

こあだんぷ。

PDB ファイルを開こうとするんじゃなくて PyMOL 内で低分子を作ろうとしても落ちてしまうので、
オブジェクト描画自体がダメなのかもしれません。
何が足りないのか気になるところですが、単に現状の Windows Subsystem for Linux の実装の限界なのかもしれないし今回これ以上深入りはしません。
うまくやる方法があれば教えてください（丸投げ）

PyMOL 自体は別に bash を介さなくても Windows 上にインストール可能なので、
[阪大蛋白研: PyMOL インストール (2016.06.22 更新)](http://www.protein.osaka-u.ac.jp/rcsfp/supracryst/suzuki/jpxtal/Katsutani/install.php)
[Ag++: PyMOL ver 1.6 インストール for Windows (2013.07)](http://blog.livedoor.jp/ag_plusplus/archives/65108543.html)
このへんを見てやれば大丈夫です。

そのほか、Linux 上で PyMOL をビルドしたいなどとかいった方は
[Qiita:【作業メモ】CentOS 7 上で PyMOL をソースからビルド](http://qiita.com/inferist/items/770a88151d27fa117111)
こちらなどをどうぞ。
EntityFramework SaveChange()時の例外発生時にSQLのエラーを表示させる

EntityFramework、SaveChange()の例外発生時に、SQLのエラーを表示させる方法。

SQLExceptionが表示されなくて、どの部分でエラーが起きているか分からなくて困った…。
そんな時の備忘録。

EntityFramework側で検証が行われているらしい。
下記のコードで検証の内容を出力することができる。

    try
    {
        db.SaveChanges();
    }
    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
    {
        foreach (var errors in ex.EntityValidationErrors)
        {
            foreach (var error in errors.ValidationErrors)
            {
                // VisualStudioの出力に表示
                System.Diagnostics.Trace.WriteLine(error.ErrorMessage);    
            }
        }
        throw ex;
    }


このコードでキャッチすると、
SaveChange()の例外発生時に、SQLExceptionのエラーメッセージが出力されます。


SaveChanges()時の検証の実行は DbContextConfiguration.ValidateOnSaveEnabled プロパティで制御できるみたい。デフォルトはtrue。(EntityFramework5)

http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbcontextconfiguration.validateonsaveenabled%28v=vs.103%29.aspx


falseにして、コードを動かしてみると
`db.Configuration.ValidateOnSaveEnabled = false; `

SQLExceptionを含んだ例外発生。

InnerExceptionのInnerExceptionにSQLExceptionが表示されます。
なかなか深い階層。Σ(ﾟДﾟ)

EntityFrameworkの検証が無効になって、SQLが発行されているらしい。
`db.Configuration.ValidateOnSaveEnabled = false; `
にしておいた方が、デバッグの際やErrorログの出力に便利かも。
secure coding > Link > 組込みソフトウェア開発向けコーディング作法ガイド C言語版 (ESCR) | C++言語版

組込みソフトウェア開発時のコーディング作法。SEC BOOKSで本にもなっているが、アンケートに答えることでPDFが取得できる。

https://www.ipa.go.jp/sec/reports/20150410.html

信頼性、保守性、移植性、効率性の観点からの作法について記載されている。

C++言語版は以下の「PDF版ダウンロード」のリンクから取得できる。こちらはアンケート回答は不要のようだ。
https://www.ipa.go.jp/sec/publish/tn10-003.html
ユーザではなく、システムワイドにRuby(rbenv)をインストールする方法　※自分用メモ

# システムワイド(System Wide Install)にrbenv(Ruby)をインストールすることにより、どのユーザでもrbenv(Ruby)を使用することができるようにする。
よくあるのは(あくまで自分の場合)、AWSのEC2環境構築などの際に新しくユーザを作成し、ユーザ1ではrbenv(Ruby)が使えるが、ユーザ2では使えない。などという場合がある。
root
ユーザ1
ユーザ2
ユーザ3

これはrbenv(Ruby)をユーザに対してインストールしてしまったことが原因。
この問題を解決するために(ユーザ全員がrbenv(Ruby))を使えるように、システムワイドにrbenv(Ruby)をインストールする。

参考サイト　※実際の作業手順は下記サイトを参考にする。
http://d.hatena.ne.jp/komiyak/20150603/1433364444
http://qiita.com/chezou/items/86ee6ded253c094a23b6
http://qiita.com/semind/items/8e973a544b592376a07e

rbenvとは・・・Ruby のバージョン管理ツールのこと。

## ユーザに対するインストールの場合
普通に rbenv を使うと、それはユーザに対するインストールとなります。
たとえば Suzuki というユーザーがあれば、下記の場所に置かれます。
/home/Suzuki/.rbenv

しかし、この場合は他のユーザーが Ruby を使いたいと思っても利用することが出来ません。
特定のユーザーに対して rbenv をインストールするのではなく、システム（root）に rbenv をインストールすることにより、どのユーザーでも rbenv を使えるようにします。
これを System Wide Install と呼びます。

## システムワイド(root)に対するインストールの場合
rbenv, ruby-build を /usr/local にインストールします。
/usr/local
WebViewを読み込む途中に処理を入れる


add this line to AndroidMAnifest.xml

```AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
```

www.google.com.ph 以外をloadUrlしようとすると「ごめんね」と表示される

```MainActivity.java
package com.example.xxxxx

import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.util.Log;

import java.net.URL;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WebView webview = new WebView(this);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(mClient);
        webview.loadUrl("http://www.google.com.ph");
        setContentView(webview);
    }

    private WebViewClient mClient = new WebViewClient(){

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Uri request = Uri.parse(url);

            if(TextUtils.equals(request.getAuthority(), "www.google.com.ph")){
                Log.v("name1", request.getAuthority());
                //Allow the load
                return false;
            } else {
                Log.v("name2", request.getAuthority());
            }


            Toast.makeText(MainActivity.this, "ごめんね", Toast.LENGTH_SHORT).show();
            return true;
        }
    };
}

```
VirtualBox 5.1.2 を Windows7 にインストールする手順

# やりたいこと

* Virtual Box 5.1.2 を Windows7 にインストールする。

# 前提環境

* OS: Microsoft Windows 7 Professional 6.1.7601 Service Pack 1 (SP1) ビルド 7601 x64

# インストールするソフトウェア

* VirtualBox 5.1.2 for Windows

# 手順

## インストーラをダウンロード

[**Download VirtualBox**](https://www.virtualbox.org/wiki/Downloads) で **VirtualBox 5.1.2 for Windows hosts** の **x86/amd64** を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/209470c7-29ff-3538-4d79-da347d49d7cc.png)

## インストーラを実行

ダウンロードされた **VirtualBox-5.1.2-108956-Win.exe** を実行

**Next** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/266bbd88-8fdc-651d-ae64-376731dd37a1.png)

**Next** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/a93711d3-87d9-3c9e-edba-061489e2228f.png)

**Next** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/9ce2dbc2-b756-f8f2-6703-00583d861ad0.png)

**Yes** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/5257f84d-a0dd-2fdf-1b1a-3c7794786c5e.png)

**Install** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/d1c4be8c-e877-9ca8-f882-7eeaa0fe520c.png)

1. Start Oracle VM VirtualBox 5.1.2 after installation のチェックをOFF
2. **Finish** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/ee1cfd23-1315-f493-bf70-859a14fcc9f2.png)


# 完了
SpringBootで作ったjarをinit.dのサービスとして動かしてみた

# 概要
SpringBoot1.3からFully Executable Jarとしてビルドして
Linux上のサービスとして簡単に登録できるようになった。

今までは起動シェルを作成し、サービスに登録していたのだけれど
これらをすっきりさせることができそう。

# 設定手順

## gradle準備

build.gradleに以下の記述を追加

```gradle
springBoot {
  executable = true
}
```

# ビルド

いつもの```gradle build```で事足りる

```bash
$ gradle build
```

# 配置

profileとか実行環境に関わる設定はconfファイルを作成して設定できる。
confファイルはデフォルトで実行するjar実体と同じ場所にある「jarと同じ名前.conf」を見に行くようになっている。

> 実はvim等で作成したjarを見ると頭の方に起動スクリプトが自動生成されている。この中身を見るとどのconfを呼んでいるか等がわかるので一読。

今回はdeployというフォルダにjarとconfを配置すると仮定する。

```bash
$ mkdir deploy

$ cp -p /xxxx/build/libs/spring-boot.jar /xxxx/deploy/spring-boot.jar
```

```[jarの名前].conf``` という名前でjarと同じ場所に配置する
このとき、confファイルはjarのシンボリック名やシンボリックリンクと同じ位置ではいけない。
実体のjar名、位置に配置する

```bash
$ vi spring-boot.conf

.......

export JAVA_HOME=/usr/local/jdk1.8
export JAVA_OPTS="-Dspring.profiles.active=production"
export LANG="ja_JP.utf8"
```

* JAVA_HOME-> service起動する際にJAVA_HOMEが見つかるように指定しておく
* JAVA_OPTS-> ここにprofileやxmxなどを設定することができる
* LANG->メッセージリソースをLANG指定で切り替えている場合とか。service起動時LANGは引き継がれないので。

> メモ
> JAVA_OPTSでなく環境変数にprofileを設定した場合、logbackが正しく受け取ってくれなかった。
> profileはJAVA_OPTSで渡すのがよさそう。

ファイルパーミッションを調整しておく

```bash
$ chmod u+x spring-boot.jar
$ chmod o+r spring-boot.conf
```


> メモ
サービスの起動・停止はrootユーザで実行する。
jar自体はjarファイルの所有ユーザで実行される。
confファイルはrootユーザが参照できるようにしておく必要がある


# サービスに登録

```/etc/init.d``` にシンボリックリンクするだけでＯＫ

```bash
$ sudo ln -s /xxxx/deploy/spring-boot.jar /etc/init.d/spring-boot
```


# 起動・終了

```bash

# サービスの起動
$ sudo service spring-boot start

# サービスの停止
$ sudo service spring-boot stop

# サービスの自動起動ON
$ sudo chkconfig spring-boot on
```

# 実行ログなど

標準出力はデフォルトで```/var/log/[サービス名].log```に出力される
別フォルダや別ファイルに出力するにはconfに以下のような設定をする

SpringBootから出力するlogback経由のログ等は通常どおりjarファイル起点の指定した位置に出力される。

```
export LOG_FOLDER=/xxxxxx/deploy
```

# 参考サイト

[参考1](http://progmemo.wp.xdomain.jp/archives/954)
無料期間後Windows 10に無料でアップグレードする方法

<h1>無料期間が過ぎても、Windows 10に無料でアップグレードしたい</h1>

2016年7月29日がWindows 10無償アップグレードの締め切りです。Windows 10無償アップグレード終了したから既に一週間ほど経ちました。無料アップグレードのチャンスを逃して、いまさらWindows 10に無料でアップグレードして置けばよかったと思う人は結構いますね。しかし、無料期間が過ぎても無料でWindows 8.1/8/7からWindows 10にアップグレードすることは一体できるでしょうか。
はい、無料期間が過ぎても無料でWindows 8.1/8/7からWindows 10にアップグレードできます！今日は皆さんに、幾つかの方法を紹介いたします。

<strong>ヒント：</strong>アップグレード前にシステムと大事なデータをバックアップしておく
アップグレードを行う前、システムと大事なデータをバックアップしておくのを強くお薦めします。それは、万が一アップグレードする時エラーが起こっても、既にバックアップを取っておきましたから、データの紛失はありません。ここは、バックアップソフト<a href="https://jp.easeus.com/backup-software/home-edition.html">EaseUS Todo Backup</a>を皆さんにお薦めします。システムと大事なデータをワンクリックでバックアップできます。無料版で体験することはできますので、一度試してみてはいかがでしょうか。

<h1>無料でWindows 8.1/8/7からWindows 10にアップグレードする</h1>

システムと大事なデータをバックアップしておいたら、下記の方法を試して、無料でWindows 10にアップグレードしてみましょう！

<strong>方法一：</strong>assistive technologyプロバイダーからWindows 10アップデートをゲットする（Microsoft提供）
assistive technologiesを利用している方は、マイクロのポリシーによりますと、まだWindows 10に無料アップグレードできます。それは、Windows 10との互換性を確認するためです。
assistive technologiesユーザーなら、今すぐWindows 10に無料アップグレードしましょう。

<strong>方法二：</strong>システムクロックを変えてからWindows 10にアップグレードする（WinBeta提供）
ギックなどのパソコン達人によりますと、システムクロックを2016年7月29日前の時点に調整したら、Windows 10への無料アップグレードがまた可能となります。
システムクロックを7月28日或いはもっと前の時点に調整します。
アップグレード催促ウィンドウを再アクティブして、アップグレードを開始させます。
Windows 10アップデートをダウンロードしてからインストールします。
しかし、システムクロックを変えるのはあくまでもバッグを利用するこどなので、いつかマイクロに封じられて使えなくなるかもしれません。

<strong>方法三：</strong>Windows 10リカバリイメージを利用して無料アップグレードを行う（<a href="https://jp.easeus.com/">EaseUS</a>提供）
バックアップソフトEaseUS Todo Backupを利用して、まずは別のWindows 10インストール済みのパソコンでWindows 10システムイメージを取ったから、現在のパソコンで再度インストールすることでWindows 10への無料アップグレードも実現できます。
EaseUS Todo Backupを使って、別のパソコンでWindows 10のシステムイメージバックアップを作成します。
今のアップグレードしたいパソコンでEaseUS Todo Backupをダウンロードし、インストールします。
システムイメージを保存するディスク或いはドライブを今のパソコンに挿入します。
EaseUS Todo Backupを運行して、システムイメージをパソコンで復元します。
cドライブをシステムドライブと指定して、Windows 10をインストールします。

また、アップグレードする前に、十分な空き容量も確認してみてください。不十分な場合では、[パーティション変更](https://jp.easeus.com/partition-manager/resize-partition-windows-10.html)は必要となります。
人工知能ボットAPIの試用

User Localさんが無料提供している人工知能ボットAPIを試してみました。
http://ai.userlocal.jp/

会話のイメージとしては下記ようなapiリクエストをサーバーに投げるだけです。

```
https://chatbot-api.userlocal.jp/api/chat?message=%E9%87%8E%E7%90%83%E3%81%97%E3%81%9F%E3%81%84&key=sample
```

そこでチャット形式で人工知能と会話ができる簡易Webアプリをrailsを使って作成してみました。
![スクリーンショット 2016-08-08 16.02.32.png](https://qiita-image-store.s3.amazonaws.com/0/17388/ed9895b0-9376-fc0c-1cae-b5cd4c25e019.png)

ソースはgithubに公開しています。
https://github.com/dev-chiku/botai
(rails, scss, coffeescript, jquery, bootswatch, rspec, factorygirl, databasecleanerなど使用)
APIGateway swagger.yamlをインポートすると「Invalid Swagger 2.0 input.」

## swagger.yamlが標準でインポートできる

[こちらの記事](http://qiita.com/kurimoto/items/a15a7d4810500b2dcc97)にもありますが、今(2016/08/08)では[aws-apigateway-importer](https://github.com/awslabs/aws-apigateway-importer)を使わずにAWSCLIまたはAWSConsoleだけでAPIGatewayにswagger.yaml定義をインポートすることが出来ます。

#### AWSCLIの場合
```shell-session:cliの場合
$ aws apigateway import-rest-api --body file://swagger.yaml
```

#### Consoleの場合
![スクリーンショット 2016-08-08 15.49.45.png](https://qiita-image-store.s3.amazonaws.com/0/31010/e9db768e-69aa-fd92-4cc7-7a348dc7595a.png)

## 「Invalid Swagger 2.0 input.」 の冷たい一言

しかし、たまにこの一言に悩まされるのです。

#### CLIの場合
```shell-session
An error occurred (BadRequestException) when calling the ImportRestApi operation: Invalid Swagger 2.0 input.
```

#### Consoleの場合
![スクリーンショット 2016-08-08 15.36.20.png](https://qiita-image-store.s3.amazonaws.com/0/31010/e822008a-aefc-b990-ee01-b72d574fea75.png)

### 原因1 レスポンスを`$ref`する
```yaml:swagger.yaml
paths:
  /hoge/fuga:
    get:
      responses:
        200:
          description: "fugaを取得できた場合"
          schema:
            $ref: "#/definitions/Fuga"
        404:
          $ref: "#/responses/NotFound"
```

[responsesObject](http://swagger.io/specification/#responsesObject)の定義的には,

|Type|
|-----------------------------------|
|Response Object or Reference Object|

となっているのですが、

```yaml:swagger.yaml
        404:
          $ref: "#/responses/NotFound"
```

この記述があるとエラーとなりました。

### 原因2 ... 何かあった気がするのですが忘れてしまったので後日書きます
[Cloud101]#5-2 (補足)vCloud Ditectorってなんだ？

#0.はじめに
これは 
[Cloud101]#5 vCloud Directorってなんだ？　
http://qiita.com/nagahisa/items/f80f2a214824e7a0ee0e
[Cloud101]#6 手抜きのVMware仮想NW・初歩〜NSX！
http://qiita.com/nagahisa/items/118f42062b74557dbd46
の補足です。


#1.前回補足(#5-1)の思い出し＋アルファ

・前回補足#5-1「vCloud Directorを感じる」では、HOL環境のvCenterに、ユーザA/B・リソースプールA/Bを作成し、vCenterでアクセス権を設定することで、ユーザA:リソースプールA, ユーザB:リソースプールBのなんちゃってマルチテナント環境を作ってみました。
これは vSphere自体がもつマルチテナント機能を利用しただけです。
http://qiita.com/drafts/d99dd10cd011869592cf/

・実際の vCloud Directoryのようなマルチテナント製品は、vCenterの上に別のテナント管理層を持っていますので、vCenterでテナント単位にリソースプールは作成しますが、テナント毎のvCenterユーザアカウントは作成しません。

・vCenterを操作するのは、基本的にvCloud Directorだけですので、vCenterにはvCloud Directorと連携するアカウントだけだあれば良いです。

・vCNS/NSX自体にはマルチテナント機能はありませんが、vCloud Directorようなマルチテナント管理層により、vSphereリソースプールとセットでテナント単位に扱うことができます。

#2. vCloud Directorの現状

・正直言うと vCloud Directorって全然メジャーじゃありません :sob: 
・vCD5.5からは一般向け販売は停止され、VCANパートナーへの提供のみになっています。
http://www.vmware.com/jp/products/vcloud-director/eoa.html

![18.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/5431edb5-55cd-e9bb-d21f-c7a6f8809196.jpeg)

・VMwareを使うプロバイダは、vCloud Directorを使わずに、CloudStack・OpenStackあるいは独自のマルチテナント管理層導入により、マルチテナントIaaSを提供しているケースも多いと思います。

#3. vCloud Directorを使わないマルチテナントIaaSイメージ

vCloud Directorに変わるマルチテナント管理層を独自に作れば良いはずですので、こんな感じかなぁ〜と思います（ちょっと自信ないけど :sweat_smile: )。
ちなみに、VIBは「VMware Infrastructure Bundle」の略です。
![14.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/61d9e793-2257-3722-6d9d-a99308340d0c.jpeg)

で、こんな感じにマルチテナント提供されるのではないかと。
![15.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/4a159754-ef72-76b4-1c91-fcc2a9c51876.jpeg)

#3. HOLでNSX体験

日本語HOLに以下があります。
「HOL-SDC-1603 VMware NSX Introduction」
http://labs.hol.vmware.com/HOL/catalogs/catalog/269

上記の図では敢えて説明を省いた NSX Controllerの話なども出て来てちょっと用語が難しいかもしれませんが、ガイドに従って操作を行うことで、NSXが提供する論理ネットワーク・Distributed Routerなどが簡単に体験できます（ちゃんと動かせます）。その後でわからなかった部分をググれば大丈夫！

![16.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/8bf22b1e-add7-e83e-64e8-761ff2998498.jpeg)

ちなみに僕はHOLのガイドを無視して~~いたずら~~勉強環境に使うことが多いのですが、NSXはさっぱりイメージが湧かなかったので、ちゃんとガイド通りにやりました :sweat_smile: 

こんな感じの日本度説明ガイドを読んでいくだけでも勉強になります。

＜第1章冒頭の説明＞
![17.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/c7b86d22-e62a-affc-3d58-5ae73022d8da.jpeg)

Enjoy! :tada:
『なるほどUnixプロセス』付録のSpyglassを起動する

## 概要
『なるほどUnixプロセス』（原書は『WORKING WITH UNIX PROCESSES』）に付録としてお勉強用Webサーバの「Spyglass」が付いてくるが、すんなりと起動してくれない。困った。

## そもそもソースコードどこだ？
この本はお気に入りで、日本語版も英語版(Kindle版)も持っているのだが、ソースコードのありかが分からない。
本を買った当初は持っていたはずだが、時間が経って完全にわからなくなった。

ネットを放浪した末に以下のページにたどり着いた
https://pragprog.com/titles/jsunix/source_code

## 困りごと
書籍には`$ spyglass`で起動すると書いてある. たしかに"bin/spyglass"が存在するが、実行するとエラーが出て失敗する。

```
`require': cannot load such file -- spyglass_parser (LoadError)
```

ディレクトリを見ると、"ext/spyglass_parser/parser.c"とかあるし、コンパイルしないとダメな雰囲気がある。

## 結論
以下の手順で起動するようになる

1. ragelをインストール
    *  参考　http://magazine.rubyist.net/?0023-Ragel
2. parserをコンパイル
    * ソースコードのトップディレクトリで、`$ rake _10.1.0_ compile`を実行
    * rakeのバージョンが合わないとエラーになるので、必要に応じて`gem install`する
3. あらためて、`$ bin/spyglass`を実行
    * オプションが知りたければ、`-h`を渡す
[C] bit field の overflow 時の動作について

bit field が overflow した時の動作がどうなるのか気になったので調査を行いました。

# unsigned の場合
Cの規格としてはわかりませんが、GCCの場合は通常の `unsigned int` と同じくエラーにもならずに 0 に戻るようです。 (符号無し整数のラップアラウンド)

```c:test.c
#include <stdio.h>

struct Hoge {
	unsigned int a : 2;
	unsigned int b : 2;
} hoge = {
	.a = 0,
	.b = 0
};

int main()
{
	for (int i = 0; i < 10; i++) {
		hoge.a = i;
		printf("a = %u, b = %u\n", hoge.a, hoge.b);
	}

	return 0;
}
```
```console:ビルドと実行結果
$ gcc -Wall -Wextra -std=c99 test.c
$ ./a.out
a = 0, b = 0
a = 1, b = 0
a = 2, b = 0
a = 3, b = 0
a = 0, b = 0
a = 1, b = 0
a = 2, b = 0
a = 3, b = 0
a = 0, b = 0
a = 1, b = 0
```

# signed の場合
signed の場合はGCCの場合は以下のようになりました

```c:test.c
#include <stdio.h>

struct Hoge {
	int a : 2;
	unsigned int b : 2;
} hoge = {
	.a = 0,
	.b = 0
};

int main()
{
	for (int i = 0; i < 10; i++) {
		hoge.a = i;
		printf("a = %d, b = %u\n", hoge.a, hoge.b);
	}

	return 0;
}
```
```console:ビルドと実行結果
$ gcc -Wall -Wextra -std=c99 test.c
$ ./a.out
a = 0, b = 0
a = 1, b = 0
a = -2, b = 0
a = -1, b = 0
a = 0, b = 0
a = 1, b = 0
a = -2, b = 0
a = -1, b = 0
a = 0, b = 0
a = 1, b = 0
```

# GCCでの仕様
[The GNU C Reference Manual #Bit-Fields](https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html#Bit-Fields)

# 参考
[Two's complement - Wikipedia, the free encyclopedia](https://en.wikipedia.org/wiki/Two%27s_complement)
hashを比較したい

##diffとかいうメソッドが使えない？

要件上、いま書いているcookbookの中でhashの比較をする必要が出てきて、ググっているとhash.diffとかいうメソッドが使えるらしい記事を見つけたけど kitchen testしてみたらそんなメソッドは存在しない、と怒られた。

## とりあえずif文とかeach文とかを使いまわせば比較できる。

```rb
testhash = { "sushi" => "chutoro", "niku" => "stake", "neko" => "koban" }
testhash2 = {"niku" => "stake", "neko" => "koban", "sushi" => "chutoro", "yama" => "kawa", "kaiware" => "daikon" }
commontest = {}
difftest = {}

testhash2.each do | k,v |
  if testhash.include?(k) && testhash[k] == v
    commontest.update(k => v)
  else
    difftest.update(k => v)
  end
end

p commontest
p difftest
```

共通な要素と差分の要素を一応ゲットできることはできる。

```rb
{"niku"=>"stake", "neko"=>"koban", "sushi"=>"chutoro"}
{"yama"=>"kawa", "kaiware"=>"daikon"}
```

でもこんな面倒でしたっけ？わたしが勉強不足なだけでしょうか、、、、
Rails のlink_toメソッドでclassとidの使い方で気をつけること

実にシンプル　です。
classが先、idが後です。

以下は、マテリアルデザインで右下のボタンを作り、そこにアクションを設定した場合です。

```
   <div class="fixed-action-btn" style="bottom: 45px; right: 24px;">
     <%= link_to root_path, { class: :"btn-floating btn-large blue" }, id: "xrosriver1", method: :get do %>
       <i class="large material-icons">add</i>
     <% end %>
   </div>
```

以上
MacのVirtualBox 5.1.xで設定画面を開くとクラッシュする問題の回避方法

# はじめに

Mac(OS X El Capitan)のVirtualBoxを5.1.x系にアップデートした途端、VirtualBoxの設定画面を開くとクラッシュする事象に遭遇したので、その回避方法について記録。

# 原因

VirtualBoxに加えてKarabinerもインストールしている場合において発生する問題の模様。

Karabiner側のアクセシビリティの制御モジュール(?) Krabiner_AXNotifier とVirutalBoxの設定画面を組み合わせに起因して問題が起きる。

# 回避方法

## その1: Karabiner_AXNotifierを無効にする

Karabinerインストール後には(おそらくは)有効にしたとも思われるKarabiner_AXNotifierを無効にすることで回避可能。
(これが困るこという人はその2を参照)

### 手順

システム環境設定 > セキュリティとプライバシー > プライバシー > アクセシビリティ 

にて"Karabiner_AXNotifier"のチェックをはずす

## その2: Karabinerのベータ版を入れる

この問題はKarabiner開発側にすでに報告されており、ベータ版では改修されている。よって、ベータ版を入れれは問題は起きない。

- 10.21.0 (正式版) 問題が発生することを確認
- 10.21.6 (ベータ版) 問題が起きないことを確認

# 参考

- https://www.virtualbox.org/ticket/15617
- https://groups.google.com/forum/#!searchin/osx-karabiner/virtualbox%7Csort:relevance/osx-karabiner/vZ2xek9gZpE/wQCTOCB2BwAJ
EMRから別アカウントのS3バケットを読み込む



やりたかったこと
---

Sparkで実行される分散処理アプリケーションが存在。内容としては別アカウントのS3のログファイルを読み込み、自アカウントのS3に整形されたログを配置する。

解決策
---

1. バケット自体に特定のAWSアカウントからの読み込みができるようにバケットポリシーを変更する

2. ### <font color="red">クロスアカウントの情報（AWS STS)を使って一時的な認証情報をSpark上に読み込ませて使おうとしましたが、ダメでした。</font>

今回は1, 2の紹介をします。


特定のAWSアカウントから読めるようにバケットポリシーを変更する
---

S３を開き、「バケットポリシーの追加」を選択

![スクリーンショット 2016-08-08 13.39.04.png](https://qiita-image-store.s3.amazonaws.com/0/18331/3c19b83b-9cc8-6684-af75-81ee8f62c644.png "スクリーンショット 2016-08-08 13.39.04.png")

下記を追加する（既存のポリシーがあると思うので必要な部分だけ使ってください）

~~~
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GetObject",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AWSアカウント番号:root"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::読み込ませたいバケット/*"
        },
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AWSアカウント番号root"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::読みこませたいバケット"
        }
    ]
}
~~~


STSを使った認証でEMRからS3にアクセスができない理由
---

結論から言うとhadoop ver 2.7.2では、一時認証が対応していない？

spark上では、認証情報は下記のようなコードを書く(Scalaのコードです）

~~~
sc.hadoopConfiguration.set("fs.s3.awsAccessKeyId", xxxxxxxxxx)
sc.hadoopConfiguration.set("fs.s3.awsSecretAccessKey", xxxxxxxxxx)
~~~


一時認証の取得は以下となります（pythonです）

~~~
import sys, codecs, boto3
import datetime
import csv
import gzip
sts_client = boto3.client('sts')

assumedRoleObject = sts_client.assume_role(
 RoleArn="arn:aws:iam::クロスアカウントを設定したIamRole",
 RoleSessionName="セッションに使う名前（適当でOKかも？）"
)


aws_access_key_id = credentials['AccessKeyId'],
 aws_secret_access_key = credentials['SecretAccessKey'],
 aws_session_token = credentials['SessionToken']
~~~

上記のように取得できた、

* アクセスキー
* シークレットキー
* セッショントークン

を使ってpython上では別アカウントのS3の読み込みができました。
同じようにspark上でやろうとしたら、

### <font color="red">セッショントークンどうやって入れるんだろ？</font>

という問題にぶち当たりました。

hadoopの公式サイトにもアクセスキー、シークレットキーの２つしか対応していないぽいらしく

https://hadoop.apache.org/docs/stable/hadoop-aws/tools/hadoop-aws/index.html

できないという雑談が公式のissueとして上がっているっぽいです。
https://issues.apache.org/jira/browse/HADOOP-9680


結論
---

先日(2016/08/03)、EMRのメジャーアップデートがありました。

https://aws.amazon.com/jp/blogs/news/amazon-emr-5-0-0-major-app-updates-ui-improvements-better-debugging-and-more/

この段階ではまだ、hadoopは2.7.2のままでした。
今後のアップデートで一時認証に対応するかもしれませんが、
今はバケット自体にアクセス許可をするのが一番早いかも。
CentOS7にGitBucketを構築

##CentOS7にGitBucketを構築する手順

###(0)バージョンなど
|もの|バージョン|
|:--|:--|
|OS|CentOS7(7.2.1511)|
|Apache|2.4.6|
|Java|1.8.0-101|
|Tomcat|7.0.54-2|
|GitBucket|4.0|
＊iptablesは使用しません。

<br>
****
###(1)GitBucketを構築するサーバに入る

```bash
ssh -l ユーザ名 アドレス
#パスワード入力 → admin権限に変更(su -)
```

<br>
****
**※この先,サーバ内には何もインストールされていないものとして進みます**
###(2)wgetをインストール

```bash
yum -y install httpd
```

<br>
****
###(3)Apacheをインストール

```bash
yum -y install wget
```


<br>
****
###(4)jdkをインストール

```bash
yum install java-1.8.0-openjdk-devel
#インストール可能なjdkを調べる場合以下
#yum search jdk
```


<br>
****
###(5)tomcatをインストール

```bash
yum install tomcat
```
/usr/share/tomcat
にtomcatがインストールされる。

<br>
****
###(6)Tomcat実行用のユーザを作成
実行ユーザがrootではセキュリティ上問題があるため、Tomcat実行用のユーザを作成。

```bash
useradd -s /sbin/nolog tomcat
##tomcatフォルダ以下の権限を作成したtomcatユーザに変更
chown -R tomcat:tomcat /usr/share/tomcat
```


<br>
****
###(7)GitBucketダウンロード
GitBucketをTomcatのデフォルトアプリケーション配置フォルダへ、ダウンロードする。

```bash
cd /usr/share/tomcat/webapps
wget https://github.com/takezoe/gitbucket/releases/download/4.0/gitbucket.war -O gitbucket.war
```
*バージョンによって[4.0]の部分を変えてください。

<br>
****
###(8)Apache Tomcatのポートを解放する

```bash
#ポートによるアクセス許可の設定
firewall-cmd --permanent --add-port=8080/tcp
#設定を有効化するため、以下のコマンドを実行してリロード
firewall-cmd --reload
```



<br>
****
###(9)各種サービスのステータスを確認

```bash
systemctl status firewalld
systemctl status httpd
systemctl status tomcat
```

<br>
****
###(10)GitBucket起動

```bash
systemctl start firewalld
systemctl start httpd
systemctl start tomcat
```



<br>
****
###(11)GitBucketへアクセス
http://アドレス:8080/gitbucket

****

＊CentOS7からはデフォルトでfirewalldが有効でiptablesは無効になっています。
＊代わりではないですがserviceコマンドはsystemctlに変更(使い方が違う)。

****



###ただのメモ

＊firewalldの設定内容確認
firewall-cmd --list-all

＊systemdのサービスを表示
systemctl list-unit-files

＊yumコマンドでインストール済みのものを表示する方法
yum list installed
yum list installed | grep 'php-xml'

＊サービスの登録	
(～CentOS 6)chkconfig --add	
(CentOS 7～)systemctl daemon-reload


＊自動起動設定　systemctl enable サービス名.service
＊自動起動解除　systemctl disable サービス名.service

＊パッケージを探す場合の基本
yum search パッケージ
キーボード、ディスプレイがない状態でRPiにSSH接続できる状態までセットアップする

##前提条件

- OS(raspbian)をSDカードに焼ける環境がある
- 接続できるWi-Fi環境があること
- ext4_fsをマウントできる環境がある

##その前に

固定IP設定しなくても、``ssh raspberrypi.local``で繋がるっぽいです。(詳しくは下のmt08さんのコメントをご覧ください)
その場合はRaspbian焼いてWi-Fi設定さえすれば良いですね。

##手順

### 1, raspbianをインストールする。
公式ページからraspbianのliteをダウンロードし、解凍しておく。

公式ページ:https://www.raspberrypi.org/downloads/raspbian/

```bash
sudo dd if=[raspbianのimg] of=/dev/[SDカード] bs=1M
```
あるいは
```bash
cp [raspbianのimg] /dev/[SDカード]
```

### 2, raspbianをインストールしたSDカードをマウントする
焼いた直後だとなぜかmountできなくて、一度SDカードを引っこ抜いたらできた。

わかりやすいようにetcに移動しておく

```bash
cd [マウントしたraspbianのルートディレクトリ]/etc
```

### 3, 固定IP設定
etc/dhcpcd.confを弄る

一番下にIP設定を追記

```text:etc/dhcpcd.conf
interface wlan0
# 有線の場合: interface eth1
static ip_address=[固定IP]/[サブネットマスク]
static domain_name_servers=[DNS]
static routers=[Router]
```

[]内はそれぞれの環境に合わせる。


### 4, 無線LAN設定（無線接続する場合のみ。）

手元の環境にwpasupplicantが入ってるか確認する。なかったら入れる。

以下のコマンドを実行

```bash
sudo sh -c  'wpa_passphrase ESSID PASSWD >> etc/wpa_supplicant/wpa_supplicant.conf'
```

ESSID、PASSWDは環境に合わせる。
wpa_supplicant.confに生パスワードが書いてあるので気になる人は消す。

追記：以下のコマンドで生パスワードを弾いて書き込めるとのコメントをいただきました。

```bash
sudo sh -c 'wpa_passphrase SSID PASSWD | grep -v "#psk" | tee -a etc/wpa_supplicant/wpa_supplicant.conf'
```


### 5, sshdを起動時に起動するようにする

Raspbian 16-11-25より、セキュリティ面を考慮してデフォルトでSSHサーバーが無効にななりました。
/boot以下にsshという名の空ファイルをおいておくことで有効になるとのことです。

bootパーティション(小さい方）をまだマウントしてない人は、適当な場所にマウント用のディレクトリを用意してマウントしてください。

```bash
touch [bootパーティションをマウントしたパス]/ssh
```

詳しくはJapanese Raspberry Pi User Groupの記事を御覧ください。
http://www.raspi.jp/2016/12/raspbian-2016-11-25-release/


###参考
Raspberry Pi に固定IPアドレスを割り当てる方法：
http://qiita.com/MarieKawasuji/items/b088ffb252a92eee8f5d
Raspberry Pi 3を買ってMacを使ってWiFi接続とSSHの接続するまで:
http://qiita.com/toshihirock/items/8e7f0887b565defe7989
書籍：LPIC Level1 1回で合格必達テキスト＋問題集

何か間違っていることがあればコメントください。よろしくお願いします。


###追記
2016-08-08 CLCLさんのコメントより、前提条件にext4_fsをマウントできる環境を追加しました。
2016-08-09 mt08さんのコメントより、各設定を編集、追記しました。
2016-12-07 Raspbian 2016-11-25でデフォルトでSSHが無効になったので、有効にする方法を追記しました。

ありがとうございます。
Qiitaでの記事作成についての雑感

有志で社内Wikiを作成中なので、参考にしているQiitaの編集ページに思うところのメモ

+ 文章の途中から編集するリンクがほしい  
    + 長い記事だとちょっとした編集の度に編集画面で修正箇所までスクロールしないといけなくて大変  
    + リアルタイムプレビューがあってもミスはする  
    + 後で編集しようと思って忘れて保存押して後で気がつくパターン  
    + dokuwikiみたいな部分編集 or 該当箇所にまでスクロールした状態で編集開始があるとよい？

+ タグの表記ブレ？用語ブレ？の補正はできないのか
    + わりと個々人が好き勝手に登録していると検索性が悪化するのでは？

+ タグの用語が何を示してるのかわからない場合がある
    + Googleで出てくるものは別に問題ない
    + 検索で出てこない社内などで使うようなマイナーな固有名詞の場合説明があるor追加できると良い？

+ Stockとかお気に入り、like機能があるのはいいけど、一つの記事を投稿後にじっくり育てるタイプの人へのインセンティブが薄い感じがある
    + 後から編集しつづけるタイプの人への報酬(モチベーションを高める要素)はどうすればいいか？
    + タグで検索しても、「最近ストックされた投稿」はあっても「最近更新された投稿」はない
    + 更新し続けられた記事と新しく作られた記事だと、新しい記事のほうが情報価値が高い？
    + ストックした人への通知はあるけど、通知があって見られても再ストックされるわけではないので報酬にはならなそう

+ Vimモードで編集したい
    + CodeMirrorとかではできるので実現はできそう
    + kobitoではVimモードあるよという
        + kobitoから下書きにアクセスできなかったのできびしい・・・

+ Markdownの表を書くのがしんどい
    + ~~Snippetかボタン押下でのテンプレート入力とかがあれば良い？~~
    + [追記] 2x3 とかでの入力補完がすでにありました
    + ![入力補完を利用する場合](http://cdn.qiita.com/assets/table-dd5879120ce2f80c8443515d9f864ef3e52c1032c0682333daa0008b3f29c563.gif)

+ リアルタイムプレビュー画面が分割表示だと狭い
    + マルチスクリーンの人が多そうなので、新規ウィンドウでも表示できるようにして、リアルタイム更新できないか
直線位置調整 > Link > モーター > データシート

S-12のDCモーターは、S-12を提供いただくときに「マブチモーター」という情報を受けていた。

以下を見つけた。
http://www.geocities.jp/plarailn700/page103.htm
> プラレールのﾓｰﾀｰ駆動用電池は単２か単３の1.5Vですので、チョイ多目の電圧ですが、このモーターはマブチモーターのFA-130と同等の仕様だと仮定すると（パパの勝手な判断です！ご了解下さい（笑）。）

「勝手な判断」を信じるとした場合、
FA-130RAというモーターのデータシートは以下にある。
http://www.mabuchi-motor.co.jp/cgi-bin/catalog/j_catalog.cgi?CAT_ID=fa_130ra

NOMINAL 1.5Vのもの(MODEL FA-130RA: 2270)で消費電流は0.66A程度とある。
Sourcetreeで、最新ではなく、特定のコミットから新規ブランチを切りたい場合


##切りたいブランチ（今回はdevelop）に切り替えて、
![スクリーンショット 2016-08-08 11.53.07.png](https://qiita-image-store.s3.amazonaws.com/0/40940/e32ef298-080e-7a34-5ef4-2bb555f4b5fc.png "スクリーンショット 2016-08-08 11.53.07.png")

##切りたい特定のコミットを選択
![スクリーンショット 2016-08-08 11.53.11.png](https://qiita-image-store.s3.amazonaws.com/0/40940/f653a92b-6f7b-f325-fd2d-66e32eff1c36.png "スクリーンショット 2016-08-08 11.53.11.png")

##右クリックで「ブランチ...」を選択
![スクリーンショット 2016-08-08 11.53.22.png](https://qiita-image-store.s3.amazonaws.com/0/40940/7e90b2c3-965b-f807-680d-ca0a0ee42610.png "スクリーンショット 2016-08-08 11.53.22.png")

##新規ブランチ名を記入、特定のコミットがラジオボタンで選択されているのを確認、「ブランチを作成」をクリック
![スクリーンショット 2016-08-08 11.54.51.png](https://qiita-image-store.s3.amazonaws.com/0/40940/8bf66c9e-94ff-d20c-66c1-167c6ec77600.png "スクリーンショット 2016-08-08 11.54.51.png")


##出来上がり！
![スクリーンショット 2016-08-08 12.11.39.png](https://qiita-image-store.s3.amazonaws.com/0/40940/8f3c8e41-7da7-6004-4c0c-fe8d8e2ecf91.png "スクリーンショット 2016-08-08 12.11.39.png")

上記は以下をやっていると思われる

  ```ターミナル
$ git checkout コミットログ -b 新規ブランチ名
  ```
RailsとReact/ReduxでCMSを作る上でとても参考になった学習コンテンツ


自分のHPを作りたいなと思って、
学習の意味も込めてフロントをすべてReact/ReduxとCSS-Modulesを利用して、APIだけRailsを利用して簡単なブログ兼ポートフォリオ的なCMSを作成してみました。


[**Portfolio**](https://github.com/tsurupin/portfolio)  
----
###client
![](https://cloud.githubusercontent.com/assets/1782169/17211740/27c54d5a-5506-11e6-8bb3-fc89a71c718b.gif)

###cms
![](https://cloud.githubusercontent.com/assets/1782169/17213387/2d61cda2-550f-11e6-95a7-42f0899546b1.gif)




 
----- 
　
今回React/Reduxでアプリを作るにあたって、とても参考になった学習コンテンツを紹介したいと思います。どれも有料ではあるのですが、React/Reduxアプリを作る上で必要な知識を効率的に学ぶことができると思います。

##学習コンテンツ
### [1. 入門 React (書籍)](https://www.amazon.co.jp/%E5%85%A5%E9%96%80-React-%E2%80%95%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AEWeb%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89%E9%96%8B%E7%99%BA-Frankie-Bagnardi/dp/4873117194/ref=sr_1_1?ie=UTF8&qid=1470622236&sr=8-1&keywords=react)
もう少し古い本ですが、Reactのコンセプトや仕組み、文法を学ぶことができて、タイトルのごとくReactに入門するのにうってつけの本です。

###[2. Modern React with Redux(動画 *英語)] (https://www.udemy.com/react-redux/)
ReactとReduxを利用して基本的なアプリケーションを作る方法を学べます。 API、ActionCreator、Reducer、ReduxForm,　RouterとReact/Reduxでアプリを作る上で中核になるコンセプトと実装方法を網羅的に抑えていて、これだけでReduxの基本的な使い方は理解できるようになると思います。

### [3. Advanced React and Redux(動画*英語)](https://www.udemy.com/react-redux-tutorial/)　

AuthenticationやMochaを使ったテスト、Higher Order Conceptやミドルウェアの作成など、アプリを作るうえで欠かせない実用的なコンセプトと実装方法を学習できます。なかなかこういう少し発展的なコンセプトに関して網羅的に抑えているコンテンツは見つけられなかったのでとても助かりました。

##その他（公式ドキュメント）
[React](https://facebook.github.io/react/) 

[Redux](http://redux.js.org/index.html)

##あとがき
[Udemy](https://www.udemy.com/courses/)や[Udacity](https://www.udacity.com/)、[Safari](https://www.safaribooksonline.com/)のような英語を主とした学習コンテンツがどんどん充実してきているので、Reactの素晴らしさを学ぶとともに、英語の大切さを痛感しました。。。
直線位置調整 > 材料の検討 > 1.5V / 1.1Aのリレー

## 直線位置調整

距離計を試している中、センサーの位置を手作業で変えながらデータを取る、という作業が面倒だった。タイマー処理で距離を変更しながら、その時々の測定ができればと思った。

直線の動きを制御する装置で以下の条件を満たすものは何だろうか?

- 材料を再入手しやすい
- 材料費が安い (2000円未満)
- 組立などの作業が少ない

手に入れたのは以下。

- [TOMY S-12 Doctor yellow](http://takaratomymall.jp/shop/g/g4904810811756/): 1680円
- [TOMY R-01 レール部品 直線レール](http://www.takaratomy.co.jp/products/plarail/lineup/rail/): 315円

10年?在庫品かつ「知合い」ということで無償提供されたので実費は0円だった。S-12の中の用紙を見ると「1998年現在」とあるので、18年前の製造品かもしれない。
1680円というのはパッケージに貼っている値札の価格だが、webを見ると2376円となっている。

とりあえず電池(単2)を入れて動くことを確認した。

## リレー

S-12は1.5Vで駆動するので、ESP8266搭載基板の3Vから1.5Vに変換する必要がある。
この1.5VをON/OFFする仕組みが必要。リレーを使うことになるだろうか。

消費電流がよくわからないが、1.1A程度かかるという情報を見つけたりしている。
http://ameblo.jp/handmadebysora/entry-11509829492.html
> プラレールのモーター
> -消費電流（mA）　1100
> -適正負荷回転数（r/min）　9900～13800	
> -適正負荷（g-cm）	　10

リレーを自分で選定するのは今回初めて。1.5V / 1.1Aのリレーはあるのだろうか?

## 電動スライダ

位置調整機構を購入するとしたら、電動スライダあたりが候補に挙がるのだろうか?
https://www.orientalmotor.co.jp/products/actuator/overview_2/
精度は良さそうだが、価格は跳ね上がりそう。

自作するにしても、画像に見えているモーターだけで2000円弱はかかりそう。テーブル、ガイドレール、ボールねじを用意すると5000円はかかるだろうか。
macで画面キャプチャしたアニメーションGIFの作り方

ffmpegとimagemagickでつくれるので、
homebrewでインストールする
`brew install ffmpeg imagemagick`
直接ダウンロードはここ
https://ffmpeg.org/
http://www.imagemagick.org/script/index.php

手順は
1. QuickTime Playerで録画する。（ファイル>新規画面収録）
2. 録画した動画をffmpegで連番画像へ変換（*-i 動画名 -s 変換後ファイルサイズ -r フレームレート*）
`ffmpeg -i capture.mov -s 320x568 -r 10 images/%03d.png`
3. 連番画像をconvertでgifへ変換（*-delay フレーム間隔（0.01s） -layers （optimizeがいいらしい） -loop ループ回数（無制限）*）
`convert -delay 10 -layers optimize -loop 0 images/*.png capture.gif`

こんな感じで出来る。
![onsenui_menu.gif](https://qiita-image-store.s3.amazonaws.com/0/135781/2d7a3b25-7012-a044-db29-43446858f087.gif)
Glyphicons、Halflings用のRailsヘルパー

大したコードではありませんが、Glyphicon用のRailsヘルパーを書きましたので残しておこうと思います。

メソッドはfont-awesomeのGemを参考としています。`fa_icon`メソッドが便利だったので、Glyphicon用のヘルパーも作ろうと思ったのがきっかけです。

[bokmann/font-awesome-rails](https://github.com/bokmann/font-awesome-rails)

## GlyphiconsHelper

```ruby:app/helpers/glyphicons_helper.rb
module GlyphiconsHelper
  def glyphicons_icon(name = "", options = {})
    classes = ["glyphicons", "glyphicons-#{name}"]
    classes.concat Array(options[:class])
    icon_join(content_tag(:span, nil, class: classes), options[:text], options[:right])
  end

  def halflings_icon(name = "", options = {})
    classes = ["halflings", "halflings-#{name}"]
    classes.concat Array(options[:class])
    icon_join(content_tag(:span, nil, class: classes), options[:text], options[:right])
  end

  private
  def icon_join(icon, text, right_icon)
    elements = [icon, ERB::Util.html_escape(text)]
    elements.reverse! if right_icon
    safe_join(elements, " ")
  end
end
```
※ご利用は自己責任でお願いします！

### 使い方

#### アセットの読み込み

事前にフォントとCSSファイルを読みこんでおく必要があります。ここでは割愛しますので、公式ドキュメントをご参照ください。

[Glyphicons](http://glyphicons.com/)

#### ヘルパーメソッド

以下のような書式で使えます。

```rb
= glyphicons_icon("pencil")
# => <span class="glyphicons glyphicons-pencil"></span>

= halflings_icon("pencil", text: "テキスト", right: true, class: ["class1", "class2"])
# => テキスト <span class="halflings halflings-pencil class1 class2"></span>
```

とりあえず標準のGlyphiconsとGlyphiconHalflingsにのみ対応させています。

基本的にはどちらも有償のフォントとなりますが、Bootstrap3にはフリーのHalflingsが組み込まれていますね。

フリーのフォントアイコンはFontAwesomeが有名ですが、どちらも良いところがあるので見た目の好き嫌いと値段を見て判断すればよいと思います！
【Unity拡張】ConsoleにToDo通知メッセージをしつこく表示させてToDo忘れを防ぐ

#はじめに
ConsoleにToDoテキストをしつこく表示させたらToDo忘れが防げるのでは？　と思ったのでサクッと作ってみました

この記事ではUnity5.3.5f1を使います。

#作ったものについて
ConsoleにToDoがピコピコ表示されます。 かなり目立つのでToDoを忘れることもなくなりそう？
![todo.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/5be6fd1a-e9eb-94d0-3c97-63f2faef99e8.gif)

#ソースコード
下記スクリプトをEditorフォルダ以下に入れてください

```TodoNortification.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

[InitializeOnLoad]
public class TodoNortification 
{
	// 通知メッセージを表示する間隔 [秒]
	const double NortificationSec = 6.0;

	static readonly string[] texts = new string[] 
	{
		"TODO : Hoge.csにPiyoを実装する",
		"TODO : Poyo.csにFugaを実装する",
	};

	static TodoNortification () 
	{
		var windows = Resources.FindObjectsOfTypeAll<EditorWindow>()
			.Where(w => w.GetType().ToString() == "UnityEditor.ConsoleWindow")
			.ToArray();

		double targetTime = EditorApplication.timeSinceStartup;
		EditorApplication.update += () => 
		{
			if (EditorApplication.isPlaying == false && EditorApplication.timeSinceStartup > targetTime)
			{
				if (windows.Length != 0)
				{
					try 
					{
						foreach (var window in windows)
						{
							// ToDo通知を表示する
							window.ShowNotification(new GUIContent(texts[0]));
							window.Repaint();
						}
						targetTime += NortificationSec;
					}
					catch (System.NullReferenceException)
					{
					}
				}
			}
		};

	}
}
```
組み合わせの計算をPythonで作ってみる

# 問題意識
[以前の記事](http://qiita.com/kyoro1/items/eed40ab333a9f9fd8ede)で組み合わせ計算をPythonで再帰的にやったけれども、他のやり方もあるよな、と思い返してみました。

# 組み合わせの復習
順列組み合わせで習った組み合わせのの方です

```math
_nC_r=\frac{n!}{r!(n-r)!}
```
でしたね。ここで`n < r`の時は組み合わせは`0`、つまり

```math 
_0C_1=0
```

など、定義から外れているものは`0`と約束しておきます。

# 漸化式っぽく
今回は`Python`で再帰的に関数を呼び出す方法を採りたいので漸化式っぽいものを用意します。

## 漸化式1: `r`を下げる
```math
_nC_r=_nC_{r-1}\times\frac{n-r+1}{r}
```
### 証明
まず、定義から

```math
_nC_r=\frac{n!}{r!(n-r)!}=\frac{n!}{r\times(r-1)!\times(n-r)!}=\frac{n!}{(r-1)!\times(n-r)!}\times\frac{1}{r}\\
_nC_{r-1}=\frac{n!}{(r-1)!\times(n-r+1)\times(n-r)!}=\frac{n!}{(r-1)!\times(n-r)!}\times\frac{1}{n-r+1}
```

よって

```math
r\times_nC_r=(n-r+1)_nC_{r-1}
```
両辺を`r`で割れば示すべき式が得られる■


## 漸化式2: `n`を下げる
```math
_nC_r=_{n-1}C_{r-1}+_{n-1}C_r
```
こっちは、Pascalの三角形を考えれば自明ですが、あまり深い入りしないことにしますー

### 証明
```math
\begin{eqnarray}
_nC_r+_nC_{r-1} &=& \frac{n!}{r!(n-r)!}+\frac{n!}{(r-1)!(n-r+1)!}\\
&=& \frac{n!\times\{(n-r+1)+r\}}{r!(n-r+1)!}\\
&=& \frac{n!\times(n+1)}{r!(n-r+1)!}=\frac{(n+1)!}{r!(n+1-r)!}\\
&=& _{n+1}C_r
\end{eqnarray}
```
■

# Pythonで書いてみる
## 漸化式1
```math
_nC_r=_nC_{r-1}\times\frac{n-r+1}{r}
```
を元に、端っこ、つまり初期値設定として

```math
_0C_r=_nC_0=1
```

`return`する関数として再帰的に書くとこんな感じ（[以前の記事](http://qiita.com/kyoro1/items/eed40ab333a9f9fd8ede#python%E3%81%A7%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%8F%8F%E3%81%84%E3%81%A6%E3%81%BF%E3%82%8B)にあったものと同一）

```py
def comb1(n, r):
    if n == 0 or r == 0: return 1
    return comb1(n, r-1) * (n-r+1) / r 
```

## 漸化式2
```math
_nC_r=_{n-1}C_{r-1}+_{n-1}C_r
```
を元に初期値設定させたものが以下：

```py
def comb2(n,r):
    if n < 0 or r < 0 or n < r: 
        return 0
    elif n == 0 or r == 0: 
        return 1
    return comb2(n-1,r-1)+comb2(n-1,r)
```

漸化式1より初期値設定が若干複雑なのは、`n,r`の両方が変化するからですねー。

# 試してみる
## 早速動かしてみよう。
```py
>>> comb1(20,5)
15504.0
>>> comb2(20,5)
15504
```

## 既存のscipyの関数で確認
```py
>>> import scipy.misc as scm
>>> scm.comb(20, 5)
15504.0
```
→うん、合ってそうですね♪(全然証明にはなってませんがw)

# 参考にさせて頂いたサイト
- [Pythonで組み合わせ(Combination)を計算](http://sucrose.hatenablog.com/entry/20110920/p1)
[Laravel]Monologを使ってLogglyにログ流せたらええやん？したいやん？

# Monologを使ってLogglyへログを流したい

例により、事の始まりはこのような思いから

Logglyはどんなサービスか、、、
`ログ管理のクラウドサービス`です。

Logglyでログ管理をしたいのです。

# 検証環境

- Laravel `5.2.41`
- Monolog `1.20.0`

# まずはLogglyに登録しよう

[Loggly](https://www.loggly.com/)

`Try Loggly for FREE` からアカウント登録

英語ばかりで挫折しそうになるが、
そこはエンジニア魂で踏ん張る

# tokenをゲットだぜ！

Monologで使用するtokenをゲットするぜ！

1. メニューの `Source Setup` をクリックして遷移
2. さらにメニューの `Customer Tokens` をクリックして遷移
3. Tokenがあるはず！

![customer_token.png](https://qiita-image-store.s3.amazonaws.com/0/97615/ef5edfd5-f7ff-1cc0-b8d8-4c51a409381c.png)


# Monologのドキュメントを眺める

ログを流すにはどうすればいいものか、、、
例のごとくドキュメントを眺める

これがLogglyHandlerか
[LogglyHandler](https://github.com/Seldaek/monolog/blob/master/src/Monolog/Handler/LogglyHandler.php)

φ(ﾟДﾟ )ﾌﾑﾌﾑ…
簡単そうやん！
やったるで！

# LogglyHandler使ってみるで

## まずはLogglyの設定を作るやで

Laravelのconfigに設定を作るやで
`config/loggly.php` みたいな感じ。

```php
<?php

/**
 * Loggly出力設定を行います。
 */

return [

    'loggly' => [
        'token' => 'xxxxxxxxxxxxxxxxxx',
        // どのレベル以上でLogglyに流すか設定（今回は ERROR 以上）
        'over_notification_log_level' => \Monolog\Logger::ERROR,
    ],

];

```

## MonologにLogglyHandlerを追加するやで

```php
// slackのconfigを取得
$logglyConfig = \Config::get('loggly.loggly');

\Log::getMonolog()->pushHandler(
    new \Monolog\Handler\LogglyHandler(
        $logglyConfig['token'],
        $logglyConfig['over_notification_log_level']
    )
);
```

# あとはログするだけやで！

`over_notification_log_level` を `\Monolog\Logger::ERROR` を設定した場合

```php
// これはLogglyへ通知される
\Log::error('Logglyへ届けこのログ！！');

// これはLogglyへ通知されない
\Log::warning('Logglyへ届けこのログ！！');
```

こんな感じで届くやで
他にも色々出力されるけど、それは実際に登録してログ送信してからのお楽しみということで。

![loggly_log.png](https://qiita-image-store.s3.amazonaws.com/0/97615/86a1d49a-d040-3f78-31c3-821571bd31a1.png)

# あとがき
とっても簡単にできました。
拙い文章失礼しましたー。
「オフラインリアルタイムどう書くE06」の問題を解いてみた


Qiita上で「オフラインリアルタイムどう書く」というエントリをよく見かけていて、今ひとつ空気もルールも掴めていないが息抜きに[オフラインリアルタイムどう書くE06 の問題](http://qiita.com/mtsmfm/items/7a0bfd2ac5b7674ce8c7)を解いてみることにした。
「オフラインリアルタイムどう書く」自体のルール（制限時間や実装時の制限事項等）についてWeb上にほとんど説明がないことから半ば内輪向けのイベントなのだろうか？と感じたが、Qiita上に記載しているからにはオープンなイベントなのだろう、と勝手に理解している。

実装に掛かった所要時間は厳密には計っていないが大体40分程度だったはずである。
実装後に他の回答者のコードを読んでみたが、いささか素直に実装しすぎただろうか、と思わなくもなかった。
もっとこう、コードゴルフとまではいかないまでもトリッキーな実装をしたほうがよいのだろうか？

```ruby
class Hogemon
  attr_reader :level, :type, :hp

  DAMAGE_TABLE = {
    R: {R: 2, B: 4, G: 1},
    B: {R: 1, B: 2, G: 4},
    G: {R: 4, B: 1, G: 2}
  }

  def initialize level, type
    @level = level.to_i
    @type = type.to_sym
    @hp = level.to_i
  end

  def down?
    @hp <= 0
  end

  def defense another
    @hp -= DAMAGE_TABLE[@type][another.type]
  end

  def heal
    @hp = @level
  end
end

class Player
  attr_reader :entry_number
  def initialize number, params
    @entry_number = number
    @hogemons = []
    params.split("").each_slice(2) do |param|
      @hogemons.push Hogemon.new *param
    end
  end

  def heal
    @hogemons.each{|h| h.heal}
  end

  def lost?
    @hogemons.all?{|h| h.down?}
  end

  def choise
    @hogemons.find{|h| not h.down?}
  end
end

class League
  def initialize params
    @players = []
    params.split(",").each.with_index(1) do |param, i|
      @players.push Player.new i, param
    end
  end

  def battle p1, p2
    [p1, p2].each{|pl| pl.heal}

    while h1 = p1.choise and h2 = p2.choise do
      high, low = (h1.level < h2.level) ? [h2, h1] : [h1, h2]

      low.defense high
      high.defense low if not low.down? or h1.level === h2.level
    end

    (p1.lost? and p2.lost?) ? 0 : (p1.lost? ? p2.entry_number : p1.entry_number)
  end

  def start
    result = @players.map{|p| [p.entry_number, 0]}.to_h
    @players.combination(2) do |pair|
      winner = battle *pair
      result[winner] +=1 unless winner.zero?
    end
    result.sort{|a, b| (a[1] === b[1]) ? a[0] <=> b[0] : (a[1] * -1) <=> (b[1] * -1)}.map{|a| a[0]}.join(",")
  end
end

while gets
  puts League.new($_.chomp).start
end
```
[Rails] bundle install高速化 ~ 0から始めるRails編 ~

[Rails] bundle install高速化

デプロイ時に毎回１からbundle installをしなきゃいけないですが,
最近ものすごく時間がかかってしまっており, 早い時でも10分はかかる状況でした。
さすがに時間かかりすぎだなと思ったので解決方法が見つかったため, ご紹介致します。
ビックリするくらい簡単なので,ぜひやってみてください

## 解決方法
bundler のバージョンアップ ただそれだけです。

今回しようするバージョンは ```1.13.0.pre.1```です。
これは2016-06-20 に変更されたものらしいです。


bundler バージョンアップ

```:terminal
bundle update --bundler
```

## 確認

```:terminal

rm Gemfile.lock

bundle install

```
これでローカルやデプロイ時でも
おそらく以前よりも断然に早くなっているはずです。


## 参考サイト

https://github.com/bundler/bundler/blob/master/CHANGELOG.md
Function swizzling in C

If a project has below code:

```c:function.h
#include <stdio.h>

extern void function_a();
extern void function_b();
```

```c:function.c
#include <stdio.h>
#include "function.h"

void function_a() {
    printf("This is function a!\n");
}

void function_b() {
    printf("This is function b!\n");
}
```

```c:main.c
#include <stdio.h>
#include "function.h"

#define function_b function_a

void function_c() {
    function_a();
    function_b();
}

#undef function_b

int main() {
    function_a();
    function_b();
    function_c();
    return 0;
}
```

What do you think the result is?

```bash
> gcc main.c function.c
> ./a.out
This is function a!
This is function b!
This is function a!
This is function a!
```

It means you can change the function name before compiling the program, and do things more like:

Call the specific function instead of the origin one to avoid a lot of modification to the code.
SQLite3 チートシート

<img src=https://qiita-image-store.s3.amazonaws.com/0/35293/19897c8f-a6c8-7ebe-8d13-040a5923ddad.gif width=280px />

# 目的

SQLite3でよく使う操作をまとめておくことで、同じことを検索するのをなるべく避けたい。

## はじめに

**[【SQLite3】コマンド例と他データベースとの比較から始める SQLite 入門](http://qiita.com/d-yokoi/items/be7cf4622c66cdcc04cb)
コンパクトに綺麗にまとまっているので、SQLiteを久々に利用するときにはこの記事は必読。**

## 基本的な操作/コマンド等

#### DB接続

DBに接続（なければ作る） 

```sh
$ sqlite3 test.sqlite3
```

#### show

設定を表示する

```sqlite3
sqlite> .show
     echo: off
      eqp: off
  explain: off
  headers: off
     mode: list
nullvalue: ""
   output: stdout
separator: "|"
    stats: off
    width:
``` 

### データのインポート、エクスポート

#### csv/tsvをインポート

```sqlite3
sqlite> .separator <delimitter(, / \t)> 
sqlite> .import <file_name(.csv / .tsv)> <table_name>
```

#### csv/tsvとしてエクスポート

```sqlite3
sqlite> .headers on -- 任意
sqlite> .mode csv
sqlite> .output <filename(.csv)>
sqlite> select * from <table_name>;
```

### テーブル操作

#### テーブル一覧を表示

```
sqlite> .table
```

#### スキーマを表示

```
sqlite> .schema <table_name>
```

### SQL

普通のSQLと同じ部分が多いので注意する点など

#### 外部SQLファイルを実行

```sqlite3
sqlite> .read test.sql
```

#### create

**createはなるべく型を指定した方がいい。キャストされず例えばinteger/textが混在してしまったりする（ハマった）**

```
sqlite> create table <table_name> (<column1> [type1], <column2> [type2], ...);
```

# 注意

データ型はドはまりしたりするので注意したい。

> 挿入されたデータが、指定されたデータ型にキャスト可能であればキャストするが、不可能ならそのまま格納する（1つのカラムに異なるデータ型が混在しうる）
> 
> [【SQLite3】コマンド例と他データベースとの比較から始める SQLite 入門](http://qiita.com/d-yokoi/items/be7cf4622c66cdcc04cb)から引用

# Pythonからの呼び出し

- こちらの記事を参考: [PythonでSQLite3を使う](http://www.mwsoft.jp/programming/python/sqlite3.html)
- こちらのライブラリも便利そう（未確認）[supersqlite](https://github.com/plasticityai/supersqlite)

# IntelliJから使う
IntelliJから使うと、テーブル名の補完も効いて快適です。

<img width="425" alt="スクリーンショット 2016-08-09 11.40.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/35293/2d60d8bd-d511-c229-5630-94fec1e0f7b3.png">

```[Database] => [+] => [Data Source] => [SQLite] => [Xerial]``` で新しくデータソースを作り、DBファイル名を指定して ```[Test Connection]``` すれOK（必要に応じてドライバをダウンロードします）

参考: [Macで使えるSQLiteクライアント](http://matomerge.com/14008/)

# Ibisとの連携
[Quickstart on Crunchbase analysis using Ibis and SQLite](http://blog.ibis-project.org/sqlite-crunchbase-quickstart/)

# 参考文献
- [【SQLite3】コマンド例と他データベースとの比較から始める SQLite 入門](http://qiita.com/d-yokoi/items/be7cf4622c66cdcc04cb)
- [PythonでSQLite3を使う](http://www.mwsoft.jp/programming/python/sqlite3.html)
- [Macで使えるSQLiteクライアント](http://matomerge.com/14008/)