OmniAICreator/Qiita-1.07M huggingface dataset:
日本はプログラミング言語の面でもガラパゴス化しているのかもしれない

ここ最近プログラミング言語について調べて[こんな記事](http://qiita.com/blog3nt/items/c84b95ff3c0045416ac3)を書きました。この過程で気づいたプログラミング言語分野でのガラパゴス化について説明します。
注：この記事はプログラミング初心者が日米のランキングの違いについて、理由を推測した記事です。必ずしも正しいとは言えません。誤りがあれば訂正しますのでコメントをください。
##日本では統計ができる言語の地位が低すぎる
まずは[こちらの記事に書かれた言語のランキング](http://spectrum.ieee.org/computing/software/the-2015-top-ten-programming-languages)をお読みください。英語が分からなければ途中にあるランキングだけで良いです。比較対象の日本のランキングはなかなか見つからなかったのですが、[こんなの](http://paiza.hatenablog.com/entry/2014/10/07/【Javaが恐ろく強い】転職時に希望するプログラミン)がありました。
ある程度極端なものを選んだのですが、アメリカに比べると日本では、Rubyが人気で、統計ができる言語（R、Pythonなど）が不人気である、という結論になります。これはまずいんじゃないか、というのが今回のテーマです。
###Rubyが人気だけど、実際どうなの？
日米共通でRuby人気の理由はRuby on Railsでしょう。Railsはすごく簡単にWebサービスを作れるフレームワークです。Railsの登場によってRubyは地位を挙げました。
そのRubyがアメリカ以上に日本で好まれる理由は、日本人が作った言語であり、日本語の情報が充実していることがあげられます。アメリカにおいてPythonが果たしている役割の一部をRubyが担ってきたと言っても良いかもしれません。追記：Pythonはマルチバイト文字が扱いづらいのを忘れていました。それがためにPythonの代わりにRubyが流行ったのかもしれません。
日本におけるRuby人気は理由がわかりますし、もともとRubyの技術者が多かったおかげでRailsの恩恵をうけられました。しかし、問題は次です。
###統計のできる言語の地位が低い
アメリカのランキングでは、R、Pythonが上がっていますが、この２つの言語の地位が低いのが日本の特徴です。
####２つの言語の特徴
Rは、統計専門の言語で、正確に言うとプログラミング言語ではないらしいです。学問分野ではまだまだ現役ですが、ビジネス分野ではPythonに取って代わられつつあります。
Python：個人的に一番ホットな言語です。位置付けは統計のできるプログラミング言語。統計だけを見ればRに劣っていても、Rにはできない実装ができるのが強いです。
####統計のできる言語が弱いことの問題点
今最もホットな分野のひとつが統計です。なぜなら最近注目を集める機械学習・データサイエンスなどにおいて基本的なツールが統計だからです。その統計ができる言語が日本において人気がないということはつまり、日本が統計を扱う分野で遅れているということです。日本まずいんじゃないかなと。特にPython技術者が少ないことで、人工知能分野に遅れをとってしまうかもしれません。

追記：Matlabが選択肢に上がっていないことからMatlabに関する記述を削除しました。また、あまり厳密なデータに基づいた議論ではありませんのでご注意ください。今ホットっぽいPython日本では人気ないけど大丈夫だろうか、というのが記事を書いた動機なので。
CSSで三角形や矢印を簡単に作成する【CSS三角形作成ツール】

ただのツールの紹介になってしまうのですが、手軽でびっくりしたので書いておきます。

こちら。
[CSS三角形作成ツール](http://apps.eky.hk/css-triangle-generator/ja)


<img width="811" alt="スクリーンショット 2016-04-03 21.34.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/110510/c1d598c6-6534-c4e3-e183-7b9a9383e163.png">

これだけ。
LibreOffice BASE は使えるか？ (4)  リストボックスをDBからひっぱってくる

多段階でリスト一覧を作りたい場合があります。

都道府県→市町村　とデータを絞り込むような場合です。
都道府県を選ぶと、その都道府県内の市町村の一覧のリストボックスを出したい
ようなことは多々ありますね。

フォームの指定だけではできないようですが、マクロをかませると可能です。
抽象的な表現ですが、次のようにすると可能です。

リストボックスのコントロール（市町村）のデータのタブから、リストの内容の種類でSQLを指定しておきます。リストの内容にSQLを書いておくと実行してくれます。都道府県のみの一段選択なら、マクロ不要です。

リストの内容は、listsource という名称のプロパティですが、配列なのが罠です。最初の一つ目だけしかつかっていないようです。複数使うこともあるのでしょうか？

それで、マクロで、a(0)="select なんとか" をつくり、
市町村.listsource = a として入れ替え完了です。

具体的なコードはサンプルのDBをつくってから、おいおいアップする予定です。
Ubuntu をWindows7にインストール、Ubuntuの設定など

備忘録がてら書いていきます。

##Windows 7 で準備すること
###パーティションの作成
Cドライブに80GBほど、Dドライブに1TBほどをUbuntu用に確保。

###Ubuntuインストーラディスクを作成
Ubuntu公式から、.isoファイルをダウンロードし、DVDに書き込み。

##Ubuntu インストール
先ほど作成したディスクを入れて、再起動し、Boot Menuからインストール。
インストール時の設定は、こちらの記事を参考にした。
http://satomablog.blog.fc2.com/blog-entry-6.html

言語は英語を選択
Swap:メモリ容量の１倍〜2倍ぐらい→20GB
/(root):10〜20GBぐらい必要→余裕を見て40GB
/boot:500MBぐらい→1GB
ここまではCドライブに作成し、/homeはDドライブを指定。

###セキュリティソフトなど
Windowsと行ったり来たりする場合は危険性があるということで。
Update ManagerでUpdateした後に
下記記事を参考にFirewall configuration と ClamTK をインストール。
http://www.isl.ne.jp/pcsp/windowsxp_ubuntu/wxub_004.html

##Ubuntuを快適にするためにその他いろいろと
###Google Chrome
本家サイトより、.debをダウンロードし、インストール。
###日本語入力
Mozcをインストール。

`sudo apt-get install ibus-mozc`

`ibus-daemon -drx`
ibusを再起動して、
`ibus-setup`
設定のinput methodのタブでJapanese(Mozc)を追加。
画面右上のSystem settingsからText Entryで、Japanese(Mozc)を追加。

###テキストエディタ
とりあえずemacs。
`sudo apt-get install emacs`

###キーボード設定
[こちら](http://qiita.com/ktyubeshi/items/847b05b7879e2f45da54)のサイトを参考に設定。
`sudo dpkg-reconfigure keyboard-configuration`

Text Entryで、Japanese（OADG109A)としてもOK。

とりあえずこんなもんかな。
fluctで任意のregionにデプロイする方法

fluctでs3のオブジェクト触りたい場合にデフォルトだとus-east-1にデプロイされちゃうので
なんとかならないかな、と思って検索したら誰も言及されてなかったのですが
ソース見たらすぐでした

これでオッケー、node.js初めて触った感

```js:package.js
{
  "name": "yourappname",
  "private": true,
  "fluct": {
    "accountId": "WRITE_YOUR_AWS_ACCOUNT_ID",
    "region": "ap-northeast-1",
    "restapiId": null,
    "roleName": "WRITE_IAM_ROLE_NAME"
  }
}
```
C++例外処理


C++での例外処理をテストしてみた。

```cpp

#include <iostream>
#include <stdexcept>


class NotAllowedException : public std::runtime_error
{
public:
    NotAllowedException(std::string const& error)
    : std::runtime_error(error){}
};

class Kid{
public:
	Kid():homeWorkDone(false){}
	bool homeWorkDone;


	void playVideoGame(){
		try{
			if(!homeWorkDone) throw NotAllowedException("Do homework first");
		}
		catch (const NotAllowedException &e){
			std::cout << e.what() << std::endl;
		}
	}
};

int main(){
	Kid kid;
	kid.playVideoGame();
	return 0;
}
```
std::runtime_errorをサブクラス化したクラスを作り、宿題をしないでゲームしようとすると、例外が投げられるようにしてみた。

当然これはmainの方にtryとcatchを書くこともできる。

```cpp

class NotAllowedException : public std::runtime_error
{
public:
    NotAllowedException(std::string const& error)
    : std::runtime_error(error){}
};

class Kid{
public:
	Kid():homeWorkDone(false){}
	bool homeWorkDone;
	void playVideoGame(){
		if(!homeWorkDone) throw NotAllowedException("Do homework first");
	}
};

int main(){
	Kid kid;
	try{
		kid.playVideoGame();
	}
	catch (const NotAllowedException &e){
		std::cout << e.what() << std::endl;
	}
	return 0;
}
```
こうする事によって例外を発生する可能性のあるKidクラスのメンバ関数を使った時に、クラスを使う人に例外発生時の対処を委ねる事ができるが、まったくtry catchを書かなくてもコンパイルが通ってしまうという問題がある。try-catchなしで、例外を発生させられたら、uncaught exceptionでプログラムが止まる。

でも、このやり方だと書くの忘れそう。Swiftのように、例外処理が起こりえるところで、try-catchをかかないとコンパイルが通らないとかいうふうにできないのだろうか。
Python3のmap等の生成物(イテレーター)・丸括弧でのジェネレーター内包表記は使い捨て

#問題のPythonスクリプト(Windows版Python3.5)

```py3
from sys import stderr
from copy import copy
N = 5
L1 = list(range(1,N + 1)) #[1,2,3,4,5]
print("L1 =", L1, file = stderr)
L2 = map(lambda i: i ** 2, L1)
L3 = map(lambda i: i ** 2, L1)
L4 = copy(L2)
L5 = [i ** 2 for i in L1]
L6 = list(map(lambda i: i ** 2, L1))
print("L2 =", list(L2)) #[1,4,9,16,25]
print("L2 =", list(L2)) #[1,4,9,16,25]・・・だと思うじゃん？？？
print("L3 =", list(L3)) #[1,4,9,16,25]
print("L4 =", list(L4)) #[1,4,9,16,25]・・・だと思うじゃん？？？
print("L5 =", list(L5)) #[1,4,9,16,25]
print("L5 =", list(L5)) #[1,4,9,16,25]
print("L6 =", list(L6)) #[1,4,9,16,25]
print("L6 =", list(L6)) #[1,4,9,16,25]
print("L1 =", L1)
```

#実行結果

```text
L1 = [1, 2, 3, 4, 5]
L2 = [1, 4, 9, 16, 25]
L2 = []
L3 = [1, 4, 9, 16, 25]
L4 = []
L5 = [1, 4, 9, 16, 25]
L5 = [1, 4, 9, 16, 25]
L6 = [1, 4, 9, 16, 25]
L6 = [1, 4, 9, 16, 25]
L1 = [1, 2, 3, 4, 5]
```

#これからわかったこと
これから分かることは、**mapで生成したオブジェクトへのアクセスは一度だけ有効である**(`L2`・`L3`)ということです。**しかも、`copy.copy`で浅いコピー(`L4`)をしても無駄でした。**何回もアクセスするときは**リスト内包表記**を使う(`L5`、ただし**外側は角括弧**)か、**即座にリストorタプル化**(`L6`)すべきですね。**mapオブジェクトの中身をデバッグで表示しなければならない時、このような特性によるデバッグ時のみの原因不明のバグにハマるかもしれません。**

コメント欄での指摘がありましたが、**丸括弧でジェネレーター内包表記を行うと、map同様使い捨てになります。**

#mapの使いどき
基本的に生成してからのアクセスを1度だけ(`L6`のようにリストorタプル化することも含む)にすれば`L2`・`L4`のような事態を回避できます。

#他のオブジェクトについて
`range`・`zip`なども似たようなオブジェクトを生成しますが、これらも使い捨て<del>の可能性があります。</del>です。(コメントでの指摘より)複数回アクセスする場合はご注意ください。
HTML5のTableのColumnについて

HTML5のTable Columnについてまとめます。


# `<colgroup>`と`<col>`
col/colgroupで使えるCSSプロパティは以下の通りです。
[CSS2.1仕様書](https://www.w3.org/TR/CSS21/tables.html#columns)

* border
* background
* width
* visibility

注意すべきことは`text-align`プロパティが使えないことです。
非推奨のalign属性では実現できたのにCSSでできないとは、不思議な気がします。
MDNのサイトによると、
>`<td>` 要素は `<col>` 要素の子孫ではないため、プロパティを継承しません。

らしいのですが、いまいち納得できません。align属性だったときは「子孫」だったということ？
https://developer.mozilla.org/ja/docs/Web/HTML/Element/col　

ちなみに列に`text-align`を使いたい場合、セル結合していなければ`td:nth-child(an+b)`でできます。
セル結合している場合は、colspanの属性セレクタで実現できるようですが、方法は分かりません。



# 列幅の指定
TODO 執筆予定

# 列の非表示
TODO 執筆予定
2016年から始める Google App Engine for Go

ここの記述はすべてOSX10.11.4環境でのものです。

## Goのインストール

```bash
$ brew install go
$ go version
go version go1.6 darwin/amd64
```

goが使用するdirectoryを設定します

```bash
$ echo 'export GOPATH="your go directory path"' >> ~/.bash_profile
```

## 各種ツールのインストール

```bash
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-find-references
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols
```

先ほど設定したdirectoryにsourceがインストールされます

## Editorの設定
* [Visual Studio Code](https://www.visualstudio.com/ja-jp/products/code-vs.aspx)を使います
* `$ code <directory or file>`でeditorを開けるようにメニューバーからView->Command Paletteを開き、commandを入力して`install ``code`` command in PATH`を選択します
* メニューバーからView->Command Paletteを開き、installを入力して`extensions install`を選択します
* 検索boxにgoを入力して一番上のextension(Go)をインストールします
* `cmd+,`を入力してsetting.jsonを編集します

```json:setting.json
// Place your settings in this file to overwrite the default settings
{
    //-------- Editor configuration --------

    "editor.fontSize": 14,
    "editor.fontFamily": "monospace",
    "editor.renderWhitespace": true,
    "editor.glyphMargin": true,
    "editor.cursorStyle": "block",
    "editor.cursorBlinking": "visible",
    "editor.tabSize": 2,
    "editor.wrappingColumn": 80,

    //-------- Files configuration --------
    "files.autoSave": "afterDelay",
    
    //-------- Go configuration --------
    "go.gopath": "your go directory path",
    "go.formatOnSave": false,
    "go.lintOnSave": true,
    "go.vetOnSave": true,
    "go.formatTool": "goreturns"
}
```

参考: https://marketplace.visualstudio.com/items?itemName=lukehoban.Go

## Google App Engine for Go SDKのインストール

https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go
上からgo_appengine_sdk_darwin_amd64-1.9.35.zipをインストールします。

sdkのpathを通します。

```bash
$ echo 'export PATH="/path/to/sdk:$PATH' >> ~/.bash_profile
注) $PATHを忘れると悲惨なことになるので注意、念のため
```

## 開発

```bash
# directoryを作成します
$ mkdir -p /path/to/develop
$ cd /path/to/develop
$ code /path/to/develop
```

あとは https://cloud.google.com/appengine/docs/go/ の通りに作成すれば出来るはずです。

参考: https://github.com/koichiroo/react-appengine-golang-boilerplate
上は私が作ったものですが、よかったら参考にしてください。
[WIP] Apache Solr Cloudを構築してみる part.2

# SolrCloudとは

公式 wiki
https://wiki.apache.org/solr/SolrCloud

apacheさんが作っているので安心 ?

# 構成

全部で3部構成にする予定

+ Part.1
    + CentOS上にzookeeperを構築する [[前回](http://qiita.com/iganari/items/c31d5a253e38184f23e6)]

+ Port.2
    + CentOS上にSolrを構築する [今回]

+ Port.3
    + CentOS上にSolrCloudを構築する [次回]


# Part.2 Apache Solrを構築する

### 環境

+ arch

```
# cat /etc/redhat-release 
CentOS release 6.7 (Final)
# arch
x86_64
```

### インストール

+ Oracle Javeのインストール

```
# cd /var/tmp/
# wget --no-check-certificate --no-cookies - --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm
# rpm -Uhv jdk-8u45-linux-x64.rpm
```

+ Solrのインストール

http://www.apache.org/dyn/closer.lua/lucene/solr/5.5.0

上からダウンロードして、解凍・インストールを一気に行う。

```text:cmd
# cd /var/tmp
# wget http://ftp.riken.jp/net/apache/lucene/solr/5.5.0/solr-5.5.0.tgz
# tar zxvf /var/tmp/solr-5.5.0.tgz
# sh /var/tmp/solr-5.5.0/bin/install_solr_service.sh solr-5.5.0.tgz
```

インストール後、ブラウザにて「http://${IP}:8983」で、apache solrが確認出来れば、インストール完了。

また、インストール後は`/opt`にインストールされている。

```
$ cd /opt/solr
$ ls
bin          licenses
CHANGES.txt  LICENSE.txt
contrib      LUCENE_CHANGES.txt
dist         NOTICE.txt
docs         README.txt
example      server
```

これは、インストールに使用した`install_solr_service.sh`のデフォルト値であり、明示的に書くと以下のようになる。

```
# sh /var/tmp/solr-5.5.0/bin/install_solr_service.sh solr-5.5.0.tgz -d /var/solr -i /opt/ -p 8983 -s solr -u solr
```


### コアの作成とサンプルドキュメントを作成する

+ coreの作成
    + ※ solrユーザでやらないとコケる。

```
# su solr
$ cd /opt/solr/
$ bin/solr create -c iganari

Copying configuration to new core instance directory:
/var/solr/data/iganari

Creating new core 'iganari' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=iganari&instanceDir=iganari

{
  "responseHeader":{
    "status":0,
    "QTime":3944},
  "core":"iganari"}
```

![core_iganari.png](https://qiita-image-store.s3.amazonaws.com/0/25582/131ad43a-936a-9b01-3446-849939f38a3b.png)


# 細かい説明

構築した際のもっと細かい内容はblogで書いていきます。

http://iganari.hatenablog.com/
[node.js] Macで環境光センサーの値を取得する

簡単なIoT?を試してみたいときや、部屋が暗くなったら通知するなど、Macの環境光を利用できると便利です。
`lux-event`を使うと`node.js`でmacの環境光を取得できます。

## 使い方

npmからインストールします。

```
$ npm install --save lux-event
```

イベント駆動で値を取得できます。

```js
const luxEvent = require('lux-event');
luxEvent.on('change', v => {
	console.log(v);
	// => 120
});
```

`close`を送れば終了します。

```index.js
'use strict';
const luxEvent = require('lux-event');
luxEvent.on('change', v => {
	console.log(v);
	if (v > 300) {
		console.log('まぶしい！');
		luxEvent.emit('close');
	}
});
```

```
154
175
204
279
369
まぶしい！
```

## 参考

- [lux-event](https://github.com/akameco/lux-event)
- [ambient-light](https://github.com/akameco/ambient-light)
IDCFクラウドで秘密鍵なしパスワードでrootでSSHできるようにする【SSH Keyなし】

IDCFクラウドはデフォでは仮想マシン作成で秘密鍵ありでないとログインできません。これをSSHするときrootとパスワードだけで接続できるようにしてみましょう。


#秘密鍵なし手順

[SSH Keyなしで作成した仮想マシンへ接続方法は？](https://www.faq.idcf.jp/app/answers/detail/a_id/195/~/ssh-keyなしで作成した仮想マシンへ接続方法は？)

公式QAにもかいてありますが、少しわかりずらいのとこれだけではログインできませんので解説していきます。

##仮想マシン作成
まずは仮想マシン作成からSSH KEYなしで作成します。

<img width="1027" alt="スクリーンショット 2016-04-03 19.05.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/110510/4aacbf34-c43c-a2f6-9f90-35982171557e.png">

で、作成。２２番ポートをファイアウォール開けてあげても、これだけだとデフォルトだと鍵なしSSH出来ずログイン出来ません。

##コンソールから接続
SSH出来ないので管理画面のコンソールから接続します。

<img width="813" alt="スクリーンショット 2016-04-03 19.09.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/110510/6ea83b7a-0cf7-0499-91db-ea4ea683fdba.png">

root+仮想マシン作成時のメール記載パスワードでログインできます。

ログインできましたら、

```
vi /etc/ssh/sshd_config
```

公式QAの通り以下に変更しますが、これだけでは出来ませんでした。
sshd_config ver1.80の設定になります。

```
【変更前】
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no

【変更後】
PasswordAuthentication yes ←コメントアウト削除
#PermitEmptyPasswords no
#PasswordAuthentication no ←コメントアウト
```

追加でこちらも変更しちゃいましょう。

```
【変更前】
#PermitRootLogin yes

【変更後】
PermitRootLogin yes ←コメントアウト削除
```

rootでログイン許可してあげる必要がありました。
service sshd restartで
これでSSHでrootログインできるようになります。
Raspbian Wheezyでapt-get upgradeできない


まだメンテナンスされているかわからないRaspian Wheezyで久しぶりにupgradeしようとしたらハマった。

```
sudo apt-get upgrade
色々
insserv: warning: script 'supervisord' missing LSB tags and overrides
色々
```

RaspbianというかDebianのupdate-rc.dとinsserv間での起動スクリプトの書き方際によるものっぽい。

今回の場合は、supervisordがおかしいので、起動スクリプトの書き換えで対応する。/etc/init.d/supervisordの冒頭に下記を追加することで、insservに対応可能のはず。

```
#!/bin/sh
### BEGIN INIT INFO
# Provides:          supervisord
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO
```

Raspbisnのパッケージはupdate-rc.dとinsservどっちつかずな起動スクリプトが混合しているようなので、コケたら疑ってみる。
playframeworkでslickを使ってDBにアクセする際にハマったのでメモ

## 概要
playframeworkでslickを使ってDB（メモリ上）にアクセスする際にハマったのでメモ。
実際は、DBにアクセスするのにハマったというよりも、Injectさせようとしてハマったが正しい。

PlayFramework with scalaでDBにアクセスさせるため、いろいろ探しててslickってのがあると知ってそれを使ってみようと思った次第。

## 環境
||version|
|---|---|
|scala|2.11.7|
|activator|1.3.7|
|slick(play-slick)|1.1.1|

## 何が起きたか
とりあえず知っている知識とその辺りを説明してくださっているソースコードを読みながら写経してみた
[play2.4.3 + slick 3.0備忘録](http://qiita.com/rikima/items/8b41758364a91095fa71)
その時のapplication.confの一部とbuild.sbtの一部

```application.conf
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play;MODE=MYSQL"
db.default.username=sa
db.default.password=""

play.evolutions.enabled=true
```

```build.sbt
libraryDependencies ++= Seq(
  jdbc,
  "commons-io" % "commons-io" % "2.4",
  "com.typesafe.play" %% "play-slick" % "1.1.1",
  "com.typesafe.play" %% "play-slick-evolutions" % "1.1.1"
)
```

そのまま実行すると、以下の様なエラーが出た。
CreationException: Unable to create injector, see the following errors:

調べてみたら
https://playframework.com/documentation/ja/2.4.x/PlaySlickFAQ

にremove the Play jdbcとあるのでbuild.sbtから消してみる。

次は、以下のエラーが出た。
ProvisionException: Unable to provision, see the following errors:
No implementation for play.api.db.slick.DatabaseConfigProvider was bound.
  while locating play.api.db.slick.DatabaseConfigProvider

Injectがうまくいってないみたいです。って言われた。
もう少し調べてみる。
https://playframework.com/documentation/ja/2.4.x/PlaySlickMigrationGuide
どうやらdb.defaultは無視されるようだ。代わりにslick.dbs.defaultのようだ。

すると次には
Error in custom provider, java.lang.RuntimeException: driverClassName specified class 'org.h2.Driver' could not be loaded

ほう、とさっきのページを見ると、driverがないので追加しろということなので追加する。

以上修正して、起動するとevolutionができるということが言われたのでよかったよかっためでたしめでたし

最終的にapplication.confとbuild.sbtの一部は以下のとおりになった。

```build.sbt
libraryDependencies ++= Seq(
  "com.typesafe.play" %% "play-slick" % "1.1.1",
  "com.typesafe.play" %% "play-slick-evolutions" % "1.1.1",
  "com.h2database" % "h2" % "1.4.191"
)
```

```application.conf
slick.dbs.default.driver="slick.driver.H2Driver$"
slick.dbs.default.db.driver=org.h2.Driver
slick.dbs.default.db.url="jdbc:h2:mem:play;MODE=MYSQL"
slick.dbs.default.db.user=sa
slick.dbs.default.db.password=""
```
プログラマーでなくてもQiitaに書いてもいいよね！？

#ソフトウェア分野と情報公開
自分はプログラマーじゃなくて、メカ設計者（と言う認識でいる）のだけれど、ソフトウェア分野ではこのような場所でいろいろな技術情報が公開されていることが、かなり技術の進歩に貢献しているように思えるので、他の分野についてもどんどん情報を公開して交流して行けば良いと思う。
#ブログじゃ重いこと
ちょっとしたノウハウをメモするとかは、ブログには書きにくくかったりするので、良さそうな所は無いかなと考えたところ、ここが良さそうだと思ったので、ひょっとしたらここに居着くかもしれない。
RailsにbootstrapをGemを使用せず追加(しかもhonokaで)

# ゴール
* Bootstrap CDNを使用しない
* honokaを使用する
* 綺麗な日本語が見られる

# 使用環境
* RubyMine
* Ruby 2.1.6.p366
* Rails 4.2.6
* Bootstrap (currently v3.3.6)
* Honoka v3.3.6-a
* 7zip (tar.gz系の解凍ができれば何でも良い)

# 準備
##Bootstrap (currently v3.3.6)
[Bootstrap (currently v3.3.6)](http://getbootstrap.com/)
![2.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/6e86f534-82d2-22b5-c161-ddeb0c54ce68.png)
![2-2.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/c372239a-3127-b39f-25a0-f5a73c36128e.png)

##Honoka v3.3.6-a
[Honoka v3.3.6-a](http://honokak.osaka/)
![3.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/94dd6679-fb70-042c-a74d-b1c7d00f0032.png)
![3-5.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/c752c8b0-df2b-a1a4-41e4-27552fd3ca83.png)




# 実装
今回、app\assets以下でも問題はないと思いますが、
今回ファイルの配置は、vendor\assets以下にします。

bootstrap-sass-3.3.6の各種ファイルを移動させます
1. bootstrap-sass-3.3.6.tar.gzを解凍
2. bootstrap-sass-3.3.6\assets\javascripts\以下のファイルをvendor\assets\javascriptsへ移動
![4.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/a546ea21-8d68-3b60-bf90-a5c82701b69a.png)
3. bootstrap-sass-3.3.6\assets\stylesheets\以下のファイルをvendor\assets\stylesheetsへ移動
![5.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/a78eef0b-d5a1-4f35-038d-36f2be460ee4.png)
4. Honoka-3.3.6-a\scss\以下ファイルをvendor\assets\stylesheetsへ移動
![6.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/e33e4a12-2b57-77ad-2259-fa8f6c28df1f.png)
5. ファイル名が紛らわしいのでvendor\assets\stylesheets\bootstrap.scssからvendor\assets\stylesheets\_honoka.scssへリネーム
以下がファイル移動後の構成
![8.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/574ed499-0f80-c86f-617f-6b02defe62c4.png)
6.app\assets\javascript\application.jsに、
【//= require bootstrap.min】と【//= require bootstrap-sprockets】の追加

```js:app\assets\javascript\application.js
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require bootstrap.min
//= require bootstrap-sprockets
//= require turbolinks
//= require_tree .
```

7. app\assets\stylesheetsの【application.css】を【application.scss】にリネーム。(他でscssを使用するため統一する。正確にはもっと正しい理由があるのでしょうけれど)
8. app\assets\stylesheets\application.scssに【*= require _honoka】を追加

```scss:app\assets\stylesheets\application.scss
 *= require _honoka
 *= require_tree .
 *= require_self
```

以上で作業終了

# 差の確認
**Before**
![9.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/22184b2a-187f-6164-e614-85b52499e089.png)

**After**
![10.PNG](https://qiita-image-store.s3.amazonaws.com/0/71588/b797210e-593a-b172-d916-96fc7ac949dd.png)

#所感
簡単なようで、躓きました。意外と記事が少ない。
基本だからこそ少ないのでしょうが、基本を知りたい自分からすればこういう記事がほしいです。
ということで、同じような方がいた時のためにと思いメモを残します。

[honoka](http://honokak.osaka/)だけでなく他のskinでも同様に実施すれば導入できます。
他には、同じ方法で[Umi](http://nkmr6194.github.io/Umi/)と[Nico](http://nico.kubosho.com/)も導入できます。

# BGM(脱線)
仕事やプログラミング中はBGMが大切です。
自分が一番リラックスできることが最高のコードを生み出すと信じています。
そこで、コーンでィング中のおすすめサウンドを紹介します。
記事を書きながら再生しています

* METAL GEAR SOLID V ORIGINAL SOUNDTRACK
* METAL GEAR SOLID 5 ORIGINAL SOUNDTRACK "The Lost Tapes"
* 交響詩篇エウレカセブン -ポケットが虹でいっぱい- MUSIC COLLECTION
* APPLESEED ORIGINAL SOUNDTRACK - COMPLETE EDITION
PowerShellでprofile.ps1に定義した自作関数を一覧表示する

$profileに書いた関数を一覧表示する方法。

`>getFunc` で以下のように表示される

```

CommandName    Help                                         Source
-----------    ----                                         ------
fclone         カレントディレクトリが同じconemuのタブを開く fclone{ $d = $pwd ConEmu.exe /Single -cmd "p...
profile-reload プロファイルスクリプトを再読込する           profile-reload{ . $PROFILE }
```

getFuncの定義は以下の通り。自分はprofile.ps1ファイルをdropboxに入れている つまりps1ファイルのフルパスにdropが入っている関数だけに制限をしている
source項目はおおまかにどんな処理か見れる。大まかなので、改行とかスペース、タブを減らす。ヘルプ用の構文を取り除く、先頭のfunctionの文字を取り除く。

```ps1
function getFunc{
	$a = gci function: | ? ScriptBlock.File -like "" ;
	$list=New-Object -TypeName System.Collections.ArrayList
	for($i = 0;$i -lt $a.count ; $i++){
		if( $a[$i].ScriptBlock.File -match "drop" ){ # ここは任意の値に変更
			$source=$a[$i].ScriptBlock.Ast -replace "\n",""
			$source=$source -replace "<#[\S\s]+#>"," "
			$source=$source -replace "\s+"," "
			$source=$source -replace "^function "," "
			$helpObject = $h = Get-Help $a[$i].Name
			$list += [PSCustomObject]@{
				CommandName = $a[$i].Name
				Help = $helpObject.description.Text
				Source = $source
			}
		}
	}
	$list | Format-Table -AutoSize
}
```

helpの値はこうやって定義する。日本語OK。もちろんファイルはutf16

```ps
function profile-reload{
  <#
  .DESCRIPTION
  プロファイルスクリプトを再読込する
  #>
	. $PROFILE 
}
```


こんな感じで。



profile-reloadをしても変わらない、というか一度定義された関数は再度. $profileしても更新されないっぽい
次はこれをなんとかしたいかな
javascript非同期ファイル読み込みサンプル


readlineとfsはrequireするだけで使える.

test.js

```js:test.js
var file_path = "test.txt"
var rl = require('readline').createInterface({
  input: require('fs').createReadStream( file_path ),
  terminal: false
}).on("line", function(line){
  console.log( "line: " + line )
}).on("close", function(){
  console.log( "Finished file seek" )
})

console.log("Done")
```

test.txt

```test.txt
a
b
c
d
e
f
```

```
% node test.js
Done
line: a
line: b
line: c
line: d
line: e
line: f
Finished file seek
```
ssl_requirementをRails4に対応させる

# 対象読者

既存プロジェクトをRails3から4に上げたいけど、SslRequirementがRails4に対応していないので困っている人。
新規プロジェクトの場合は素直にforce_sslを使いましょう。

# 解決策

Rails4でurl_for_xxxの仕様が変わったためssl_requirementが動かなくなったらしい。
そこにモンキーパッチを当てれば解決。

## 既にやっている人がいた

世界は広いし割りと一般的な問題なので先人がいる可能性は高い。
ということでこちら。オープンソース最高！

https://github.com/szalansky/ssl_requirement


このAuthorの方が以下のコミットログで、
「私はこのリポジトリを削除する気はないけど、あなたのアカウント（またはあなたが所属するorganisation）にフォークして使うのがベストだと思う」と言っているのでそうしましょう。

https://github.com/szalansky/ssl_requirement/commit/adb1e7d9ff66adab448b287ebdca25199afbd7de

## 実際にやってみる

フォークしたらGemfileのssl_requirementの行を以下を変更してbundle installすればOK

```Gemfile
gem 'bartt-ssl_requirement', :require => 'ssl_requirement', git: 'git://github.com/【あなたのgithubアカウント名】/ssl_requirement.git'
```
Arch Linux を Headless PC にインストールする

# 概要
ディスプレイ/キーボードを持たないPC (Intel NUC BOXNUC5PPYH) にArch Linuxをインストールするために行ったことを書きます。

# 前提
* ターゲットとなるPCはディスプレイ、キーボードを持ちませんが、USBでBootできるように設定されている。
* ネットワーク上にはDHCPサーバがあり、適切にIPアドレスが振られる。
* 別PCのVirtualBox上にArch Linuxをインストールし、archisoを使ってsshサーバをデフォルトでenableにしたISOイメージを作る。
* ISOイメージをUSBメモリに書き込み、ターゲットPCで起動する。

# 手順
## Arch LinuxをVirtualBox上にインスールする。
[Arch Linux をゲストにする](https://wiki.archlinuxjp.org/index.php/VirtualBox#Arch_Linux_.E3.82.92.E3.82.B2.E3.82.B9.E3.83.88.E3.81.AB.E3.81.99.E3.82.8B) を参考に、Guest Additionsを入れましたが、よくよく考えてみれば、scpでゲストPCからイメージを取り出すことでもよさそうです。

## archisoのダウンロード
[archiso](https://wiki.archlinuxjp.org/index.php/Archiso) をダウンロードします。

```bash:
pacman -S archiso
```

## 設定ファイルのコピー
relengプロファイルをコピーします。

```bash:
mkdir ~/myarchive
cp -r /usr/share/archiso/configs/releng/ ~/myarchlive
```

## 設定ファイルの修正
~/myarchive/releng/airootfs/root にコピーされたcustomize_airootfs.shにrootパスワードとsshのenableを追加します。

```bash:
vi ~/myarchive/releng/airootfs/root/customize_airootfs.sh
```

下記を追記します。rootのパスワードはpasswordを適切な文字に置き換えてください。

```bash:
echo root:password | chpasswd
systemctl enable sshd.service
```

## ISOイメージを作成
ISOイメージを作成します。時間がかかります。

```bash:
cd ~/myarchive/releng
./build.sh -v
```

## イメージファイルをVirtualBoxのホストPCにコピー
出来上がったイメージファイルをVirtualBoxのホストPCにコピーします。

```bash:
cp ~/myarchive/releng/out/archlinux-2016.03.31-dual.iso /media/sf_test
```

## お試し実行
VirtualBox に別インスタンスを作成して、上記で作成したisoファイルを指定して正常にsshログインできるか試します。
VirtualBox のゲストPCにログインするには、設定 - ネットワーク - 高度でゲストポート22に対するポートフォワーディングを有効にします。

## USBに書き込む
[USBインストールメディア](https://wiki.archlinuxjp.org/index.php/USB_%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2#BIOS.E3.83.BBUEFI_.E3.83.96.E3.83.BC.E3.82.BF.E3.83.96.E3.83.AB_USB) を参考にUSBに書き込みます。

## USBメディアをターゲットPCに接続して起動
USBメディアをターゲットPCに接続して起動します。archisoで作成したイメージが起動するので、DHCPサーバにより振られたIPアドレスにsshでログインすることができます。

```bash:
ssh root@(ターゲットPCのIPアドレス)
```

## Arch Linux を インストール
[ビギナーズガイド](https://wiki.archlinuxjp.org/index.php/%E3%83%93%E3%82%AE%E3%83%8A%E3%83%BC%E3%82%BA%E3%82%AC%E3%82%A4%E3%83%89) を参考にArch Linuxをインストールします。

## sshサーバを有効にする。
ビギナーズガイドを参考にする場合、最後にopensshをインストールしておくのを忘れないでください。

```bash:
pacman -S openssh
```

rootでログインする際には /etc/ssh/sshd_config の PermitRootLoginもyesとしておく必要があります。

## メディアを抜いて再起動
ターゲットPCをシャットダウンし、USBメディアを抜いて再起動します。
HDD上にインストールしたArch Linuxが起動すれば成功です。

# 最後に
サーバとかLinuxの勉強用にNUCを購入しましたが、自宅はnote pcのため専用のディスプレイがなく、ヘッドレスインストールをする予定でした。本当はどこかからイメージをダウンロードしてインストールすればいいかなと思っていたのですが、あまり情報がなかったので、自分でやってみました。
似たような方の参考になれば幸いです。

# おまけ
この記事からおおよそ1年経って、訳あって再インストールしようとしたのですが、NUCがUSBから起動せず、BIOSの設定でBOOT順序を変更しても、保存されなくて悩みました。
調べてみると BOXNUC5PPYH では、BIOSのBoot Configuration の UEFI Boot のところに Boot USB Devices Firstという項目があり、ここをチェックしていなかったのが原因でした。
せっかく、この記事を見直せばいいと思っていたのに、わざわざNUCをdisplayにつなぎ直す羽目になりました(T_T)。
動的なポインタ配列を作って配列管理


動的に生成したいくつかの配列それぞれにアクセスするのにポインタを使おうという試みです。
ちなみに配列の個数は動的、配列のサイズは静的という前提で話を進めます。

##ポインタ配列の使い方

```cpp:
#include <iostream>
using namespace std;

int **seq_array; //ポインタ配列

int main(void){
    
    int p1[3] = {10,20,30};
    int p2[3] = {40,50,60};
    int p3[3] = {70,80,90};
    
    seq_array = new int*[3]; //ポインタの配列を作成
    //配列の先頭ポインタアドレスを格納
    seq_array[0] = p1;
    seq_array[1] = p2;
    seq_array[2] = p3;
    
    cout << seq_array[0]<<endl; //配列p1の先頭アドレス
    cout << seq_array[1]<<endl;
    cout << seq_array[2]<<endl;
    
    cout << *seq_array[0]<<endl; //配列の先頭要素にアクセス
    cout << *seq_array[1]<<endl;
    cout << *seq_array[2]<<endl;
    
    cout << *(seq_array[0]+1)<<endl; //ポインタインクリメントで配列の任意の要素にアクセス
    cout << *(seq_array[0]+3)<<endl; //配列外へアクセスすると初期化されてない値が入る
    
}

```

結果

```bash:result
	seq_array[0] : 10 20 30 
	seq_array[1] : 40 50 60 
	seq_array[2] : 70 80 90 
	Program ended with exit code: 0
```

まずポインタを格納する配列はポインタのポインタとして宣言します。
newでint*型の配列を作成し、各配列への先頭ポインタを格納します。
seq_array[0]、p1ともにint*型です。

配列の要素を参照する際には、まず

``` *seq_array[0] ```
	
で配列の先頭できます。seq_array[0]は配列p1の先頭ポインタを指すので、これにインクリメントすることで任意の箇所の要素を取り出せます。

``` *(seq_array[0]+1) ```


##動的に生成した配列

```cpp:
#include <iostream>
using namespace std;

int **seq_array; //ポインタ配列
int n=10;

int main(void){
    
    int num = 3;//配列の数が決定
    int elm_num = 3; //配列の要素数が決定
    
    seq_array = new int*[num];//ポインタの配列を作成
    
    //配列の先頭ポインタアドレスを格納
    for(int i=0; i<num; i++){
        //先のコードのp1,p2,p3は全て配列seq_arrayの配列とみなす
        seq_array[i] = new int [elm_num]; //ここで配列を作る
        for(int j=0; j<elm_num; j++){
            *(seq_array[i]+j) = n; //i番目の配列の添字jの要素に対して代入
            n += 10;
        }
    }
    
    for(int i=0; i<num; i++){
        cout << "seq_array[" << i << "] : ";
        for(int j=0; j<elm_num; j++){
            cout << *(seq_array[i]+j) << " ";
        }
        cout << endl;
    }
    
}

```

結果

```bash:result
	seq_array[0] : 10 20 30 
	seq_array[1] : 40 50 60 
	seq_array[2] : 70 80 90 
	Program ended with exit code: 0
```

図がかければよかったんですが、

seq_array　というポインタの入った配列を根っことして、
seq_array[i]　で表される配列の先頭ポインタから、i番目の配列の要素にポインタでアクセスするという試みです。


もともと、p1,p2...といった変数名では、配列それぞれにfor文を回す時にどうしよう…となってしまったので、それなら配列使えば、ということでこういうことをしていたら若干複雑になってしまいました…。
そもそもポインタのポインタに対してあまり深く理解していなかったのでいい勉強にもなりました。

書き終わって思いついたけど、配列数や配列の要素数が後に決まる場合ってどうするんだろう。
可変配列に対してはやはりvectorを使うのが丸いのかな。
VS Code 0.10.13の新機能（変更点）

## はじめに
Visual Studio Codeの最新版がリリースされました :tada: :confetti_ball: 。
Build 2016にGAを間に合わせるつもりだったようですが、GA相当の0.10.13をInsidersで提供という変則的なリリースになっています。2016/4/3時点では、[リリースノート](https://github.com/Microsoft/vscode-docs/blob/vnext/release-notes/latest.md)もGithub上でvnextブランチに掲載されている状態です。日本語にもローカライズされているので、今まで二の足を踏んていた方にも導入検証のいい機会ではないでしょうか!?今回も自分が使いそうな新機能に焦点を絞って紹介していきます。

## ローカライズ
ついに日本語化されました :smile: 。英語アレルギーの方がいても、これで推進可能ですね :bowtie:!デフォルトでは、OSの設定言語が適用されます。まだまだ未翻訳部分があったり、コミュニティーからの貢献ができないところがもどかしいですが。。。もちろん、別言語も設定可能です。その際には、`--locale`を設定する必要があります。 

## jsoconfig.jsonの生成
Salsaが出たおかげで、jsconfig.jsonの出番が増えたのではないでしょうか。jsファイルを開いているとjsconfig.jsonを生成するためのアイコンが表示されるようになりました。1から作成しなくてよくなるのでたすかります。
![jsconfig.JPG](https://qiita-image-store.s3.amazonaws.com/0/67429/3076503f-40a9-8315-f305-20af133da190.jpeg)

## TypeScriptとHTML
それぞれフォーマットに関するオプションが追加されました。詳細を書くほどでもないので、公式サイトをご覧ください。なお、TypeScriptに関しては、1.8.9にアップグレードされています。

## エディタ
### 拡張子
ファイルの拡張子を特定言語に関連付けられるようになりました。また、フォルダ単位で関連付けができるようにもなっているようです。拡張子をあえて変更してシステムを動かしている場合には便利そうです（拡張子の変更をどの程度の方が行っているかはわかりませんが、少なくともとも私はであったことがあります）。

■拡張子の関連付け

```
"files.associations": {
    "*.php4": "php",
    "*.php5": "php"
}
```

■フォルダ単位の関連付け

```
"files.associations": {
    "**/somefolder/*.*": "php"
}
```

### インテリセンス
インテリセンスについては、`tab`キーで確定のみになりました。`enter`キーだと確定はされません。

### UTF-8 BOMのサポート
文字通り、エンコーディングに追加されました。`"files.encoding": "utf8bom"`で設定できます。

### 列選択のサポート
`shift + alt`キーを押しながらマウスをドラッグ&ドロップすると列選択ができるようになりました。

## ワークベンチ

### エクステンションアイコン
ステータスバーにエクステンションアイコンが追加されました。クリックするとエクステンション関連の項目がコマンドパレットに表示されます。また、エクステンションに更新があると、アイコンに表示されるようです。

![extention.JPG](https://qiita-image-store.s3.amazonaws.com/0/67429/f68f51e1-f29d-59e4-e0fb-d60703e6594e.jpeg)

### ファイル監視の除外
ファイル監視の対象から特定フォルダなどを除外できるようになりました。ファイル数が多いと、展開に時間がかかったりして効率が悪かったため、便利そうです。

```
// ファイル モニタリングから除外するファイル パスの glob パターンを構成します。この設定を変更すると、再起動が必要になります。始動時に Code が消費する CPU 時間が多い場合は、大規模なフォルダーを除外して初期ロードを減らせます。
	"files.watcherExclude": {
		"**/.git/objects/**": true
	}
```

## 【2016/4/5追記】0.10.14の変更点
Insidersのバージョンが少しだけ上がっていました。[C/C++のシンタックスハイライトのバグ](https://github.com/Microsoft/vscode/issues/4769)と[ローカライズのバグ](https://github.com/Microsoft/vscode/issues/4917)が直されただけしか変更点はありません。

## 【2016/4/12 追記】0.10.15の変更点
Weekly Buildがまた上がりました。[ローカライズ](https://github.com/Microsoft/vscode/issues/5157)、[テレメトリーエラーログ](https://github.com/Microsoft/vscode/issues/5024)、[列選択](https://github.com/Microsoft/vscode/issues/4905)の3点を微修正しただけです。今週はいよいよStable版でもGAが来るはず!!

## 【2016/4/16 追記】1.0.0リリース :congratulations: 
ついにGAされました。
ビルド時にはJSスクリプト中のconsole.logを除去したい


今回も、恥ずかしながら、作業をしていての「失敗」がきっかけの記事になります。

### はじめに / やりたいこと

AngularJSに限らないのですが、スクリプトの中にconsole.logやconsole.traceを埋め込んで動作チェックを行う場合があります。

ただし、LiveReloadやbrowserSyncでのプレビュー時や、手元の環境でのみに限ってはデバッグ目的で有効にしておき、本番環境（リリース環境）では、こういったconsole.logは外してしまいたい。

#### その理由は？

consoleオブジェクトにはいくつか種類がありますが、非推奨のものを使っていたり、ブラウザが対応していないメソッドを利用したりすると、やはりエラーで止まってしまいます。

- 参考:
 - [[JavaScript]使い分けるだけで今すぐデバッグ効率を上げる、consoleオブジェクトの関数](http://qiita.com/kashira2339/items/874f95aaaa59f4a17d3d)

console.tableを使おうと思ったら、古いブラウザでは対応していなくてエラーになるとか、もうほとんど使われることは無いかと思いますが、IE9の場合はconsole.log(...)がJavaScript中に含まれていると、エラーで止まってしまうことがありました...。
（開発者ツールを起動していると問題ないのですが、そうでない場合はエラーで止まる）

また、実際には不要な出力を挟むことで、処理速度が遅くなるのも良くありません。

#### おすすめの記事

もし開発がこれからとか、着手したばかりの場合は、こちらの方法が良いのかなと思います。

- [console.log()を使うときのおすすめ記述方法](http://qiita.com/tonkotsuboy_com/items/27e20373d4fd16406622)
 - console.log()をラップしたメソッドを使って出力
 - 本番環境時にはモードを切り替えることで出力を抑止

JavaScriptに限らず、いろんな言語でも同様にできる方法ですね。私はこちらに気がついたのが恥ずかしながらだいぶ進めた後でした...。

### 使ったもの

さて、上記の方法に気がつかないまま、だいぶ作業を進めてしまったのですが、どうやらブconsole.log関連でエラーになってしまう状況が発生。

ということで、とりあえず調査・確認を目的として、使ってみたのがこちらです。

- [strip-debug](https://github.com/sindresorhus/strip-debug)
- [gulp-strip-debug](https://github.com/sindresorhus/gulp-strip-debug) / 上記のモジュールをgulpで使えるようにしたもの

#### 利用方法

ドキュメントにある通りですが、単体でコマンドラインからでも、gulpの処理に挟むことでも利用できます。

```
$ strip-debug src/app.js > dist/app.js # 単体での場合
```

とすると、jsファイルからconsoleやalertが除去されます。

gulpでの例はこちら。

```
gulp.task('default', function () {
    return gulp.src('src/app.js')
        // ソースのjsをdistにコピーして配置の際に除去
        .pipe(stripDebug())
        .pipe(gulp.dest('dist'));
});
```

私の場合は、gulpでの処理時は、このようにしていました。

- 基本の記述はCoffeeScriptで記載
- ローカル環境でのbrowserSyncでのプレビュー時には、Coffee -> JSの変換時点でもconsole.logは除去しない
- デプロイ用にビルドする際は、Coffee -> JSの変換時にはそのままで、難読化&minify（サイズを小さくする）処理の間に、gulp-strip-debugを挟む

おかげさまで、こちらで目的は達成できました！

＃もし、ビルドはCIで行っているのであれば、処理途中でシェル (perlやsed, awkなど)を挟んでconsole.log / alertを除去するといった方法も取れるかと思います。



### その他の参考

AngularJSの場合は、ログ出力のため、$logサービスが利用できますが、こちらについては、console.log との違いがありますので、下記が参考になります。

- [AngularJSの$logを使用する際に注意する3つの点](http://iwb.jp/angularjs-console-log-provider/)
 - console.logでは、JavaScriptコンソール画面に、出力が埋め込まれている行数が表示されますが、$logでは記述されているファイルと行数がangular.jsのものになってしまいます。

### 雑感

デバッグ目的でのconsole.logやalertの取り扱いは、経験を積んでいればわかってくることかと思います。

恥ずかしながら、わたしはそれまでまったくそういった意識がなかったのと、フロントでのデバッグ経験があまりなかったので、実際にブラウザチェックで不具合に遭遇して、ようやく『ああ、こういう目にあうのね...』と判った次第です。
SharedPreferencesの使い方(応用編)


SharedPreferencesの基本的な使い方は以下をご覧ください。
[SharedPreferencesの使い方(基礎編)](http://qiita.com/YAmi/items/3e5640f365277d70f255 "SharedPreferencesの使い方(基礎編)")

応用編では実際にアプリを作る際にどうやって使ってるの？ってところを書きたいと思います。

私はアプリ独自のPreferenceクラスを作って、そのクラスの中でSharedPreferencesのインスタンスを作ったり、更新や保存ができるようにしています。

## インスタンスの取得方法
SharedPreferencesのインスタンスは下記のような形で取得できるようにします。
Gsonを使っているのはPreferenceクラス自体をJson形式のString型に変換して、保存しちゃおうということです。
Gsonの導入方法や使い方は他の方もたくさん書いているので、そちらを参考にしてください。

```java:Preference.java
public static Preference newInstance(Context context) {
	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
	Gson gson = new Gson();
	String prefsStr = prefs.getString(PREFERENCE_KEY, "");
	if (!prefsStr.isEmpty()) {
		return gson.fromJson(prefsStr, Preference.class);
	}
	return new Preference();
}
```

## 設定データの変更方法
Preferenceクラス自体が設定用オブジェクトとsetter/getterを持っているので、変更する時はそれぞれのオブジェクトのsetterメソッドを呼び出して変更します。

```java:Preference.java
public class Preference {
	private boolean isBool;
	public boolean isBool() {
		return this.isBool;
	}
	public void setBool(boolean isBool) {
		this.isBool = isBool;
	}
}
```

## 設定データの保存方法
変更した内容を保存する用にsaveメソッドも作ります。
前述の通りGsonを使ってPreferenceクラスをJson形式にして保存します。

```java:Preference.java
public void save(Context context) {
	SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
	Gson gson = new Gson();
	prefs.edit().putString(PREFERENCE_KEY, gson.toJson(this)).apply();
}
```

## おわりに
Gsonを利用することによって、String, boolean, int, long, float以外の独自クラスなんかも保存できるようになります。
例えばPersonクラスなんてのを作って保存することも可能ですね。
Androidのデータの保存方法は他にもsqliteなどあるので、どういった情報をSharedPreferencesで持つべきか、持たないべきかみたいな考えはあると思います。
実際に使う時はそういったデータの扱い方も考えた方がいいですね。
[エラー] Symbol not found: _PyUnicodeUCS2_Compare

環境
===
- OSX 10.11.4 ( El Capitan )
- python 2.7.11

エラー
===
scikit-learnとかgensim使おうとimportしたらエラーが出た。

~~~
File "test.py", line 6, in <module>
    from sklearn.feature_extraction.text import CountVectorizer
  File "/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/sklearn/__init__.py", line 57, in <module>
    from .base import clone
  File "/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/sklearn/base.py", line 9, in <module>
    from scipy import sparse
  File "/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/scipy/sparse/__init__.py", line 216, in <module>
    from .lil import *
  File "/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/scipy/sparse/lil.py", line 16, in <module>
    from . import _csparsetools
ImportError: dlopen(/usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/scipy/sparse/_csparsetools.so, 2): Symbol not found: _PyUnicodeUCS2_Compare
  Referenced from: /usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/scipy/sparse/_csparsetools.so
  Expected in: flat namespace
 in /usr/local/var/pyenv/versions/2.7.11/lib/python2.7/site-packages/scipy/sparse/_csparsetools.so
~~~

解決
===
(2016/4/3追記) shuhei_f 様のコメント
>一度```pyenv uninstall 2.7.11```として pyenv で入れた Python を消してから ```PYTHON_CONFIGURE_OPTS="--enable-unicode=ucs2" pyenv install 2.7.11``` とオプションを付けてインストールし直すと正常に動くかもしれません。

で解決した！

とはいえ原因はわからずじまいで気持ち悪いので、しばらくしたらpython入れなおそうかなあ。
Phoenixでテストをwatchして自動テストをする


## About
railsでは[guard](https://github.com/guard/guard)や[guard-rspec](https://github.com/guard/guard-rspec)を使ってファイルの変更をするたびに、テストの自動実行をしていましたが、elixirでも似たようなものがあるのでそれを使ってみたはなし。

__[lpil/mix-test.watch: Because TDD is awesome.](https://github.com/lpil/mix-test.watch)__

ちなみにライブラリを探す時には定番かもしれませんが[awesome-elixir](https://github.com/h4cc/awesome-elixir)としてまとめられているので、この中から探すといいと思います。

## Getting started
`mix.exs`にライブラリを追加して`deps.get`でインストールします

```elixir:mix.exs
defp deps do
  [{:mix_test_watch, "~> 0.2", only: :dev}]
end
```

```bash
$ mix deps.get
```

watchを開始する時は`test.watch`

```bash
$ mix test.watch
mix test.watch

Running tests...
................

Finished in 0.6 seconds (0.4s on load, 0.1s on tests)
16 tests, 0 failures
```

## Running  Additional Mix Tasks
mix-test.watchはテスト成功後に別のmixタスクを実行することもできます。
Guardfileにrspecとrubocopを記述するのと同じ感じです。

rubyでいうrubocopに当たる、credoを動かしてみます。[^1]

[rrrene/credo: A static code analysis tool for the Elixir language with a focus on code consistency and teaching.](https://github.com/rrrene/credo)

最初にインストールします

```elixir:mix.exs
defp deps do
  [{:mix_test_watch, "~> 0.2", only: :dev},
   {:credo, "~> 0.3", only: [:dev, :test]}]
end
```

```bash
$ mix deps.get
```

__注意__：credoなど、追加したタスクはmix_test_watch内で`MIX_ENV=test`として実行されるため、`only: [:test]`がないとライブラリを見つけられず実行できません。最初ここで詰まりました。

Mix.configを書いてtestが成功した後に別のmixタスクが動くようにします。

```elixir:config/dev.ex
use Mix.Config

config :mix_test_watch,
  tasks: ["test",
          "credo"]
```

```bash
$ mix text.watch
```

こんな感じで動きます。
credoは出力が見やすくておすすめです

![](https://gyazo.com/b246b094844182c47cb9bfc80069acc0.jpg)

---
[^1]: mix-test.watchの開発者が作っている[Dogma](https://github.com/lpil/dogma)もあるが、credoの方が出力の見た目がいい
備忘録 - Mac Initialization

## System Update

- OSX

## Web

- [IntelliJ IDEA CE](https://www.jetbrains.com/idea/#chooseYourEdition)
- [Homebrew/brew](https://github.com/Homebrew/brew/)
- [adobe-fonts/source-han-code-jp](https://github.com/adobe-fonts/source-han-code-jp)
- [fisherman/fisherman](https://github.com/fisherman/fisherman)
    - `fisherman` should be install after `fish` installed by homebrew.

## Homebrew

### brew

```bash
$ brew install \
autoconf \
gdbm \
httpie \
mobile-shell \
pcre2 \
rbenv \
tree \
diff-so-fancy \
gettext \
hub \
n \
pkg-config \
readline \
watch \
fish \
git \
jq \
oniguruma \
protobuf \
ruby-build \
wget \
fzf \
go \
mas \
openssl \
python3 \
sqlite \
xz \
gibo \
app-engine-go-64 \
ghq
```

### cask

```bash
$ brew cask install \
appcleaner \
docker \
google-chrome \
karabiner \
atom \
dropbox \
google-japanese-ime \
near-lock \
clipy \
flux \
iterm2
```

### mas

```bash
$ mas install \
405843582 \
441258766 \
409183694 \
408981434 \
408981381 \
529456740 \
411246225 \
443987910 \
928871589 \
568494494 \
803453959 \
411678673 \
409201541 \
497799835 \
682658836 \
409203825 \
1000397973 
```

```
405843582  # Alfred
441258766  # Magnet
409183694  # Keynote
408981434  # iMovie
408981381  # iPhoto
529456740  # CheatSheet
411246225  # Caffeine
443987910  # 1Password
928871589  # Noizio
568494494  # Pocket
803453959  # Slack
411678673  # SourceTree
409201541  # Pages
497799835  # Xcode
682658836  # GarageBand
409203825  # Numbers
1000397973 # Wallcat
```
windows10 アップグレード失敗

次のwindows10はubuntuが動くというので
おもしろそうだから、アップグレードしたんだが
失敗して元に戻した。その顛末

#upgrade
最初は、downloadがうまくいかなかったのだが
やはりセキュリティソフトが変なのかもしれないので
いったん停止して３Ｇをダウンロード

その後は時間がかかるが、まあまあ進んだのだが
最後になって、windows10のロゴが出るんだが、その後
真っ暗でなんにも変らない・・？？
#傷害修復
困って、電源をon/offを繰り返すと、どうも
「傷害修復します」というのが出てきて、ここでいろんな
オプションが選べる。
*デバック、低解像度モニタ、セキィリティしない・・とか
いろいろやったが、あまり変化なく、しかたがなく
最後の手段の「以前のビルドに戻す」を選択

ここのノウハウで重要なのは、真っ暗画面に対して
「電源をon/offを繰り返すと傷害回復画面がでてくる」
ということである。これは、ディスクのアクセスのＬＥＤがちかちか
している最中でも電源offして、無理やり修復画面を有効にする
という力技であるのでが、もしかするとショートカットがあるのかも
しれない
#以前のビルドに戻す
ここでも、とらぶった
「再起動します」といったっきりなにも動かない
３時間は待ったので、無理やり電源off
私のマシンは時々シャットダウンができないことがよくあるので
そのせいだったのかもしれない
その後、また、真っ暗画面に戻るのだが、ここでも電源offで
無理やり傷害画面にしてやると、そこで、
「元のwindowsに戻してます・・」みたいなメッセージがでて
４時間ぐらいほっておいたら治っていた！！

いやあ、助かった

#マイクロソフトの太っ腹
しかし、こんな、品質のアップグレードをよくもまあ、世界に
配布しているなと思ってしまう。
まあ、戦略的にwindows10に移行させたいのはわかるが
もう少しテストをすべきなんじゃないかと思う。

私のマシンはdellのnoteのＮ５０５０なので一般的であると
思うんだが、このマシンでこんな状況ではどうなんでしょうねえ？
まあ、ただ、さっきの「シャットダウンができない」とか
「canonのeset smart security」を使っているという特殊事情
もあったりするんだが、もう少し、ユーザに状況を知らせないと
アップグレードできる人も元に戻すで終わってるんじゃないかねえ？

まあ、今後、もう少し状況をググッて自信がついたら
再トライしてみようかと思っている
Windows でファイルの MD5 や SHA1 ハッシュ値を求める

Qiita 投稿したことなくて試してみたくなったので、数年前の自分のブログからの転載

Linux ならコマンド一発で求められるハッシュ値も、Windows でできないかなと思って試した時のメモです。

## ハッシュ値の求め方

みんな大好きワンライナーです
当時手元に Windows Vista しかなかったので、PowerShell 2.0 で動くようにしています

```ps1
# MD5
[System.Security.Cryptography.MD5]::Create().ComputeHash((New-Object IO.StreamReader "ファイルパス").BaseStream) | % { write-host $_.Tostring("x2") -noNewLine }
 
# SHA1
[System.Security.Cryptography.SHA1]::Create().ComputeHash((New-Object IO.StreamReader "ファイルパス").BaseStream) | % { write-host $_.Tostring("x2") -noNewLine }
```

これが PowerShell 4.0 からは Get-FileHash で一発とか熱いですね

## PowerShell コマンドを右クリックメニューに入れる

Windows だと、コマンドラインでは使いにくいですよね
そこで右クリックメニューに入れます

1. regedit を起動する
2. [HKEY_CLASSES_ROOT]-[*]-[shell] を右クリックして [新規]-[キー]を選択
3.  キーに任意の名前をつける(右クリックした時のメニュー名になる)
4.  3 で作ったキーを右クリックして [新規]-[キー]を選択、名前を commandにする
5.  4 で作ったキー command をクリックして、右のウィンドウにある (規定)をダブルクリックする値のデータにコードを入れる

```ps1
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoExit -command "[System.Security.Cryptography.MD5]::Create().ComputeHash((New-Object IO.StreamReader '%1').BaseStream) | %% { write-host $_.Tostring('x2') -noNewLine }; write-host ''"
```

![regedit.png](https://qiita-image-store.s3.amazonaws.com/0/118961/4ec7978a-022f-bf11-04fb-4a07c220608a.png)
レゴ パワーファンクション 8881 バッテリーボックスの電極の極性

# どういうこと？
LEGO Technic シリーズの上位モデルは「レゴ パワーファンクション」を使ってモータを動かしたりすることができます．

電源の供給には「8881 バッテリーボックス」などを使って電源を取り出して LED を光らせたりモータなどを接続，歯車などで作ったギアボックスなどに動力を入れて目的の動きを作り上げます．

ところでこのスイッチでモータを逆転させたりできるわけですが，どのような極性になっているのかを調べてみました．

# 調査結果

1.5V の単三乾電池を 6 本内蔵しているので，DC 9V ほどで出てきます．

![_DSC2887.jpg](https://qiita-image-store.s3.amazonaws.com/0/5837/d30464d7-e928-28cb-21e6-acb6365b7af8.jpeg)

で，極性の調査結果．

![terminal.jpg](https://qiita-image-store.s3.amazonaws.com/0/5837/90558ec6-c718-7e4a-9c14-497125f06ede.jpeg)

| | |
|:--:|:--:|
| 1 | 2 |
| 3 | 4 |

で表記します．

## スイッチ位置： 左
| | |
|:--:|:--:|
| GND | +9V |
| GND | +9V |

## スイッチ位置： 右
| | |
|:--:|:--:|
| +9V | +9V |
| GND | GND |

# まとめ
端子 2 と 3 の極性はスイッチ位置によらず固定で，1 と 4 が反転します．
スイッチ位置に関係なく極性を保つなら 2 と 3 を，反転するなら 1 と 4 を使用すれば良いと言うことです．
LocalのDBを複製する / Heroku上のDBをローカルのDBに反映 / ローカルのDBをHeroku上のDBに反映

# LocalのDBを複製する方法
#### 1. コピー元のDBをdumpflieというバックアップするためのfileにダンプする
今回はhoge.sqlというfileにダンプしています。

```
mysqldump -u username -p db_name > hoge.sql
```

#### 2. hoge.sqlを使ってコピー先のDBにデータを反映させる。
db_name2にすでにデータが入っている場合は上書きされます。

```
mysql -u username -p db_name2 < hoge.sql
```

# ローカルのDBをHeroku上のDBに反映
#### 1.Heroku上のDBの情報を確認
今回はmysqlを使ってherokuを動かしています。

```
heroku config
``` 
<img width="638" alt="スクリーンショット 2016-04-03 15.22.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/93589/3be1532f-3a7e-9805-55a0-3ac80ed7657b.png">


#### 2. heroku上のDBをdumpfileへダンプする

```
mysqldump --host=hostname --user=username --password=pass db_name > hoge.sql
```

#### 3. ローカルのDBヘコピー

```
mysql -u username -p db_name2 < hoge.sql
```
# ローカルのDBをHeroku上のDBに反映

#### 1. ローカルのコピー元のDBをダンプする

```
mysqldump -u username -p db_name > hoge.sql
```

#### 2. dumpfileを使ってheroku上のDBへ反映

```
mysql --host=hostname --user=username --password=pass db_name2 < hoge.sql
```

# 最後に
自分への勉強も込めて書いてみました。誰かの参考になれば幸いです。

また、個人的に電車などで使える場所で起こす目覚ましアプリ[MapMe](https://play.google.com/store/apps/details?id=com.takusemba.mapme&hl=jp)とNetflixの映画レビューサイト[WhatchaSee](https://whatcha-see.herokuapp.com/)を運営しているので、使っていただけるとありがたいです。
Railsチュートリアルのやり方では、Gravatar画像が表示されないときの対処法


Gravatar画像がRailsチュートリアルの方法で表示されなかったので、gravatarのhelpに表示されている方法で<a href="https://github.com/chrislloyd/gravtastic">gravtastic</a>を使ってやってみました。かなりあっさりできました。


```ruby:Gemfile
gem 'gravtastic'
```

```bash
$ bundle install

$ gem list #=>bundle installされているか確認
```

適用するモデルに以下を記述。基本は`User`や`Member`モデルに記述することになると思います。

```ruby:models/user.rb
class User < ActiveRecord::Base
 include Gravtastic
 gravtastic
 end
```

viewでは以下のように用いる。今回ログイン機能を簡単に提供してくれるgem`devise`で運用していたので、デフォルトで用意されている'current_user'ヘルパーを使って表示しています。適宜インスタンス変数を用いて表示させてください。

```ruby:hoge.html.erb
<%= image_tag current_user.gravatar_url %>

<%= image_tag @user.gravatar_url %>
```

細かい設定もできるようなので、その際は<a href="https://github.com/chrislloyd/gravtastic">gravtastic</a>を見てみてください。
Gmailでよく使うショートカットキー


## 書式設定のショートカットキー

|No.|Windows|Mac|操作|
|---|---|---|---|
|1|Ctrl + Shift + 9|Command + Shift + 9| 引用|
|2|a|a| 全員に返信|


## キーボード ショートカットを有効にする必要のあるショートカット

|No.|Windows|Mac|操作|
|---|---|---|---|
|1|gの次にa|gの次にa| [すべてのメール]に移動|


引用：<a href="https://techub.jp/99714" target="_blank">仕事が爆速になる！Gmailで使えるショートカットキーまとめ | TechHub [テックハブ]</a>

※自分がよく使う操作を順の番号に変更しています。
Kotlin で代数学入門

[Swiftで代数学入門](http://qiita.com/taketo1024/items/bd356c59dc0559ee9a0b)にいたく感銘を受けたので自分でもやってみようと思ったのだが型落ちのWindowsしかなくSwiftが動かない中Javaで少し実装したものの演算子オーバーロードがほしくてKotlinに手を出してみた。

あいかわらず他人の褌なのは笑って許せ、というか元記事様は代数学の実装という志高く勇気あふれる名エントリだがこちらはたんなるコピペ記事なので見知り置け。

[github](https://github.com/ueno-t/algebra-kotlin)

# 群、環、体の実装まで
![2016-04-02.png](https://qiita-image-store.s3.amazonaws.com/0/43992/09582bcf-6663-bace-51e7-cf0c44868a9f.png)
有理数までで満足してしまった。ダイアモンド継承になってる箇所があるけど定義上気にしない。
よく似ていると噂のSwiftとKotlnだけど、どちらも知らない俺がすらすら移植できたのでやはり似ているのでしょうね。以下は移植の際に「んっ？」てなったとこ。

# protocol と interface
Swift ではプロトコルプログラミングが推奨の様子。protocol と struct で分離するのは筋がよさそう。Java でやるには interface と class となる。Kotlin には Object や data class があるが、まぁクラスでいいじゃん（タイプエイリアスがらみは後述）。

```kotlin
interface Ring: AdditiveGroup, Monoid {}
```

```kotlin
class Z(value: Int): Ring {
	...
}
```

# extension
Swift における extension は Java8 以降ならインターフェースのデフォルト実装で実現できる。

```kotlin
interface Group: Monoid {
	...
	// extension
	fun testAssociativity(a: Group, b: Group, c: Group): Boolean {
        return (a * b) * c == a * (b * c)
    }
	...
}
```
残念ながら、Kotlin（というか Java）ではインターフェースでのプロパティ初期化は許可されないので、実装側に追い出されるのであった（後述）。

# 演算子オーバーロード
Swift では演算子を直接指定してオーバーロードできる。標準で用意されている演算子以外も指定可能。
Kotlin ではあらかじめ定義されたメソッドのオーバーロードのみ可能。「*」なら「times」、「+」なら「plus」メソッドを指定する。

```kotlin
	override operator fun times(other: Monoid): Z = this * other
	override operator fun plus(other: AdditiveGroup): Z = this + other	
````

Swift だとブレースと return 節が必要だけど、Kotlin では「=」で直接書ける。良い。

# Self
Swift がいいなと思った一つ目が「Self」。シグニチャで使えるのってすごい良い。

Swift ならシグニチャに「Monoid」は出現しない。

```swift
protocol Monoid: Equatable {
    static func *(a: Self, b: Self) -> Self
    static var identity: Self {get}
}
```

Kotlin だと明示しなくちゃいけない。

```kotlin
interface Monoid {
	operator fun times(other: Monoid): Monoid
	var identity: Monoid
}
```

なので、実装側で下記のような型変換が必要になる。

```kotlin
	override operator fun times(other: Monoid): Q {
		other as Q
		return Q(this.p * other.p, this.q * other.q)
	}
```
むう。

# type alias
Swift でもう一つうらやましいのが型別名。元記事では必要に応じて Int や Double を流用しているけど、現段階では Kotlin は型別名の指定ができない。ので、下記のように型を明示したフィールドを持つことになる。

```kotlin
class Z(val value: Int): Ring {}
```

元記事のように Intger の演算子を流用できないので演算子オーバーロード分はフル記述することになる。プロパティの初期化も実装側に追い出されるため、最終的な記述は下記の通りとなる。

```kotlin
class Z(val value: Int): Ring {
	// alias
	override operator fun times(other: Monoid): Z = this * other
	override operator fun plus(other: AdditiveGroup): Z = this + other	
	override operator fun unaryMinus(): Z = -this
	// extension
	override var identity: Monoid = Z(1)
	override var zero: AdditiveGroup = Z(0)
}
```

# 総論
いくつか Kotlin を dis ってるように書いたがとんでもない。Java 畑育ちからするとエレガントで直感的な良言語でした。並行して scala でも書こうとしたけど、そちらは形にならなんだ。個人的には数ある JVM 言語の中ではとびぬけてしっくりくる気持ちのよい感触だったことを強調する。
Swift は最初 Linux 上の REPL で触ってたけど、ちと制約がきつすぎてお勉強で触るにもまだ早いのう。
お試しでES2015を書く時は、CLIでBabelを動かすと便利

初心者ネタです。すみません。

さくっとES2015を書いて、手元で確認したいときってありますよね。

公式の[Try it out](http://babeljs.io/repl/)をいちいち開くのめんどくさくないですか？ローカルでお手軽にトランスパイルしたくないですか？
そんな人のためのメモです。

## babel-cli

CLIでBabelを動かすには、babel-cliというパッケージが必要です。

```$ npm install babel-cli --save-dev ```

参考：https://babeljs.io/docs/usage/cli/


## preset

さらに、es2015をトランスパイルするにはプリセットが必要です。ここでは、babel-preset-es2015をインストールします。（パッケージ名が長い。）


``` $ npm install babel-preset-es2015 --save-dev ```


参考：http://babeljs.io/docs/plugins/preset-es2015/


## babelrc

.babelrcというファイルを作成します。

```.babelrc
// .babelrc
{
  "presets": ["es2015"]
}
```

## トランスパイル

トランスパイルします。

``` $ babel main.js --out-file index.js ```
<sub>
main.js : ES2015を書いたファイル。
index.js: トランスパイル後のファイル。
</sub>


## 実行

ターミナル上で実行します。

``` $ node index.js ```


以上です。もっと良い方法があればぜひ教えて下さいませ。