OmniAICreator/Qiita-1.07M huggingface dataset:
Datapalooza Tokyo Day-1 2-2 - Interpretability vs. predictivity


## 登壇
* Takashi J. OZAKI, Ph.D. @TJO_datasci
* Google

## 概要
*

## 自己紹介
* 銀座で働くデータサイエンティスト
	* http://tjo.hatenablog.com/
* アドホック分析
	* おしながき
		* http://tjo-en.hatenablog.com/
* 質問：どっちがどっち
	* ロジスティック回帰
	* SVM
	* サポートベクター
	* RBFカーネルSVM分類器
	* ランダムフォレスト
	* 変数重要度
	* 記述可能
	* 予測的
* 線形識別・回帰モデル
	* 具体的な式で表せる
* 線形回帰
* ロジスティック回帰

* 目的変数
* 説明変数
* 多変量
* 最小二乗法
* interpretable
	* 要素とそれに対するポイントからスコアを算出して、足し合わせる
	* ロジット変換
	* 線形分離可能パターン
* xorパターン
	* ロジスティック回帰は機能しない
* 交互作用項
	* accuracy
＊線形回帰ファミリー
* 階層ベイズ
* 二階差分モデル
	* 今日と昨日のトレンドの差
	* 昨日と一昨日のトレンドの差
* 季節調整(曜日)
* 7日周期モデル
* 階層ベイズモデル
* カーネルSVM
* LIBSVM
* テイラー展開
* 低バリアンス手法
* ランダムフォレスト
* 決定木
* bagging
* 変数重要度
* ノイズ
* Deep Learning
* ディープニューラルネットワーク
* overkill
* MXnet
* tensorflow/playground
* more interpretable, less predictive
* less interpretable, more predictive


## For human vs. For machine
* ヒトが意思決定をするため？システムのアウトプットを決めるため？
	* for machineシステムの向こう側にいるユーザーにサービスするため、でもある
### for fuman
* interpritable(解釈可能)である方が重要
	* 判断の材料を出してあげましょう

### for machine
* predictiveである方が重要
	* プロセスより、高い結果を出してあげましょう
	* interpritableなものを出すと精度が低いって言われるよ

### hybrid
* 人が見たいが精度もほしい
	* さぁどうする?
* そこまで含めて機械学習で実装してあげないとね


## モデリング手法の特性を踏まえたうえでの手法選択 ==
### キーワード
* 情報量基準
* 交差検証
* クロスバリデーション

* 100%あたっちゃったケース
* 黄色い本
* 多項式フィッティング
* 汎化
* 過学習
* AIC

* L1正則化



## 実務において
* 特徴量
* デモグラフィック情報
* political correctness


```
バランスをどう取るかがビジネス応用のカギ
```

i or pを学習アルゴリズムに基いて知っておくことは重要
4h = i, 4m = p
Datapalooza Tokyo Day-1 2-1 - 実践から学ぶ、成功するデータ分析の勧め方

## 登壇
* 日本IBM株式会社 アナリティクス&エグゼクティブ 山田敦

## 概要
```
「データ分析によって導いた洞察を、ビジネスの変革につなげるためにどのようにすすめるべきか?」について、考えるためのヒントを得る
```
* 「データの分析」から「ビジネスの変革(成功)」の間に、何が必要なのか。

## データ分析で乗り越えるべき壁
### 壁たち
* 開始
	* やる価値あるの？
* データ
	* データがない
* 分析
	* 何ができるの？
* ROI
	* ペイできるの？
* 定義
	* つかってもらえるの？

[写真]

## データ分析で失敗するケース

[写真]

* B3
	* 仮説の活用
* C1 
	* !だから、組織が大事になるんだろうな。
* D2
	* データガバナンスの話
		* 収集するデータの選定

## データ分析でビジネスを変革するまでにすべきこと

[写真]
### 構想
* 1-3 (資料無し)
	* 問題が解けるんですか？
		* データ見ながら、分析はしなくともあたりをつける　頭のなかで考える
* 準備段階では、分析はしないほうがいいよ。
* 構想の確からしさ(ほんとにこれでいけるのか)を考えることが大事

### 検証
* 2.データ分析ガリガリ
* 3,4 ROIの根拠
	* 結論は結果だよ
	* 展開計画ロードマップかけないなら、上位ステップに戻りなよ。
* ここまで、机上の検証

### パイロット
* ここから、リアルでの検証
* 大体、パート展開
* 立てた展開計画を実証していく
* 3-1
	* とにかくコミュニケーション
	* ステークホルダーマップみたいなツール使ってもいいかもね
		* 誰がどのくらい納得してんのか
		* どこへ動かしていきたいのか
* 3.2
	* パイロットの結果から次のKPIを立てる
* 3-4 アウトプットの調整
	* 現場が使える形、表現にしてあげて

### 本格展開
* アナリティクス→ビジネスへ
* 4-1
	* ビジネス化
* 4-3
	* ちゃんとデータを用意して本格稼働へ
* 4-4
	* チェンジマネージメント：現場への定着のための動き
	* 例：組織図[写真]
	* チェンジ・エージェント

## IBMにおけるビジネス変革事例からの学び
* IBMを強くしたアナリティクス
	* 31項目の事例ストーリ
	* 大事なこと

		```
		- アナリティクスは目的ではなく手段
		- もっとも重要なビジネス課題の解決に適用
		- それは事実に基づく意思決定のための方法
		```
		
		* 他、写真


## 分析組織の形態

### 組織の携帯
* 分散型
	* 各部にいる
* 集中型
	* どこか1部門にいる
* ハブ&スポーク型
	* それぞれにもいるし、1部門に専門家がいる

### IBMの場合
* CAO : Chief Analytics Officer
	* 金を生む
* CDO : Chief Data Officer
	* 金を生むためのデータを整備

## 分析する皆様へのヒント(まとめ)
### 再度、壁

* 解くに値する分析テーマはちゃんと定義できている？
* 最終状態までイメージ・定義できてる？
* 関係者とちゃんとネゴれてる？コミュニケーション取れてる？
Datapalooza Tokyo Day-1 G-1 General Session ~ データサイエンスの事業への装着と、利益創出のコンセプト事例


## IBM 土屋さん

* データサイエンスのコミュニティイベント
* 去年カリフォルニアから始まった
* みんなが主役になって、周りの人とコミュニケーション築いてね
* 終わってからコンペがあります：名刺分析構築
	* 人工知能は名刺をどこまで解析できるのか

## リクルートライフスタイル アナリスト 原田博植

### わたし
* 日経新聞　データサイエンティストオブザイヤー2015
* シンクタンクでやってたこと
	* 生体認証
		* 指紋
		* 音声
		* 虹彩
		* 指紋
		* 顔
		* 2010年当時精度が問題になってた
	* 電子ペーパー
		* 紙の代替物
	* ICチップ
		* スイカとかキャッシュカードとか
		* 普及するかもわからんかった
		* アンテナ内蔵のミューチップ
			* コメよりちっちゃい！
* このままっていいのか…危機感からネット分野へ流れた
	* 髪やWebの媒体を見ている箇所のヒートマップ
	* 基礎技術は、医療機器
		* 手が動かせない、声が出せない人が、どこ見てるかを観測するデバイス
		* 視線(感情)と言語(論理)の差分を観測
	* ここから発展
		* Googleグラス
			* 店舗の商品陳列の最適化
* 世界中のいいねの例
	* 営業いいね(建前)
	* 実際の感情の近似化


### 市場
#### 事例
* オーストラリアのおしゃれなマクドナルド
	* オーガニック思考
	* マックのロゴすら出さない
	* リアルABテスト
		* オンラインとオフラインを同じように考えると理解し易いかな
* 唾液からの遺伝子検査
	* GoogleCWOお婦人のスタートアップ
	* bioinformatics
	* データを集めることに対する投資
* 健康状態モニタリング
	* 毎朝ビタミン剤が調合されて出てくる
* コーディネートのパーソナライズWEB
	* 毎日違う服装を提示
	* いいと思ったら中に入る
	* これを集計
* amazonの自動発注
* googlexrevisのコラボ
	* ジーンズの扱いをロギングしてデータ収集
* アパレル店舗でのマーケティング
	* 行動の言語化、近似化
	* 迷っている時間や何を見ているか
	* 声をかけて良いタイプかどうか
	* などを収集

#### 総括して
* 新しいデバイスもどんどんでてきていて、取れるデータはどんどん増えている
* データ集めていくが、どこまで取るべき？全部とりゃいいの？
	* そうじゃないんじゃないかね。


### 実務

* データ分析
	* グルーポン
	* リクルート
	* 経営戦略の横で術とぉ知る権限もらわんとしんどいかもね。

#### 案件のスコープと攻守を明確にすること
##### リクナビNEXTリクルートエージェント / データベース概念検証
* 机と電話くれ的なね。
* hadoopを入れてデータ取りまとめたい！が、必要さがわかってもらえなかった
	* 工数や終始計画やらを3枚の
##### リクナビNEXT
* 事業モニタリング環境改善
	* データ内容が標準化されてない
		* 課題
			* hadoop見てる人がいたり、バックエンドのサブシステムを見ている人がいたり…
			* データ鮮度や集計方法の違いで、報告数値がバラバラになってる
		* 解決案
			* データ内容の標準化
				* みんなでhadoopに繋いだBIツールでデータを見る！
	* データ活用が高速化されていない
		* 課題
			* システム部がデータ出す
			* 集計する
			* とかとか。。。レポートするまでに数日
		* 解決
			* 自動化！
	* データへのアクセスがオープン化されていない
		* [[写真]]

