OmniAICreator/Qiita-1.07M huggingface dataset:
携帯電話はMVNOと050電話で十分だった

ここ最近の僕の携帯電話についてまとめます。
Y-mobile とか WiMAX とか使ってましたが、ようやく色々解約して MVNO だけになって、月の携帯代が1,400円程度になりました。
頑張ればもっと安くできそうですが、使い勝手の良さを考えると無難な値段のような気がします。

## SIM フリー携帯で MVNO の SIM を使う

MVNO は [iij mio の SMS機能付きSIM](https://www.iijmio.jp/hdd/sms/) を使っています。
3GBで契約しているので月額 1,040円(税抜) になります。

iij mio にしたのはデータ通信量が月間上限しかないのと、ベンチャーよりは予算がありそうなので無難かなと判断したためです。
iij mio にする前は e-mobile の SIM を使っていたのですが、月5GBと1日1GBの通信上限があったので不便でした。

iij mio の SIM は次の3つがあります。(かっこ内は3GB契約での値段です)

- データ通信専用 (900円)
- データ通信 + SMS (1040円)
- データ通信 + SMS + 音声通話 (1600円)

SMS機能付きにしたのは、LINEやTwitterなどのアプリでSMSによる認証が必要になるケースがあるためです。
音声通話は今までもほとんど使っていなかったので契約しませんでした。これについては後で詳しく書きます。

データ通信上限は3GBにしたのは、基本的に建物の中にいる時は Wifi が使えると判断したためです。

## 音声通話について

SIM から音声通話機能を外したので、次の2つの方法で通話しています。

- Facebook Messanger や LINE などのアプリを使っての通話
- 050電話(SMARTalk) での通話

前者については知人との通話で使っています。
この手のサービスが出てきた頃は音割れがひどかったですが、最近は通信状態が良ければまったく問題ありません。
特に Facebook Messanger は新宿駅前のような人が多い場所でも問題なく通話できたのでよかったです。
最近、色々なコミュニケーションアプリが音声通話やビデオチャットに対応しているので、
好みのものを使えばいいと思います。

050電話については、主に店などとのやり取りで電話番号が必要な時のために用意しています。
050電話はIP電話のことで、電話番号が050から始まります。
10社以上のスマホ用IP電話アプリがありますが、僕は [SMARTalk](http://ip-phone-smart.jp/smart/smartalk/) を使っています。

SMARTalk の特徴として、初期費用・月額基本料がありません。
通話料は 8円/30秒 なのでちょっと高いですが、僕は基本的に通話しないので結局安くすみます。

機能面ではAndroid版アプリのデザインがしょぼいですが、着信・発信ともにできるので満足しています。
留守番電話がWebサイトからwavファイルで取得する仕様はちょっと笑いましたw
こういう事ができるのもIP電話の強みでしょうか。

## 使ってみた感想

e-mobile(現: Y-mobile) の音声通話付き SIM を月4,000円程度で使っていた頃と、ほぼ同じ生活をできています。

iij mio は docomo 回線を使っており、結構田舎や山の中にいても繋がります。
本物の docomo の SIM がないので直接比較はできていませんがよく繋がります。
また、SIMの回線を3GB以上使うことはほとんどありませんでした。
私はテザリングもたまにしますが、その際はDropboxの動機を止めたりして気をつけているので、問題ありませんでした。

音声通話については Facebook Messanger をよく使うようになりました。
今まで Facebook Messanger で通話をする発想がなかったのですが、使ってみると普通に電話するのとあまり変わらないので便利でした。
Facebook で繋がっていればわざわざ電話番号を伝える必要なく音声通話できるのはいいですね。
ビデオチャットもわざわざSkypeなどの別アプリを使うことなくできるのはやはり楽でした。
(ITリテラシーが低い人相手でもビデオチャットできるのがよかったです)

050電話については、9割満足していますが、まれに050の電話番号を
バリデーションエラーにするWebサービスがあるので、そういう時つむことがあります。
また、 0120から始まるフリーダイヤルや 110 などの番号にかけられないので、必要な場合ほかの人から電話を借りています。
銀行や保険会社が 0120 の番号しか用意していないことが多いので、困りますね。。。
ただ、そのデメリットを踏まえても 050電話は安いので助かっています。

## おまけ: もっと安くする

しばらく前に so-net が [0-sim](http://lte.so-net.ne.jp/sim/0sim/) というサービスを初めて話題になりました。
こちらの SMS 付き SIM にすれば、月額150円で上記と同じことができます。(ただし月に500MB以下しか使わない場合)

ただ、 0-sim は使ってみた感じ iij mio よりは電波の入りが悪い感じがします。
また、自分の使っている感じやはり月に3GB程度は使っているので、 0-sim より iij mio の方がやすくなりそうです。

0-sim はメインの SIM として使うには結局高くなりそうですが、サブの SIM として使うには良いように思います。
僕の場合、サブの SMS が欲しかったので SMS 付き 0-sim を使っています。
プログラマーズ Good Parts

使うと便利な Good Parts　なサービスを紹介します
----

#### Rollbar
<https://rollbar.com/>

#### Papertrail
<https://papertrailapp.com/>

#### New Relic
<https://newrelic.com>

#### pagerduty
https://www.pagerduty.com/

#### CircleCI
<https://circleci.com/>

#### Trello
<https://trello.com>
環境変数Pathのバックアップ

- PowerShellで、システム環境変数/ユーザー環境変数 両方のPathの値をファイル保存する
- `;`を改行コードで置換したファイルも保存しておくと比較しやすい

```ps1:Backup.ps1
$now = Get-Date
$destDir = "backup/" + $now.ToString("yyyyMMdd_hhmmss")

# システム環境変数のPathを取得
$systemValue = [Environment]::GetEnvironmentVariable('PATH', 'Machine')
$systemFileName = Join-Path $destDir "system.txt"

# ユーザー環境変数のPathを取得
$userValue = [Environment]::GetEnvironmentVariable('PATH', 'User')
$userFileName = Join-Path $destDir "user.txt"

# システム環境変数のPathの";"を改行コードに置換
$systemValue2 = $systemValue.Replace(";", "`r`n")
$systemFileName2 = Join-Path $destDir "system2.txt"

# ユーザー環境変数のPathの";"を改行コードに置換
$userValue2 = $userValue.Replace(";", "`r`n")
$userFileName2 = Join-Path $destDir "user2.txt"

# フォルダーがなかったら作成
if (-not (Test-Path $destDir)){
    New-Item $destDir -Type Directory
}

# ファイル出力
Write-Output $systemValue | Out-File -FilePath $systemFileName -Encoding default
Write-Output $userValue | Out-File -FilePath $userFileName -Encoding default
Write-Output $systemValue2 | Out-File -FilePath $systemFileName2 -Encoding default
Write-Output $userValue2 | Out-File -FilePath $userFileName2 -Encoding default
```
nimデータベース操作(sqlite)

# 概要
nimのデータベース操作をコツコツと。
## 以下メモ
### # 基本操作
```nim
import db_sqlite
block:
  let db = open("mydb.db","user","password","dbname")
  let ddl = @[
    sql"""drop table work""",
    sql"""create table work (id integer,name varchar(50) not null)"""
  ]
  defer:
    echo "db closed"
    db.close()
  # DDLを実行
  for cmd in ddl :
    discard db.tryExec(cmd)
  # レコードを挿入
  db.exec(sql"BEGIN")
  db.exec(sql"insert into work values(?,?)",1,"Mr.スポック" )
  db.exec(sql"insert into work values(?,?)",["2","Mr.ビーン"] )
  db.exec(sql"insert into work values(?,?)",@["3","Mr.サタン"] )
  db.exec(sql"COMMIT")
  # セレクトする
  for x in db.fastRows(sql"select id,name from work order by id desc") :
    echo x
```
```
(stdout)
@[3, Mr.サタン]
@[2, Mr.ビーン]
@[1, Mr.スポック]
db closed
```
### # 基本操作(autoincrementを追加)
```nim
import db_sqlite
block:
  let db = open("mydb.db","user","password","dbname")
  let ddl = @[
    sql"""drop table work""",
    sql"""create table work (id integer primary key autoincrement,name varchar(50) not null)"""
  ]
  defer:
    echo "db closed"
    db.close()
  # DDLを実行
  for cmd in ddl :
    discard db.tryExec(cmd)
  # レコードを挿入
  db.exec(sql"BEGIN")
  # 追加したれコードに自動採番された値を取り出す
  echo "追加されたID=",db.tryInsertID(sql"insert into work(name) values(?)","Mr.スポック" )
  echo "追加されたID=",db.tryInsertID(sql"insert into work(name) values(?)","Mr.ビーン" )
  echo "追加されたID=",db.tryInsertID(sql"insert into work(name) values(?)","Mr.サタン" )
  echo "更新された行=",db.execAffectedRows(sql"update work set name=? where id=?","Mr.ホームズ",3)
  db.exec(sql"COMMIT")
  # セレクトする
  for x in db.fastRows(sql"select id,name from work order by id") :
    echo x
```
```
(stdout)
追加されたID=1
追加されたID=2
追加されたID=3
更新された行=1
@[1, Mr.スポック]
@[2, Mr.ビーン]
@[3, Mr.ホームズ]
db closed
```
### # イテレータテスト
```nim
import db_sqlite
block:
  let db = open("mydb.db","user","password","dbname")
  defer:
    echo "db closed"
    db.close()
  # 爆速セレクトただしぶっ壊れやすいので、すべて取り出すときに利用してね的な事がドキュメントに書いてありました
  for x in db.fastRows(sql"select id,name from work order by id") :
    echo "fastRows=>",x[0],"/",x[1]
  # 動きはfastRowsと一緒だけど遅いです。でも安全。
  for x in db.rows(sql"select id,name from work order by id") :
    echo "rows=>",x[0],"/",x[1]
  # fastROwsとrowsの中間くらい？返却するのは、InstantRow型のオブジェクトでインデクスでアクセス
  for x in db.instantRows(sql"select id,name from work order by id") :
    echo "instantROws=>",x[0],"/",x[1]
```
```
(stdout)
fastRows=>1/Mr.スポック
fastRows=>2/Mr.ビーン
fastRows=>3/Mr.ホームズ
rows=>1/Mr.スポック
rows=>2/Mr.ビーン
rows=>3/Mr.ホームズ
instantROws=>1/Mr.スポック
instantROws=>2/Mr.ビーン
instantROws=>3/Mr.ホームズ
db closed
```
【Atom】Processing用のスニペットを追加するパッケージを作ってみた

この記事のAtomのVersionは1.7.4です
![atom.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/10e98e10-d87e-efb8-bf0b-cf77c8eeb6cd.gif)

# はじめに
Processing(.pdeファイル)用のスニペットを追加するパッケージを作ってみました.

公開するほどのものでもない気がするので、パッケージを作成してAtomへインストールするまでの
過程を記事にまとめてみました。

# 1. 空のパッケージの作成
<img height="500" alt="ファイル名" src="https://qiita-image-store.s3.amazonaws.com/0/44288/b7ae8a3f-51c7-9967-d61d-ffba914d10b4.png">
Package -> Package Generator -> Generate Atom Package を選択


![atom_createpack.png](https://qiita-image-store.s3.amazonaws.com/0/44288/0a42cbc8-db5b-34ac-0175-b289968d117a.png)
名前入力フォームが出てくるのでここにパッケージの名前を入れます。 
(Processing用のスニペットを追加するので processing-snippetsとしました)

<br>
# 2. スニペット用のファイルを追加
![atom_addsnippet.png](https://qiita-image-store.s3.amazonaws.com/0/44288/30a58170-9ca3-cd25-5a98-5314f571da32.png)
新しく snippetsフォルダを作り、その中にprocessing-snippets.csonファイルを作成します
(パッケージ名とcsonファイル名が異なるとスニペットが登録されないので注意)

# 3. スニペットの記述
以下を先ほど作成したcsonファイル内へ記述して保存します.

```processing-snippets.cson
'.source.processing' :
  'for' :
    'prefix' : 'for'
    'body' : """
    for(int i = 0; i < ${1:length}; i++)
    {

    }
    """

  'foreach' :
    'prefix' : 'foreach'
    'body' : """
    for(${1:type} ${2:item} : ${3:colletction})
    {

    }
    """

  'while' :
    'prefix' : 'while'
    'body' : """
    while(true)
    {

    }
    """

  'if' :
    'prefix' : 'if'
    'body' : """
    if(true)
    {

    }
    """

  'if-else' :
    'prefix' : 'ifelse'
    'body' : """
    if(true)
    {

    }
    else
    {

    }
    """

  'switch' :
    'prefix' : 'switch'
    'body' : """
    switch(${1:switch_on})
    {
      default:
        break;
    }
    """
```
for、foreach、while、if、if-else、switchを書いてみました

#4 Atomへパッケージをインストール (Windows)
コマンドプロンプトを開いて ```apm link (パッケージのパス)``` と入力してEnterするだけでインストール完了

![image](https://qiita-image-store.s3.amazonaws.com/0/44288/bde3e74a-91bd-2c7c-9a8e-6a2496b0bc43.png)

# 5. 結果
Atomを再起動させるとで先ほど書いたスニペットが有効になります
![atom2.gif](https://qiita-image-store.s3.amazonaws.com/0/44288/cc663294-01c1-0e77-86ae-afcd9a9aba4a.gif)


#参考
http://minegishi.mods.jp/blog/?p=483
posデータの整形で、ipython使うときに使った事を走り書き

##はじめに
バイトでぐちゃぐちゃのデータを整形しなければならなかったので、そのときのメモです
Rで一月ぐらいにやってた事の走り書きは[こちら](http://qiita.com/Yamashou/items/44bf5fad01a0250a25b4)です。
##import
![スクリーンショット 2016-06-01 21.02.42.png](https://qiita-image-store.s3.amazonaws.com/0/89142/87fe30f4-8049-0ffd-dca6-6f904d52a6f8.png "スクリーンショット 2016-06-01 21.02.42.png")
おなじみのデータ解析ツールのimport

![スクリーンショット 2016-06-01 21.04.00.png](https://qiita-image-store.s3.amazonaws.com/0/89142/9d36d1ec-4159-8dc9-fdff-82358268c149.png "スクリーンショット 2016-06-01 21.04.00.png")
でも、多くのファイルにまたがるデータを扱う事が多いので,
globもimport!!
#pandas
※今回、numpyについては書きません、すみません。
あくまで、データの整形です。names,headerなどはnampyのarrayを使ったほうがいいです。
##ファイルの読み込み
```python
data = pd.read_csv("ファイル名.csv")
```
- pd.read_ファイル形式（）でいろんなファイル形式に対応
- header=-1でheaderを無くせます！
- names = ['1','2','3']などつけると

```python
datas = glob.glob('*')
```
大量のファイルがあるときはこれでディレクトリ内のファイル全て得られます。

pandasの場合呼び出したファイルはnumpyのarrayとなるのではなく、DataFrame型となります。

![スクリーンショット 2016-06-01 21.25.35.png](https://qiita-image-store.s3.amazonaws.com/0/89142/b4714f10-a65f-3132-a21a-51a6c36a0b1a.png "スクリーンショット 2016-06-01 21.25.35.png")
##列、行消去
邪魔な部分のそぎ落としです。

```python
data.drop([1,2])
#行の消去
data.drop([1,2],axis=1)
#列の消去
```
このようにするとその行、列を消す事ができます。

![スクリーンショット 2016-06-01 21.31.15.png](https://qiita-image-store.s3.amazonaws.com/0/89142/8a6a7f9f-8828-b217-1681-526171f188cd.png "スクリーンショット 2016-06-01 21.31.15.png")
##列行の結合


```python
pd.concat([data[1],data[0]])
#行の結合
pd.concat([data[1],data[0]],axis=1)
#列の結合
```
ファイルやデータがたくさんあるときはこれが便利！

![スクリーンショット 2016-06-01 21.40.16.png](https://qiita-image-store.s3.amazonaws.com/0/89142/dd4b2696-cd5e-dfec-71bf-983101553a5c.png "スクリーンショット 2016-06-01 21.40.16.png")

##欲しいデータを持つ行のみにする
欲しいデータだけにする！

```python
data.query("1==2")
```
これで、1という名前の列の値が2のものだけにする事ができる。


![スクリーンショット 2016-06-01 21.47.03.png](https://qiita-image-store.s3.amazonaws.com/0/89142/b008c379-3c62-f3d5-94f3-2df479956da2.png "スクリーンショット 2016-06-01 21.47.03.png")

##同じデータでくっつける
データの関係性を導き出すためのファイル成型時の必須！

```python
pd.merge(data1, data, on='列の名前')
```
これで列の値が同じもの同士でデータをくっつけてくれる。

![スクリーンショット 2016-06-01 21.56.45.png](https://qiita-image-store.s3.amazonaws.com/0/89142/d47a8d2d-dedc-b27b-cd2c-02def3298f62.png "スクリーンショット 2016-06-01 21.56.45.png")
##最後に
ぶっちゃけデータ整形は忍耐が大事！
あとはforなどを使って一気にやるとすぐできます。
numpyのarrayと途中ファイルを作ったりしてうまく列、行の入れ替えなどはしやすいです。
欲しいデータを考えて、それに向かって頑張ってやっていきましょう。
拙いメモを読んでいただきありがとうございました。
ざっくりとこんなこと身についているかリスト(データベース編)

#データベース力ついたかなリスト(Oracleを想定)
□　データベースに接続できるようになった
□　Select文でデータの取得ができるようになった
□　ソートが指定できるようになった
□　Where句に条件指定できるようになった
□　DB独自関数を使えるようになった
□　内部結合できるようになった
□　外部結合できるようになった
□　サブクエリ(Where句)が書けるようになった
□　サブクエリ(From句)が書けるようになった
□　サブクエリ(Select句)が書けるようになった
□　キーを理解できるようになった
□　Indexを理解できるようになった
□　CASE式やDECODEなどで条件分岐を書けるようになった
□　Functionを書けるようになった
□　PL/SQLを書けるようになった
□　トリガーを使えるようになった
□　IN句、EXIST句を使えるようになった
Pythonの文法 - 文字列操作

* 初めてのPython。わからないことをわかったベースで追記していきます。

## 文字列結合

```python
# 間を「+」で連結
message = 'Hello' + ' ' + 'world'

# スペース空けて並べるでも良いらしい。(可読性ぇ…。)
message = 'Hello' ' ' 'world'
```

## 数値を文字列に変換

* そのまま「+」で文字列と結合するとTypeErrorが発生。数値はstr()で変換する。

``` python

#print('test' + 123) # TypeError: Can't convert 'int' object to str implicitly

print('test' + str(123))
```
Unity+AndroidでAdMobを使う際にビルドが出来ないのを解決する

AdMobをUnityで作っている小物アプリに導入しようとしてハマってしまったので誰かのためにと導入手順を残しておきます。
# まずはSDKのダウンロード
これをしないと始まらないので[日本語公式マニュアル](https://developers.google.com/mobile-ads-sdk/docs/games)（諸悪の根源）の少しスクロールしたところにある「プラグインをダウンロード」をクリック。![2016-06-01 08.15.57.png](https://qiita-image-store.s3.amazonaws.com/0/89306/3cab5b24-f60f-dd43-3a48-261fd82a6d8c.png)
そうするとGitHubのページに飛ぶので最新バージョン（記事作成時点ではv3.0.4）の`GoogleMobileAds.unitypackage`をダウンロード
#　Unityへインポートする
Unityを起動して`Assets->Inport Package->Custom Package...`を選択して先にダウンロードしたファイルをインポート
![2016-06-01 15.53.10.png](https://qiita-image-store.s3.amazonaws.com/0/89306/60ace6f0-e6bd-3aa3-8792-80004a40d219.png)
# Android用に設定
ここからの手順ですが日本語公式マニュアルには
>プラグインを使用するには、Google Play 開発者サービス ライブラリをプロジェクトに含める必要があります。

とありますが、**罠です**。
というのも
><android_sdk>/extras/google/google_play_services/libproject/google-play-services_lib/　フォルダ全体を Unity プロジェクトの Assets/Plugins/Android フォルダに追加します。

とありますが、最新Verだとこのフォルダは降ってきません。
じゃあどうするのか？
Ver3.0.0から同梱されている**PlayServicesResolver**を使います。（なんでこれ使うように記述修正してないんだ）

# PlayServicesResolverを使う
このパッケージ自体はSDKのパッケージに含まれているので`Assets -> Google Play Services `という項目が増えているはずです。そこにある`Resolve Client Jars`を実行することで依存関係を含めて必要なファイルが`Assets/Plugins/Android`内に追加されます。
![2016-06-01 21.17.58.png](https://qiita-image-store.s3.amazonaws.com/0/89306/cc42c2c6-7714-9f1f-151f-edbf655639d9.png)
なお同じメニュー内にSettingの項目がありその中に`Enable Background resolution`という項目が存在し、これがONだと自動で追加してくれるらしいのですが・・・ビルド前に手動でやる方が良いかもしれません。（少なくとも私の環境ではうまく動いてなかったし）

# 最後に
ここまでくれば後はManifestファイルをAdMob以外でも使っているなら、`<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />`を追加したりしてからビルドをしてみると途中で止まるということは無いはずです。
Pythonで世界にご挨拶 with IntelliJ


## 前提
* macにpythonとIntelliJがインストール済み。
	* インストール方法とかは[これ](http://qiita.com/LowSE01/items/45d434e1ed0e147fe246)とかを参照。
* version確認

	``` console
	$ python --version
	Python 3.5.1
	```

## プラグインを追加
* 名前そのまま、「Python」ってプラグインがあったのでインストール。

## Pythonプロジェクト作成
* File > New > Project
* [ Python ] を選択し、Project SDKにpythonのパスを指定して [ Next ]をクリック
* [ Next ]をクリック
* プロジェクト名を入力して[ Next ]をクリック。

## Hello World

* プロジェクト直下にソースファイルを作成(ファイル名：test.py)して編集。

	``` python
	# -*- coding: UTF-8 -*-
	
	print("Hello world!")
	```

* メニュー [ Run ] > [ Run ]をクリック
* 実行対象を選択 (ここでは「test」)

	``` IntelliJ-Run-Pane
	/your/path/to/python /your/path/to/python/project/test.py
	Hello world!!
	
	Process finished with exit code 0
	```

* コンソールでやる場合は、プロジェクト直下へ移動してコマンド「python filename.py」実行
	
	``` console
	$  python test.py
	Hello world!
	```
	
* 無事にご挨拶できました。
nim文字列操作(正規表現)

# 概要
nimの正規表現ライブラリの操作コツコツと。
reモジュールではなく、nreモジュールを利用しています。
nreモジュールは、optionsライブラリを利用しているっぽく、ちょっとモダンな雰囲気がする正規表現ライブラリとなっています。
## 以下メモ
### マッチ
```nim
import nre,options,strutils
block:
  echo "1.match=>","abc".match(re"abc")
  echo "2.match=>","abcdef".match(re"^abc")
  echo "3.unmatch=>","abcdef".match(re"def$")
  echo "4.match=>","abcdef".match(re".+def$")
```
```
(stdout)
1.match=>Some(abc)
2.match=>Some(abc)
3.unmatch=>None[RegexMatch]
4.match=>Some(abcdef)
```
### 検索
```nim
import nre,options,strutils
block:
  echo "1.find=>","abc".find(re"abc")
  echo "2.find=>","abcdef".find(re"^abc")
  echo "3.find=>","abcdef".find(re"def$")
  echo "4.find=>","abcdef".find(re".+def$")
```
```
(stdout)
1.find=>Some(abc)
2.find=>Some(abc)
3.find=>Some(def)
4.find=>Some(abcdef)
```
### 分割(split)
```nim
import nre,options,strutils
block:
  let s1 = "Test,test; test. Test."
  echo s1.split(re"[,;.] ?")   == @["Test", "test", "test", "Test", ""]
  echo s1.split(re"([,;.]) ?") == @["Test", ",", "test", ";", "test", ".", "Test", ".", ""]
```
```
(stdout)
true
true
```
### 置換(置換指定のパターンがいくつかありますよ)
```nim
import nre,options,strutils
block:
  # procで置換
  echo "1.replace=>","abc".replace( re"(\w)", proc (m: RegexMatch) : string =
    #var s:string = m.match
    #m.str.toUpper
    m.match.toUpper
  )
  # procで置換
  echo "2.replace=>","abc".replace( re"(abc)", proc (m: string) : string =
    m & "HELLO"
  )
  # 文字列で置換
  echo "3.replace=>","abcdef".replace( re"(?<word1>abc)(?<word2>def)", "[[$word1][$word2]]")
  # doで置換
  echo "4.replace=>", "abc".replace(re"(abc)")
    do (m: string) -> string :
      m & "HELLO"
```
```
(stdout)
1.replace=>ABC
2.replace=>abcHELLO
3.replace=>[[abc][def]]
4.replace=>abcHELLO
```
### オプションテスト(マッチ後のオブジェクト)
```nim
import nre,options,strutils
block:
  var m = "abc123DEF".match(re"([a-z]+)\d+([A-Z]+)").get
  echo "str=>",m.str
  echo "match=>",m.match
  echo "matchBounds=>",m.matchBounds
  echo "captures[0]=>",m.captures[0]
  echo "captures[1]=>",m.captures[1]
```
```
(stdout)
str=>abc123DEF
match=>abc123DEF
matchBounds=>(a: 0, b: 8)
captures[0]=>abc
captures[1]=>DEF
```
### iteratorサンプル
```nim
import nre,options,strutils
block:
  let line = "123 456 789"
  for m in line.findIter(re"\d+") :
    echo m.match
```
```
(stdout)
123
456
789
```
yuicompressorのPromise対応

## 問題
node.jsから [yuicompressor - npm](https://www.npmjs.com/package/yuicompressor) を使ってファイルを圧縮しようとした時、Promiseを使用しているスクリプトファイルでエラーが発生

```js:ptest.js
new Promise(function(resolve, reject){
}).then(function(){
}).catch(function(){
}).finally(function() {
});
```

```text:Output
[ERROR] in ptest.js
  6:8:missing name after . operator
[ERROR] in promise-test.js
  1:0:Compilation produced 1 syntax errors.
org.mozilla.javascript.EvaluatorException: Compilation produced 1 syntax errors.
    at com.yahoo.platform.yui.compressor.YUICompressor$1.runtimeError(YUICompressor.java:172)
    at org.mozilla.javascript.Parser.parse(Parser.java:396)
    at org.mozilla.javascript.Parser.parse(Parser.java:340)
    at com.yahoo.platform.yui.compressor.JavaScriptCompressor.parse(JavaScriptCompressor.java:315)
    at com.yahoo.platform.yui.compressor.JavaScriptCompressor.<init>(JavaScriptCompressor.java:536)
    at com.yahoo.platform.yui.compressor.YUICompressor.main(YUICompressor.java:147)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.yahoo.platform.yui.compressor.Bootstrap.main(Bootstrap.java:21)
```

githubのissuesにも上がっていた
https://github.com/yui/yuicompressor/issues/203

## 対応

githubのソース上では対応済みでnpmにpublishしていないので、githubのソースをビルドしてjarファイルを作成する。
https://github.com/yui/yuicompressor/pull/225


#### 準備
JDKとantをインストールしてパスを通しておく

#### ビルド + 置き換え
```
$ git clone https://github.com/yui/yuicompressor.git
$ cd yuicompressor
$ ant
Buildfile: /home/user/github/yuicompressor/build.xml
略
BUILD SUCCESSFUL
Total time: 1 second

# node_modules下のjarファイルを置き換え
$ cp ./build/yuicompressor-2.4.8.jar /path/to/app/node_modules/yuicompressor/build/
```
めざせpythonライブラリマスター （６）hack-exe

#【ライブラリ説明】
　映画に出てくるようなハッキングの気分が味わえます。

#【準備】
　windows8.1のAnacondaターミナルでは実行できなかったため、
　centosで実行しました。

#【プログラム】
　hack.exe {サイトURL}

#【結果】
　<blockquote class="twitter-video" data-lang="ja"><p lang="und" dir="ltr"><a href="https://t.co/mfF2bACVRV">pic.twitter.com/mfF2bACVRV</a></p>&mdash; nobu (@AlgebraNobu) <a href="https://twitter.com/AlgebraNobu/status/737974031366815744">2016年6月1日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

#【参考サイト】
　[hack-exe](https://pypi.python.org/pypi/hack-exe/0.2)
　[github](https://github.com/gardaud/hack-exe)
使用dispatchEvent


对于使用document.addEventListener方法绑定的事件，需要使用dispatchEvent来手动触发事件

onchange事件的例子

```javascript

if ("createEvent" in document) {
  var evt = document.createEvent("HTMLEvents");
  evt.initEvent("change", true, true);
  theElement.dispatchEvent(evt);
} else {
  theElement.fireEvent("onchange");
}


```

[demo](http://codepen.io/dichao/pen/QEwMGR)
从命令行打开sublime方法。以sublime2为例。

参考https://segmentfault.com/q/1010000002397241

### 方法一

第一步：查看$PATH

```bash
echo $PATH
```
第二步：将sublime的link复制到$PATH中，这里我们选择/usr/local/bin/

```bash
ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl
/usr/local/bin/subl
```

搞定。可以用subl打开文本了。


### 方法二
`vi ~/.bash_profile`。在文件的末尾添加

```
alias subl="open -a Sublime\ Text\ 2"
```

保存后执行`source ~/.bash_profile`，就能subl打开文本了。


### 总结
但是方法二有个问题，即不能用subl打开一个不存在的文件。而第一个方法可以做到。所以使用第一个方法就好。
tmuxでリモートでCLI画面を共有する方法

#前置き
データセンタや別オフィスでリモート作業対応しているときに、ダブルチェックしてほしいなあと思うときがある。
危険な内容のときは電話で読み合わせをしてコマンドを実行することもあるが、正直電話なんかじゃなくて画面見た方が、間違いは起こりにくいよなあと思うことがしばしば。
tmuxでさくっとできると書いてあったので忘備録して残しておく。

#tmuxでの実現方法
作業者は踏み台サーバでtmuxを起動する
`tmux new -s 作業名とか`
立ち上げたtmuxのウィンドウから、作業対象のサーバにログインし作業を実施する。

確認者は踏み台サーバにログインしtmuxをRead Onlyで起動する。
`tmux attach -t 上記で指定したセッション名 -r`

確認者は作業者が入力する内容を確認して間違いないかチェック！

#別方法での実現
##teeコマンド
teeコマンドでログに出力して、確認者はログをtailして確認する
`XXXX | tee -a log.txt`
標準エラーも出力する場合には2>&1を忘れずに。
この方法は都度 teeしないといけないので面倒くさそう

##scriptコマンド
scriptコマンドでログを出力して、確認者はログをtailして確認する
`script -af test.log`
※-aは追記,-fは都度フラッシュする
ここで注意するべきは-fオプションをつけないと、
exitコマンドで終了しない限り出力ファイルに反映されないので、
tail -fしていても全く状況はわかない。
-fオプションで出力すればほぼリアルタイムで状況を確認できる。
この方法はそこそこ使えそう
データサイエンスに入門してposデータを解析するためのR走り書き

###はじめに
バイトでposデータの解析をしなきゃいけなくなり、何も知らなかったので色々あさって、Rで使ったものをメモしたものです。
[データサイエンス入門](http://7net.omni7.jp/detail/1106423904)を読んでバイトで使ったものです。

####- csvファイル読み込み
     read.csv(AA,.header=T,stringsASFactors=F)



#### 2つのデータをくっつける
    merge(A,B,by=c(“XXX”))
    データＡとデータBをXXX という項目の内容が同じものでたばね、くっつける
#### NA時の処理
     AA$BB[is.na(AA$BB)] <-0
     AAのBB列のデータがNAなら0を代入
#### 列処理
    AA$CC <- substr(AA$BB,1,4)
    AAのBB列のデータに対して、先頭1~4文字まで抜き出し、その内容をAAのCCデータ項目に入れる
#### グループ化と合計値
    ddply(AAA,.(B,C),summarize,YYY=sum(XXX))
    データAAAの項目B、Cをグループ化してXXX項目の合計値をグループ化した後のYYYに代入
#### 条件分岐
    ifelse(AA == BB,”XX”,”YY”)
    もしAA==BB（ここには条件式が入る）なら、XXを記入、そうでなければ、YY を記入する
####クロス集計関数
 	table(AAA[,c(“XX”,”YY”)])
    AAAというデータの項目XXとYYのクロス集計を行い、画面に出力する
####n重クロス集計
   	dcast(AAA,XX~YY+ZZ,value.var=“CCC”,length)
   	AAAというデータから縦軸XX・横軸YY×ZZのクロス集計を出す、そして、その集計の中の値CCCの数をカウントする
    
###reshape2パッケージ
####グラフの書き方
#####ggplot2 
	きれいなグラフを簡単に合理的に 
#####X^2検定
    chisq.test(AAA,BBB)
    AAAとBBBの差を出す
###回帰分析
####lm(A~. , data= ZZ[, c(“A”,”B”,”C”)])
   	『ZZデータの項目A,B,Cを使って回帰分析する』という、この分析で利用するデータの指定をdata=で明記
     その前の部分で回帰モデルにするかを明記
     [A ~.]は『A=B+Cというモデルで回帰して下さい』という命令で、『~』は「＝」で、『.』は「dataで明記した利用データの内、A以外のものを+でつなぐ」という省略記号
####summary(A)
  	 lm関数の結果解釈用関数
     1 残差の分析
     2 係数の推定値についてのサマリ
   	 3 決定係数とその自由度調整値
     この三つからわかること
#####Residuals
     残差（予想値と実績値の差）の分布を四分位数で表して、変な偏りがあるか否かの判断材料になる
#####Coefficients
     推定された切片と傾きに関するサマリです。各行は推定値、標準誤差、t値、p値の順に並んでいる。その傾きがどのくらいバラつくのか、統計的な有意性があるか否かがわかる
#####Multiple R-sqwuared,Adjusted R-sequared
     決定係数とその自由度調整値です。決定係数が、１に近いほど、このモデルの当てはまりが良いことを示す。
###データ整理
####unique(AA[,c(“XX”,”YY”,”ZZ”)]
     AAのデータから項目XX,YY,ZZが唯一となるデータ行を残す。
     XXが異なりYYとZZが同じ値のときは両方のデータが残る
     XX、YY、ZZ全てが同じ値のときは重複とみなされて、削除されて、一つだけが残る
####unique(AA[AA$XX==“xxx”, c(“X”,”Y”,”Z”)])
        AAデータ項目XXはxxxというものだけを抽出
        X,Y,Zの項目列で、重複がないように加工
###名前付け
####name(AAA)[-1] <- paste0(“X”,1:31,”day”)
        AAAの一行目を除いた行に名前をつける
        paste0より空白なくつける
        Xに１〜３１を順にふった名前をつける。
###ロジスティック回帰分析
####glm関数
    オプションfamilyにbinomialを入力
####step関数
    説明変数の＜増やす・減らす＞を自動で検索して選定してくれる
####fitted関数
    予測値を得る
####order関数
    並び替えて表示
    
    
    
    
##最後に
メモを張り付けただけなので間違えがあるかもしれませんが申し訳ありません
擬似要素のプロパティを取得してみよう

```js
w = document.defaultView.getComputedStyle($('#hoge')[0],'::after').getPropertyValue('width');
```

も少しなんとかならないかと思ったがどうにもならないぽい。
みんな大好き `.css()` は内部的に `getComputedStyle()`　を使っているらしいけど、擬似要素には対応していない? みたい。

しかしこうなるともはやjQuery使うだけ無駄。
「ディープネットワークを用いた大域特徴と局所特徴の学習による色付け」を試す

趣味で地元史研究をしていてあちこちでスキャンした古い白黒写真を所有しているわけですが、先日ニュースが出て注目していた[機械学習を使って白黒写真の色を復元する研究](http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/ja/)のソースと学習済みモデルが[Githubで公開](https://github.com/satoshiiizuka/siggraph2016_colorization)されたので早速試してみました。

> 早稲田大学理工学術院の石川博教授、飯塚里志研究院助教、シモセラ・エドガー研究院助教らの研究グループは、「ディープネットワークを用いた大域特徴と局所特徴の学習による色付け」の手法を確立したことを発表した。
> [MdN DESiGN INTERACTIVE](http://www.mdn.co.jp/di/newstopics/45380/)

実行環境は Docker コンテナ上の CentOS 7 です。

![tetsudo.jpg](https://qiita-image-store.s3.amazonaws.com/0/2287/0185687a-7fc2-1af1-05dc-d618969591b0.jpeg)

## Plan

1. Cコンパイラや make あたりは入っているものとします。
2. Torch をコンパイル/インストールする。
3. colorize.lua を実行して写真を変換する。

## 手順

まず [torch](http://torch.ch/docs/getting-started.html) を入れます。

```
# git clone https://github.com/torch/distro.git torch --recursive
Cloning into 'torch'...
remote: Counting objects: 918, done.
remote: Total 918 (delta 0), reused 0 (delta 0), pack-reused 918
Receiving objects: 100% (918/918), 138.10 KiB | 0 bytes/s, done.
...
# cd torch/
# bash install-deps
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
...
# ./install.sh
Prefix set to /root/git/torch/install
...
to PATH and LD_LIBRARY_PATH in your /root/.bashrc? (yes/no)
[yes] >>> yes
# source ~/.bashrc
```

必要なライブラリが足りなくてエラーになる場合は適当に `yum` で入れてください。続いて件の論文の実装を導入します。学習済みモデルのダウンロードに 15 分ほどかかります。

```
# git clone https://github.com/satoshiiizuka/siggraph2016_colorization.git
Cloning into 'siggraph2016_colorization'...
remote: Counting objects: 49, done.
remote: Total 49 (delta 0), reused 0 (delta 0), pack-reused 49
Unpacking objects: 100% (49/49), done.
# cd siggraph2016_colorization/
# ./download_model.sh
Downloading the colorization model (663M)...
--2016-06-01 05:41:11--  http://hi.cs.waseda.ac.jp/~iizuka/data/colornet.t7
Resolving hi.cs.waseda.ac.jp (hi.cs.waseda.ac.jp)... 133.9.187.220
Connecting to hi.cs.waseda.ac.jp (hi.cs.waseda.ac.jp)|133.9.187.220|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 694703608 (663M)
Saving to: 'colornet.t7'

100%[======================================================================================>] 694,703,608  978KB/s   in 11m 58s

2016-06-01 05:53:09 (945 KB/s) - 'colornet.t7' saved [694703608/694703608]

Checking integrity (md5sum)...
Download finished successfully! Time to colorize!
```

最後の "colorize!" のエスケープシーケンスが終わっていないのか以降コンソールが紫色になりますがまぁ無視して。あとは `th` コマンドで Lua の処理と画像ファイルを指定して実行できます。

```
# th colorize.lua ansel_colorado_1941.png out.png
```

`time` で計測して 4 秒程度でした。
ibm swift sandbox

#概要
ibm swift sandbox やってみた。
#型
http://swiftlang.ng.bluemix.net/#/repl/99620918bfbb334636980873d0b1ed6b40d981f3a74a7eb52e382a27c024198d
#Date
http://swiftlang.ng.bluemix.net/#/repl/31e87e028ad283084d0875b85ad4c45c51dcabb5b71354441007d68cb68f3cba
#関数
http://swiftlang.ng.bluemix.net/#/repl/accd2b61799455f2e3eb35acd49d341cadff72c6cc403048c6240baa8411080a
#fizzbuzz
http://swiftlang.ng.bluemix.net/#/repl/d6e26efb3e3aef91169c8d66c34342de9b24f7f160945d49e0f6b564eb0f5867
#zundoko
http://swiftlang.ng.bluemix.net/#/repl/a83c414a5a6990a876465361014e96f1a18604d9c4b7efa3095f6448e5375485
#kitura
http://swiftlang.ng.bluemix.net/#/repl/42c5fa1c4c09a57830ba3a4cc617cbe4c5343246b0ba68add8774d12f8897703
El Capitan で終了させても Dock に残っている複数の Firefox のアイコンを消す方法


以下をターミナルから実行する。

```bash
sudo killall launchservicesd && killall Dock
```

# 解決したい症状
- Dock に Firefox のアイコンが残っている。
- Dock から終了・強制終了を選択してもアイコンは消えない。
- アクティビティモニタや ps では Firefox は表示されない。
- Dock から Firefox が起動できない。
- /Applications/Firefox.app/Contents/MacOS/firefox-bin -P などとやって起動するたびに Firefox のアイコンが増える。
- Force Quit Applications(アプリケーションの強制終了, Command+Option+Esc)に Firefox が複数表示される。
- 以下を実行すると quit にたどり着くのにエラーが返される。

```AppleScript
if application "Firefox" is running then
  "OK"
  tell application "Firefox"
    quit
  end tell
else
  "NG"
end if
```

# 環境
- MacBook Pro (15-inch, Mid 2012)
- OS X El Capitan 10.11.5

# 参考にしたページ

- [OS Xで強制終了できないアプリケーションがある場合の対処](http://qiita.com/muupan/items/0cb84b420598b6409530)
- [Firefox “not responding”, can't force quit, doesn't show in activity monitor [duplicate]](http://apple.stackexchange.com/questions/188845/firefox-not-responding-cant-force-quit-doesnt-show-in-activity-monitor)
iTerm2アップデート後にDocker Quickstart Terminalが動かなくなったら…

iTerm2 Build 3.0.0にアップデートしたらDocker Quickstart TerminalでDocker(というかVirtualBoxが立ち上げるboot2docker?)が立ち上がらなくなりました。

困った…。ということで、Docker Quickstart Terminalの中を調べてたら

```
Docker\ Quickstart\ Terminal.app/Contents/Resources/Scripts/start.sh
```
というシェルスクリプトを見つけました。そこでiTermのコンソールで、このシェルスクリプトを起動させたら無事にDockerが動くようになりました。

iTerm3でコンソールを開いたら、

```shell-session
$ /Applications/Docker/Docker\ Quickstart\ Terminal.app/Contents/Resources/Scripts/start.sh
```
こうすれば、良さそうです。
あまり詳しく調べてなく、自分の環境で試した限りなので正しい回避方法があるかもです。
JSONのrawデータをjqコマンドで整形してファイル出力する

今回は簡単なコマンドの共有です。

# 準備

## jq コマンドをダウンロードする

下記のサイトからダウンロードして下さい。
https://stedolan.github.io/jq/

## cat コマンドが使いたい

Windows をお使いの場合は cat コマンドを入手してみて下さい。
私は GitBash を入れました → https://git-for-windows.github.io/

## rawデータのJSONを準備

例えばこんなファイル（※文字コードはUTF8）
＃元データはこちら → http://qiita.com/niiyz/items/3f522c0e5a32de916ec6

```:raw.json
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "pref": "富山県", "city1": "下新川郡", "city2": "朝日町" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 136.111111, 36.111111 ], [ 136.222222, 36.222222 ] ] ] } }, { "type": "Feature", "properties": { "pref": "富山県", "city1": "氷見市", "city2": "" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 136.333333, 36.333333 ], [ 136.444444, 36.444444 ] ] ] } }, { "type": "Feature", "properties": { "pref": "富山県", "city1": "高岡市", "city2": "" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 136.555555, 36.555555 ], [ 138.666666, 36.666666 ] ] ] } } ]}
```

# jqコマンド実行！

```:cmd
cat raw.json | jq . > pretty.json
```

# 実行結果

```:pretty.json
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "pref": "富山県",
        "city1": "下新川郡",
        "city2": "朝日町"
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              136.111111,
              36.111111
            ],
            [
              136.222222,
              36.222222
            ]
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "pref": "富山県",
        "city1": "氷見市",
        "city2": ""
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              136.333333,
              36.333333
            ],
            [
              136.444444,
              36.444444
            ]
          ]
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "pref": "富山県",
        "city1": "高岡市",
        "city2": ""
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              136.555555,
              36.555555
            ],
            [
              138.666666,
              36.666666
            ]
          ]
        ]
      }
    }
  ]
}
```

このような形に整形されました♪

誰かにJSONデータのサンプルを渡す際には、rawデータを渡すより見やすいので、
こういったコマンドで変換してから渡してあげると良さそうですね＾＾

＃サーバー側でやってくれるサービスもありますが、機密情報だと使いづらいですしね。。
gojiでnet/http/pprof（mux分けてる）

```go
pprofMux := web.New()
pprofMux.Get("/debug/pprof/", http.HandlerFunc(pprof.Index))

rootMux := goji.DefaultMux
rootMux.Handle("/debug/pprof/*", pprofMux)
```

これで下記及びそのリンク先にアクセスできます
http://localhost:8000/debug/pprof/

読み方わからない・・・・
-> [Go で利用できるプロファイリングツール pprof の読み方](http://qiita.com/ikawaha/items/e3b35f09fb49e9217924)

### 参考
- [golang の net/http/pprof を触ってみたメモ](http://blog.livedoor.jp/sonots/archives/39879160.html)
- [pprof with goji](https://github.com/zenazn/goji/issues/131)
MacにRubyをインストールする


Rubyで開発するんじゃなくて、gemで配布されてるツールいれたいだけであればrbenvとかいらなくね？って気がしたのでhomebrewだけでrubyをインストールしてみます。

homebrewのインストールについては[homebrewのウェブサイト](http://brew.sh/)を御覧ください。


```
brew update
brew install ruby
echo 'export PATH=$PATH:`brew --prefix ruby`/bin' >> ~/.bash_profile
```
C++でNULLを使う最低限のこと

# NULL を使うために

クラスヘッダのみincludeしたクラスをコンパイルしたところ、
NULLが定義されてないとコンパイラエラーが起きた。

調べてみると、NULLはプリミティブ型ではないため、
NULLを定義したヘッダファイルをincludeする必要があるらしい。

NULL が使いたいだけなので、最小限のヘッダファイルを確認したところ
cstddef に定義されていた。そこで、以下の一行を加えてNULLを利用できた。

```cpp
#include <cstddef>
```

# 参考

http://stackoverflow.com/questions/924664/why-is-null-undeclared
gradleでフラットなマルチプロジェクト


API, admin, frontみたいな複数プロジェクトをまとめてgradle対応化する際に、極力共通のdependencyとかスクリプトはまとめておきたいなーと思ってgradleのマルチプロジェクトにすることってあると思います。


Hierarchical layouts
----------

```
/path/to/workspace
  |-- RootProject
        |-- build.gradle
        |-- settings.gradle
        |-- /API
              |-- build.gradle
              |-- /src
        |-- /admin
              |-- build.gradle
              |-- /src
        |-- /front
              |-- build.gradle
              |-- /src  
```

このフォルダ構成で、RootProject/build.gradleには共通の設定を書いて、各プロジェクトのbuild.gradleには差分だけを書くのがDRYなかんじ。ちなみにsettings.gradleにはAPIなどをサブプロジェクトしてincludeする宣言を書く。

```settings.gradle
include ':API', ':admin', ':front'
```

で、ビルドする場合RootProjectに移動して

```
$ ./gradlew build
```

で全プロジェクトをビルド。個別プロジェクトをビルドする場合は

```
$ ./gradlew :API:build
```

ここまでは問題ないのだが、
今回、私が遭遇したのは、すでにAPI、admin、frontが個別にSubversionで管理されているパターンで、下記のような構成。

```
/Subversion/path
  |-- /API
        |-- branches
        |-- tags
        |-- trunk
  |-- /admin
        |-- branches
        |-- tags
        |-- trunk
  |-- /front
        |-- branches
        |-- tags
        |-- trunk
```

「さすがにこの構成を下記のように変更してしまう勇気がない！」そんなときに __Flat layouts__ です。

```
/Subversion/path
  |-- /RootProject
        |-- branches
        |-- tags
        |-- trunk
             |-- build.gradle
             |-- settings.gradle
             |-- /API
             |-- /admin
             |-- /front

```

## Flat layouts

settings.gradleがあるRootProjectとサブプロジェクトを同階層に配置することができます。
その際、RootProject名を`master`にしておくとgradleが自動で`master`はRootProjectだと認識してくれます。


なのでディレクトリツリーは下記のようにして

```
/path/to/workspace
  |-- /master
        |-- build.gradle
        |-- settings.gradle
  |-- /API
        |-- build.gradle
        |-- /src
  |-- /admin
        |-- build.gradle
        |-- /src
  |-- /front
        |-- build.gradle
        |-- /src  
```

settings.gradleを修正

```settings.gradle
includeFlat ':API', ':admin', ':front'
```

ちなみにこの状態で各サブプロジェクトをeclipseに読み込ませることで階層のときよりも見やすいプロジェクト構成になるかもしれません。

ビルドするときは各サブプロジェクトのフォルダで`./gradlew build`とやって個別にビルドしたり階層時とかわりません。

この`master`フォルダを別途Subversionにコミットすることで、現在のSCM構成を変更することなくgradleのマルチプロジェクト構成にできました。

```
/Subversion/path
  |-- /master
        |-- branches
        |-- tags
        |-- trunk
  |-- /API
        |-- branches
        |-- tags
        |-- trunk
  |-- /admin
        |-- branches
        |-- tags
        |-- trunk
  |-- /front
        |-- branches
        |-- tags
        |-- trunk
```


## 参考
- [docs.gradle.org | Chapter 20. The Build Lifecycle](https://docs.gradle.org/current/userguide/build_lifecycle.html)
Wantedly Swift社内勉強会（weak, unowned, パターンマッチ）


## 目次

- weak reference（弱参照）とunowned reference（非所有参照）
- @noescape
- パターンマッチ

## weak referenceとunowned reference

### weak reference（弱参照）

- リファレンスカウンタの値を上げない
- 参照していた対象のインスタンスが不要になり、解放されると弱い参照の変数には自動的にnilが代入される
- 定数ではなく、変数に使わなければならない
- 型は、オプショナル型である必要がある

### unowned reference（非所有参照）

- リファレンスカウンタの値を上げない
- 弱参照との違いは、「nilを値とはしない」こと
- 参照の対象が解放されても、自動的にnilを代入するということはない
- 型にオプショナルを指定することはできない
- Appleのドキュメントでは、変数の値がnilにならないことが明らかな場合、unownedを使うことが推奨されている
- しかし、「本当にunownedでいいのか？」というチェックコストを考えると、weakで良い気がする

### @noescape

- 関数の引数がクロージャの時に、引数の属性としてクロージャの離脱がないことを明示することができる

```swift
func setFunc(@noescape f: (Int) -> Int) {
	
}
```

のように使用する。

- クロージャ内で`self`を書かなくて良くなる
- 循環参照について考慮しなくてよくなる
- `filter`や`map`などで使われている
- より、`unowned`使う事あんの？という気持ちになりました。

## パターンマッチ

### タプル

#### switch文

```swift

switch day {
case (1, 1...5):
	print("正月休み")
case (4, 29), (5, 2...6):
	print("連休")
case (8, let d):
	print("8月\(d)日は夏休み")
case (10, _):
	print("10月です")
case (_, 13) where week() == "金曜日":
	print("13日の金曜日")
case let (month, day) where day > 15:
	print("\(month)月\(day)日は後半戦です")
}

```

#### Optional型をつかう

```swift

typealias People = (String, Int?)

switch p {
case let (name, age?) where age >= 18:
	print("\(name)は免許を取れるよ")
case let (name, (15...18)?):	
	print("\(name)は高校生だね。")
case (let name, nil):
	print("年齢不明")
}

```

### 列挙型

#### 共用型
- 列挙型とタプルの構造を併せ持つことができる型
- 下記のように宣言する


```swift

enum Ticket {
	case Normal(Int, Bool, Bool) //(価格、子供かどうか、回数券かどうか)
	case Card(Int, Bool) //(残高、子供かどうか)
	case AgedCard //敬老カード
}

```

#### switch文

```swift

switch t {
case let .Normal(fare, isChild, _):
	print("普通券：\(isChild ? "子供" : "大人")料金　\(fare)円")
case .AgedCard:
	print("敬老カード")
case .Card(let r, true) where r < 110:
	print("カード（子供）：　残高不足")
case .Card(let r, false) where r < 230:
	print("カード（大人）：　残高不足")
case .Card:
	print("カード")
}

```

#### if-case文

```swift

if case .Card(let r, true) = t where r < 110 {
	print("カード（子供）：　残高不足")
}

```

- optionalに対して

```swift

if let t = ticket, case .Normal(220, _, _) = t {
	print("220円券")
}

```

上記と下記は同じ意味

```swift

if case .Normal(220, _, _)? = ticket {
	print("220円券")
}

```

- 複数ケースをカンマでつなげることもできる

#### for-in文

```swift

for case  let .Normal(fare, isChild, isCoupon) in tickets where fare > 220 {
	//Some
}

```
DataTableの1行目をバインドする

#経緯
通常はView用のクラスを作ってバインドしてるんだけど、
検証用のアプリとかで手を抜きたいときがある。

「DataTableを使えばViewクラスを作る手間が省けるや！」って思ってたら、
こいつどうやってバインドするのか全く分からなかった。

#こうやったらできたよ！
```C#:xaml
<StackPanel x:Name="MainPanel">
<TextBlock Text="{Binding Path=Hoge, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
```
```C#:C#
 var mainDataTable = new DataTable();
 mainDataTable.Columns.Add("Hoge", typeof(string));

 var newRow = mainDataTable.NewRow();
 newRow["Hoge"] = "ほげほげ";

 mainDataTable.Rows(newRow);
 MainPanel.DataContext = mainDataTable.DefaultView[0];

```
Wantedly Swift社内勉強会（Designated Initializer,Convenience Initializerと@objc Attribute)


## 目次

- Designated InitializerとConvenience Initializer
- Required Initializer
- 主要なAttributes達

## Designated Initializer（指定イニシャライザ）

- [クラスのイニシャライザ３： Designated Initializer と Convenience Initializer](http://qiita.com/cotrpepe/items/3052d91468f1b852582a#911-%E4%BE%8B-%E3%82%B5%E3%83%96%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%8C-designated-initializer-%E3%82%92%EF%BC%91%E3%81%A4%E3%82%82%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88)のページが非常にわかりやすい
- インスタンスの初期化が全て完了できるイニシャライザ
- **convenience**というキーワードなしのイニシャライザは全て指定イニシャライザ
- どのクラスも指定イニシャライザを1つ以上持っている必要がある。
- スーパークラスの **Designated Initializer**を呼びださなければいけない
- 同じクラスのイニシャライザは呼び出すことができない

指定イニシャライザの中身は

1.自分自身特有のプロパティの初期化
2.スーパークラスの指定イニシャライザの呼び出し
3.自分とスーパークラスのプロパティのカスタマイズ or インスタンスメソッドの呼び出し

の順番で行う


## Convenience Initializer（簡易イニシャライザ）

- 他のイニシャライザを呼び出して初期化を行うイニシャライザ
- 直接、あるいは間接的に指定イニシャライザを呼び出していなければならない
- 同じクラスの他のイニシャライザを呼び出せる
- スーパークラスのイニシャライザは呼び出せない
- **convenience**というキーワードをつけて定義する

簡易イニシャライザの中身は

1.同じクラスの他のイニシャライザの呼び出し
2.自分とスーパークラスのプロパティのカスタマイズ or インスタンスメソッドの呼び出し

の順番で行う

## Required Initializer（必須イニシャライザ）

- そのクラスを継承した全てのサブクラスにそのイニシャライザを実装させたい時
- プロトコルのイニシャライザをオーバーライドする時

に利用する


## @objc

- @objc修飾子をつけると、Objective-Cからも利用できることを意味する
- Objective-Cで利用できない構成要素を含むことはできない（Genericsなど）
- Swiftにはプロトコルにおいてオプショナルなメソッドは存在しない
- @objc修飾子をプロトコルの定義に記述すると、メソッドの宣言に **optional**を付与する事ができる

オプショナルなメソッドは、 **protocol拡張**を利用して実現したらいいかも

要するに

- **実装がひっすでないメソッドはデフォルトの振る舞いが決まっている**
- **実装が必須であるメソッドはデフォルトの振る舞いが決まっていない**

```swift
protocol AProtocol {
    func requiredMethod()
    func optionalMethod()
}
 
extension AProtocol {
    func optionalMethod() {
        // Default behavior
    }
}
```

[参考記事](http://blog.stablekernel.com/optional-protocol-methods-in-pure-swift)
[ざっくり日本語版](https://tech.recruit-mp.co.jp/mobile/swift-optional-method/)
PyCharm でマネジメントコマンドもデバッグ(ステップ実行) する

[先回、PyCharm で Django の runserver する所まで書きましたが、](http://qiita.com/ytyng/items/cdff927d6c5a741dd450) これは Django のマネジメントコマンドにブレイクポイントを入れて、デバッグする方法です。

## 1. PyCharm 右上の、Edit Configurations... をクリック

![スクリーンショット 2016-05-30 12.09.07.png](https://qiita-image-store.s3.amazonaws.com/0/68302/b3dad320-0af0-0634-9007-746055f7c469.png)

## 2. Add New Configuration から、Python を選択

![スクリーンショット 2016-05-30 12.09.20.png](https://qiita-image-store.s3.amazonaws.com/0/68302/dba4db19-f23a-5e97-6b7c-08b4b256441b.png)

## 3. Script には、manage.py の場所を指定

![スクリーンショット 2016-05-30 12.10.11.png](https://qiita-image-store.s3.amazonaws.com/0/68302/1d868262-e35f-19ed-c79f-1d3a5873056c.png)

## 4. Script parameters には、manage.py のサブコマンドを指定。

今回は、`makemigrations oauth2_provider` としました。

![スクリーンショット 2016-05-30 12.10.48.png](https://qiita-image-store.s3.amazonaws.com/0/68302/401eaf67-2c0e-e095-321d-b4f25d3ad35e.png)

## 5. Enviroment variables(環境変数) に DJANGO_SETTINGS_MODULE を指定

独自の settings を使っている場合は、Environment variables の環境変数に指定しておきます。


![スクリーンショット 2016-05-30 12.11.34.png](https://qiita-image-store.s3.amazonaws.com/0/68302/61ed6046-02de-94ab-202f-1fc6cd8f9f25.png)

## 6. 設定完成

![スクリーンショット 2016-05-30 12.12.07.png](https://qiita-image-store.s3.amazonaws.com/0/68302/29527bed-cf14-ed9b-6c48-8c2d7c3374a9.png)

虫ボタン(デバッグボタン)でマネジメントコマンドを実行すると、ブレイクポイントで処理を止めデバッグすることができます。
Google Playで購入したNexus端末が壊れたときのサポート先

あってほしくないが、また壊れるかもしれないので備忘録

#サポート先
[Google サポート担当者より電話いたします - Nexus ヘルプ](https://support.google.com/nexus/contact/c2c_hardware_tech_support)

通話リクエストが可能だが自分の場合はエラーとなって使用できませんでした。
その場合の窓口が用意されているので直接電話しました。

> このフォームに問題がある場合は、0120-950-065までご連絡ください（午前 9 時～午後 6 時、年中無休）

電話するとナビで誘導されるのでポチポチしてると担当者につながりました。
自分の場合はセーフモード、端末リセットしても復旧せず、保証期間内であったので端末交換の運びとなりました。


#その他のサポート
[Google Store ヘルプ](https://support.google.com/store#topic=3380791)の端末のヘルプを選択すると以下のように要件に合わせた色々なヘルプセンターがあることがわかります。
![play_help.png](https://qiita-image-store.s3.amazonaws.com/0/41759/64d760a2-7ee1-8edd-9671-94a48d4a2be2.png)

なので、必要に応じて該当するヘルプセンターを選択すればよいでしょう。
とはいっても、ちゃんと遷移先のヘルプセンターが整備されているかは微妙なところがあります。やはり、指定の電話番号に電話するのが一番手っ取り早いと思われます。
DockerとDocker Composeをインストール

Ubuntu16.04にインストールしたときのメモ

### Dockerインストール

apt-getでインストールすると古いバージョンが入ってしまうので
apt-getではインストールしない

```
# rootになっておく
sudo su -

# インストール
wget -qO- https://get.docker.com/ | sh
docker version

# 作業ユーザーをdockerグループに追加
# dockerコマンドが実行できるのははrootかdockerグループである必要がある
exit
sudo usermod -aG docker $USER
```


### docker-composeインストール

最新バージョンを確認しておく
https://github.com/docker/compose/releases/

``` powershell
# rootで実行
sudo su
curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
```
stdout を numpy.loadtxt に突っ込む

# まとめ
awk で処理したデータを python の numpy で解析したい、といった場合のために stdout の出力を直接 numpy.loadtxt に突っ込む方法。

# やりたいこと

たとえば名前と身長と体重のデータがあるとする。

```input.dat
Yamada 160 50
Tanaka 170 60
Sakana 180 70
```

ここで数値部分だけを抜き出して身長と体重の相関をとりたい、とか思ったとする。Python でもそういう処理はできるけど、ファイルが大きくなると厄介なので awk を使い、数値だけになったデータを numpy.loadtxt で読み出す。つまりこんな感じ。

```bash
$ cat input.dat | awk '{print $2, $3}' > tmp.dat
$ python analysis.py tmp.dat
```
```python:analysis.py
import sys
import numpy as np

data = np.loadtxt(sys.argv[1])

# このあと滅茶苦茶解析した
```
しかし中間ファイルが出るのが面倒。こういう感じにしたい。

```bash
$ python analysis.py input.dat
```

# やること

まず Python 内でシェルコマンドを使うには subprocess を使う。最終的な出力を subprocess.PIPE に出して、それを numpy.loadtxt に入れる。

```python:analysis.py
import sys
import subprocess
import numpy as np

p1 = subprocess.Popen(["cat", sys.argv[1]], stdout=subprocess.PIPE)
p2 = subprocess.Popen(["awk", "{print $2, $3}"], stdin=p1.stdout, stdout=subprocess.PIPE)

data = np.loadtxt( p2.stdout )

# このあと滅茶苦茶解析した

```

# そのほか

上述のスクリプトはシェルコマンドを Python 内に書いたが、awk スクリプトの内容が毎回違うなどの事情で

```bash
$ cat input.dat | awk '{print $2, $3}' | python analysis.py
```
みたいにパイプでつなぎたい場合は `fileinput` を使う。

```python:analysis.py
import numpy as np
import fileinput

data = np.loadtxt(fileinput.input())

# このあと滅茶苦茶解析した

```
GASでSpreadsheetのKPIをSlackになげるBot作りメモ

#GASでSpreadsheetのKPIをSlackになげたい！
メモ！
##参考にした有り難い記事たち
###まずは基本を抑える
- 初心者がGASでSlack Botをつくってみた
http://tech.camph.net/slack-bot-with-gas/
<br>

- Slack BotをGASでいい感じで書くためのライブラリを作った
http://qiita.com/soundTricker/items/43267609a870fc9c7453#%E3%81%BE%E3%81%A8%E3%82%81
<br>

- GASのライブラリを使って楽したい① とりあえず使ってみる_(:3」∠)_
http://qiita.com/soundTricker/items/7bbd86425ae8d0641d50
<br>

###いよいよKPIをとってきて云々する
- spreadsheetで管理する日次KPIをSlackに自動投稿する
http://qiita.com/Yamotty/items/bb2f002ba843386ce6f5
<br>

- スプレッドシートで管理しているKPIをSlackに自動投稿するGoogle Apps Scriptを作ってみた
http://qiita.com/abe-perorist/items/dec054e95b473364cae6

###その他
- 自社サービスのMarketing構成をまとめてみた
http://qiita.com/Yamotty/items/174d1b047a55802feb19
<br>

- GoogleスプレッドシートでKPIをSlackにも投稿できちゃうGoogle Apps Scriptの逆引きリファレンス
http://qiita.com/wapa5pow/items/c2aef3e83a496bd95410
時間を取り入れたFixtureとデータベースに対するエラー対処


##経緯
1. fixtureに時間を取り入れたデータを投入.
2. テストを実行する.
3. **全てのテストに対してエラーを吐く**

##エラー内容

```console:stack_trace
ActiveRecord::StatementInvalid: Mysql2::Error: Incorrect datetime value: '2016-06-01 07:11:00 UTC' for column 'created_at' at row 1: INSERT INTO `microposts` (`content`, `created_at`, `updated_at`, `id`) VALUES ('I just ate an orange!', '2016-06-01 07:11:00 UTC', '2016-06-01 07:21:00', 499495288)
```

datetimeがおかしいとエラーを吐いているので,datetimeを見てみると...
**データベースのタイムゾーンがUTCになっている.**

日本とUTCのは違う(当たり前)のでデータベース内でエラーが起こっていることがわかった.


##対策

データベース内のタイムゾーンとアプリケーションのタイムゾーンを変更する.

```ruby:config/application.rb
module アプリ名
	class Application < Rails::Application
.
.
.
		config.time_zone = 'Tokyo' #アプリケーションのタイムゾーン
		config.active_record.default_timezone = :local #データベースのタイムゾーン
.
.
.
	end
end
```

この後実行するとちゃんとテストが通るようになった.
Atomのsync-settingsをproxy環境下のWindowsで使う

[Atom](https://atom.io/)の[`sync-settings`](https://github.com/atom-community/sync-settings#)をプロキシ環境下のWindowsで使うときの設定．多分どっかに書いてあるんだと思いますが，イマイチちゃんと情報が出てこなかったので備忘録として．

# apmへのプロキシ設定
Atomのパッケージマネージャ`apm`では下記の通り実行すると設定が完了するのですが，`sync-settings`はそれを受け付けてくれない．Windowsだと`apm`は`C:\Users\<ユーザ名>\AppData\Local\atom\bin`にあります．

```sh
apm config set proxy http://proxy.example.com:8080
apm config set https-proxy http://proxy.example.com:8080
```

# `sync-settings`へのプロキシ設定
試したところ以下の2つの方法で対応可能．どっちでもOK．プロキシって持ち歩くべき設定項目でもないと思うので，Windowsの環境変数を使うのがいいんじゃないでしょうか．

## Windowsの環境変数を追加
コンピュータを右クリックしてプロパティを選択→左側のリストからシステムの環境設定→詳細設定→環境変数を開く．

ユーザの環境変数に変数名`HTTP_PROXY`と`HTTPS_PROXY`を追加する．変数値は使いたいプロキシ．

```
HTTP_PROXY http://proxy.example.com:8080
HTTPS_PROXY http://proxy.example.com:8080
```

## init.coffeeで環境変数を追加
Atomの設定ディレクトリに`init.coffee`という名前のファイルがあるので，それに下記を追記．パスは例えば`C:\Users\<ユーザ名>\.atom\init.coffee`など．

```coffeescript:.atom\init.coffee
process.env.HTTP_PROXY = "http://proxy.example.com:8080"
process.env.HTTPS_PROXY = "http://proxy.example.com:8080"
```

# 参考
* [atom-community/sync-settings: Synchronize all your settings and packages across atom instances](https://github.com/atom-community/sync-settings)
* [Support for proxy · Issue #26 · atom-community/sync-settings](https://github.com/atom-community/sync-settings/issues/26)
* [Proxy support · Issue #142 · atom-community/sync-settings](https://github.com/atom-community/sync-settings/issues/142)
* [switch to use github4 instead of github by dirk-thomas · Pull Request #167 · atom-community/sync-settings](https://github.com/atom-community/sync-settings/pull/167)
* [Config Atom Under Corporate Proxy - Flavio Corpa](http://www.flaviocorpa.com/config-atom-under-corporate-proxy/)
HomesteadのLaravelでサイトを追加する

基本的には
[Laravel 5.0.0 Laravel Homestead](http://readouble.com/laravel/5/0/0/ja/homestead.html "Laravel 5.0.0 Laravel Homestead")
の "サイトを追加する"の項目と同じですが、
その後、Homesteadディレクトリで

```
$ vagrant ssh
```
でvagrantに入って、

```
$ sudo service nginx restart
```

が追加で必要です。
モダンなエンジニアになるために：Wappalyzer

サイトで使われているテクノロジーが気になったときに便利なのが、Elbert Aliasさんが制作しているオープンソースのユーティリティWappalyzer<<https://wappalyzer.com/>>。WebはHTML/CSS/JavaScript等のソースコードがブラウザーから簡単にコードが見られることで一気に普及しましたが、最近では多くのサーバープロダクトやフレームワーク、サービス等が使われるようになり、コードもとても複雑になっています。Wappalyzerはサイトが使っているテクノロジーをアドレスバーに表示してくれます。
![fig_01.png](https://qiita-image-store.s3.amazonaws.com/0/119358/10a537cf-de83-07a4-e8bf-04aadc2328de.png)
*****
Firefox, Chrome用の拡張機能とブックマークツールバーが提供されており、ソースコードはGitHubで公開されています。今回はFirefoxの拡張機能を使って説明します。

![fig_02.png](https://qiita-image-store.s3.amazonaws.com/0/119358/7d73ca4e-86e8-958c-192a-4de9f53049a7.png)
インストール前のアドレスバー

![fig_03.png](https://qiita-image-store.s3.amazonaws.com/0/119358/8a8afbc0-a9c7-e3bd-6594-e4d9ed853b74.png)
インストールされると、このようにアドレスバーに使われているテクノロジーのアイコンが表示されます。
***** 
##【Qiitaは何を使っているのか？】
いつも見ているQiitaがどんなテクノロジーを使っているのか？チェックしてみました。
![fig_04.png](https://qiita-image-store.s3.amazonaws.com/0/119358/1a165075-8d2b-4b36-ac8b-0f3ac59170a7.png)
アドレスバーのアイコンをクリックすると、テクノロジーの名称が確認できます。どうやらQiitaはGoogle Analytics, Gravatar, Nginx
, Optimizely, React, Ruby on Rails(50% sure), Twitter Bootstrap, Ruby(50% sure), Backbone.js, Mixpanel, jQuery, Underscore.jsが使われているようですね。
*****
##【500pxは何を使っているのか？】
カナダのトロントにある500px Inc.が提供しているフォトグラファー用サービス500px<<https://500px.com/>>をチェックしてみました。
![fig_05.png](https://qiita-image-store.s3.amazonaws.com/0/119358/23d542db-4f82-5121-dfe0-2dc091bbd860.png)
先ほどの例とは変わって、使われているテクノロジーは、Google Maps, RackCache, Ruby on Rails(50% sure), Ruby, Backbone.js, Google Analytics, Handlebars, Marionette.js, Moment.js, New Relic, jQuery, Underscore.jsでした。撮影された写真の場所を地図で表示するためにGoogle Map。写真の撮影日時などを扱うのでMoment.jsが使われているのだと思います。
*****
###【Moment.jsはどんなサイトが使っているのか？】
500pxではMoment.jsが使われていることが分かりましたが、こんどはどんなサイトがこのJSのフレームワークを使っているのか？調べてみます。
![fig_06.png](https://qiita-image-store.s3.amazonaws.com/0/119358/503536b5-e4f1-2998-6acb-7f8065077038.png)
先ほどのWappalyzerのポップアップが表示されている時に、Moment.jsをクリックします。

![fig_07.png](https://qiita-image-store.s3.amazonaws.com/0/119358/64cbe878-214d-4dfe-9380-74957273a076.png)
"Sites using Moment.js"というタブが開き、Moment.jsが多く検出されたサイトがランキングで表示されます。
*****
Wappalyzerをインストールしておくと素早くサイトで使われているテクノロジーが表示できて便利ですね。