OmniAICreator/Qiita-1.07M huggingface dataset:
bitnami+GoogleCloudPlatformでお手軽サーバ構築

はじめまして！
racheです。

最近流行り始めた・・・？
gcpですが、勉強も兼ねて使うことにしました。

やりたいこととしては、

・何か一個サーバを立てる

ということで、以前redmineの構築でお世話になっていたbitnamiさんに手伝ってもらうことにしました。

https://google.bitnami.com/


まず、会員登録を行います。

会員登録を行うといろいろなアプリケーションが出てきますので、入れたいツールの「LAUNCH」をクリック。

<img width="1114" alt="スクリーンショット 2016-10-26 19.26.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/fbd11a46-746c-fc91-97e6-2689bb4f7770.png">

パスワードを求められるので、先程登録を行ったパスワードを入力します。

<img width="1114" alt="スクリーンショット 2016-10-26 19.28.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/c4367802-7d0b-9b39-09bc-ac34965e0217.png">

入力後、下記のようなような画面がでるので、右上側にあるAdd projectボタンを押してください。

<img width="1100" alt="スクリーンショット 2016-10-26 19.31.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/a9488e59-0b47-4b00-4e6a-e32873c7db6c.png">


sign in with googleより、お持ちのgoogleアカウントでログインを行います。

<img width="1110" alt="スクリーンショット 2016-10-26 19.33.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/c0ca11b3-a9fd-37a5-1ea5-68e436662876.png">

右下のnew projectから新規のプロジェクトを作成します。

<img width="531" alt="スクリーンショット 2016-10-26 19.36.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/5c01864d-299b-a73e-f4a1-433d926d514a.png">

こんな感じの画面が出てきます。ので
enabled from the developer console.
の箇所をクリックし、
「Google Deployment Manager V2 API」を有効にしてください。

<img width="529" alt="スクリーンショット 2016-10-26 19.43.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/6b2a7326-af32-9d9b-9bac-87dc150d58c4.png">

<img width="1261" alt="スクリーンショット 2016-10-26 19.49.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/f83c3d23-6d35-b981-1043-65a8b6dff7cf.png">

有効にしたら、bitnamiに戻り、continueを押すと、bitnamiとgcpの連携完了です。

先程の画面に戻り、PROJECTの欄をgcpで作成したものに変更してあげてください。
サーバーサイズとかリージョンは適当で・・・自分は一番安いものを選びました。
選択完了したら、最下部の「CREATE」を押してください。

<img width="1100" alt="スクリーンショット 2016-10-26 19.31.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/146205/a9488e59-0b47-4b00-4e6a-e32873c7db6c.png">

暫く待つと、gcpにて、サーバーが立ち上がるので、
「go to application」
をおすと、サーバが見れるようになります。

また、
「LAUNCH SSH CONSOLE」からは
サーバに入るために必要なSSHの鍵がダウンロードできるので、ダウンロードしてあげてください
。

以上でサーバが立ち上がります。


あ。。。最後に！！！
検証用に作成した場合、立ち上げたサーバは即DELETEしてください！！
お金かかります！


P.S.
画像あげようとしたら
![Cannot read property 'name' of undefined]()
って出るんですけど、これって何なんでしょうか・・・？
あとmicroサーバおそすぎてお話にならないのですが・・・
Recurrent Neural Networkの基礎（Peterさんのチュートリアルの翻訳）