##### Airレジ クライアントサポート体制改善
* スモールビジネスを早く始めるためのキットを提供する
* 地図上に営業の行動指標をマップ
	* タブレットレジをどこでどれだけ使ってるか
	* マイナスの理由(使いにくいとか)
	* 使用状況を予測モデルを使ってピン化
		* クラスタリング
	* これらのデータをSalesforceとかと連携

##### リクルートAgent 重回帰分析による内定要因定量化
* 「採用成功方程式」
* 何やってるか
	* エージェント、採用者、求職者
	* 3方高望みの要件を、本当に必要なレベルまで調整していく
* こんなもんまでデータサイエンスでどうにかしていける
	* [写真]
	
##### 機械学習によるメール振り分け
* [写真]
* 自然語解析
	* 形態素分割　頻度分布　単語出現率
* テキストマイニング
	* カテゴライズ、

##### アソシエーションルールによる行動喚起
* [写真]
* 似た境遇の求職者同士をつなげていく「転職仲間」機能
	* ずらし[写真]

#### 業務のコストとインパクトを精査し合意形成と納得感の情勢をすること
* [写真]
* 基盤→運用→分析→施策

#### 戦力構想を可視化
* 組織の体型
	* 専門組織型
	* システム部門型
		* データの内容はよく知ってる
		* 事業観点で見ているかは大事なポイント
	* カスタマWeb型
		* MP
	* ハイブリット型
		* 上記3つのデメリットを吸収して全部のせ
* すすめ方
	* データマップ
		* 業務運用しているデータたちを、どこに何を持ってるかでマップ	* スキルマップ
		* 人単位
		* 横軸：お金で買える(採用)
		* 縦軸：お金で買えない(社内知識やデータ知見)
	* スキルスコア
		* 組織単位
		* 属人性のポイント化

### 最後に
* 赤の女王仮設
	* 不思議の国ののやつ
	* その場にとどまるためには全力で走り続けなければならない。
* natural selection
	* ダーウィン
	* 進化して、進化して、進化して、やっと現状維持。
* 仕事の報酬は仕事
PG::InsufficientPrivilege: ERROR on heroku	


Heroku で動かしている app で `PG::InsufficientPrivilege: ERROR:  permission denied for relation references` のエラー


Free プランである `Hobby-dev` は 10000 rows までしかデータをいれることができないので、
そのためにカラム追加ができなくなり、このエラーが起きていた。

なので、それ以上のカラム追加をする場合はアップグレードをすれば良い。


作業は 基本的にはこちらのマニュアル通りに進めれば良い。
https://devcenter.heroku.com/articles/upgrading-heroku-postgres-databases


- ３種類アップグレードの方法があるが、今回はこちらでアップグレード `Upgrade with PG copy (default)`

- `HEROKU_POSTGRESQL_PINK` は `heroku pg:wait` で出力された自分の DBのスラッグ
- `sushi` は自分の app のスラッグ
- アプリケーション間の移行は スッテプ 3 ではなく 4
Raspberry Piで PowerMacエミュ(SheepShaver) 