# はじめに
RNNについての分かりやすいチュートリアルとして、[TensorFlowのRNNを基本的なモデルで試す](http://qiita.com/yukiB/items/f6314d2861fc8d9b739f)でも触れられていた、[Peter's notes](http://peterroelants.github.io/)の[How to implement a recurrent neural network Part1](http://peterroelants.github.io/posts/rnn_implementation_part01/)を翻訳しました。

[Tutorial 翻訳](https://github.com/takitsuba/rnn_implementation_tutorial/blob/master/rnn_implementation_part01.ipynb)

翻訳するにあたり、日本語にすべきか、英単語のままにすべきか悩むところが多かったです。
訳の誤りや分かりづらいところございましたら、アドバイス頂けると嬉しいです。
(なお、Peterさんには翻訳・アップロードの許諾を頂いてます。)

# チュートリアルの内容

簡単なRNNをPythonで実装していきます。
入力データとして、10回にわたって、0または1の数字を取得し、取得した数字を記憶しながら、最終的にその合計値を返す、という簡単なモデルをRNNで実装していきます。

- RNNの基礎
- BPTT法
- 勾配爆発、勾配消失
- Rprop

について学ぶことができます。


# おわりに

Thanks,Peter!

[Tutorial 翻訳](https://github.com/takitsuba/rnn_implementation_tutorial/blob/master/rnn_implementation_part01.ipynb)
出典：[How to implement a recurrent neural network Part1](http://peterroelants.github.io/posts/rnn_implementation_part01/)
住所LODから行政区画のGeoJSONファイルを作成する方法

日本の行政区画のポリゴンデータや代表点としての緯度経度データをダウンロードできる住所Linked Open Data(住所LOD)サイト、[Linked Open Addresses Japan(試作版)] の活用方法として、行政区画ポリゴンデータをGeoJSONファイルでダウンロードする方法を紹介します。

Linked Open Addresses Japan(試作版) については、以下を参照してください。

[緯度経度付き住所LODを作りました](http://qiita.com/uedayou/items/b6be807d36526593b4da)

# LOAJ2GeoJSON を使う

[住所LOD]からダウンロードできる行政区画のポリゴンデータは、[Well-known text](https://ja.wikipedia.org/wiki/Well-known_text)(WKT)という形式ですが、Webアプリなどではよく[GeoJSON](https://ja.wikipedia.org/wiki/GeoJSON)が使われます。

また、行政区画のポリゴンデータは、一つ一つを個別に利用するより、例えば、東京都の市区町村や、大阪府大阪市北区の町・丁目のように、ある住所内に含まれる全ての住所の行政区画が利用されることが多いと思います。


可視化例：[東京都の市区町村別の都知事選挙投票率の可視化](http://uedayou.net/loaviz/tokyo-gubernatorial-election.html)

![Clipboard02.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/59ca41db-dd19-f38e-0895-4bb11b7aa507.jpeg)

そこで、あるまとまった単位で行政区画のポリゴンデータをダウンロードして、WKT形式からGeoJSONに変換するWebアプリを作りました。

[LOAJ2GeoJSON - 住所LODからGeoJSON作成](http://uedayou.net/loaj2geojson/)

![loaj2geojson.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/ba999c6a-4c44-1d9d-2080-aa8ab891f696.jpeg)


## 使い方

まず、「1. 住所の選択」で、行政区画ポリゴンデータが必要な住所を「都道府県」と「市区町村」のプルダウンから選択します。

![loaj2geojson-01.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/8450bf4f-5058-ce95-2a8d-089d56207f25.jpeg)

「都道府県」のみを選ぶと、選んだ都道府県に含まれる全市区町村のポリゴンデータ、「市区町村」も選択すると、選んだ市区町村に含まれる全ての町・丁目データがダウンロードできます。

「2. 選択住所の確認」に現在選択中の住所が表示されます。

![loaj2geojson-02.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/eac72179-242b-c556-0268-0ebc57488037.jpeg)

「3. GeoJSON変換処理」の「GeoJSON作成」ボタンを押すと、変換処理が始まります。

![loaj2geojson-03.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/d0ea46a4-c5dc-34a1-ccda-a3f32f8c9a7f.jpeg)

しばらく待つと、「ダウンロード」ボタンが表示されます。「ダウンロード」ボタンを押すと、GeoJSONファイルがダウンロードできます。

![loaj2geojson-04.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/e561c940-6467-bbd3-6edc-6facb100a04e.jpeg)

ダウンロードしたGeoJSONファイルのpropertiesには各住所の名前とダウンロード先のURLを追加しています。

    "properties": {
        "name": "東京都千代田区一ツ橋一丁目",
        "uri": "http://uedayou.net/loa/東京都千代田区一ツ橋一丁目"
    }

住所LODのデータは一部抜けている住所や、ポリゴンデータのない住所があるため、ダウンロードしたGeoJSONが不完全な場合があります。

# 個別にGeoJSONを作成

前述のように、[住所LOD]のポリゴンデータは[WKT](https://ja.wikipedia.org/wiki/Well-known_text)形式で、GeoJSONにするには変換が必要です。

単純に地図に表示するだけであれば、GeoJSONに変換する必要はありません。
例えば、Webアプリであれば[Wicket](https://arthur-e.github.io/Wicket/)などを使えば、Google Map や Leaflet 等でWKTデータを表示できます。

![loaj01.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/d4b04948-0fb6-c616-cd68-959f342f06ce.jpeg)

WKTをGeoJSONに変換する方法は以下で紹介されています。

[WKT形式をGeoJSON形式に変換する](http://qiita.com/yuichy/items/14f2cb7d4ed113eca727)

# GeoJSONの確認

作成したGeoJSONデータの確認には、[GeoJSONLint](http://geojsonlint.com/)、[geojson.io](http://geojson.io/)などが利用できます。

![geojsonlint.jpg](https://qiita-image-store.s3.amazonaws.com/0/62575/051c3d4f-0617-2276-cd27-94b64ed12620.jpeg)













[Linked Open Addresses Japan(試作版)]:(http://uedayou.net/loa/)
[住所LOD]:(http://uedayou.net/loa/)
SublimeText3でRuboCopを利用しよう

[SublimeText3](https://www.sublimetext.com/3)にパッケージ"[SublimeLinter-rubocop](https://goo.gl/s8TXgP)"を導入した際の「ハマリどころ」と実際のインストールについて説明します。

#はじめに...
* [RuboCop](https://github.com/bbatsov/rubocop)とは？

>Rubocop は Ruby の静的コード解析ツールです。Ruby Style Guide で概説されているガイドラインの多くが強制されるでしょう。
参照:[RuboCop なるものがあるらしい](https://goo.gl/s8TXgP)

# 導入して捗るの？

RuboCopそのものは、

```bash:Terminal
$ gem install rubocop
```
上記のようにインストールすれば使用できるようになりますが、毎回、コマンドを打つのも大変なので、SublimeText3のパッケージ"SublimeLinter-rubocop"を導入してチェックしてもらおうというお話です。

# 前提条件
* OS X EI Capitan バージョン10.11.6
* RuboCopインストール済み
* RuboCopの **.rubocop.yml** はプロジェクトのルートディレクトリ配下に作成済み
* SublimeText3にパッケージ"[SublimeLinter](https://goo.gl/MITQox)"導入済み

*SublimeLinterが導入されていないとSublimeLinter-rubocopは動きません。*


# インストール方法（＋ハマリポイント）
SublimeText3に **Package Control: Install Package** を利用し、SublimeLinter-rubocopをインストールしたものとして説明します。


SublimeText3のメニューバーから

**基本設定>PackageSettings>SublimeLinter>Settings-User**

を選択して下記のファイルを開きます。

```JSON:SublimeLinter.sublime-settings
{
    "user": {
        "debug": true, //SublimeText3のconsoleでデバッグをする
        "delay": 0.25,
        "error_color": "D02000",
        "gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme",
        "gutter_theme_excludes": [],
        "lint_mode": "background",
        "linters": {
            "rubocop": {
                "@disable": false,
                "args": [
                    "",	//<== --configと記載
                    ""	//<== 使用したい.rubocop.ymlのpathを記載
                ],
                "excludes": []
            },
            "ruby": {
                "@disable": false,
                "args": [],
                "excludes": []
            }
        }, //以下省略
}
```

ここで上記のコメントで記載しているように **--config** と **.rubocop.ymlのpath** を設定しなければならないのですが、正しいpathを設定しておらず、SublimeLinter-rubocopが正常に動きませんでした。

もし、 **SublimeLinter.sublime-settings** のUserファイルが白紙の場合は、

SublimeText3のメニューバーから

**基本設定>PackageSettings>SublimeLinter>Settings-Default**

を選択してDefaultのファイルをコピペして利用すれば良いです。

*書き換えが終わったら、SublimeText3を再起動してください。*

# 実際に動かしてみた
![sublime.gif](https://qiita-image-store.s3.amazonaws.com/0/138645/4a717e64-f6a3-4726-4789-1d76a933d901.gif "sublime.gif")

| 文字 | 意味                |色	|
|:---:|:-------------------|:---:|
| .   |Clean（問題なし）     |なし |
| C   |Convention（慣習違反）|黄色|
| W   |Warning             |黄色|
| E   |	Error               |赤色|
| F   |Fatal               |赤色|
*リアルタイムで警告を表示してくれるので、表示された警告に関しては潰していきましょう。他の方にコードレビューを受ける前に最低限のミスはなくせることが導入の一番のメリットだと思います。*


# これでもダメなら...
SublimeText3のconsoleにてエラー原因の調査を行ってみるのも手かと思います。
>`SublimeLinter.sublime-settings`の`debug`をtrueにして、SublimeTextを再起動します。
`View` > `Show Console` で表示されたエラーメッセージを確認します。
参照:[エラーの原因を調査する](https://goo.gl/N6FqJx)


# 参考記事
* [SublimeText3](https://www.sublimetext.com/3)
* [RuboCop](https://github.com/bbatsov/rubocop)
* [SublimeLinter-rubocop](https://goo.gl/s8TXgP)
* [RuboCop なるものがあるらしい](https://goo.gl/s8TXgP)
* [SublimeLinter](https://goo.gl/MITQox)
* [Sublime Text 3で動かなかったSublime Linterを動かしてみた
](https://goo.gl/N6FqJx)
java コマンド実行時にconfigファイルの読み込み切り替える



Typesafe Configを実行時に切り替えたい。以下の記事のとおりである。

http://qiita.com/FScoward/items/89da99006d6d2fec805e#jar%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%8C%96%E3%81%97%E5%A4%96%E9%83%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88 


上記記事の内容は正しくて、順番は大して関係ないだろうとおもって

```sh
java -jar XXXXX.jar -Dconfig.file=xxxx.conf 
```

と書いてしまい、反映されずにハマった。

同じことにハマった人のためにメモをしておく。
参考記事に記載してあるとおり正しい書き方は以下の通りである。

```sh
java -jar -Dconfig.file=xxxx.conf XXXXX.jar
```

manでjavaコマンドを確認すると以下の通りであった。

```sh
java [ options ] -jar file.jar [ argument...  ]
```

引数として食われてしまったようでした。
気づいてみれば、そりゃそうだという印象である。
digdagのincludeで_export

やりたいこと
===========

複数digファイルで共用したいパラメータと自digファイル内でのみ使用したいパラメータがある
includeをうまく使ってパラメータを共用したい

結論
====

1. includeする方に`_export`を書く、される方には書かない
1. includeされる方はincludeする方のサブディレクトリに置く
1. `!include`と`:`の間には半角スペースが必要

やってみたこと
=============

includeされる方・includeする方を同じディレクトリに置くとエラー
----------------------------------------------------------

```
$ cat cmn.dig
var1: var1_val
$ cat a.dig
_export:
  !include : cmn.dig
  var2 : var2_val
+task1:
  echo>: ${var1} ${var2}
$ digdag run a.dig
2016-10-26 19:02:45 +0900: Digdag v0.8.17
error: Validating project failed
workflow /tmp/test3/cmn.dig Workflow 'cmn' includes unknown keys: [var1] (model validation)
```

includeされる方をincludeする方のサブディレクトリに置くと成功
--------------------------------------------------------

http://docs.digdag.io/workflow_definition.html?#include-another-file にならってサブディレクトリに置くと成功

```
$ cat cmn/cmn.dig
var1: var1_val
$ cat a.dig
_export:
  !include : cmn/cmn.dig
  var2: var2_val
+task1:
  echo>: ${var1} ${var2}
$ digdag run a.dig
2016-10-26 18:59:11 +0900: Digdag v0.8.17
2016-10-26 18:59:14 +0900 [WARN] (main): Using a new session time 2016-10-26T00:00:00+00:00.
2016-10-26 18:59:14 +0900 [INFO] (main): Using session /tmp/test3/.digdag/status/20161026T000000+0000.
2016-10-26 18:59:14 +0900 [INFO] (main): Starting a new session project id=1 workflow name=a session_time=2016-10-26T00:00:00+00:00
2016-10-26 18:59:17 +0900 [INFO] (0016@+a+task1): echo>: var1_val var2_val
var1_val var2_val
Success. Task state is saved at /tmp/test3/.digdag/status/20161026T000000+0000 directory.
  * Use --session <daily | hourly | "yyyy-MM-dd[ HH:mm:ss]"> to not reuse the last session time.
  * Use --rerun, --start +NAME, or --goal +NAME argument to rerun skipped tasks.
```

この記事の続き
============

http://qiita.com/pilot/items/70f18e50750044550ad0
Googleのアカウント登録時のバリデート処理を調べてみた

バリデート処理を書くことになって、イケてるサービスはどうやっているかな？ということで、Googleのアカウント登録のバリデート処理を調べてみました。ソースコードが見れるわけじゃないので、外側から見えた結果です。

### Googleのアカウント登録画面でメールアドレスに、既に存在しているアカウントdaijinと入力した結果
---

#### ■リクエスト（POST）

##### URL
`https://accounts.google.com/InputValidator?resource=SignUp`

##### application/json
```json
{
    "input01": {
        "Input": "GmailAddress",
        "GmailAddress": "daijin",
        "FirstName": "ccc",
        "LastName": "aaa"
    },
    "Locale": "ja"
}
```

#### ■レスポンス（エラー時も、HTTPステータスコード=200）
##### application/json
```json
{
    "input01": {
        "Valid": "false",
        "ErrorMessage": "このユーザー名は既に使用されています。別のユーザー名を選択してください。",
        "Errors": {
            "GmailAddress": "このユーザー名は既に使用されています。別のユーザー名を選択してください。"
        },
        "ErrorData": ["cccaaa290", "caaa7780", "aaac86381", "ccca3220", "accc5440"]
    },
    "Locale": "ja"
}
```
なるほどぉ。

### 見た感じで思ったこと
---

- 入力した項目のフォーカスが外れた時点(onblurイベント)で、リクエスト（xhr）している。（入力値があれば変更してなくても送っている。）
- URLは`https://accounts.google.com/InputValidator`で固定
  - ということで、Controllerは１個でやっているっぽい。
- URLにあるクエリresource=SignUpで、クラスを指定して、Inputの部分でメソッドを指定して、サーバー側で実行しているっぽい？
- REST APIではなく、JSON-RPC。
- input01とあるが、input02とか複数項目を同時にチェック出来る仕様にしているっぽい。
  - サーバーサイドでは一括チェックとかしてそう。
- jsonのパラメータkeyが、先頭大文字なのは、クラス名とかと紐付けて、処理をしている感じかな？
- 入力エラー時でも、HTTPステータスコードは200で、json側のValid=true or falseで判定
- ErrorDataは、使えるアカウント名が表示されていた。チェック項目ごとに自由に使える項目なのかな？

### 誕生日項目に「year=aaaa, month=10, day=99」と入力（入力フォームが３つあるけど、ひとまとめでチェックしているパターン）
---

#### ■リクエスト（POST）

##### URL
`https://accounts.google.com/InputValidator?resource=SignUp`

##### application/json
```json
{
    "input01": {
        "Input": "Birthday",
        "BirthYear": "aaaa",
        "BirthMonth": "10",
        "BirthDay": "99"
    },
    "Locale": "ja"
}
```

#### ■レスポンス
##### application/json
```json
{
    "input01": {
        "Valid": "false",
        "ErrorMessage": "年が正しくないようです。4 桁で入力してください。",
        "Errors": {
            "BirthYear": "年が正しくないようです。4 桁で入力してください。",
            "BirthDay": "日が正しい形式で入力されていません。2 桁の数字を入力してください。"
        }
    },
    "Locale": "ja"
}
```
なるほどぉ。

### 見た感じで思ったこと
---

- ErrorMessageには、最後に入力した項目のエラーメッセージが入る。
- Errorsに具体的におかしな項目と、エラーメッセージがはいる。

### バリデートOKの時
---
■レスポンス

```json
{"input01":{"Valid":"true"},"Locale":"ja"}
```

### まとめ
---
Googleのバリデータ処理は、JSON-RPCスタイルでした。参考になったので自分のサービスでも導入してみようかと思いました。（ブラックボックスとなっているサーバサイドの実装も見てみたいですが、そこは想像になりますね。。。）

最後にGoogleさん、変なリクエスト飛ばしてすみません。。。
tオプションを付けずにrsyncでコピーしたファイルにタイムスタンプを反映させる

rsyncは下記のようにrtOvオプションでシンボリックリンク、パーミッション、所有者およびグループを無視したコピーができます。しかしここでtオプションを付け忘れるとタイムスタンプが反映されず、確認のため2度目に実行したとき不都合です。

```
sudo rsync -rOtv -e 'ssh -c aes128-gcm@openssh.com' /mnt/data1 taro@server1:/mnt/client1/data1
# r: 再帰的に実行
# t: タイムスタンプを反映
# O: ディレクトリのタイムスタンプを無視
# v: 過程を表示
```

tオプションを付け忘れてコピーした後でも、tオプションを付けつつcオプションでチェックサムを基準としたコピーを再度行えば、タイムスタンプを反映することができますが、チェックサムの計算を行うと非常に時間がかかります。

そこでtouchコマンドを使い、空のファイルを経由してタイムスタンプだけ反映させる方法を下記に示します。あて先はSSHの接続先になっているので、必要に応じてSSHを取り除いてください。

```
src="/mnt/data1" &&
src_tmp="/tmp/data1" &&
ssh=taro@server1 &&
dest_tmp="/tmp/data1" &&
dest="/mnt/client1/data1" &&
cd "$src" ; find . -type d -exec mkdir -p "$src_tmp/{}" \; && # ディレクトリだけをコピー
cd "$src" ; find . -exec touch -r "{}" "$src_tmp/{}" \; && # タイムスタンプが同一の空のファイルを作成
rsync -rtv -e ssh "$src_tmp/" $ssh:"'$dest_tmp'" && # サーバに空のファイルをコピー
ssh $ssh bash -c "'cd \"$dest_tmp\" ; find . -exec touch -r \"{}\" \"$dest/{}\" \;'" # タイムスタンプを反映
```
iostat の await, svctm の 見かた、考え方(※10/30スライド修正)

iostat の await, svctm の 見かた、考え方を書いたやで彡(ﾟ)(ﾟ)

- iostat の await svctm の 見かた、考え方(Slideshare) ※10/30スライド修正

http://www.slideshare.net/shibataayumu/iostat-await-svctm
[![iostat2.jpg](https://qiita-image-store.s3.amazonaws.com/0/110066/e88bc7ff-1a0c-490d-19b2-ca07f93c63eb.jpeg)](http://www.slideshare.net/shibataayumu/iostat-await-svctm)

下記のブログをめっちゃ参考にしたやで。yohei-aさん、いつもサンガツやで！彡(^)(^)

- iostat の見方(http://d.hatena.ne.jp/yohei-a/20110711/1310396665)
- Linux の iostat の出力結果を銀行のATMに例えて説明してみる(http://d.hatena.ne.jp/yohei-a/20111203/1322909311)
WebSphere Application ServerのMaven archetypes

Mavenプロジェクトのarchetypeに、WebSphere Application Server（Liberty、Traditional）用のものがあることを知ったので、メモします。このarchetypeを使うと、pom.xmlやプロジェクト・ファセットを設定してくれて便利です。

[IBM Knowledge Center > SSHR6W_9.0.0 > WebSphere Developer Tools > Developing Apache Maven projects > Example archetypes](http://www.ibm.com/support/knowledgecenter/SSHR6W_9.0.0/com.ibm.websphere.wdt.doc/topics/example_archetypes.htm)

archetypeの一部を抜粋。
![image](https://qiita-image-store.s3.amazonaws.com/0/100414/bcedb058-ffff-e144-8a29-9107230f93a6.png)

（備考）IBMのサポートはなし
>Note: These archetypes are not supported by IBM®. This information is provided for reference only. 

Eclipseで、webapp-jee7-libertyを使ってMavenプロジェクトを作ってみます。

# 環境
Eclipse Java EE IDE for Web Developers
Version: Mars.1 Release (4.5.1)

# Mavenプロジェクト作成（webapp-jee7-liberty使用）

1. File > New > Maven Project をクリック
2. 「Create a simple project (skip archetype selection)」にチェックはつけずに、「Next」
3. Catalogを追加するため、「Configure」クリック
![image](https://qiita-image-store.s3.amazonaws.com/0/100414/77e8b7a4-26bb-5278-47e9-94cda6ecccdc.png)

4. 「Add Remote Catalog」クリック
![image](https://qiita-image-store.s3.amazonaws.com/0/100414/9054c822-b6ef-2ca8-e6d1-6a19d7e6020d.png)

5. 「url」を入力し、「OK」クリック
url: http://central.maven.org/maven2/
![image](https://qiita-image-store.s3.amazonaws.com/0/100414/ae12a726-022e-bda9-9bf3-00221547b3dc.png)

6. Archetypesウィンドウで「OK」クリック
7. 「Filter」でWASのものに絞り、「webapp-jee7-liberty」を選択し、「Next」クリック
Filter: net.wasdev.maven.tools.archetypes
![image](https://qiita-image-store.s3.amazonaws.com/0/100414/123280ec-441d-9b5a-a741-c1c47e7afaac.png)

8. ウィザードに従って、プロジェクトのGroup Id等のパラメータを設定して、完了

# 完成したMavenプロジェクトを見てみる

こんな感じでできます。

![image](https://qiita-image-store.s3.amazonaws.com/0/100414/ba80dcce-81d6-7eb1-1e86-663e2f30e160.png)

pom.xmlを見ると、「liberty-target」というdependencyが設定されています。
![image](https://qiita-image-store.s3.amazonaws.com/0/100414/6ec07a95-0401-103b-3df1-bf99472ea788.png)

これは、Libertyのクラスパスをエミュレートするもので、ライブラリーのMaven Dependenciesを見ると、WASのjarが入っているのがわかります。
![image](https://qiita-image-store.s3.amazonaws.com/0/100414/13d10233-0faf-6504-c404-53e5ec9c307b.png)

[Knowledge Center > Configuring dependency POM files that emulate the classpath of specific WebSphere runtime environments](http://www.ibm.com/support/knowledgecenter/was_beta/com.ibm.websphere.wdt.doc/topics/localrepo.htm)

>liberty-target
This dependency aggregates all of the WebSphere Application Server Liberty API, SPI, recommended Java specification dependencies, and third-party implementation dependencies.

もし、WASのarchetypeを使ってMavenプロジェクトを使ってなかったら、後からpom.xmlにdependencyを入れてあげれば、パス通せます。

```xml
<dependency>
      <groupId>net.wasdev.maven.tools.targets</groupId>
      <artifactId>liberty-target</artifactId>
      <version>RELEASE</version>
      <type>pom</type>
      <scope>provided</scope>
</dependency>
```
※versionのところは明示的に「8.5.5.9」などバージョン指定できる

プロジェクト・ファセットは、こんな感じで入ってます。

![image](https://qiita-image-store.s3.amazonaws.com/0/100414/b3540134-30da-763f-ec66-fdfce8b1057c.png)


以上。
bash > 2行目にある/A/B/C/Dという文字列を/E/F/G/Hに変換するbash script > 指定行の置き換え sed '2c /E/F/G/H' "$inpfile" と指定行以下の表示 tail -n +3 "$inpfile" を教えていただいた

```txt:動作環境
CentOS6.8
GNU bash v4.1.2(1)
```

以下のような形式のファイルが300あるとする。

```sample.inp
============= comment =============
/A/B/C/D
============ from here ============
hogehoge
hogehoge
hogehoge
```

以下をしたい。

- 2行目の文字列`/A/B/C/D`を
- 固定文字列`/E/F/G/H`に変更

### v0.1 bash script

bashのforで回した場合、sedでディレクトリセパレータ("/")を含む文字列の置換方法がよく分からなかったのでbashで書いた。

```bash:replace.sh
#!/usr/bin/env bash

POSTSTR="/E/F/G/H"

inpfile="$1"

linecount=$(wc -l "$inpfile" | awk '{print $1}')
#echo $linecount  # for debug

head -n 1 "$inpfile"
echo "${POSTSTR}"
restcount=$((linecount-2))
#echo $restcount # for debug
tail -n $restcount "$inpfile"
```

以下は実行例。

```
$ bash replace.sh sample.inp 
============= comment =============
/E/F/G/H
============ from here ============
hogehoge
hogehoge
hogehoge
```

変換する行が固定なので、これで間に合う。

上記のスクリプトをbashスクリプトのfor文において使う。
関数として定義するのもいいかもしれない。

## v0.2 (関数化, 行の変更)


以下のようにした

- 関数化
- 変更する行を2行目から3行目にした

```bash
#!/usr/bin/env bash

replace_func() {
	POSTSTR="/E/F/G/H"
	inpfile="$1"
	linecount=$(wc -l "$inpfile" | awk '{print $1}')
	#echo $linecount  # for debug

	# output header (line 1-3)
	head -n 2 "$inpfile"
	echo "${POSTSTR}"
	# output rest (line 4-)
	restcount=$((linecount-3))
	#echo $restcount # for debug
	tail -n $restcount "$inpfile"	
}

FILTER="INPUT/input."

for infile in "${FILTER}"*;do
	echo "$infile"
	replace_func "$infile" > flexwrf.input.work
	break # for debug
done
```

上記により`INPUT/input.001`のようなファイルをforで回して処理をする。
デバッグ中のためfor内のbreakで抜けている。


## V0.3 sedを使用 (@akinomyoga さん案)

@akinomyoga さんのsedを使いました。
すっきりしたコードになりました。

情報感謝です。

```bash
#!/usr/bin/env bash

FILTER="INPUT/input."

for infile in "${FILTER}"*;do
    echo "$infile"
    sed '2c /E/F/G/H' "$infile" > flexwrf.input.work
    break # for debug
done
```

関連 http://linuxjm.osdn.jp/html/GNU_sed/man1/sed.1.html
手動で起動したMySQLを手動でシャットダウンする


たとえば開発環境などで

    mysqld_safe --skip-grant-tables &

などとして、 systemctl などを利用せず手動でmysqlを起動しますよね。

MySQLは複数プロセスが立ち上がるため、1つづつkillして回るのではなく、

    mysqladmin -u root -p shutdown 

でシャットダウンができます。

パスワードを設定していない場合や、skip-grant-tablesオプションを起動している際は -p オプションは必要ありません。

    mysqladmin -u root shutdown
優先度判断のためのチームワーク

# 目的

* 案件の優先度を自主的に決められるチームになりたい
* 価値が高い部分にチームの戦力を集中させたい

# ゴール
* 一人ひとりはどんな貢献をすべきか理解する

----

# チームに貢献する方法のヒント

[「社会運動はどうやって起こすか」 ](https://www.ted.com/talks/derek_sivers_how_to_start_a_movement?language=ja)

----

# チームに貢献する方法

* 最初にアクションをする人になる
  * 勇気を持って先頭に立つ
* 最初のフォロワーになる
  * みんなにフォロワーになる方法を示す
* 価値を理解して参加する
  * 価値が高いものに全員で注力する

----

## 案件の優先度判断に当てはめると

* 案件を提案する人になる
* 誰かの提案を理解して後押しする人になる
* やらないものを選ぶ人になる

----

## 特に意識すべきこと

---- 

## 提案だけが貢献ではない
  * 提案する人だけだと失敗する
  * やらないモノ/コトを選べると価値が高い
  * 提案以外の貢献を評価する文化

----

## チームメンバー全員が取捨選択する
  * 判断をマネージャーに丸投げはNG
  * 自分の提案と、他人の提案を比較
  * 価値が高いものに参加すれば自分の成果も大きくなる 

----

# おわり
DockerfileのCMDおよびdocker-compose.ymlで複数のbashコマンドを実行させる方法

DockerfileのCMD及び, docker-compose.ymlファイルのcommandでコマンドを実行する場合、
実行できるコマンドは一つである。

この場合シェルスクリプトを実行することで、複数のコマンドを実行することも出来る

もっと単純に複数コマンドを実行する方法は


```
bash -c "コマンド文字列"
```

の用に```bash -c```で呼び出してあげるだけで良い。

コンソールで```bash -c "ls -l && ls"```と言うようなので実験してみると良いだろう


具体的に、elasticsearchを9200ポートと9250ポートで起動する　例を用いて紹介する

###Dockerfile

```
CMD bash -c "elasticsearch -d && elasticsearch --http.port=9250"
```

###docker-compose.yml

```
command: bash -c "elasticsearch -d && elasticsearch --http.port=9250"
```
tr / awk > A.B.C.D という形式の文字列から C.D を取得する > echo "A.B.C.D" | tr "." " " | awk '{print $3"."$4}'

```txt:動作環境
CentOS 6.8
tr v8.4
GNU AWK v3.1.7
```

```
$ echo "A.B.C.D" | tr "." " " | awk '{print $3"."$4}'
C.D
```

自分が「そら」で打てるコマンドで実装。
さくらのクラウドの2段階認証を設定する場所

ウェブサービスにおいて安全性を高めるためには多要素認証を導入することが推奨されています。

さくらのクラウドはインフラを守るサービスだけあって、2要素認証に対応しています。さくらでは2段階認証と呼んでいます。

# さくらのクラウドのアカウント構成

まず、さくらのアカウントの権限について理解する必要があります。さくらのクラウドには2つの権限があります

- 会員ID：さくらインターネット全体の管理
- ユーザ：さくらのクラウドの特定のアカウントの管理

一般的には、会員IDはスーパーユーザ権限なので、法人の方は普段はユーザで操作、管理者向けの作業の際に管理者IDで入るようにすることをオススメします。

会員IDの設定は比較的簡単なのですが、ユーザは2段階認証を有効にする場所が異なります。最初とまどったのでそのメモです。

## 会員IDの2要素認証をONにする

会員メニューログイン ( https://secure.sakura.ad.jp/menu/ ) からログインし、左側にある【2段階認証の設定】から有効にします。

## ユーザの2要素認証をONにする

さくらのクラウド ( https://secure.sakura.ad.jp/cloud/ ) に、ユーザ権限でログインします。その後、2段階認証をONにします。

Google AuthenticatorなどでQRコードをスキャンします。そうするとAuthenticatorでコードが表示されるようになるので、クラウドのコンパネにログインし直します。

再ログインして、Authenticatorのコードでログイン出来ると、設定完了です。回復コードは生成して別途保存することをオススメします。

以上です。
PAY.JP iOS SDKでApple Pay アプリ内支払いをする

**[potatotips \#34 \(iOS/Android開発Tips共有会\)](http://potatotips.connpass.com/event/41363/) のための投稿です**

PAY.JP?
=======================================================

- https://pay.jp/
    - オンライン決済のためのAPIを提供
- 米StripeやWebPayみたいなもの
- Apple Payを使った決済に対応
    - [https://pay.jp/apple-pay](https://pay.jp/apple-pay)

Payment Solution Provider(PSP)
=======================================================

<img src="https://cloud.githubusercontent.com/assets/39830/19717602/643be780-9b9c-11e6-8294-c0d5c2acc351.png" width="300px">

[https://developer.apple.com/apple-pay/](https://developer.apple.com/apple-pay/)

Apple Pay with 非対面決済
=======================================================

- **実物の**商品やサービスへの支払い
- ECサイトや出前、タクシー、映画チケット
- iOS App, Safari(Web)

## BASEショップ30万店へ導入
![BASE](https://cloud.githubusercontent.com/assets/39830/19717618/77a7d298-9b9c-11e6-96bb-7bb353fcfb98.png)

## 大まかな作業手順
1. developer.apple.comでマーチャントIDを登録
2. PAY.JPで証明書署名要求をダウンロード
3. developer.apple.comで証明書を作成
4. PAY.JPへ証明書をアップロード

## iOSアプリ実装
1. PassKitのAPIで購入ボタンを表示
2. 支払いリクエスト・アイテムを作成してペイメントシートを表示
3. delegateメソッドで取得できるApple PayトークンからPAY.JPトークンを発行
4. PAY.JPトークンをサーバーへ送信して決済処理を行う

## ドキュメント
[https://pay.jp/docs/apple-pay](https://pay.jp/docs/apple-pay)

## PAY.JP iOS SDK beta
```
# Cartfile
github "payjp/payjp-ios"

# Podfile
pod 'PAYJP', git: 'git@github.com:payjp/payjp-ios.git'
```

## トークン送信フロー

```swift
let apiClient = PAYJP.APIClient(publicKey: PAYJPPublicKey)
apiClient.createToken(with: payment.token) { (result) in
    switch result {
    case .success(let token):
        // tokenをサーバーへ送信して決済処理
        // https://pay.jp/docs/charge
        completion(.success)
    case .failure(let error):
        completion(.failure)
    }
}
```

## 動作確認
- 決済部分は実機で実行
- iTunes ConnectでサンドボックスApple ID追加
- テストカードをWalletに登録
    - https://developer.apple.com/support/apple-pay-sandbox/

## 参考になる情報
- Apple Payプログラミングガイド (公式ドキュメント)
    - https://developer.apple.com/jp/documentation/ApplePay_Guide/
- Developers.IO内のApple Pay関連記事
    - http://dev.classmethod.jp/tag/apple-pay/
- Mercari Engineering Blog - USのiOSアプリでApple Payに対応した話
    - http://tech.mercari.com/entry/2016/05/19/150000

## Appendix
- SDKの開発の話
  - https://github.com/payjp/payjp-ios
  - https://github.com/payjp/apple-pay-example
  - Swift3.0で開発
  - Objective-C向けのメソッドを定義
  - 外部依存のないResult, Himotoki をモジュール内に組込み
  - MITライセンスで公開

## まとめ
- PAY.JPでApple Pay対応を始めるのは簡単
  - お問い合わせ不要
  - SDKが公開されている
  - サンドボックス環境でテスト可能

## FAQ
- StripeやBraintreeのSDKと比較するとPAY.JPにするメリットある?
  - 対応ブランド
  - 契約プラン
  - 手数料
Raspberry Pi から ESC を制御してラジコンを走らせてみた（１）

Raspberry Pi 2 Model B　のPWMを使って　ESC: TEU-105BK　を制御して走らせてみた（前進/停止/後進だけ）

#準備するもの
Raspberry Pi (今回はRaspberry Pi 2 Model B)
ESCが付いてるラジコン（今回は　1/10RC ワイルドウイリー 2 - TAMIYA　に使用しているTEU-105BK）
ジャンパ線　(オス-メス3本　メス-メス1本)
Raspberry Pi用の5v-usb電源

#配線

1.ESCのCH2に接続しているコネクタを抜き、黒と赤の2本のみジャンパ線でESCと抜いたコネクタを接続する。
2.抜いたコネクタの白とRaspberry PiのGPIO18をジャンパ線で接続する。
3.Raspberry PiのGNDとESCのBATT(空き端子3)の黒をジャンパ線で接続する。

![11.jpg](https://qiita-image-store.s3.amazonaws.com/0/146154/f067e064-ad48-7b78-6ddb-3b2734e32ad4.jpeg)








#PWMの設定
PWMベースクロック周波数:19.2MHz（RaspberryPiの仕様なので固定）
ESCへ入力するPWMパルス幅(周波数)：16.7ms（60Hz）（ESCの仕様なので固定）
レンジ値：1000（決め）

これらから設定するクロック値を計算する
19,200,000Hz / 60Hz / 1000  = 320

ということで、設定値は
pwmSetClock(320);
pwmSetRange(1000);

#ESCが動作する値
調査した結果は以下のとおり
前進：pwmWrite(GPIO18, 88);//88以下、徐々に高速になる
停止：pwmWrite(GPIO18, 92);
後退：pwmWrite(GPIO18, 96);//96以上、徐々に高速になる

#外観
![20161026_174531.jpg](https://qiita-image-store.s3.amazonaws.com/0/146154/7018ed88-6f90-38e6-11a8-b5fafdc9991e.jpeg)


#続きはここ
[Raspberry Pi から ESC を制御してラジコンを走らせてみた（２）](http://qiita.com/shigeru-yokochi/items/83531cb9bf3fc7a259ba)
認証局から送られてくる証明書が間違ってた話

# 証明書を更新したら、API Callできなくなった

## 状況
証明書を更新したら、
ブラウザでチェックしても特にエラーは無いのに、今まで動いてたAPIで、

```
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed,OpenSSL::SSL::SSLError
```

や、opensslコマンドで

```
verify error:num=27:certificate not trusted
```

```
verify error:num=21:unable to verify the first certificate
```

等が出る症状が発生。

## 調査

```
openssl s_client -connect {hostname}:443 -servername {hostname} < /dev/null
```

したら

```
depth=0 /C=JP/ST=****/L=****/O=******,Inc./CN=******.co.jp
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /C=JP/ST=****/L=****/O=******,Inc./CN=******.co.jp
verify error:num=27:certificate not trusted
verify return:1
depth=0 /C=JP/ST=****/L=****/O=******,Inc./CN=******.co.jp
verify error:num=21:unable to verify the first certificate
verify return:1
CONNECTED(00000003)
---
Certificate chain
 0 s:/C=JP/ST=****/L=****/O=******,Inc./CN=******.co.jp
   i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign Organization Validation CA - SHA256 - G2
 1 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
　：
　：
```

あれれ？
chain繋がってないぞっと・・・

## 問い合わせ
とりあえずサポートに問い合わせたら、下記のような回答が。

```
>《中間証明書》
>Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
>Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA

上記中間証明書としてご教示いただいております内容は、
弊社ルート証明書の内容となります。

中間証明書が異なっている可能性がございますので、
下記ページより当該の中間証明書を取得いただき、
再度、設定を行っていただければと存じます。

<リポジトリ・利用約款>
https://jp.globalsign.com/repository/
```

**まさか、送られてきた中間CA証明書が間違ってるだと！！！**

## 解決

正しい中間CA証明書をダウンロードして入れ替えたら無事解決♪
こんな事ってあるんですねぇ・・・(((((( ；ﾟДﾟ))))))ｶﾞｸｶﾞｸﾌﾞﾙﾌﾞﾙ

グローバルサインで2016/10/14前後に企業認証SSL(SHA256)を取得した人は、
チェックした方がいいかも。

## 対策

まぁ、とりあえず送られてきた証明書を信用せずにチェックするしかないかな。
設定を読み込む前に、証明書と中間CA証明書を

```
openssl x509 -text -noout -in {filename}
```

して、証明書のIssuerと中間CA証明書のSubjectが同じになってるか確認するしか・・・
PHPのヒアドキュメントでクラスのスタティックメソッドを展開する方法


PHPのヒアドキュメントの中で、クラスのスタティックメソッドの戻り値を使いたくて調べた結果です。
PHPバージョン5.5で確認しました。

どうやらヒアドキュメントの中では、クラスを直接呼び出すことはできないようです。
代わりに**クラス名を代入した変数**を定義して、その変数を展開してクラスのメソッドを呼び出す必要があるようです。
この時さらに**{}**で囲ってあげる必要もあります。

ほかにも変数、定数、配列、連想配列なども試してみました。
定数もそのままでは展開できず、引数を返すだけの関数を用意してあげ、その関数を経由させる方法があるようです。

```PHP:PHP
<?php
// PHP Version 5.5.38

$v = '変数の値';
define('CONSTANT', '定数の値');
$a = ['値1', '値2'];
$h = ['key1' => 'key1の値', 'key2' => 'key2の値'];  

class Sample {
    public $property = 'プロパティ';
    static $static_property = 'スタティックプロパティ';

    const CONSTANT = '定数';

    function method () {
        return 'メソッド';
    }

    static function static_method () {
        return 'スタティックメソッド';
    }
}

$object = new Sample;
$class_name = 'Sample'; // クラス名を代入した変数

// 定数展開用の関数
$cst = 'cst';           // 関数名も変数に代入する
function cst($constant){
    return $constant;
}


// ヒアドキュメントでの使用例
echo <<< EOF
    <p>ふつうの文字</p>

    <p>$v</p>
    <p>{$cst(CONSTANT)}</p>

    <p>配列の$a[0]と$a[1]</p>
    <p>連想配列の{$h['key1']}と{$h['key2']}</p>

    <p>Sampleオブジェクトの$object->property</p>
    <p>Sampleオブジェクトの{$object->method()}</p>

    <p>Sampleクラスの{$class_name::$static_property}</p>
    <p>Sampleクラスの{$cst($class_name::CONSTANT)}</p>
    <p>Sampleクラスの{$class_name::static_method()}</p>
EOF

?>
```

```html:出力結果
ふつうの文字

変数の値

定数の値

配列の値1と値2

連想配列のkey1の値とkey2の値

Sampleオブジェクトのプロパティ

Sampleオブジェクトのメソッド

Sampleクラスのスタティックプロパティ

Sampleクラスの定数

Sampleクラスのスタティックメソッド
```
RailsエンジニアがElixirの環境構築とアプリの雛形を作ってみた

# はじめに

はじめまして、サーバーサイドをRubyで書いているさ犬です。

今回は巷で人気が出て来ている関数型言語Elixir（エリクサー）のMacでの環境構築とwebアプリケーションフレームワークphoenix(フェニックス)を使ってアプリの雛形を作ってみようと思います。

環境
---


macOS 10.12
Homebrew 1.0.8
node v6.9.0

対象者
---

* Railsでのアプリケーション開発経験あり
* 新しい技術を触ってみたい人

# 導入

```
$ brew install erlang
$ brew install elixir-build
$ brew install exenv
$ echo 'export PATH="$HOME/.exenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(exenv init -)"' >> ~/.zshrc
$ exec $SHELL
$ exenv install -l # installできるversion確認
$ exenv install 1.3.4
$ elixir -v
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.3.4
```

これでElixirのインストールが完了。

phoenixの導入準備をします。

```
$ mix local.hex # パッケージ管理ツールをインストール
# phoenixをインストール
$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phoenix_new.ez
```

これでphoenixの準備が完了しました。


# 開発

ではPhoenixアプリケーションを作っていきます。

`mix phoenix.new` のオプションを確認します。

```
$ mix phoenix.new

                                mix phoenix.new

Creates a new Phoenix project.

It expects the path of the project as argument.

┃ mix phoenix.new PATH [--module MODULE] [--app APP]

A project at the given PATH will be created. The application name and module
name will be retrieved from the path, unless --module or --app is given.

Options

  • --app - the name of the OTP application
  • --module - the name of the base module in the generated skeleton
  • --database - specify the database adapter for ecto. Values can be
    postgres, mysql, mssql, or mongodb. Defaults to postgres.
  • --no-brunch - do not generate brunch files for static asset building.
    When choosing this option, you will need to manually handle JavaScript
    dependencies if building HTML apps
  • --no-ecto - do not generate ecto files for the model layer
  • --no-html - do not generate HTML views.
  • --binary-id - use binary_id as primary key type in ecto models

Examples

┃ mix phoenix.new hello_world

Is equivalent to:

┃ mix phoenix.new hello_world --module HelloWorld

Without brunch:

┃ mix phoenix.new ~/Workspace/hello_world --no-brunch

```

今回はデータベースを `mysql` で作るので、以下のコマンドを実行します。

```
$ mix phoenix.new phoenixSampleApp --database mysql
```

これでアプリの雛形ができました。

データベースも作っておきます。

```
$ cd phoenixSampleApp
$ mix ecto.create
```

あとはサーバーを起動して、 ` http://localhost:4000` にアクセスします。

```
$ mix phoenix.server
```

以下のような画面が出れば完成です :tada: 

![](https://i.gyazo.com/f4bc1a5d88b5f6124c21a3f27d405c22.png)

# 所感

コマンドさえ慣れれば、あとはrubyとrailsにほとんど似ているのでハードルは低い印象を受けました！
UIViewからUIImageを生成する

# Problem

- UIViewからUIImageを作成したい。
- UIImageの背景は透明にしたい。
- 画質は低下させない。

# Solution

```swift
# Swfit2.3

import UIKit

extension UIView {
    func snapshotImage() -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, 0)
        guard let currentContext = UIGraphicsGetCurrentContext() else {
            UIGraphicsEndImageContext()
            return nil
        }
        layer.renderInContext(currentContext)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}
```

# Ref

- [How to capture UIView to UIImage without loss of quality on retina display](http://stackoverflow.com/questions/4334233/how-to-capture-uiview-to-uiimage-without-loss-of-quality-on-retina-display)
効果抜群！アプリインストール数を増やすコツ1つ！

こんにちわ！asuです（＾＾/

最近アプリの機能改善やデザイン改善をしていて、効果抜群のアプリインストール数UP方法があったのでご紹介します。

その方法はとてもシンプルで、App Storeのスクリーンショット画像を改善することです。

アプリを2016年5月にリリース後、<strong>インストール数やアクティブユーザー数の伸びに悩んでました(T_T</strong>

機能追加・改善やバグ修正するも効果なしといった状態。

そこで、下図のように、9月中旬に<strong>AppStoreのスクリーンショット画像のみをキチンと改善</strong>したら、<font size="5"><font color="FF55AA"><strong>インストール数だけでなく、アクティブユーザー数も伸び始めました！</strong></font></font>

そもそも、初めのリリースは1時間ほどでサクッと作ったもののままにしてしまっていたので、それが良くなかったようです。

AppStoreの画像を改善することで、インストールされやすくなり、それまでの機能追加・改善によってアクティブに使われるといった流れができたのだと思います。(このアプリは、広告など一切やっていないので純粋にスクリーンショット画像の効果のみが見えています。)

<a href="http://asksun.net/blog/wp-content/uploads/2016/10/mirror_app2.png"><img src="http://asksun.net/blog/wp-content/uploads/2016/10/mirror_app2.png" alt="CHANCE -便利な鏡タイプの顔診断アプリ(無料)" width="754" height="761" class="size-full wp-image-966" /></a><br>CHANCE -便利な鏡タイプの顔診断アプリ(無料)

[AppStoreの画像改善のポイント]
・刺さるキーワード調査
・できることを分かりやすく説明

もし同じ悩みをお持ちの方がいらっしゃいましたら是非試してみてください(＾＾/


<a href="https://itunes.apple.com/jp/app/chance-bian-lina-jingtaipuno/id1112059666?l=en&mt=8" title="便利な鏡タイプの顔診断アプリ(無料)">CHANCE - 便利な鏡タイプの顔診断アプリ(無料)</a>
[AWS][SES] SES で S3 に受信したメールを Slack に通知

SES では、メールを受信して S3 に保存しておくことができます。
ただ、S3に保存しておくだけだと、読むときにかったるいです。
S3 put event から Lambda をキックすると Slack に通知できたりして楽チンなので書いてみました。
(さらに SES 使って別のメールアドレスに飛ばしたりとかしても便利かもですね）

このスクリプトでは npm package [async](https://www.npmjs.com/package/async) と [mailparser](https://www.npmjs.com/package/mailparser) を使用してるので ```npm install async mailparser``` して ```node_mojules/``` ごと zip に固めて送ってくださいね。

```js:index.js
/*
Name: Email Forwarder
*/
exports.handler = function(event, context) {
	var slackConfig = {
		hostname:	"hooks.slack.com",
		path:		"/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX",
		channel:	"#channel",
		icon_emoji:	":ses:",
		color:		"good"
	};

	var aws = require('aws-sdk');
	var async = require('async');

	var bucket = event.Records[0].s3.bucket.name;
	var key = event.Records[0].s3.object.key;

	async.waterfall([
		function(nextProcess) {
			var s3 = new aws.S3({apiVersion: '2006-03-01'});
			s3.getObject({Bucket:bucket, Key:key}, nextProcess);
		},
		function(data, nextProcess) {
			var MailParser = require("mailparser").MailParser;
			var mailparser = new MailParser();

			// setup an event listener when the parsing finishes
			mailparser.on("end", function(result){
				console.log("Receive Mail: %j", result);
				nextProcess(null, result);
			});

			// send the email source to the parser
			mailparser.write(data.Body.toString());
			mailparser.end();
		},
		function(mail_object, nextProcess) {
			var https = require('https');
			var util = require('util');

		    var options = {
		        method:     'POST',
		        hostname:   slackConfig.hostname,
		        port:       443,
		        path:       slackConfig.path
		    };
		    var postData = {
		        "channel":      slackConfig.channel,
		        "username":     mail_object.from[0].name + "(" + mail_object.from[0].address + ")",
		        "text":         "Subject: " + mail_object.subject + "\n" +
		        				"From: " + mail_object.from[0].name + "(" + mail_object.from[0].address + ")" + "\n" +
		        				"To: " + mail_object.to[0].address,
		        "icon_emoji":   slackConfig.icon_emoji
		    };
		    postData.attachments = [{
		        "color":    slackConfig.color,
		        "text":     mail_object.text
		    }];

		    var req = https.request(options, function(res) {
				nextProcess(null, res);
		    });
		    req.on('error', function(err) {
		        console.log('problem with request: ' + err.message);
				nextProcess(err);
		    });
		    req.write(util.format("%j", postData));
		    req.end();
		}],
		function(err, res) {
			if (err) {
				console.log('err: %j', err);
				context.fail(err);
			} else {
				console.log('result: %j', res);
				context.succeed('Success!');
			}
		}
	);
};
```
FeliCaのPollingによるApplePayのWalletの動作

FeliCaを使ったシステムに近づけるとWalletが表示されるのに、Expressカード設定した場合にSuicaはTouchID認証せずに使えます。どうやらPolling時のシステムコードによって挙動が違うようなので調べてみました。

## システムコード別の挙動

カード固有のIDmを取得してみました。

| システムコード |応答カード| 挙動 |
|:-----------|:---|:---------|
| 0xFE00| QuickPay|Walletが起動してカード選択|
| 0x0003| Suica |Express設定されているカードのIDmが返る、設定されていない場合はWalletが起動してカード選択 |
| 0xFFFF| 全て |Walletが起動してカード選択|
| 0x0000| なし |Walletが起動してカード選択|
※iDはカードが無いので未確認

## まとめ

+ 交通系カード (Suica)のシステムコードでpollingがあった時はExpress設定されたカードのIDmや情報が返り、設定されていない場合はWalletが表示される
+ Suicaは読み取りされるとSuicaアプリに通知がされ、特に他のエレメントにアクセスしなくとも「カード読み取り済み」表示が出る。
+ Suicaのシステムコード以外のFeliCaカードに対するpollingがある場合にはWalletが表示される（対応カードが無くとも）
+ WalletでTouchID認証後にそのカードに対する応答が有効になりカードのIDmや情報が返る。

![IMG_0258.jpg](https://qiita-image-store.s3.amazonaws.com/0/14768/8c88ae8c-3274-39dc-ad82-bfd4fafae777.jpeg "IMG_0258.jpg")

FeliCaカードを使うシステムの多くはシステムコード0xFFFFを使って情報を取得し、必要な場合はカードの種別を判別しそれ以外の情報へアクセスする場合が多いです。iPhoneではSuicaを指定した場合以外は必ずWalletが表示されてしまいます。また、Suica指定してアクセスするとSuicaアプリに記録され通知がされてしまいます。

iPhoneを手持ちの認証カードの代わりに使いたいと思ったのですが、これではあまり便利では無さそうです...。

## その他

２枚SuicaがWalletに入っている場合の挙動は未確認です。システムコードによりカードを絞り込むような雰囲気は無いので、たぶんWalletが表示されるだけかと思います。

## 参考

OSXでnfcpyを使ってFeliCaを読む方法

http://qiita.com/zaburo/items/da0f9b1dd102565a5bb6

```
brew install bzr

brew install libusb
brew install libusb-compat

sudo pip install --upgrade pip
sudo pip install pyusb
sudo pip install docopt

bzr branch lp:nfcpy trunk

> python example/tagtool.py show

Type3Tag 'FeliCa Mobile 3.0' ID=013B*************
PMM=011************ SYS=FE00

```

※ nfcpyではpolling時のシステムコード指定ができませんでしたので、FeliCaSDK(Windows版)を利用して挙動を確認しました。
アンチパターンとマジックナンバー

#アンチパターン
ソフトウェア開発を失敗へと導く間違ったソリューションをパターン化したもの

参考にさせていただいたサイト
https://thinkit.co.jp/article/929/1

#マジックナンバー
* アンチパターンの一種
* プログラムのソースコードに直接記述された識別子として用いられる具体的な数字で、他の人や後から本人が見た時にその数字が何を表しているかわからないもの
* 保守や機能追加などをする際に、非常に大きな足かせとなる
* 下記の参考にさせていただいたサイトの例がわかりやすい

参考にさせていただいたサイト
https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)

参考にさせていただいたサイト
http://itpro.nikkeibp.co.jp/article/COLUMN/20070820/279836/?rt=nocnt

#マジックワード
マジックナンバーの文字列番
PCLに埋め込んだCocosSharpコードからZIPを取り出そうとしたら実機で動かない件

ものすごいピンポイントですが、困ったことと試したこと、最終的にうまく行った方法が誰かの役に立てば…。

# ■環境
- Windows 10
- Visual Studio Enterprise 2015 V14.0.25431.01 Update 3
- Xamarin 4.2.0.703

# ■前提
- VS＋Xamarinで、iOS/Androidマルチなアプリを作成
- PCLを介してコードを共通化
- 一部、CocosSharpを使ったゲーム部分あり

# ■事象
　PCL側に埋め込んだZIPファイルが、Releaseビルドおよびapkインストールで読み込みエラーになる。

##問題のコード

```csharp:sample1
    using (var zip = new ZipArchive(stream))
    using (TextReader reader = new StreamReader(zip.GetEntry(key + ".txt").Open()))
    {
        var strList = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
        return strList.ToList();
    }
```

##発生するエラー

```
    Xamarin caused by: android.runtime.JavaProxyThrowable: System.TypeInitializationException: The type initializer for 'SharpCompress.Common.ArchiveEncoding' threw an exception. ---> System.NotSupportedException: Encoding 932 data could not be found. Make sure you have correct international codeset assembly installed and enabled.
    System.Text.Encoding.GetEncoding(int codepage)<368820a9888f43ddb85d18e87189adbf>:0
    at SharpCompress.Common.ArchiveEncoding..cctor () [0x0000f] in <bdb2162ce57c47048969b76e22afb75f>:0
    --- End of inner exception stack trace ---
    Hoge.Fuga.Piyo.ExtractZip(string key)<e2bccd13542e46cdaa968185aed83fc8>:0
```

# ■解法
　Android側のプロジェクトのプロパティから以下の通り設定
　**Android Options＞Linker＞Additional supported encodings＞CJK** を追加

# ■根本原因（予測）
　標準で含まれていないEncodingであるcp932を使おうとしてエラー

# ■他に試してダメだったこと
- ZIPファイルをUTF8指定で圧縮（by.7z）

　　Windowsではファイル名をsjisを使って圧縮するらしく、LinuxとWindowsでやり取りすると文字化けするような事象は多々あるようです。
　　http://qiita.com/hoo89@github/items/46dcd8134061c392772f
　　ちなみに今回は圧縮対象も、圧縮結果もアルファベットのみだったのでそもそも化けないんですが…


- 読み込み場所でUTF8を使うように指定

　　問題のコードをこんな感じに。。

```csharp:sample2
    using (var zip = new ZipArchive(stream, ZipArchiveMode.Read, false, Encoding.UTF8))
    using (TextReader reader = new StreamReader(zip.GetEntry(key + ".txt").Open(), Encoding.UTF8))
    {
        var strList = reader.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
        return strList.ToList();
    }
```

- cp932を手動で追加できるようにコーディング

　　http://aquasoftware.net/blog/?p=895
　　http://vnext-y-blog.azurewebsites.net/archives/1191
　　そもそもPCLはProfile7なのでSystem.Text.CodePagesEncodingProviderが入れられない。
　　DLLをコピーするのも何が起こるかわからんので避けたい。。

#■最後に
　根本原因が本当に合っているのか、ほかに手法がないのか、まだまだ調べないといけないことはある気がします。
　…が、取り急ぎ動くこと最優先するのでお茶を濁す形でFinishです。


コメント、アドバイス、これってどうなん？
歓迎です！！
cython helloworld

cythonを初めて使いました。簡単なモジュールを動かすだけでもいろいろつまずいたのでメモとして残しておきます。

環境：Mac OS El Capitan

## ビルド手順

[Learning Cython Programming - Second Edition](https://www.packtpub.com/application-development/learning-cython-programming-second-edition)を参考にしました。コードは[ここ](https://github.com/redbrain/cython-book)あります。

本では`.pyx`ファイルを作っていますが、普通の`.py`ファイルを使って試しました。

```bash
cython -o helloworld.c helloworld.py
```

次にコンパイルをします。

```bash
gcc -g -O2 -fpic -c helloworld.c -o helloworld.o `python-config --cflags`
gcc -g -O2 -shared -o helloworld.so helloworld.o `python-config --libs`
```

こうして出来た`.so`ファイルをimportすると、segmentation faultが発生しました。
この問題については github に [issue](https://github.com/redbrain/cython-book/issues/5)が報告されており、gccに渡すオプションを変更すればエラーは起きませんでした。

```bash
gcc -g -O2 -fpic -c helloworld.c -o helloworld.o `python-config --cflags`
gcc -g -O2 -shared -o helloworld.so helloworld.o `python-config --ldflags`
```

また、[cythonのドキュメント](http://cython.readthedocs.io/en/latest/src/quickstart/build.html?highlight=distutils#building-a-cython-module-using-distutils)には、distutilsを使う手順が記載されており、こちらの方が簡単だと思いました。

## Symbol not found: \_PyUnicodeUCS4_Compare

練習が終わったので、自分がターゲットとしているモジュールをcythonでビルドしました。いざ使ってみると、Symbol not found: _PyUnicodeUCS4_Compare というImportErrorエラーが発生しました。

[こちらの記事](http://qiita.com/komakomako/items/b5c15f5229387bbfd53a)を参考に、virtualenvでインストールしていた python 2.7.12 を削除し、Macのシステムのpythonで動かしてみたらちゃんと使えました。

ビルド時にどのモジュールとリンクするかみたいな問題でしょうか？　素のpythonと違って、cythonは面倒ですねぇ。
npmとpackage.json

#npm
* パッケージ管理ツール
* JavaScript(Node.js)のパッケージやモジュールをインストール、アップデート、共有したりできる
* npmレジストリに登録された様々な外部ライブラリやパッケージをインストールすることができる



#package.json
* 依存関係を記したJSONファイル　　

###機能
* このファイルにプロジェクト毎に必要なパッケージの名前とバージョンを記述すれば、npmが勝手に必要な（依存しているという）パッケージをインストールしてくれる。
* インストールしたパッケージが依存しているパッケージや、さらにそれが依存しているパッケージも自動でインストールしてくれる

###どう使うのか
* `npm install`とpackage.jsonが存在するディレクトリでコマンドを打てば、package.jsonに記述されている依存パッケージを自動でインストールしてくれる
* ```npm install```をするとnode_modulesというディレクトリが```npm install```を実行したディレクトリに作成され、npmを利用してインストールしたパッケージは、この中に格納される

###活用の例
* 別の環境でそのプロジェクトの作業をしたい場合や、他の人がそのプロジェクトの作業をする場合は、そのプロジェクトのGitHub上のpackage.jsonに必要なファイルを記述しておけば、そのプロジェクトを```git clone```し、```npm install```すれば、npmで管理するパッケージに関してはそのまま使えるようになる。

#参考にさせていただいたサイト
http://sekky0905.hatenablog.com/
http://phiary.me/node-js-package-manager-npm-usage/
http://qiita.com/megane42/items/2ab6ffd866c3f2fda066
http://sekky0905.hatenablog.com/
https://www.npmjs.com/

参考文献
わかめ まさひろ（2014）『TypeScriptリファレンス Ver.1.0対応』インプレスジャパン
cordova-sub-webview-pluginでアプリ内にWebViewを埋め込む。

# cordova-sub-webview-pluginについて。
- Cordovaアプリ内で別のWebView（sub-webviewと呼んでいます）を開くためのプラグインです。
- sub-webviewは画面の上部もしくは下部に配置できます。
- sub-webviewの高さをオプションで指定することができます。

類似のプラグインとしてin-app-browserがあると思いますが、画面全体ではなく画面の一部で表示可能なところがこのプラグインの特徴です。

# リポジトリ
↓こちらで公開中です。
https://github.com/HikosakaRyo/cordova-sub-webview-plugin

# インストール
npmで以下のコマンドでインストールします。
```
cordova plugin add https://github.com/HikosakaRyo/cordova-sub-webview-plugin --save
```

# sub-webviewの作成
```js:
subwebview.createSubWebView(
    function() {
        // success callback
        console.log("success!");
    },
    function(msg) {
        // error callback
        console.log(msg);
    },
    {
        height: 400,    // height of the SubWebview
        atBottom: true  // bottom or top of the webview
    });
```

# コンテンツの表示

```js:
subwebview.showContent(
    function() {
        // success callback
        console.log("success!");
    },
    function(msg) {
        // error callback
        console.log(msg);
    },
    {
        url: 'http://...'   // url of the contents
    });
```

# sub-webviewのリサイズ

```js:
subwebview.resizeSubWebView(
    function() {
        // success callback
        console.log("success!");
    },
    function(msg) {
        // error callback
        console.log(msg);
    },
    {
        height: 400,    // height of the SubWebview
        atBottom: true  // bottom or top of the webview
    });
```


# sub-webviewの表示切り替え

```js:
subwebview.setVisible(
    function() {
        // success callback
        console.log("success!");
    },
    function(msg) {
        // error callback
        console.log(msg);
    },
    false // true => show, false => hide
    );
```

# 作った動機
とある仕事でCordovaアプリの画面の一部に外部サイトを表示する必要がありました。
上記実現のためにiframeの利用を検討しましたが、X-Frame-Options レスポンスヘッダにSAMEORIGINを指定をしているサイトが表示できないという制限がありました。
上記制限に対応するために大きさを指定可能なnativeのWebViewを表示するプラグインを作成しました。

# 完成度とかロードマップとか
一応手元の実機（iOS9, Androiod5.1）では外部サイトを表示できるところまでは動作確認済みです。
このあとは、ツールバー + 進む・戻る・閉じるボタン等を実装しようかと思っていました。
が、結局私の仕事では使わないことになった（「やっぱしiframeでいいか」ということになった）ため、ほったらかし中です。
暇になったら続きを実装するかも知れません。。
Postgresql cluster (with pgpool)を運用している中で使うquery

Postgresqlのclusterの運用で使うqueryをまとめてみました。
pgpool + streaming replication で構築されています。

## プライマリサーバ上 (on primary server)
### read-slave サーバの一覧を取得 (get list of read-slave servers)
```sql
# select * from pg_stat_replication;
```

### analyze, vacuumの実行状況を確認  (check analyze and vacuum execution)
```sql
# select relname, n_live_tup, n_dead_tup, last_vacuum, last_autovacuum, last_analyze, last_autoanalyze from pg_stat_all_tables WHERE schemaname = 'SCHEMA_NAME' and relname = 'TABLE_NAME';
```

### データベース、テーブルのサイズ確認 (check size of databases and tables)
```sql
# select pg_size_pretty(pg_database_size('DATABASE_NAME'));
# select pg_size_pretty(pg_relation_size('TABLE_NAME'));
```

## リードスレイブサーバ上 (on read-slave server)
### レプリケーションの遅延を確認 (check replication-delay time)
```sql
# select * from pg_stat_replication;
```

## 共通 (common)
### 実行中のクエリを実行時間が長い順に表示 (show running queries order by execution time desc)
```sql
# select procpid, start, now() - start AS lap, current_query from (select backendid, pg_stat_get_backend_pid(S.backendid) AS procpid, pg_stat_get_backend_activity_start(S.backendid) AS start, pg_stat_get_backend_activity(S.backendid) AS current_query from (select pg_stat_get_backend_idset() AS backendid) AS S ) AS S where current_query <> '' order by lap desc;
```

### 特定のsessionを切断 (terminate some specific session)
PIDは上のqueryを実行するなどして取得 (please get a target PID via query above or some other way)

```sql
# select pg_terminate_backend(PID) FROM pg_stat_activity WHERE datname = 'DATABASE_NAME' AND pid <> pg_backend_pid();
```
ruby large file

http://stackoverflow.com/questions/13849280/dealing-with-large-csv-files-20g-in-ruby

https://gist.github.com/barmstrong/1323865

https://infinum.co/the-capsized-eight/articles/how-to-efficiently-process-large-excel-files-using-ruby

http://smyck.net/2011/02/12/parsing-large-logfiles-with-ruby/

https://www.sitepoint.com/ruby-medicine-handling-large-files/

http://blog.honeybadger.io/using-lazy-enumerators-to-work-with-large-files-in-ruby/