## 概要
- らずぱいで、[SheepShaver](http://sheepshaver.cebix.net/)を動かす。

> SheepShaver : An Open Source PowerMac Emulator 

![RPi_SS4.png](https://qiita-image-store.s3.amazonaws.com/0/75594/00d94fbe-bd07-dbac-4e28-3b3fc0d395dc.png)



## 環境

- Raspberry Pi 3
- `2016-05-27-raspbian-jessie.img`
- \# エミュレータなので、ROMとか、そのへんが必要。ドキュメント見たり、ぐぐって...

## 手順 (Basiliskp[でやったのと](http://qiita.com/mt08/items/9e63cfaa57cfb1985e59)大体同じ)
1. いつもの
2. `sudo apt-get install git libsdl1.2-dev libgtk2.0-dev automake`<br>PC88とBasilisk IIをやったあとの環境だから、もっと必要なのがあるかもしれない。
3. `cd; git clone https://github.com/cebix/macemu.git; cd macemu/SheepShaver/src/Unix`<br>ソース取得。src/CrossPlatform/以下のファイルはいくつか、BasiliskIIのほうにリンクされてる
4. ビルド

    ```bash
NO_CONFIGURE=1 ./autogen.sh
./configure --enable-sdl-video --enable-sdl-audio --disable-vosf --disable-jit-compiler --with-gtk --enable-addressing=direct,0x10000000
make
strip SheepShaver
```
=> `SheepShaver` ができる.
5. `./SheepShaver`<br>実行。GUIでぐいぐい(!)設定する
    - \[Volumes\]で、ISOイメージ追加したり、HDDイメージを作ったり
    - \[Memory/Misc\]で、RAMサイズ、ROM File指定したり
    - 画面サイズ変えたり、

![RPi_SS1.png](https://qiita-image-store.s3.amazonaws.com/0/75594/4d0b721c-7bd0-6809-1318-08a275219c79.png)


6 \[Start\]押して、VM起動

## スクショ


![RPi_SS3.png](https://qiita-image-store.s3.amazonaws.com/0/75594/e9f8c7da-1926-aa11-586a-c5d13b464f56.png)
<font ![RPi_SS2.png](https://qiita-image-store.s3.amazonaws.com/0/75594/38903d05-62a2-8c38-3788-cac042c8d96d.png)>


## その他
- `"Cannot map Low Memory Globals: Invalid agument"`というエラーは、 `mmap`で、<font color='red'>0x0000</font> - 0x3000をとろうとして、エラーになってる。
<br>=> `--enable-addressing=direct,0x10000000` で、Offsetつけてる
Zybo > Chronicles blog 48 > AMPの使用 > 6. CPU1の割込み設定

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-48-Bare-Metal-AMP/ba-p/515105

CPU0でCPU1を起動するが、CPU1の割込みを使うためにCPU0のコードにてGICを設定するようだ

> However, we plan to use the Core 1’s interrupt controller so we must first configure the GIC (General Interrupt Controller) using the code below as part of the Core 0 application:

http://qiita.com/7of9/items/3a68aaa9ef800fa480a2
のコードの SetupIntrSystem()は以下

```c
static int SetupIntrSystem(INTC *IntcInstancePtr)
{
    int Status;
    
    XScuGic_Config *IntcConfig;
    IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
    if (NULL == IntcConfig) {
        return XST_FAILURE;
    }
    Status = XScuGic_CfgInitialize(IntcInstancePtr, IntcConfig,
        IntcConfig->CpuBaseAddress);
    if (Status != XST_SUCCESS) {
        return XST_FAILURE;
    }
    Xil_ExceptionInit();
    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
        (Xil_ExceptionHandler)INTC_HANDLER,
        IntcInstancePtr);
    Xil_ExceptionEnable();

    return XST_SUCCESS;
}
```
arduinoでXFDを作る。「アラーム君」Win版リリースしました。

[GitHub](https://github.com/Blue-Tone/AlarmBoy)でデモ動画、arduinoのソース、node-serialportのバッチ、Jenkins設定方法を公開しています。

間違いや、改善ポイントがあれば、お気軽にコメント、アドバイスくださーい。

https://github.com/Blue-Tone/AlarmBoy

###Makers Bazaar Osaka vol.3出店します！
http://makersbazaar.jp/
2016/7/9(土)、7/10(日)
間に合えば、3500円ぐらいで販売予定です。
気になる人は、見に来てください。
今すぐ欲しい人は、少数なら準備できるかもなので、コメントください。

-----------
# AlarmBoy
Arduino Simple XFD


###Wiring diagram
![配線図](https://raw.github.com/wiki/Blue-Tone/AlarmBoy/images/AlarmBoy_Fritzing.jpg)

###OverView
![概念図](https://raw.github.com/wiki/Blue-Tone/AlarmBoy/images/Overview.jpg)

###Demo（YouTube）
[![Demo](http://img.youtube.com/vi/rYR4N6fq2Xw/0.jpg)](https://www.youtube.com/watch?v=rYR4N6fq2Xw)

#SetUp
##node-serialport
instal node.
npm install -g serialport

##_config.bat
NODE_PATH,COM port number,api token

###Setup Test
C:\AlarmBoy\tool\win\node-serialport\SerialTest.bat

##Jenkins Setting
###install Plugin
Post build task 
https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task

###add 3task
1. before build

    call C:\AlarmBoy\tool\win\node-serialport\BuildOn.bat

2. after build,before test

    call C:\AlarmBoy\tool\win\node-serialport\testingOn.bat 

    call C:\AlarmBoy\tool\win\node-serialport\BuildOff.bat

3. after publish test result

    set JOB_URL=http://[Jenkins URL]/job/TestJob/ 

    call C:\AlarmBoy\tool\win\postBuild.bat

###Commands

<table>
    <tr>
        <td>Pin</td>
        <td>ON</td>
        <td>OFF</td>
        <td>Remarks</td>
    </tr>
    <tr>
        <td>D2</td>
        <td>c</td>
        <td>C</td>
        <td>Err(Blink)</td>
    </tr>
    <tr>
        <td>D3</td>
        <td>d</td>
        <td>D</td>
        <td>Warn</td>
    </tr>
    <tr>
        <td>D4</td>
        <td>e</td>
        <td>E</td>
        <td>NG</td>
    </tr>
    <tr>
        <td>D5</td>
        <td>f</td>
        <td>F</td>
        <td>OK</td>
    </tr>
    <tr>
        <td>D8</td>
        <td>i</td>
        <td>I</td>
        <td>Testing</td>
    </tr>
    <tr>
        <td>D9</td>
        <td>j</td>
        <td>J</td>
        <td>Building(Blink)</td>
    </tr>
    <tr>
        <td>A5</td>
        <td>t</td>
        <td>T</td>
        <td>Sound t:NG T:OK</td>
    </tr>
</table>

push A3:Button,then D2:Blink OFF.


#for Linux and Mac Soon!!
Zybo > Chronicles blog 48 > AMPの使用 > 5. CPU1の起動 > sev(イベント送信)命令を送信

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-48-Bare-Metal-AMP/ba-p/515105

AMPにてCPU0からCPU1を起動するコード例

```c
int main()
{
    int delay;

    //Disable cache on OCM
    Xil_SetTibAttributes(0xFFFF0000,0x14de2);  // S=b1 TEX=b100 AP=b1111, C=b0, B=b0
    SetupIntrSystem(&IntcInstancePtr);
    print("CPU0: writing start address for cpu1\n\r");
    Xil_Out32(CPU1STARTADR, 0x00200000);
    dmb(); // waits until write has finished

    print("CPU0: sending the SEV to wake up CPU1\n\r");
    sev();

    while(1) {
       for( delay = 0; delay < OP_DELAYl delay++) // wait
       {}
       print("CPU 0\n\r");
    }
    return 0;
}
```


http://japan.xilinx.com/support/answers/46911.html
> 
1 つ目のプロセッサが 2 つ目のコアを起動させる必要がある場合は、ロケーション 0xFFFFFFF0 に目的の pc 値を書き込み、sev (イベント送信) 命令を送信する必要があります。
Zybo > Chronicles blog 47 > AMPの使用 > 4. bin file生成

MicroZed Chronicles リスト http://adiuvoengineering.com/?page_id=285
@ Adam Taylor blog
https://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chronicles-Part-47-AMP-Asymmetric/ba-p/512235

FSBL, CoreごとのApplication ELFファイル, Bitファイルが用意できた段階

> We now need a .bin file to enable the Zynq SoC to boot from your selected configuration memory. We also need a bif file, which defines the files to be used to create the bin file, and we need to define the order in which the files go.

XSDKではなくbootgenコマンドを使ってbinファイルを生成する

> Rather than use the created Zynq boot image within SDK we will be using an ISE command prompt and bat file provided as part of XAPP 1079 under directory\design\work\bootgen. This directory contains a bif file and a cpu1_bootvec.bin which is used as part of the modified FSBL to stop it from looking for more applications to load.

BIFファイルを用意することになるが、その一部が以下のようになるとのこと

> To generate the bin file, we copy the three generated ELF files to the bootgen directory and edit the BIF file to ensure the elf names within the bif file are correct.

```
the_ROM_image:
{
    [bootloader] amp_fsbl.elf
            download.bit
            amp_cpu0.elf
            amp_cpu1.elf

    //write start vector address 0xFFFFFFF0 with 0xFFFFFF00
    //This load address triggers fsbl to continue
    [load = 0xFFFFFFF0] cpu1_bootvec.bin
}
```

(Vivadoでなく)ISE使用でのコマンドは

```
> bootgen -image bootimage.bif -o i BOOT.BIN -w on
```
技術英語 > [Another case in point] to support the tortoise way: [slow and steady wins the race], even academically.

http://www.scientificamerican.com/podcast/episode/studying-instead-of-sleeping-bites-12-08-29/

睡眠をけずって勉強するよりは睡眠をきちんと取った方がいいという記事。

> <font color=red>Another case in point</font> to support the tortoise way: slow and steady wins the race, even academically.

http://eow.alc.co.jp/search?q=case+in+point
> 1. ぴったりした例、好適例、好例、適例、代表例、典型

- slow and steady wins the race

も面白い

城山三郎さんの本(「そうか、もう君はいないのか」)で紹介されている以下に通じる。

> イタリアの経済学者パレートが好んだ、
「静かに行く者は健やかに行く。健やかに行く者は遠くまで行く」
ftp接続を自動化

## 参考

* [ftp転送をシェルスクリプトで - mikedaの日記](http://mikeda.hatenablog.com/entry/20081027/1225121364)

## スクリプト用意

```bash:ftp_put.sh
#!/bin/sh

SERVER=$1
USER=$2
PASS=$3
FILE=$4

if [ $# -eq 3 ];then
# lsするだけ
    ftp -n <<END
    open $SERVER
    user $USER $PASS
    binary
    prompt
    passive
    ls
END
    exit 0
fi

# 転送
ftp -n <<END
    open $SERVER
    user $USER $PASS
    binary
    prompt
    passive
    ls
    mput $FILE
    ls
END
```

## 使い方例

```bash:lsするだけ
./ftp_put.sh localhost user1 Cih0lohM
```

```bash:転送例
./ftp_put.sh localhost user1 Cih0lohM .bashrc
```
Swift で substring

Swift の substring は引数が `Int` ではなく `Index` となっていて、`Index` の作り方がわからなくて調べたのでメモ。

```swift
// str の 4 文字目から 5 文字分取り出すサンプル

let str = "0123456789"
let index = 3
let length = 5

// `Index` を作る
let start = str.startIndex.advancedBy(index) // => 3
let end = start.advancedBy(length) // => 8
// `Range` を作る
let range = start..<end // => 3..<8

let substr1 = str.substringWithRange(range) // => "34567"
let substr2 = str[range] // => "34567"
```
【flexible_shuffle】配列を指定したとこだけ固定し、自由にシャッフルする方法

【募集】簡単そうでむずい... 綺麗に書ける人いないかな？（笑

# はじめに
サービスの関係上、配列の中身の一部を固定するということが必要になったので、簡単にその方法を書いた。力技感満載できっと他にも良い方法はいくらでもあるけど、まぁとりあえずこれで良いかなと。

下記の仕様は、itemsという配列の中身を、指定したインデックス番号だけ固定し、ホワイトリスト式に他の場所だけシャッフルするというものです。
（今回の例は、アイテム２と４を固定し他をシャッフルします）


# プログラム
```ruby:flexible_shuffle.rb
# 数字かどうかのチェック
def is_numeric(value)
  return true if value.is_a?(Numeric)
  !!(Integer(value) rescue Float(value)) rescue false
end



# flexible_shuffle(引数１, 引数２)
# 引数１：Array（item1, item2, item3...）
# 引数２：Array（[1,2,3...]）, Integer（2）, String（"2", "1,2,3..."）
def flexible_shuffle(items, holds)
	shuffled_items = Array.new
	checked_holds  = Array.new

	# 1: 引数チェック
	if holds.class == Fixnum
		checked_holds.push(holds)
	elsif holds.class == String && is_numeric(holds)
		checked_holds.push(holds.to_i)
	elsif holds.class == Array
		checked_holds = holds
	else
		return items
	end

	# 2: Index番号が指定されてない時だけ格納
	items.each_with_index do |item, i|
		shuffled_items.push(item) unless checked_holds.include?(i)
	end

	# 3: 1をシャッフル
	shuffled_items.shuffle!

	# 4: 2にIndex番号が指定されているものを挿入し戻す
	checked_holds.each do |i|
		shuffled_items.insert(i, items[i])
	end

	shuffled_items
end



# holdsの中身のインデックス番号は固定する（今回の例は、アイテム２と４を固定）
items = ["アイテム１", "アイテム２", "アイテム３", "アイテム４", "アイテム５"]
holds = "1,3"


```

#出力結果例（１０回試した結果）
["アイテム５", "アイテム２", "アイテム１", "アイテム４", "アイテム３"]
["アイテム３", "アイテム２", "アイテム５", "アイテム４", "アイテム１"]
["アイテム１", "アイテム２", "アイテム５", "アイテム４", "アイテム３"]
["アイテム５", "アイテム２", "アイテム３", "アイテム４", "アイテム１"]
["アイテム５", "アイテム２", "アイテム１", "アイテム４", "アイテム３"]
["アイテム５", "アイテム２", "アイテム３", "アイテム４", "アイテム１"]
["アイテム１", "アイテム２", "アイテム５", "アイテム４", "アイテム３"]
["アイテム５", "アイテム２", "アイテム１", "アイテム４", "アイテム３"]
["アイテム５", "アイテム２", "アイテム３", "アイテム４", "アイテム１"]
["アイテム５", "アイテム２", "アイテム１", "アイテム４", "アイテム３"]


確かにIndex番号1, 3のアイテム２とアイテム４だけ固定されて他がシャッフルされた。とりあえず良いかな。
BigQuery からCloud Storageへのデータのエクスポート


BigQuery からCloud Storageへエクスポートする。
BigQueryからは直接ダウンロードできない？しにくい？
ハマったのでメモ

![Google_BigQuery.png](https://qiita-image-store.s3.amazonaws.com/0/125159/5d19ac04-feef-b798-9787-1471cdebcf66.png)


![Google_BigQuery1.png](https://qiita-image-store.s3.amazonaws.com/0/125159/dfdcf74d-855b-7cff-6056-052dc66b035b.png)




#割り当てのポリシー

BigQuery からのデータのエクスポートには、次の制限が適用されます。

1 日あたりの制限: 1 日あたり 1,000 回のエクスポート、最大 10 TB
複数ワイルドカード URI の制限: 1 回のエクスポートで 500 URI



#エクスポートURI URL
##jsonはファイル容量が大きいのでgzがおすすめ

-単一の URI	
単一のファイルにデータをエクスポートする場合は、単一の URI を使用します。ほとんどの場合、エクスポートされるデータは BigQuery で制限されている 1 GB というファイルあたりの最大値よりも小さいため、このオプションは最も一般的なユースケースです。	
プロパティの定義:

['gs://my-bucket/file-name.json']

###my-bucketは
![ストレージ_ブラウザ_-_hirokita.png](https://qiita-image-store.s3.amazonaws.com/0/125159/2a26249a-a58e-3404-2409-a6dbee96a634.png)


作成されるファイル:

gs://my-bucket/file-name.json


-単一のワイルドカード URI	
エクスポートされるデータが BigQuery で制限されている 1 GB というファイルあたりの最大値よりも大きくなりそうな場合は、単一のワイルドカード URI を使用します。データは、指定したパターンに基づいて複数のファイルに分割されます。	
プロパティの定義:

['gs://my-bucket/file-name-*.json']

作成されるファイル:

gs://my-bucket/file-name-000000000000.json
gs://my-bucket/file-name-000000000001.json
gs://my-bucket/file-name-000000000002.json
...
Wercker cacheを使ってGradleのビルドを高速化


# 概要

Werckerでは、Workflowsで繋いだpipeline間で共有出来るディレクトリがあり、キャッシュとして利用できます。キャッシュディレクトリのパスは、環境変数`WERCKER_CACHE_DIR`を参照することで取得できます。Wercker cacheの詳細は[こちらのドキュメント](http://devcenter.wercker.com/docs/pipelines/wercker-cache.html)から確認できます。

# ビルド速度の改善

`WERCKER_CACHE_DIR`をGradleのキャッシュディレクトリとして利用することでビルド速度を改善できます。Gradleは実行時に`--project-cache-dir`を用いることで任意のキャッシュディレクトリを指定できます。詳細は[付録D Gradle コマンドライン](http://gradle.monochromeroad.com/docs/userguide/gradle_command_line.html)をご覧ください。したがって、以下のように指定することで`WERCKER_CACHE_DIR`をキャッシュディレクトリとして利用できます。

```bash
$ gradle --project-cache-dir=$WERCKER_CACHE_DIR testDebug
```

# Gradle Wrapperを利用する場合

Wrapperを使用する場合、コマンドは以下のようになります。

```bash
$ ./gradlew --project-cache-dir=$WERCKER_CACHE_DIR testDebug
```

Gradle Wrapperを利用する場合は、Werckerの環境変数として`GRADLE_USER_HOME`を定義し`$WERCKER_CACHE_DIR/.gradle`を指定します。これによってGradleのユーザディレクトリを`WERCKER_CACHE_DIR`以下に指定でき、WrapperがダウンロードしたGradleが異なるpipeline間で共有されpipeline毎にGradleがダウンロードされることが無くなります。

環境変数は「Settings」の「Environment variables」から定義できます。

![wercker_env_variable.png](https://qiita-image-store.s3.amazonaws.com/0/43438/7ea5443e-390c-c98d-f7fd-43f451e530c6.png "wercker_env_variable.png")

また、環境変数を使わず`--gradle-user-home`オプションを使用することでGradleのユーザディレクトリを指定することが可能です。

```bash
$ ./gradlew --project-cache-dir=$WERCKER_CACHE_DIR --gradle-user-home=$WERCKER_CACHE_DIR/.gradle testDebug
```

# WERCKER_CACHE_DIRの有効期限

`WERCKER_CACHE_DIR`の有効期限がどうなっているかというと、ドキュメントには以下のように書かれています。

> At the start of every pipeline run the cache directory is filled with the cached content from the last successful build, if not older than 14 days (and is < 1GB).


したがって、各pipelineは、スタート時に`WERCKER_CACHE_DIR`にキャッシュをロードし、ロードされるキャッシュは、14日間以内で最後に成功したビルドのもので、キャッシュの容量は1GBまでとなっています。

# キャッシュの消去

キャッシュを消去したい場合、「Settings」の「Options」にある「Clear cache」から削除できます。また、Gradle実行時に`--recompile-scripts`を付けることでキャッシュが全て破棄され再度コンパイル、保存されます。詳細は[「キャッシング」](http://gradle.monochromeroad.com/docs/userguide/tutorial_this_and_that.html#sec:caching)の項目をご覧ください。

![wercker_clear_cache.png](https://qiita-image-store.s3.amazonaws.com/0/43438/83dc8cbb-c9a8-2eeb-bf9b-5322a5217f1b.png "wercker_clear_cache.png")


# 参考
* http://gradle.monochromeroad.com/docs/userguide/gradle_command_line.html
* http://devcenter.wercker.com/docs/pipelines/wercker-cache.html
* http://gradle.monochromeroad.com/docs/userguide/tutorial_this_and_that.html#sec:caching
[Python] MACアドレスに"："を挿入する

ネットワークの勉強を兼ねてパケットキャプチャを自作中です。
その中でEthernetフレームをパースする処理を書いていたのですが、
ソケットで受信した生データを文字列におこすと、MACアドレスは
セミコロン":"が挿入されていない状態で取得されます。


```text:セミコロンを挿入したい
000c29ecc97a
↓こうしたい↓
00:0c:29:ec:c9:7a
```

文字列リストなんだから、2文字ずつのサブリストに分割して":"でjoinすればいいか。
と思ってググってみるとn文字のサブリストに分割するテクニックとしてzip(\*[iter(s)]*n)を発見。


```pycon:分割、結合でセミコロンを挿入
>>> s = '000c29ecc97a'
>>> zip(*[iter(s)]*2)
>>> [('0', '0'), ('0', 'c'), ('2', '9'), ('e', 'c'), ('c', '9'), ('7', 'a')]
# ":"で連結！
>>> ':'.join(map(''.join, zip(*[iter(s)]*2)))
'00:0c:29:ec:c9:7a'
```

```':'.join(map(''.join, zip(*[iter(s)]*2)))```が***よみにくいっ***。
テクニックとしてはいいのですが、知らないとわかりづらいので気持ち悪いです。
次に思いついたのが正規表現で置換する方法。

```pycon:正規表現でセミコロンを挿入
>>> import re
>>> s = '000c29ecc97a'
>>> raw_mac_ptn = r'([0-9A-F]{2})(?!$)'
>>> mac_addr = re.sub(raw_mac_ptn, r'\1:', s)
>>> mac_addr
'00:0c:29:ec:c9:7a'
```

こっちのほうが見やすいかな。末尾に":"が挿入されないよう否定先読み(?!$)が肝です。
JS 関数を動的に呼び出す

JS学びたてで個人的にいいなと思ったのでメモ

```js:example.js

var selectFunc = new Array();

selectFunc.hoge = function(){
    console.log("hoge");
}

selectFunc.foo = function(){
    console.log("foo");
}

var name = ["hoge","foo"];

name.forEach(function(res){
    selectFunc[res];
})

```

こんな感じの事が出来る。
[メモ](らずぱい)Firefox


## まとめ
- `sudo apt-get install -y firefox-esr-l10-ja`
<br>日本語

## 環境
- Raspberry Pi 2/3
- `2016-05-27-raspbian-jessie.img`

## スクショ
- 日本語<br>![RPi_Firefox1.png](https://qiita-image-store.s3.amazonaws.com/0/75594/0c88515d-3bd1-35e9-0590-b675eb86352c.png)

- アドオンなど<br>![RPi_Firefox2.png](https://qiita-image-store.s3.amazonaws.com/0/75594/1e0da0d2-65f7-4ed5-bdec-9a53ebd2d92e.png)

- Firebug: `Hello World!`
![RPi_Firefox3.png](https://qiita-image-store.s3.amazonaws.com/0/75594/ebac8e40-48b3-12d9-d751-34125f7e42cd.png)

- Firebug: HTMLの要素検索
![RPi_Firefox4.png](https://qiita-image-store.s3.amazonaws.com/0/75594/be9f0398-b973-ccae-7c5e-acc3934ad0d7.png)

- Firebug: `document.getElementsByTagName('div')`
![RPi_Firefox5.png](https://qiita-image-store.s3.amazonaws.com/0/75594/57becaed-8876-3b71-7c81-1536c5a29eb8.png)



## その他
- え？ いつのまに. 公式対応?! Chrome系をつかおうかとぐぐってたら...<br>イイね!
initとdeinitでメモリの動きを確認する


#意味のある検証かどうかは置いておいて…

私はメモリに対して
**いらなくなったらきちんと解放してくれるのだろうか・・・**
**使いたい時に使えるようにきちんと持っているのだろうか・・・**
という漠然とした2つの恐怖心を持ってます...

幸いメモリの確保と解放は`init`と`deinit`にprint文を埋め込んで追うことができるようなので、幾つかのプログラムを検証して理解を深めていきたいと思います。

なお、`deinit`は
**変数に`nil`が代入される**もしくは
**変数のスコープ外に処理が移動する**と動き出すようなので
今回の動作検証では`nil`を代入してみました。

##1.最も単純なケース

```swift
class A {
	init(){
		print("A init")
	}
	deinit{
		print("A deinit")
	}		
}

var a:A? = A() // "A init"
a = nil        // "A deinit"

```
これは予想通り。まだまだ理解できる...！

##2.他の変数が参照しているケース

```swift
class A {
	// 省略
}

var a:A? = A() // "A init"
var a2:A?

a2 = a         // a2もaを参照!!

a = nil        // 何も起きない...
a2 = nil       // "A deinit"
```
`a = nil`のところで`A deinit`と出ない！
これはARCのおかげで複数の変数から参照されている時は、メモリを解放せず残してくれるようです。

##3.インスタンス変数に別クラスのインスタンスを持っているケース

```swift
class A {
	var b:B? = B()
	// 省略
}

class B {
	// 省略（initで"B init" deinitで"B deinit"）
}

var a:A? = A() // "B init"
               // "A init"
               
a = nil        // "A deinit"
               // "B deinit"
```
`init`はB⇨Aの順に行われて、`deinit`は反対にA⇨Bの順に行われる模様。
入れ子になっている時は、上位のインスタンスを解放すれば、ぶら下がっているインスタンスも自動的に解放されていくらしい。

##4.インスタンス変数を外から参照しているケース

```swift
class A {
    // 省略（3.のケースと同じ）
}

class B {
    // 省略（3.のケースと同じ）
}

var a:A? = A() // "B init"
               // "A init"

var b2:B?
b2 = a!.b      // b2にaのインスタンス変数bを参照させる

a = nil        // "A deinit"

b2 = nil       // "B deinit"

```
少し複雑になってきました。
3.の例で`a`の解放によって自動的に解放された`b`は、今回外部の`b2`という変数から参照されているため残り続けています。

2.の例では複数の参照がある場合にメモリを残しておいてくれることにありがたみを感じていましたが、「上位のインスタンスを`nil`にすればメモリ解放は万事OK」なんて思ってると痛い目を見そうです。これは意外とくせ者かも...

##5.インスタンス変数にDictionaryを使ってみたケース（なんとなく検証）

```swift

class A {
	var dict : Dictionary = Dictionary<String, AnyObject>()
    
    init(){
    	print("A init")
    	let b:B? = B()
    	let c:C? = C()
    	
		self.dict["b"] = b
		self.dict["c"] = c
    }
    
    deinit{
    	print("A deinit")
    }
}

class B {
    // 省略（3.のケースと同じ）
}

class C {
    // 省略（initで"C init" deinitで"C deinit"）
}

var a:A? = A() // "A init"
               // "B init"
               // "C init"
        
var b2:B?              
b2 = a!.dict["b"] as? B  // b2にaのインスタンス変数bを参照させる
        
a = nil        // "A deinit"
               // "C deinit"
b2 = nil       // "B deinit"
```

やっぱり外で参照しているインスタンスは残っていました。

他にも例が思いついたら書き足していこうかと思います。
上位互換の英語と、その意味への疑問

上位互換の意味について調べてみました。

上位互換の英語と、その意味に疑問を持っていましたが、次のサイトで欲しかった説明がされていました。
[上位互換と下位互換、前方互換と後方互換（新Jay’s時事英語研究）](http://d.hatena.ne.jp/jay0123/20100206/1265409357)

ただ、いくつかのサイトを調べた限りでは、日本語では、wikiの説明通りに使用される例が多いですね。（上記サイトと英語訳が異なります。）
[互換性（wikipedia）](https://ja.wikipedia.org/wiki/%E4%BA%92%E6%8F%9B%E6%80%A7)

wikiの通りに覚えるとすれば、通常は、上位バージョン（あるいは新製品）が、下位バージョン（旧製品）の機能を使える状況が多いので、上位互換性（後方互換性）を覚えておこうと思います。
（下位互換性、前方互換性は、使用頻度が低く、上記の逆の意味になるので。）

日本語の、自分なりの覚え方です。
上位互換性・・・上位「が」互換性を持つ。（下位に対して）
後方互換性・・・（新製品が）後方「に」互換性を持つ。

「が」、「に」の助詞が異なるのは、気持ち悪いですね。

「新Jay’s時事英語研究」に従えば、英語の場合はそれぞれ素直に、「lower compatible（下位「に」互換性）」、「backward compatible（後方「に」互換性）」を使えばいいのかな。（wikiの英語訳と異なってしまいますが。。。）
JavaScript Lint を使う


JavaScript Lint
<http://www.javascriptlint.com/>

## TL;DR

- ダウンロードして解凍するだけで使用OK！
- リリースは2006年、開発も2014年から止まっている＞＜
- ES5までのチェックなら充分じゃね？

## インストール

以下から環境にあったzipをダウンロード。解凍してパスを通す。
<http://www.javascriptlint.com/download.htm>

macの場合は以下でもOK

```
$ brew install jsl
```

## 実行

```
$ jsl -process /path/to/hoge.js
```

ロゴ表示なし

```
$ jsl -nologo -process /path/to/hoge.js
```

設定ファイルを指定して実行

```
$ jsl -conf /path/to/jsl.conf -process /path/to/hoge.js
```

### 設定

設定ファイルを書出して編集する

```
$ jsl -help:conf > /path/to/jsl.conf
$ vi /path/to/jsl.conf
```

**重要** 
最終行の`+process jsl-test.js`はコメントアウトすること！

```diff
 # To add a set of files, use "+process FileName", "+process Folder\Path\*.js",
 # or "+process Folder\Path\*.htm".
 #
-+process jsl-test.js
+# +process jsl-test.js
```


以下、雑な翻訳
<https://raw.githubusercontent.com/oppara/dot.vim/master/dot.vim/tools/jsl.conf>


## エディタから実行する場合

### vim

[Syntastic](https://github.com/scrooloose/syntastic)を使う場合

```vim:.vimrc
let g:syntastic_javascript_checkers = ['jsl']
let g:syntastic_javascript_jsl_args = '-conf /path/to/jsl.conf'

```

### Sublime Text

[SublimeLinter-jsl](https://github.com/SublimeLinter/SublimeLinter-jsl)


## 雑なWindowsバッチ

```bat:jsl.bat
@pushd .
@cd c:\path/to\jsl-0.3.0
@jsl.exe conf c:\path\to\jsl.conf -process %1
@popd
```
Ruby on Railsチュートリアルを進めていくうちに、testでAssetが読み込まれないエラーが起きたときの対処について


### 問題

チュートリアル：<a href="http://railstutorial.jp/" target="_blank">Ruby on Rails チュートリアル：実例を使って Rails を学ぼう</a>を進めて行くと、なぜかよくわからないけど、下記のようなエラーが出る。


```Terminal
$ rake test
(略)
ActionView::Template::Error:         ActionView::Template::Error: File to import not found or unreadable: bootstrap-sprockets.
(略)
```


### 対処
Gemの`autoprefixer-rails`を入れると解決する

1.Gemfileに `gem 'autoprefixer-rails'` を追記

2.ターミナルで、bundle install

```Terminal
$ bundle install
```

3.テスト実行

```Terminal
$ rake test
```


でとりあえずOKでした。


### 参考リンク
- [Rails4.2でBootstrapに対応したときのメモ - Qiita](http://qiita.com/saicologic/items/bf406d597a8b969c3a60)
- [Ruby Plus](https://rubyplus.com/articles/1371)
SDXCカードへRASPBIAN JESSIEのイメージをインストール

#はじめに
Raspberry Pi 3を購入し、Raspbianをインストールしようとしたら躓いたのでメモを残しておきました。

#環境
* Raspberry Pi 3
* TOSHIBA EXCERIA 64GB（micro SDXC)
* Raspbian　Jessie（リンクからダウンロード[http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2016-05-31/]）
* Windows Vista(イメージ作成用PC)

#NOOBSからインストールできない
Raspbianのインストール方法は、NOOBSが主流のようなので私もチャレンジしましたがインストーラが起動できませんでした。
原因は、SDXCのフォーマットのようです。SDXCのフォーマットはexFATですが、NOOBSはFAT32フォーマットでないと起動しません。[https://www.raspberrypi.org/documentation/installation/sdxc_formatting.md]

Raspbianのインストールは、NOOBS以外にRaspbianのイメージからもイ可能なのでそちらから実施しました。

#イメージの書き込み
###ダウンロード
環境に貼り付けたリンクからイメージをダウンロード。（容量が約1.3GBなので気長に待つ）完了後に適当な場所に解凍。3.6GB程度になる。

###Win32DiskImagerのインストール
SourceForgeからダウンロードを実施[https://sourceforge.net/projects/win32diskimager/]
exeを実行して、全力で次へを押してインストールを完了させる。

###イメージファイルの書き込み
管理者権限でアプリケーションを起動する。
格ペインに下記を指定する。
* Image File：解凍したimgファイル
* Device：書き込みたいmicroSDのドライブ

指定したらWriteボタンを押してしばし待てば完成。

次回はセットアップ編で記載
センサー等の軸表示記号

#概要
センサーを取り付け時に困った経験があったので、メモを残します。

#問題
この画像は3軸加速度センサーのものです。
![z.jpg](https://qiita-image-store.s3.amazonaws.com/0/111373/53792171-80c0-45fc-74bc-52a3b77c95b9.jpeg)

加速度を+-で出力してくれるので、正しい向きに取り付けたいのですが…。
X軸Y軸は正方向か一目瞭然ですが、Z軸は、さてどちらが正方向でしょう？


#答え
基板の垂直上向きが正方向です。

垂直上向き - 丸の中に●
垂直下向き - 丸の中に×

// 昔図面のなにかでやった気がする。

#由来
方向を表す時の矢印からきているようです。
射手が見る矢は、矢羽。的が見る矢は、鏃。
もう忘れません。
ダイアログのユーザ入力で処理を変える

ダイアログを表示してユーザが選んだ入力に応じて処理を変えてみる。

``` dialog.py
# -*- coding: utf-8 -*-

import tkinter.messagebox as mb
import webbrowser

# chromeで開きたい場合
b = webbrowser.get('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" %s')

if __name__ == '__main__':
    # ユーザの入力に応じて処理を変える
    if mb.askyesno("Title", "Open chrome browser?"):
        b.open("http://www.yahoo.co.jp")
    else:
        print("do nothing")

```

簡単にできますね！
ダイアログは**TkinterというPythonでGUIを組むことのできるツールキット**を利用してます。

こちらの記事を参考に。
[PythonのTkinterを使ってみる](http://qiita.com/nnahito/items/ad1428a30738b3d93762)
Homebrew-Cask を /usr/local/Caskroom に移行する方法

# tl;dr

```
$ find /Applications -type l -depth 1 -exec rm {} \;
$ mv /opt/homebrew-cask/Caskroom /tmp/
$ brew cask install $(\ls /tmp/Caskroom)
$ brew prune
```

上記方法だと /Applications に独自に `ln -s` したアプリも削除しちゃうので注意。

# 概要

`brew cask install` などで下記の Warning が出てしまう件の移行方法について。

```
Warning: The default Caskroom location has moved to /usr/local/Caskroom.

Please migrate your Casks to the new location, or if you would like to keep your
Caskroom at /opt/homebrew-cask/Caskroom, add the following to your HOMEBREW_CASK_OPTS:

  --caskroom=/opt/homebrew-cask/Caskroom

For more details on each of those options, see https://github.com/caskroom/homebrew-cask/issues/21913.
```

# 原因

* いままで
  * /opt/homebrew-cask/Caskroom 以下に Cask名のディレクトリーと各Cask毎のバージョン毎のディレクトリーを作り、 *.app を /Applications に `ln -s` する。
* 変更後
  * /usr/local/Caskroom 以下に Cask名のディレクトリーを作るけど、*.app は直接 /Applications にインストールする。

/usr/local 以下の *.app は Spotlight から検索できない弊害もあるので、`mv /opt/homebrew-cask/Caskroom /usr/local/` ではなく各Cask を改めてインストールし直しが良さそうです。

# 例外

手元の環境だと上記の方法では `adobe-reader` のインストーラーでエラーが起きてうまくインストールできませんでした。
AppCleaner で `Adobe Acrobat Reader DC.app` をアンインストールしてから上記の方法で問題ない模様。

# See Also

* [How to migrate to the new location?](https://github.com/caskroom/homebrew-cask/issues/21913)
Android Nのクイック設定タイル

- Android Nの[クイック設定タイルAPI](https://developer.android.com/preview/api-overview.html?hl=ja#tile_api)を利用してみた。
- アプリ独自のタイルを定義できるようになった。
- タイルの編集画面でユーザーがドラッグ&ドロップで追加できる。

## 事前準備
- Android Nのプレビュー版が利用可能な環境を整えておく。
- [Preview のセットアップ](https://developer.android.com/preview/setup-sdk.html?hl=ja)

## マニフェスト
- サンプルほぼそのまま

```AndroidManifest.xml
<service 
    android:name=".MyTileService"
    android:icon="@drawable/hoge"
    android:label="タイルテスト"
    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
    <intent-filter>
        <action android:name="android.service.quicksettings.action.QS_TILE" />
    </intent-filter>
</service>
```

## TileService
- TileServiceを継承させたクラスを書く。

```MyTileService.java
public class MyTileService extends TileService {

    public MyTileService()
    {
    }

    @Override
    public IBinder onBind(Intent intent)
    {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startID)
    {
        return START_STICKY;
    }

    @Override
    public void onClick()
    {
        
    }
}
```

- MainのアクティビティのonCreate()とかでstartService()。

```MainActivity.java
Intent intent = new Intent(this, MyTileService.class);
startService(intent);
```
- クイック設定タイルの編集画面に表示された。
![Screenshot_20160616-234339.png](https://qiita-image-store.s3.amazonaws.com/0/38164/5006b167-ff79-92ec-83c4-474eeca484b8.png)


- いろいろ設定値とか、何したらどのコールバック呼ばれるとか試してみようと思ったけど、エミュレータだとドラッグ&ドロップ動作してくれなかったので、表示するだけしかできていません。確認できたら追記。
Sublime Text 3 にHaskellの開発環境を構築する

Sublime Text 3上でHakellのコーディングを楽にしてくれるプラグインSublimeHaskellのインストール方法です。
SublimeHaskellを導入することで、SublimeText上でコード補完やシンタックスチェック、定義ジャンプなど色々な便利機能が使えるようになります。 

[SublimeHaskell/SublimeHaskell](https://github.com/SublimeHaskell/SublimeHaskell)

## hsdevのインストール
[hsdev](http://hackage.haskell.org/package/hsdev)はコード補完等を行ってくれるcabalのパッケージです。
cabalを使ってインストールします。

```
cabal install hsdev
```

## SublimeHaskellのインストール
SublimeText上で`shift-cntrl-p`を押して、パッケージコントロールを表示します。
`Package Control:Install Pacakge`から`SublimeHaskell`を検索してイントールしてください。

## SublimeHaskellの設定
SublimeHaskellを利用するために上記でインストールしたhsdevのパスを設定ファイルに追加する必要があります。
`Preferences > Package Settings > SublimeHaskell > Settings - User`から設定ファイルを開き以下の記述を追加します。

```
{
  "add_to_PATH": [
    "~/.cabal/bin/hsdev",
  ]
}
```

hsdevのパスは以下のコマンドで確認できます。

```
$ which hsdev
/Users/<user>/.cabal/bin/hsdev
```

また初期状態ではコンパイル時に「関数の型を指定していない」場合に警告が表示されたりして、色々と鬱陶しいのでコンパイルオプションを指定して表示される警告の制御をしておきます。

設定ファイルは最終的に以下のように設定しました。
（パスの設定以外は適宜自由に行ってください。 ）

```
{
  "enable_hdevtools": false,
  "auto_completion_popup": true,

  // 実行ファイルへのパス
  "add_to_PATH": [
    "~/.cabal/bin/hsdev"
  ],

  // Additional ghc options for use in ghc-mod and ModuleInspector, for example "-package ghc"
  // ghcコマンドオプション一覧の参照 : http://www.kotha.net/ghcguide_ja/7.6.2/flag-reference.html
  "ghc_opts":
  [
    "-fno-warn-type-defaults",
    "-fno-warn-missing-signatures",
    "-fno-warn-incomplete-patterns",
    "-fwarn-unused-binds"
  ]
}
```

## SublimeTextを再起動
最後にSublimeTextを再起動すればSublimeHaskellが自動で起動するので、下の画像のようにhaskellのファイルを開いて色々と入力した時に、自動でコード補完が表示されれば無事インストール出来ています。

![スクリーンショット 2016-06-16 23.37.55.png](https://qiita-image-store.s3.amazonaws.com/0/54838/c945a0c0-983c-ef35-3470-a91952aaa04b.png)
証明書周りで上手くいかない時の対処法

#証明書周りで上手くいかない時の対処法
provisioning fileで上手くいかない時の対処法を忘れないうちメモしておきます。
特に多いのが証明書を変えた時などに下記のエラーが出てビルドが通らないパターン。

```
Code Sign error : Command /usr/bin/codesign failed with exit code 1
```

##確認する項目
###・keychainの証明書に秘密鍵が紐付いているか
紐付いていない場合は再度登録
certificateの登録方法（すごくわかりやすい！！）
http://dev.classmethod.jp/smartphone/ios-certificates/

###・itunesconnectのprovisionigがinvalidになっていないか
期限切れの場合は更新して再度DL

###・ローカルのkey chainに古い証明書が残っていないか
すごくよあるパターン
~~古いのある場合消します。消しても再度DLすればいいので問題ないです。~~

###・ローカルのteamに古いプロビジョニングが残っていないか
先ほど同様よくあるパターン
Xcode -> Preferemce -> AccountsのteamのView Detailで古い日付のプロビジョニングが残っている場合は消します。
消すのが怖い場合はfolderで開いで移動する。
Git | ブランチルートを基準に変更差分を探す grep もどき


ブランチルートを基準に、変更差分から grep する。

```bash
$ git diff $(git merge-base master HEAD) | grep [TEXT]
```

# どういう時に使う？

- 自分のコミットで、たくさんの箇所を変更しなければいけない。 ( ブランチ = 自分の変更とは限らないけれど )
- たとえばひとつのモデルで、メソッド名を変更した。モデルも、モデルのテストも、ビューも、ビューのテストも、デコレーターも、デコレーターのテストも変えなければいけない。
- 変更忘れが恐い。 でも `$ git grep` はレポジトリ全体から検索してしまう。

# 内容

- linux コマンドで grep しているだけ。
- 行番号は出ない。
- ファイル名も出ない。
- でも自分の場合、地味に便利。

# エイリアス登録

```~/.gitconfig
[alias]
  dig = !git diff $(git merge-base master HEAD) | grep
```

`$ git dig [TEXT]` 

# コマンド例

```bash
$ git dig teacher
+      @teacher = Teacher.new(student: 'pretty')
+      it { is.expected to eq 'teacher is not foolish.' } 
+      attr_accessor :teacher_whip
```

# 補足

きっともっと良い方法あるはず。でもまだ調べられてない。

# 環境

- git version 2.7.4 (Apple Git-66)








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【Java】unmodifiableListでリストを読取り専用とする時の注意点


リストをadd/removeできないようにするためにCollections.unmodifiableListを使うことで、
読取り専用リストとして取得することができるが、以下の注意点が必要なのでメモ。

# 引数にnullを渡すとヌルポが発生する

```java
final List<String> nullList = Collections.unmodifiableList( null );
```

上のコードを実行すると、「NullPointerExceptionが」発生する。
リストを取得するなんらかのメソッドを読取り専用リストにしようとして、その返却値がnullだった場合によく起る。
これを防ぐには事前にnullチェックをしてあげるか、nullチェックを行いnullの時はCollections.emptyList()を返しそれ以外はunmodifiableListで包んで返却してあげる自作メソッドなどを作る。

# 読取り専用としたら二度と変更することはできない

```java
final List<String> list = Collections.unmodifiableList( new ArrayList<String>() );
final List<String> modifilist = (ArrayList<String>) list;
```

読取り専用にしたリストをキャストで外したりはできない。
上のコードではキャストした時点で「ClassCastException」が発生する。
※もし外すことができてしまったらそもそも読み取り専用としての意味がないので、そういうコーディングはしない方がいいと思う。
※そもそも外したりできるの・・？

# 読取り専用としたリストをaddして使いたい場合（new）

```java
final List<String> list = Collections.unmodifiableList( new ArrayList<String>() );
// list.add( "TEST1" ); ←これはできない！
final List<String> modifilist = new ArrayList<String>( list );
modifilist.add( "TEST2" );  // ←これはできる！
```

こうすることでmodifilistにaddできるようになる。しかし、newしているため参照先が変わる(modifilistでaddした内容はlistには反映されない)

#読取り専用とした後で使いたい場合

```java
final List<String> list = new ArrayList<String>();
final List<String> readOnlylist = Collections.unmodifiableList( list );
list.add( "TEST1" );  // readOnlylistの中身も反映される
```

このように通常のlistと読取り専用リストの変数に分ける。
こうすればlistでaddした内容をreadOnlylistでも見ることができる（メソッドの中ではlistを使い、外に渡すときはreadOnlylistを渡すなど・・）



unmodifiableListは他のモジュールから貰ったリストを内部では読取り専用にしておいたり、
書き換えて欲しくないリストを外に渡すときに読取り専用にしておいたりかなり使えるのでオススメ。
【初心者向け】ファイルの変更からリモートにプッシュするまでのGitフロー

まずは何かファイルに変更を加えます。

 //今いるブランチを確認（変更の内容を相応しいブランチに反映したい）
git branch

//ブランチを変更（変更する必要があれば）
git checkout ブランチ名

//ブランチを作成（作成する必要があれば）
git checkout -b ブランチ名

//変更を加えたファイルを確認
git status 

//ブランチの内容に合った内容をgitに追加
 git add フォルダ名/ファイル名

//変更展等記載しコミット
git commit  -m "fixed date layout" 

//リモートのブランチにプッシュ(github)
git push origin  ブランチ名
ruby undef_method vs remove_method

http://apidock.com/ruby/Module/undef_method

```rb
class Parent
  def hello
    puts "In parent"
  end
end
class Child < Parent
  def hello
    puts "In child"
  end
end

c = Child.new
c.hello

class Child
  remove_method :hello  # remove from child, still in parent
end
c.hello

class Child
  undef_method :hello   # prevent any calls to 'hello'
end
c.hello
```
JSONレスポンスからJSONパーサ用のモデルクラスを生成する

JavaでAPIをコールして受け取るとき、Jacksonなどを使うと思いますが、レスポンスを格納するためのJavaオブジェクトはどうやって作成してますか？

短いレスポンスしか返ってこないなら（[前書いたTiqav](http://qiita.com/Local/items/73485e34a423baf692b5#retrofitrxjava%E3%81%A7%E3%82%82%E3%81%AE%E3%81%99%E3%81%94%E3%81%8F%E6%82%A9%E3%82%93%E3%81%A0%E3%81%93%E3%81%A8)など）なら手打ちで問題ないですが、大体のAPIだと手打ちではどうしようもない量のパラメータが返ってきます。

そういう時は、レスポンスから自動生成しましょう。

#やり方

JSONのサンプルとして、[http://json.org/example.html](http://json.org/example.html)の一番上のJSONを使って、POJOに変換してみます。

[jsonschema2pojo](http://www.jsonschema2pojo.org/)というOSSのWebサービス版を使います。

jsonschema2pojoへ移動し、テキストエリアへ生成元のJSONテキストを貼り付けます。

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/21371/0c74ce1d-0610-e72e-3e07-f47d9dfaced1.png)


そして、Package名をPackageテキストエリアへ、ルートの要素が入るクラスの名前をClass nameへ記述します。

更に、Source TypeをJSON SchemaからJSONへ変更します。すでに何らかの方法でJSONをJSON Schemaに変換しているならそのままでOKです。


![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/21371/b4cdd92c-7aba-3002-f481-5073de9ae31a.png)



次はAnootation Styleを指定します。 使っているライブラリに応じて変更しましょう。（下の画像の緑枠）

自分はJackson2.Xなのでそのままです。

さらにその下のオプション群です。必要に応じてチェックをつけたり外したりしましょう。（下の画像の青枠）


![無題2 (1).png](https://qiita-image-store.s3.amazonaws.com/0/21371/54992635-b5e3-721f-9af2-7383c1c16267.png)



で、最後にZipボタンをクリックすれば、POJO群が生成され、隣にリンクが表示され、そこからダウンロードできます。


![無題3.png](https://qiita-image-store.s3.amazonaws.com/0/21371/7b8cf672-bf99-9bc2-ca98-d51bf466fe24.png)


#注意点


生成したPOJOですが1つ注意点があります。オプション群でUse long integersにチェックをつけていない限り、数値型（元のJSONでクォーテーションがついていない数値）はすべてIntegerになります。

SNSのAPIから返ってきた投稿idなどでは、桁数が多いため、Integerだとオーバーフローする可能性があります。

上記のとおり、Use long integersにチェックを入れれば回避はできますが、短い桁数の数値でもlong型になってしまうため、Integerで生成してオーバーフローする部分だけlongに変更するほうがいいと思います。


#Androidで使う時


生成したPOJOをAndroidで使うときの注意点

生成したPOJOには、＠Generated("org.jsonschema2pojo")というアノテーションが含まれていますが、AndroidのJDKには、Generatedアノテーションが入っているjavax.annotationパッケージが存在しません。

ですので、build.gradleに、[Javax.annotation API](http://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.2)を追記することで対処しましょう。

具体的には、build.gradleに、

```
compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.2'
```

を追記します。
JSに=は不要

代入文がなくなってJavaScriptは書けるもん。

```js
(function(foo){
    foo();
})(function(){
    (function(x){
        (function(bar){
            bar();
            print(x + x);
        })(function(){
            (function(x){
                print(x + x);
            })(1);
        });
    })(10);
});
```

ふざけた外観をしてるけれど、このコードは[静的スコープ](https://ja.wikipedia.org/wiki/%E9%9D%99%E7%9A%84%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97)によって説明できる。

元ねたは@eseharaの[変数のスコープを意識することについて、Lisp周辺とClojureのletを利用して考える - Line 1: Error: Invalid Blog('by Esehara' )](http://bugrammer.hateblo.jp/entry/2015/06/16/190142)。素晴らしい記事なので、みなさん読むべき。


## 練習問題

代入文を使った式を`=`なしの形式に変換してみよう。

## あとがき

このコードを理解できれば、一部のプログラミング言語に存在する[let式](https://en.wikipedia.org/wiki/Let_expression)[^1]をマスターできたと友達に自慢できるぞ。(ES2015の仕様書をちゃんと読んでないんだけど、おそらくJavaScriptの`let`とは他人の空似)

## 脚注

[^1]: Lisp, ML, Haskellなどに存在します
【iOS10】Speech Recognition API(音声認識API)の制約まとめ

WWDC2016の[Speech Recognition API](https://developer.apple.com/videos/play/wwdc2016/509/)をまとめてみました。

といっても、実装やできることなどは[こちらの記事](http://qiita.com/shu223/items/ca8e62803e83e396c177)などで触れられていますので、
主に制約などを調べてみました。

## インターネット接続はほぼ必須
[セッション](https://developer.apple.com/videos/play/wwdc2016/509/)の03:30あたりで言及していますが、インターネット接続は必要です。
SiriやKeyboard Dictationと同じ技術要素を使っているので、当然といえば当然です。
ただし、`except some some language and device models`とも言っているため、オフラインでも使える端末と言語の組み合わせはあるようですが、それは明らかにされていません。

## 回数制限あり
09:30あたりの`Best Practice`のスライドで言及していますが、以下の回数制限があるようです。

- 端末につき、1日あたりの回数制限が設定されている
- アプリについても同様に、回数制限が設定されている

日常的に回数制限に引っかかるようであれば、連絡してほしいとのこと。

## お手軽ではない
こちらも同じ画面から。
実装自体は簡単ですぐ使えるようになりますが、バッテリーやネットワーク通信の観点から考えると、安価な処理ではない、ということに留意してほしいとのことでした。

## 秒数についても制限あり
iOS10におけるKeyboard Dictationの制約と同様、連続しての使用は最大1分までとのことです。

## プライバシーについて
当然といえば当然ですが、以下の2つのようなセキュリティ情報やセンシティブな情報については使うべきではないとのこと。

- パスワード
- 健康や財務に関する情報

## 参考
- [SpeakToMe: Using Speech Recognition with AVAudioEngine](https://developer.apple.com/library/prerelease/content/samplecode/SpeakToMe)
- [Speech Recognition API](https://developer.apple.com/videos/play/wwdc2016/509/)
Treasure Data 2015サマーインターンに参加した

# はじめに
2015年夏休みにTreasure dataのSummer Internshipに参加しました。
忙しさにかまけて原稿を公開していませんでしたが、今年も[インターンの募集](https://jobs.lever.co/treasure-data/afb8a063-c839-40cf-aa18-f55de83cbae3)がされているようなので今公開します！
インフラ/OSS系と機械学習の枠があり、自分は機械学習の枠で参加したので、インターン中の生活と取り組んだタスクの概要をシェアします。

## 場所など
* 期間：8月3日 - 9月30日
* オフィス：丸ビル34階
* 週5日(11:00 - 19:00)

# インターン生活
インターンを通じて大体以下のようなサイクルで生活していました。

* 11:00 出社
* 12:15あたり お昼ごはん
* 19:30 退社

![インターン飯.jpg](https://qiita-image-store.s3.amazonaws.com/0/95259/2542011e-3894-73c8-0254-a04fc5939bbe.jpeg)

お昼ごはんは無料で食べることができました。
火曜はカレーで、どの曜日もおいしかったです。特に月曜と木曜日が自分は好きでした。
金曜日は外にご飯を食べに行く日で、他のインターン生と丸ビル内にご飯を食べに行ったりしました。

## インターンの雰囲気・環境
インターンの同期は自分の他に２人で、一人は機械学習・fluentd、もう一人はfluentdに取り組んでいました。
インターンが始まった一週目はお互いに緊張してしまい、コミュニケーションをあまりとれていませんでしたが、二人ともとても優秀な学生で、もう少し早い段階で積極的に話せればよかったと思います(笑)

社内のコミュニケーションは日本語でしたが、会議等で英語が飛び交っていました。職場で英語を実務で使っている場所にそれまで入ったことがなかったので、ホントに外資の会社にいるんだ、ヤバい場所に来てしまったと一週目にとても緊張した記憶があります(笑)

社内のコミュニケーションツールとしては、slackやtwitterで連絡することが多いようで、インターン前にtwitterから得ていた印象と比べてエンジニアの方々は静かに作業されている印象でした。

自分も相談した内容が後で参照できるように、主にslackで連絡を行い、口頭の方が早い時にのみ直接話すようにしていました。

# インターン中にやったこと
## Hivemallへの機械学習のアルゴリズムの実装
インターン開始前からメンターの@myuiさんから幾つか論文のお題をいただき、インターン中に自分は2本の論文の実装を行いました。
### Factorization Machines
レコメンデーションなどに使われるアルゴリズムで、回帰と分類をすることができます。
アルゴリズム的にはMatrix Factorizationという行列分解をさらに発展させたようなアルゴリズムで、機会学習系のコンテストで上位の人たちが使っていたりします。
実際の応用先として、[CTR予測](http://qiita.com/myui/items/f726ca3dcc48410abe45) やNetflixなどの動画サイトでのレーティング予測などに使われています。
[論文](http://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf)
### Online LDA
トピックモデリングという文章のトピックを推定する自然言語処理のアルゴリズムです。
文章中の単語の頻度情報を元に単語のクラスタと文章のクラスタを推定します。
インターン中ではベンチマークデータとして20newsを使い、検証を行いました。
[論文](https://www.cs.princeton.edu/~blei/papers/HoffmanBleiBach2010b.pdf)

## 発表
一ヶ月後に中間発表、最終日に最終発表をしました。
中間発表では資料は英語、発表は日本語でしたが、[最終発表](http://www.slideshare.net/NaokiIshikawa/treasure-data-summer-internship-final-report-53364174)では英語での発表になりました。
中間発表、最終発表ともに多くのエンジニアの方々が見に来て下さり、中間発表では予想以上の人数に緊張しすぎてしまいました。
最終発表の方が英語なのである程度言い間違ってもいいという謎の安心感から上手くできたように思います(笑
言いたいことを訛っていてもいいのでスライドを使いながらプレゼンできることが重要だと思います。

# インターン中にあった方が良いと思ったスキル
インターン中から始めると、本来やりたいこと以外のことにコストをかけて勉強しなければならない可能性があるので、インターン中にこれは必要だと思ったことを列挙します。
### Java
HivemallはJavaで書かれているので、Javaが書ける必要があります。
その他、他のライブラリの実装を見るためにC++とPythonも読めると捗ると思います。
### Git/Github
必須だと思います。
インターンが始まってからだと慣れるのに時間がかかると思うので、慣れていない場合は事前にやっておくといいと思います。
### 英語
実装するアルゴリズムの論文の理解、週に１回の週報、最終発表(口頭・スライド)に英語が必要でした。
今年はどうなるかわかりませんが、最低限の英語力は必要だと思います。
### SQL
Hivemallのアルゴリズムを実際に動かしてテストする際に必須です。
これもインターンが始まってから勉強し始めると効率が悪いので、慣れていない場合は事前に練習しておくといいと思います。

### データ整形
形式を合わせるために、awkなどがかけると便利だと思います。


# さいごに
初めてのインターンだったので、メンターの方々、特に@myuiさんには非常にお世話になりました。
特にインターン終盤は詰まることが多く、その度に助けていただきました。
OSSに参加する機会はありそうであまり無いものだと思うので、参加する機会を与えてくれるのはとても貴重な経験だと思います。
OSSに関わることができる！お給料も一日２万！飲み物飲み放題！夜景が綺麗すぎる！と最高すぎるインターンなので行かない理由が見つかりません！
今思い出しても去年一番濃い時期を過ごせました！Treasure Dataの方々本当にありがとうございました！
フォームでよく使う都道府県マスタテーブル作成用SQL

HTMLべた書きではなく、PHPなどでフォームを作りたい人は、よく使うと思います。

	insert into prefectures (pref_id, pref_name) values (1,'北海道');
	insert into prefectures (pref_id, pref_name) values (2,'青森県');
	insert into prefectures (pref_id, pref_name) values (3,'岩手県');
	insert into prefectures (pref_id, pref_name) values (4,'宮城県');
	insert into prefectures (pref_id, pref_name) values (5,'秋田県');
	insert into prefectures (pref_id, pref_name) values (6,'山形県');
	insert into prefectures (pref_id, pref_name) values (7,'福島県');
	insert into prefectures (pref_id, pref_name) values (8,'茨城県');
	insert into prefectures (pref_id, pref_name) values (9,'栃木県');
	insert into prefectures (pref_id, pref_name) values (10,'群馬県');
	insert into prefectures (pref_id, pref_name) values (11,'埼玉県');
	insert into prefectures (pref_id, pref_name) values (12,'千葉県');
	insert into prefectures (pref_id, pref_name) values (13,'東京都');
	insert into prefectures (pref_id, pref_name) values (14,'神奈川県');
	insert into prefectures (pref_id, pref_name) values (15,'新潟県');
	insert into prefectures (pref_id, pref_name) values (16,'富山県');
	insert into prefectures (pref_id, pref_name) values (17,'石川県');
	insert into prefectures (pref_id, pref_name) values (18,'福井県');
	insert into prefectures (pref_id, pref_name) values (19,'山梨県');
	insert into prefectures (pref_id, pref_name) values (20,'長野県');
	insert into prefectures (pref_id, pref_name) values (21,'岐阜県');
	insert into prefectures (pref_id, pref_name) values (22,'静岡県');
	insert into prefectures (pref_id, pref_name) values (23,'愛知県');
	insert into prefectures (pref_id, pref_name) values (24,'三重県');
	insert into prefectures (pref_id, pref_name) values (25,'滋賀県');
	insert into prefectures (pref_id, pref_name) values (26,'京都府');
	insert into prefectures (pref_id, pref_name) values (27,'大阪府');
	insert into prefectures (pref_id, pref_name) values (28,'兵庫県');
	insert into prefectures (pref_id, pref_name) values (29,'奈良県');
	insert into prefectures (pref_id, pref_name) values (30,'和歌山県');
	insert into prefectures (pref_id, pref_name) values (31,'鳥取県');
	insert into prefectures (pref_id, pref_name) values (32,'島根県');
	insert into prefectures (pref_id, pref_name) values (33,'岡山県');
	insert into prefectures (pref_id, pref_name) values (34,'広島県');
	insert into prefectures (pref_id, pref_name) values (35,'山口県');
	insert into prefectures (pref_id, pref_name) values (36,'徳島県');
	insert into prefectures (pref_id, pref_name) values (37,'香川県');
	insert into prefectures (pref_id, pref_name) values (38,'愛媛県');
	insert into prefectures (pref_id, pref_name) values (39,'高知県');
	insert into prefectures (pref_id, pref_name) values (40,'福岡県');
	insert into prefectures (pref_id, pref_name) values (41,'佐賀県');
	insert into prefectures (pref_id, pref_name) values (42,'長崎県');
	insert into prefectures (pref_id, pref_name) values (43,'熊本県');
	insert into prefectures (pref_id, pref_name) values (44,'大分県');
	insert into prefectures (pref_id, pref_name) values (45,'宮崎県');
	insert into prefectures (pref_id, pref_name) values (46,'鹿児島県');
	insert into prefectures (pref_id, pref_name) values (47,'沖縄県');