OmniAICreator/Qiita-1.07M huggingface dataset:
チーム開発で使っているGitHubのリポジトリを壊してしまってから復元するまで

先日、チーム開発で使っていたGitHubリポジトリのmasterブランチを壊してしまうという事案を起こしてしまったので、その時の反省の意味も込めて復旧までの流れを記録しておきます。

# 発生事象

プルリクで開発中のブランチを誤って開発完了前にmasterへマージしてしまいました。

# まずは報告

まずはリポジトリを使っているチームメンバー全体にGitHubのmasterブランチを壊してしまったことを報告し、masterブランチをGitHubから `git pull` しないように周知しました。
今はまだ影響があるのはGitHubリポジトリだけですが、 `git pull` 等で問題のコミットを取り込んでしまうとメンバーのローカルリポジトリまで影響が広がってしまいます。

# 復旧方法の検討

GitHubでmasteへマージしたプルリクの変更を取り消すには二つの方法がります。

- Revert
- Reset

基本的にはリモートリポジトリのコミットログをResetで変更するのはご法度です。特にチーム開発ではGitHubリポジトリを巻き戻して他の開発者が使っているブランチのコミットを消してしまうと、そのブランチはGitHubリポジトリとのコミットログの整合性を失いマージ出来なくなってしまいます。

Revertを使うと、取り消したい変更のコミットログはそのままに、変更内容を元に戻すコミットを追加するためコミットログの不整合が起こることはありません。ただし、穴を掘ってそれを埋めるような無駄なコミットログが残ってしまいます。

特に今回取り消したかった変更は後々にマージ予定の開発中ブランチだったため、Revertでそのコミットログが途中まで残ってしまっていると後々マージするときに、コミットが重複することになり不整合が起こるのではないかという懸念があります。
また、masterブランチを壊してすぐに報告したので、問題となったコミットログを取り込んだメンバーが居なかったこともあり、GitHubリポジトリを巻き戻しても影響が無さそうです。

というわけで、今回はResetで問題のコミットの直前まで巻き戻してmasterブランチを修復することにします。

# コミットを巻き戻す

## ローカル

まずはGitHubのコミットログから巻き戻したい位置のコミットハッシュを探します。
![commit_log 2.png](https://qiita-image-store.s3.amazonaws.com/0/35616/f5c19c39-130a-8219-0254-18f048aae5c5.png)

今回は 98e795a までコミットを戻します。

Reset操作はローカルリポジトリのmasterブランチで行います。

```
git checkout master
git reset --hard 98e795a
```

リセットしたら git log で最新のコミットログが 98e795aになっていることを確認しておきましょう。

## GitHubへ反映

ローカルリポジトリを巻き戻したら、それをGitHubにも反映します。
巻き戻しを反映するには git push --forceを使用しますが、GitHubでは特定のブランチに --forceオプション付きでのプッシュを禁止することができるので、その場合はリポジトリの管理権限を持ったメンバーに一時的に設定解除を依頼しておきましょう。（完了後には設定を戻すことも忘れないようにしましょう）

```
git push --force origin master
```

プッシュが完了したらGitHubのコミットログが復元していることを確認して完了です。
その後は、チームメンバーへの完了報告もお忘れなく

# 注意点

中盤にも記載しましたが、このリポジトリを巻き戻す方法は同じリポジトリを使っている他メンバーにも影響を与える操作です。取り消したいコミットを他のメンバーが既に取り込んでいる場合には使えないのでご注意ください。
AndroidStudioでGoogleMapV2サンプルプロジェクトを動かすまでの手順

Androidアプリ用GoogleMapAPIv2を使った時のメモ的な記事です。
これを読んで初めて地図を使ったアプリを開発をする人がスムーズに開発一歩手前までいければ幸いです。


# 想定する環境・使用するAPIのバージョン
- Mac
- AndroidStudio1.4(1.xでも行けると思いますが自分が試したのは1.4だったので)

- GooglePlayServicesMap v8.1.0


# 手順

## GoogleMapのサンプルプロジェクトを作成
1. AndroidStudioの「Start A new Android Studio Project」をクリック。
2. 新規に作るアプリ名を入力→MinimunSDKLevelを設定→**GoogleMapsActivityを選択。**→Activity名を設定してFinish.
しばらくするとGoogleMapのサンプルプロジェクトが作成されます。

3. appディレクトリ直下のbuild.gradleに記載されている
` comple 'com.google.android.gms:play-services:8.1.0' ` 
を
` comple 'com.google.android.gms:play-services-maps:8.1.0' ` 
と修正する。（修正しないとGooglePlayServicesの余計なライブラリまで読み込んでしまうので。）

## Google Map Android APIの有効化
1. Google Developers Consoleにログインします。
2. Google Developers Console用のプロジェクトを作成します。
3. 作成したプロジェクトを開き、画面左上にある「ハンバーガーアイコン」をクリックします。

![スクリーンショット 2015-10-25 19.44.00.png](https://qiita-image-store.s3.amazonaws.com/0/14989/b01c340e-836c-ce85-629d-f84f8fe5ae3a.png)
4. API Managerをクリック。
5. 概要→Google Map Android APIをクリック。そして、「APIを有効にする」に切り替える。

## GoogleAPIの認証APIキーを取得
GoogleMapは認証APIキーを登録しないと使えないので、それ用のAPIキーを取得します。

1. コンソール上で[keytool -list -v -keystore ~/.android/debug.keystore]を実行。
2. パスワードを聞かれるので[android]と入力。
3. 証明書のフィンガープリントがプリントされるので、その中の「SHA1」の部分をコピーしておく。
4. 先ほど作成したプロジェクトの[API Manager]-[認証情報]をクリック。
5. [認証情報を追加]-[APIキー]-[Androidキー]をクリック。
6. APIキーの名前（なんでもいい）を入力。そして、「パッケージ名とフィンガープリントを追加」をクリック。
7. [パッケージ名]と[フィンガープリント]を入力し作成ボタンをクリック。パッケージ名はAndroidManifest.xmlのmanifestタグに記載されているpackageの値を入力。フィンガープリントは3.でコピーした内容を貼り付ける。
8. APIキーが表示されるのでそれを控える。

## 地図アプリの起動
1. AndroidStudioのプロジェクトのapp/src/debug/res/values/google_map_api.xmlを開く。
2. その中のgoogle_maps_keyの値に先ほど取得したAPIキーを設定する。
3. インターネットにつながる端末をつないでプロジェクトを実行すればOKです。成功すれば以下のような画面になります。

![スクリーンショット 2015-10-25 21.34.18.png](https://qiita-image-store.s3.amazonaws.com/0/14989/fbefec5f-eb2f-d673-ee26-4eec5b3037fb.png)

# まとめ

上記のような手順で地図アプリを起動することができます。このプロジェクトをベースにいろいろ機能を追加して遊んでみてはいかがでしょうか。
Unity5でハイクオリティなVRLIVEを作ってみた　part1　準備編

#はじめに

**初音ミクをハイクオリティで見たい！！**
と思ってMMDを始めたものの、いろんなエフェクト探したり他のソフトでテクスチャいじったりとぶっちゃけ面倒。
そんなあなたにピッタリなのがUnity5ですよ。
初心者でも比較的簡単にこんな感じの動画がすぐにできる。

Tda式アペンドミクさんで「私の時間」【unity5】
https://www.youtube.com/watch?v=s77J1bHK0PM

使用したのは無料ツールのみでエフェクトはUnity標準のモノを使っているので、MMEの様に探しに行く手間もなくなる。
しかもMMD動画を作るだけでなくOculus Riftなどを使ったVRLIVEも作れる。

Unityの公式マニュアルはよくわからないし、詳しく載ってるWebサイトは英語という感じだったのでやったことをまとめておく。

#作る上での留意点
####・MMDモデルやモーションのreadmeはよく読む
当たり前だけど一応書いておく。
たまにMMD以外のソフトで使用禁止と書いてある場合があるので無理やり使ったりしてトラブルにならないように。

####・MMDのカメラモーションは使えない
一応やり方はあるみたいだが、作者は途中で挫折した。
UnityにMMDのカメラモーションを読み込ませる方法
http://stangun.tumblr.com/post/129759292932/unity%E3%81%ABmmd%E3%81%AE%E3%82%AB%E3%83%A1%E3%83%A9%E3%83%A2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95

####・モデルやモーションによって動かない場合がある。
そもそも読み込めないモデルや、読み込めても正常に動作しないモデルがそれなりにある。
海外製のモデルはこのケースにかかることが多く、マテリアルの設定も面倒になる事があるので要注意。
またモーションも読み込まなかったり、若干動きが乱れたりすることもある。

####・背景に困る
今回は背景にはこだわらないが、LIVEステージの様な背景がほとんど無い。
MMDのStageも使えないものが多い。

####・よくわかんない
作者もよく分からない。
Googleで検索する癖をつけましょう。

#作者の作業環境
OS:Windows10
GPU：GTX970 4GB
Unity5.2.0f3
Oculus runtime0.7.0

VR機能を使わないならGTX700番台でも大丈夫かと。
GTX640M搭載機でテストした時はfpsが10くらいしか出なかった。

#準備するもの
・unity5
・MMD4Mecanim
・お気に入りのMMDモデルとモーション＋楽曲
・Oculus Rift DK2(無くても可）
・それなりのスペックがあるPC（VR機能を付けるなら）



#ミクさんを表示するまでの初期設定

この辺りは色んな方がブログやら参考書やらで解説しているから割愛。
Unity4でも5でもほとんど変わらない。
簡単なマニュアルもついてるし、以下の記事を参考にすれば比較的簡単にできるはず。

プログラミング初心者でもゲームが作れる！「Unity5」のインストール方法
http://hiromart.com/blog/how_to_install_unity5/

Unity5！インストールしてから起動までの流れ！~アカウント登録~
http://hiromart.com/blog/from_installation_to_start/

プログラミング初心者でも簡単！Unity5で3Dシューティングゲーム開発！！~プロジェクトの作成とUnityの設定~
http://hiromart.com/blog/3dshootinggame_unity/

MMD4Mecanimを使用してMMDモデルにUnityで踊って頂いてみた。
http://qiita.com/hiroyuki_hon/items/931c79164b0ffe19517f

#最後に
ここまでは他の記事とそんなに遜色ないので留意点だけには目を通していただければ。
解説つけると分量が増えるので全部でpart5くらいまでになるかと。

ちなみに掲載する内容は以下の記事のまとめ＋マニュアル＋αの内容なのでそちらも是非。

主婦写真講座 HDR ハイダイナミックレンジ by ほぼGOROmanさん Unity5の綺麗なミクさんの話とか
http://togetter.com/li/867671?page=2
Unity - マニュアル
http://docs.unity3d.com/ja/current/Manual/UnityManualRestructured.html


次回はマテリアルをいじっていきます。
http://qiita.com/yamashin0429/items/5506ae6e6101e80812e0
UbuntuでPostgresqlをRails開発用に使えるように設定する

私が使っているのはXubuntu15.10ですが多分Ubuntuでも同じです。

# Install
```zsh
% sudo apt-get install postgresql-server-dev-9.4 postgresql
```

# SuperUserなロールの作成
```zsh
% createuser hoge --superuser
```

hogeの部分は、Ubuntuで普段使っている自分のユーザー名と同じにします。

# createdb
上記までを済ませると、普段使いのユーザーでDBの管理権限を得られます。
余談ですがUbuntuではPostgresqlをインストールするとinitdb済みの状態になっており、localeがUTF8になってます。
日本語のorder byとかおかしくなりますので、私はいつもRailsアプリではlocal=CでDBを作ってます。

```zsh
% createdb --encoding=UTF8 --locale=C --template=template0 hoge
```

こうやって作るとこんな感じになります。

```zsh
% psql -l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 hoge      | hoge     | UTF8     | C           | C           | 
 postgres  | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | 
 template0 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)
```
分散型コンセンサス・アルゴリズム プロトコル まとめ

以下に移行しました<br><a href="http://block-chain.jp/tech/distributed-consensus-algorithm-protocol/" title="分散型コンセンサス・アルゴリズム プロトコル まとめ">分散型コンセンサス・アルゴリズム プロトコル まとめ</a>
MacとRaspberry piをインターネット共有でつないでみる



[ニフティクラウドmobile backend](http://mb.cloud.nifty.com/about.htm)のイベントでIoT系のイベントをやることが多くなったので、Tipsをまとめています。


今回はPCとRaspiを直接接続する方法をまとめる。
普通はRaspiをルーターにつないでssh接続を行うのだが、多人数だと煩雑なことも多いです。
Macはインターネット共有を使うと、MacとRaspiのEthernetの口をつなぐだけでSSH接続ができます。


# 有線接続の場合

ここではMacとRaspiを有線で接続する方法を記述したいとおもいます。
接続した時の図は下記

![12177845_925364404208869_1191390079_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/55227/563691d1-5930-2bf2-b23a-edd2c7f7146d.jpeg "12177845_925364404208869_1191390079_n.jpg")

※USBで電源供給、ThunderboltでEthernet接続している
では以下から順を追って説明します。

## システム環境設定を開く

まず、アプリケーションから「システム環境設定」を開きましょう
下記のような画面が開くので、上から３段目「共有」をクリックします

![スクリーンショット 2015-10-25 18.24.32.png](https://qiita-image-store.s3.amazonaws.com/0/55227/a8082d9f-2c61-1cca-90ec-e5fcc4bf8e59.png "スクリーンショット 2015-10-25 18.24.32.png")

## インターネット共有の設定を行う

MacとRaspiをLANケーブルで直接した状態で下記のような設定を行ってください。

![スクリーンショット 2015-10-25 18.32.29.png](https://qiita-image-store.s3.amazonaws.com/0/55227/6f39df16-d5d9-4574-5a9f-9323e390dc77.png "スクリーンショット 2015-10-25 18.32.29.png")

インターネット共有で「共有する接続経路」をWi-Fi
相手のコンピューターが使用するポートを「Thunderbolt Ethernet」
とそれぞれ設定します。
（ここの設定は個々人の環境に合わせて設定してください）

設定が適用されると、RaspiにIPアドレスが払い出されています。

## RaspiのIPアドレスを調べよう

RaspiのIPアドレスを調べるため「コンソール」アプリを立ち上げましょう
「アプリケーション」の「その他」の中に「コンソール」があります
コンソールの画面が開けたら、下記の順番で操作を行い、Raspiのアドレスが観れます。大抵192.168.2.2となっているようです。

![スクリーンショット 2015-10-25 18.38.02.png](https://qiita-image-store.s3.amazonaws.com/0/55227/33d90a23-62d2-bfbe-3e72-6aeef006e76c.png "スクリーンショット 2015-10-25 18.38.02.png")

## sshで接続しよう！

あとは下記のコマンドを入力して、SSH接続をしましょう！
パスワードは初期設定であればraspberryだと思われます。

```
ssh pi@192.168.2.2
```


# 無線接続の場合

次は無線接続の場合
一点注意なのですが、
MacとRaspi間をWifi接続してしまうと、ルーター・Mac間は別の方法で接続する必要があります。
また、Raspberry pi にあらかじめwifi設定が必要となります。
RaspiとPCを接続する方法を紹介しているのに、あらかじめRaspiに接続して設定を行う必要があるという・・・インターネット共有で無線接続を使う方法はイケてない。

つなぐと以下の形・・・ThunderBoltは家のルーターに有線接続されている・・・イケてない

![12180168_925381120873864_2038790187_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/55227/5a16de9a-322b-ddfa-9cc6-4bbb5d324640.jpeg "12180168_925381120873864_2038790187_n.jpg")

## インターネット共有でWifi設定

アプリケーションから「システム環境設定」を開き上から３段目「共有」をクリックし、インターネット共有の設定画面を開きます。

下記の図のように
共有する接続経路　「Thunderbolt Ethernet」
相手のコンピューターが使用するポート　「Wi-Fi」
に設定します。

![スクリーンショット 2015-10-25 20.31.06.png](https://qiita-image-store.s3.amazonaws.com/0/55227/2584ee67-b565-0fca-768a-1a261a077fe1.png "スクリーンショット 2015-10-25 20.31.06.png")

赤丸で囲った「Wi-Fiオプションをクリックすると、Wifiのネットワーク名やセキュリティ、パスワードが設定できます。

WPA-2パーソナルを選びました


## RaspiのWifi設定

下記のコマンドを打つと設定できます

```
sudo wpa_passphrase Your_SSID Your_pass | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
```

ちなみにIPアドレスは有線の場合と変わり、192.168.2.3でした。


これでRaspiを再起動すると「、SSH接続が行えます。
pi2 > DHT11 > 温度湿度測定 > 取り込みできた

```txt:動作確認
Raspberry Pi2 Model B
温度/湿度センサモジュール DHT11
```

データ(入出力)のピンとしてGPIO 04を使用。
Vccには3.3vのピンを使用。

以下のDHT11用のpythonコードを試したが、`ERR_RANGE`が出て取り込み失敗した。
https://www.raspberrypi.org/forums/viewtopic.php?t=69427&p=505235

Pi2の場合は失敗するようだ。

以下の方法を試した。Tomas Pytlicekによる方法では取り込みができた。
http://stackoverflow.com/questions/28913592/python-gpio-code-for-dth-11-temperature-sensor-fails-in-pi-2

```txt:結果
pi@raspberrypi ~/WORK $ sudo ./dht_test.py 
Temp=24.0*C  Humidity=36.0%
pi@raspberrypi ~/WORK $ sudo ./dht_test.py 
Temp=25.0*C  Humidity=35.0%
pi@raspberrypi ~/WORK $ sudo ./dht_test.py 
Temp=24.0*C  Humidity=36.0%
```

しかしながら、小数点の値が常に0になっていてどこかおかしいのかもしれない。

<hr>
(追記 2015/10/25)
DHT11は整数までの測定のようだ。


<hr>
(追記 2015/10/26)
http://files.amperka.ru/datasheets/dht11.pdf
のPage 3にある表に「Resolution 1」と記載があり、これが「整数でしか取り込みできない」という意味なのだろうか。

持っているのは3ピンで、pdfの記載は4ピンの違いはある。
[Django] Model Class内でのMeta Classの記述場所

#こう書いてました
```py:Person.py
class Person(models.Model):

    class Meta:
        verbose_name_plural = 'people'

    """
    fieldの定義
    """

```

#ですが、こう書くらしい
```py:Person.py
class Person(models.Model):

    """
    fieldの定義
    """

    class Meta:
        verbose_name_plural = 'people'

```

#引用元
Coding style | Django documentation | Django
https://docs.djangoproject.com/en/1.8/internals/contributing/writing-code/coding-style/#model-style
python > マイクロ秒sleep > import time / usleep = lambda x: time.sleep(x/1000000.0) / usleep(100)

pi2でマイクロ秒単位のsleepを使いたい。

http://stackoverflow.com/questions/5568646/usleep-in-python

```usleep.py
import time
usleep = lambda x: time.sleep(x/1000000.0)

usleep(100) #sleep during 100μs
```

一度usleep()を定義しておけば、実行時が楽。
Androidのテストに役立つツール2つ

Android端末向けにアプリやwebサイトを開発するときに役立つツールと接続方法のメモ。

## Vysor

[Vysor](https://chrome.google.com/webstore/detail/vysor-beta/gidgenkbbabolejbgbpnhbimgjbffefm?utm_source=chrome-ntp-icon)はGoogle ChromeのアプリでPCに接続されたAndroid端末の画面をPC上に表示することができる。

ただし、Screan Recording機能を利用しているらしくAndroid4.4(Kitkat)以降の端末でしか使えないようだ。

### 特徴
- 表示するだけでなく、PC側から操作することができる。
- 文字入力をPCのキーボードを使ってできるのが非常に便利。
- 日本語の入力もPC側のIMEではなく端末側の機能を使うのだが可能。
- Vysorを利用しながら、Android Studioから開発中のアプリを端末で起動することもできる
	- アプリの開発中に使えば、アプリを起動して端末を手を持っていくことなく、PCの上で操作できてしまうので便利。
	- 動作そのものは完全に端末側なのでエミュレータではなく実機上で試しながらの開発が効率的に行える。
- Chrome上のアプリなのでWindowsでもMacで動作する。（多分、Linuxでも）

### 使い方
#### 端末側の設定
- USBデバッグを有効にする

#### Chrome側の設定
- Chromeウェブストアから[Vysor](https://chrome.google.com/webstore/detail/vysor-beta/gidgenkbbabolejbgbpnhbimgjbffefm?utm_source=chrome-ntp-icon)をインストールする。

以上、設定はこれだけ。

#### 接続
1. Android端末をPCに接続する
2. ChromeアプリランチャーからVysorを起動する

 ![vysor.png](https://qiita-image-store.s3.amazonaws.com/0/32533/818715fc-6166-e0c0-e5a1-9bb21b383bdc.png "vysor")
3. 「Find Devices」ボタンをクリックして接続した端末を探す
4. 端末が表示されたら選択する。
5. リストに選択した端末が表示されるのでクリックすると別ウィンドウでその端末の画面が表示される。
6. あとは、そのウィンドウの画面をクリックするなり操作すれば端末を操作することができる。

## Chrome Developer Tools
Chrome Developer Toolsは端末をエミュレーションしてwebページを表示することができるが、Android端末で動作しているChromeに接続して実機で動作しているページをデバックすることもできる。

### 接続方法
1. USBデバックを有効にしたAndroid端末をPCに接続する
2. PCのChromeで「chrome://inspect」を開く
3. Android端末でChromeを起動し、デバッグしたいURLを開く
4. PC側のchromeの方にAndroid端末のChromeのページが表示されるので inspect というリンクをクリックするとAndroid側のChromeに接続したDevToolsが開く
![inspext.png](https://qiita-image-store.s3.amazonaws.com/0/32533/1809cc4c-e714-a12f-7365-f6afc1d49b88.png "inspect")
英語メモとりはブラウザ上で行うと捗る

個人的に非常に便利だと感じたのでメモしておきます。

ブラウザ上で行う利点は以下。
・クラウド上で単語帳が管理できる
・PCでもスマホからでも確認できる
・不明英単語の意味を一瞬で調べられる

##1.カーソルを合わせてパパッと意味を調べる

Chromeの拡張機能に以下を登録します。
[iKnowポップアップ辞書（無料）](http://iknow.jp/popup_dictionary_extension)

これはブラウザ上に表示されている英単語にカーソルを合わせるだけで
その上部に単語の意味が表示されるという優れものです。

さらに発音も確認できます（ネット環境必須）


##2.クラウド上の単語帳（Excel）を編集

Chrome上でExcelを編集保存できるようにします。
[Excel online（無料）](https://chrome.google.com/webstore/detail/excel-online/iljnkagajgfdmfnnidjijobijlfjfgnb?hl=ja)

マクロは機能しないようですが、
簡単な編集であればこれで事足ります。

しかも無料という。
Officeが入っていないPCでも安心ですね！



##x.Excel単語帳

これは補足です。
Excelにわからない単語をまとめているわけですが、
簡単にテストできるツールを発見しました。
（しかも公式で！）

[Officeスタイルカタログ：単語帳](http://www.microsoft.com/ja-jp/office/2013/stylecatalog/excel/excel15.aspx)

Excel online上ではマクロが使えないので
利用するときにはローカルでごちょごちょする必要がありますが、
かなり便利です。
SafariのSIMBLをuninstall

もはや何のために入れたのか忘れてしまったが。

Tumblr用のpluginがテストされてないよというエラーが出てくるのでアンインストールをずっとしたかった。このスクリプト通りで出来ました。

https://github.com/darwin/simbl/blob/master/pkg/uninstall
Rails で Session Store が使えないと思ったら rails-api が原因だった

Rails で JSON の API を提供しつつ、サーバーサイドレンダリングもするアプリケーションを作っていたのですが、ユーザ管理をしようと思ったところで、`session[:user_id] = user.id`のようにいつもどおりユーザ情報をSessionで管理しようと思ったら、どうも Session が上手く使えてない模様。
config周りを見ても

```config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: '_app_session'
```

としっかり設定されているし、なんで使えないんだろうと思ったら `rails-api` の gem が悪さをしていたみたいです。
[rails-api の README](https://github.com/rails-api/rails-api#other-middlewares) をみると
>Session Management: If a config.session_store is supplied and config.api_only = false, this middleware makes the session available as the session method in ActionController.

と書いてあり、

```config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: '_app_session'
Rails.application.config.api_only = false
```
としてあげる必要がありました。

`rails-api` を使って API を提供しつつ、サーバーサイドレンダリングもするアプリケーションを作ろうとするときには要注意ですね。。
chatworkで天気予報【chatwork API】

#明日晴れるかな
毎晩明日の天気を通知してくれると便利だと思って…

#livedoor天気APIの仕様
http://weather.livedoor.com/weather_hacks/webservice

>（例）「福岡県・久留米の天気」を取得する場合
>下記URLにアクセスしてJSONデータを取得します。
>基本URL + 久留米のID（400040）
>http://weather.livedoor.com/forecast/webservice/json/v1?city=400040

#phpでchatworkへ投稿する
```php:chatwork
<?php

  $cityid = 取得したい地区のID;
  $url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city='.$cityid.'';
  $json = file_get_contents($url, true);
  $json = json_decode($json, true);
 
  // Public
  $title = $json['title'];
  $description = $json['description']['text'];
  $publicTime = $json['publicTime'];
  $copyright = $json['copyright']['title'];
  $copyrightLink = 'http://weather.livedoor.com/area/forecast/';
  //$json['copyright']['link']
 
  // Location
  $city = $json['location']['city'];                
  $area = $json['location']['area'];               
  $prefecture = $json['location']['prefecture'];    
  $link = $json['link'];
  $pinpoint = $json['pinpointLocations'];

  
  //forecasts
  foreach ($json['forecasts'] as $entry) {
    $dateLabel = $entry['dateLabel'];                               
    $telop = $entry['telop'];                                       
    $date = $entry['date'];                                         
    $min = $entry['temperature']['min'];                            
    $max = $entry['temperature']['max'];                            
    $mincelsius = $entry['temperature']['min']["celsius"];          
    $minfahrenheit = $entry['temperature']['min']["fahrenheit"];    
    $maxcelsius = $entry['temperature']['max']["celsius"];          
    $maxfahrenheit = $entry['temperature']['max']["fahrenheit"];    
    $image = $entry['image']["url"];                               
 
    // NULL
    if (!isset($min)) { $mincelsius = "--"; }
    if (!isset($max)) { $maxcelsius = "--"; }
    if (!isset($celsius)) { $min = "--"; }
    if (!isset($fahrenheit)) { $min = "--"; }
    
    }
    
    $forecasts = $json['forecasts'];
    
    $body  = "";
    $body .= "[info][title]明日".$forecasts[1]['date']."のお天気[/title]".
             "明日は『".$forecasts[1]['telop']."』\n".
             "最高気温".$forecasts[1]['temperature']['max']["celsius"]."℃\n".
             "最低気温".$forecasts[1]['temperature']['min']["celsius"]."℃\n".
             "©".$copyrightLink;
             "[/info]"."\n".
    $option = array('body' => $body);
    $ch = curl_init();
    /*表示させたいチャットのルームID*/
    $room_id = 000000;
    curl_setopt($ch, CURLOPT_URL, 'https://api.chatwork.com/v1/rooms/'.$room_id.'/messages');
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-ChatWorkToken:チャットワークのAPIキー'));
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($option, '', '&'));
    $response = curl_exec($ch);
    curl_close($ch);
```

#cronで毎晩定刻にphpを起動
レンタルサーバだったらコンパネから簡単に設定できる（はず）
さくらサーバではできました。

#イメージ
![tenki.jpg](https://qiita-image-store.s3.amazonaws.com/0/38503/df2b207b-a2b3-1f65-e54b-5edeb5fa5d18.jpeg)


#参考サイト
[お天気情報 API Weather Hacks を PHP で使ってみた](http://webrawl.org/weather-haks-api/)

webrawl様、Livedoor天気部分~~パクら~~参考にさせて頂きました。
Macbook AirでRaspberry piのOSイメージを書き込む



[ニフティクラウド mobile backend](http://mb.cloud.nifty.com/)のIoT系セミナーでRaspberry pi を取り扱うことがあり以外と、事前準備の部分で詰まったので整理をしていく

今回はRasberry pi ver2のOSイメージを描きこむことを行います。
microSDカードを使います。

# OSを選ぼう

いかにRaspberry pi用のOSイメージが一覧であります。
その中でRASPBIANをDLします
https://www.raspberrypi.org/downloads/

# Diskをフォーマットしよう

microSDにイメージを書き込めるようにフォーマットを行います。

## microSDとPCを接続する

そのためにPCとmicroSDを接続する必要がありますが、Mac Book Airには差し込み口がありません。ので下記のようなSDカードライターを使います

![12179007_925051937573449_598243523_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/55227/ee9a7ed4-e3dd-ba53-bfdf-54c9cb910dc4.jpeg "12179007_925051937573449_598243523_n.jpg")

## ディスクをフォーマットする

カードライターにmicroSDを差し込み「ディスクユーティリティー」を開きます。下記のようにカードリーダーを選択し、「パーティション」タブを選択し下記のように設定を行います。

![スクリーンショット 2015-10-24 23.02.37.png](https://qiita-image-store.s3.amazonaws.com/0/55227/38337d82-af1b-5670-3b32-9e97e95c3c6d.png "スクリーンショット 2015-10-24 23.02.37.png")

「適用」押下します。

しばらく待つと、フォーマットが終わります。
（フォーマットを行うと、カード内のデータが全て消去されますのでご注意ください）


# Diskにデータを書き込もう

## diskutil listでmicroSDのパスを調べる

```
 diskutil list
 
 /dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *121.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage                         120.5 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Macintosh HD           *120.2 GB   disk1
                                 Logical Volume on disk0s2
                                 9F4F256D-970A-4C99-877D-D62725DF869E
                                 Unencrypted
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *8.0 GB     disk2
   1:                  Apple_HFS 名称未設定 1            8.0 GB     disk2s1
```

/dev/disk2　がどうやらmicroSD

## ディスクをアンマウントする

```
diskutil UnmountDisk /dev/disk2
```

ディスクに書き込めるようにummount

## 書き込む

```
sudo dd bs=100m if=/path_to_imagefile/hogehoge.img of=/dev/disk2
```

一般的なものとは違い、bs=100mで行った、control+Tで途中経過を見えるので行う

```
7948206080 bytes transferred in 6464.299785 secs (1229554 bytes/sec)
```

結構時間がかかった・・
ExpressでCSRF対策入門

- セキュリティ対策
- 不正なデータがpostされないようにする
- セッションが必要
- サーバー側で発行されたトークンをpostの際にフロントから送ってやる？

# 必要なmiddleware
- cookieParser
- session
- csrf

```javascript:app.js
app.use(express.cookieParser());
app.use(express.session({secret : 'awsedrftgy123456'})); // ランダムな文字列
app.use(express.csrf());
```

# カスタムmiddleware
トークンを使用するためのカスタムmiddlewareです

```javascript:app.js
app.use(function(req, res, next) {
	// csrfトークン
	res.locals.csrftoken = req.csrfToke();
	next();
});
```
# form内に仕込む

```html
<input type="hidden" name="_csrf" value="<%= csrftoken %>" />
```

formのあるページにアクセスして、ソースに上記が表示されます。
VBAからpowershellコマンドを実行

VBAからpowershellスクリプトを呼び出したかったので作成。

ネットで検索していろいろな方法を試してみたけどこれでやっと成功しました。

Dos窓からpowershellを呼び出します。画面は非表示です。

```
Public Function callPowershell(ByVal cmdStr As String)
'@@powershellコマンドを実行
    Dim Wsh
    Set Wsh = CreateObject("Wscript.shell")
    
    Wsh.Run "powershell -ExecutionPolicy RemoteSigned -Command " & cmdStr, 0
End Function
```

ブログでも紹介してます→http://anosonote.hatenablog.com/entry/2015/10/25/171619
Kindle Fire 2015 にGoogle Playをインストール

## 参考

* [root無しで新しいFireタブレットでGoogle Playが動いた！ヽ(^◇^*)/: にゅーひぐらしblog](http://higurashi.asablo.jp/blog/2015/10/03/7823166)
* [Fire Phone - How to Install Google Play Stor… | Amazon Fire Phone | XDA Forums](http://forum.xda-developers.com/fire-phone/general/fire-phone-how-to-install-google-play-t2977237%3CBR%3E)

## download

* [Kindle Fire HDX Playstore - OneDrive](https://onedrive.live.com/?cid=73036323a69e3cf1&id=73036323A69E3CF1!1484&authkey=!AIVXLFXAOWDeM0Q)

## インストール

* 設定＞セキュリティー＞不明ソースからのアプリ＞ON
* ESファイルエクスプローラーからDropbox経由でapkをDownloadsにコピー、インストール
StoryBoardを生かしたアプリ作りについて

#### 概要
StoryBoardを用いることで画面遷移がコードで実装しなくても楽に行うことができるようになったが、
StoryBoardを一部分割したい、1つのStoryBoardで多数のViewControllerを用いて処理の分割したい
といった内容について投稿してみる。


#### Container View Controller

![スクリーンショット 2015-10-25 15.45.02.png](https://qiita-image-store.s3.amazonaws.com/0/89599/3fa2552d-1a6b-2309-fb71-cca6d2b7e17a.png)

iOS5から使えるようになった機能
StoryBoard上のViewControllerに子のViewControllerを配置することができる。
よくやることとして
UITableViewの処理をUITableViewControllerのサブクラスに置いてあげて、
StroyBoard上のUITableViewControllerのクラスをサブクラス指定してあげて、
ContainerViewControllerにSegueさせるということをやっている。
TabelViewの中身が静的な物であればStoryBoard上に直接書くというのも考えてもいいと思う。
ViewControllerの肥大化を防ぐことにも繋がるのではなかろうか。

この時のクラス構成としてはこうなった。

![スクリーンショット 2015-10-25 15.49.11.png](https://qiita-image-store.s3.amazonaws.com/0/89599/6059738f-7b23-cda9-26ac-7bdc003fc73c.png)
![スクリーンショット 2015-10-25 15.49.43.png](https://qiita-image-store.s3.amazonaws.com/0/89599/267bf7d5-78fb-d2ac-279c-e8ec2f1ed9d4.png)




#### StoryBoard Reference

![スクリーンショット 2015-10-25 16.02.38.png](https://qiita-image-store.s3.amazonaws.com/0/89599/a5e8e08b-8602-384f-2ed8-0114efb002b3.png)

この機能はXcode7から用いることができるようになった機能
StoryBoardの特徴として
1つのStoryBoardで画面構成を作成することができるが
多人数の開発だと競合を多発させる場面が出るだろう。
できるだけ競合を防ぐためにもStoryBoardは細かく作っていきたい。
個人的には1つのStoryBoardで1つだけの画面を作っていきたい派である。
ちょっと前ではStoryBoardを分割するためにコード上でStoryBoard上のViewControllerを呼び出してpushさせるということをやっていたがそれをInterfaceBuilder上でできるのはすごい。

上の図ではChannelListと記載されたセルをタップした時に
別のStroyBoardを呼ぶようになっている。
ESXi6.0 on GA-H97N-WIFI


GIGABYTE「GA-H97N-WIFI」に「ESXi6.0」をインストールするメモ。
多分「GA-Z97N-WIFI」等も同様だと思います。

通常インストールではSATA接続のHDD/SSDとNIC(Realtek)が認識されないので、カスタムインストーラでインストールします。

ちなみに、NIC(Intel)１個しか使わない場合は、BIOSでSATAモードをRAIDに設定するとHDD/SSDが認識されるらしく、通常インストーラでもインストールできます。

## 用意するもの

+ Windows PC（or Wine）

+ vSphere PowerCLI
https://communities.vmware.com/community/vmtn/automationtools/powercli

+ ESXi-Customizer-PS
http://www.v-front.de/p/esxi-customizer-ps.html

+ ESXi無償評価版ライセンス
https://www.vmware.com/jp/tryvmware/?p=free-esxi6


## カスタムインストーラ作成手順

1. vSphere PowerCLIをインストール
2. ESXi-Customizer-PSをダウンロード
3. vSphere PowerCLIを起動してコマンドを実行

### vShpere PowerCLIをインストール

下記からWindows用インストーラをダウンロードして、インストール。
https://communities.vmware.com/community/vmtn/automationtools/powercli

> VMware vSphere PowerCLI 6.0. Release 2

すべてデフォルト設定でOKなので詳細は割愛。


### ESXi-Customizer-PSをダウンロード

下記からESXi-Customizer-PSをダウンロードします。
http://www.v-front.de/p/esxi-customizer-ps.html

> ESXi-Customizer-PS-v2.4.ps1

Cドライブ直下等に移動しておくと良いと思います。
いつの間にかCドライブ直下にファイルを置く際は管理者権限が必要になったようですが…

以前はESXi-Customizerというツールで作成する方法もありましたが、現在はサポート対象外になったようなのでこちらを使います。


### vSphere PowerCLIを起動してコマンドを実行

vSphere PowerCLIを普通に起動すると、最初エラーが表示されます。
「管理者で実行」して最初に下記コマンドを実行します。

```PowerCLI
Set-ExecutionPolicy RemoteSigned
```

ESXi-Customizer-PSが置いてあるディレクトリに移動して、次のコマンドを実行してESXi6.0カスタムインストーラのISOファイルを生成します。

```PowerCLI
.\ESXi-Customizer-PS-v2.4.ps1 -v60 -vft -load sata-xahci,net55-r8168
```

デフォルトのAHCIモードでHDD/SSDを認識するようになり、RealtekのNICも認識されるようにドライバを追加したカスタムインストーラを生成します。

ドライバ等のリストは下記を参照して設定しています。
https://vibsdepot.v-front.de/wiki/index.php/List_of_currently_available_ESXi_packages

色々試した結果、上記構成で落ち着きました。


### ESXi6.0をインストール

ESXi-Customizer-PSで生成したISOファイルをLinuxのインストーラ等と同様にUSBに書き込むか、CD-Rに書き込んでインストールメディアを作成します。

あとは通常インストールと同様です。
HDD/SSDが認識されるようになっていると思います。

また、インストール後、再起動するとNICも2個認識されると思います。

### vSphere Clientのインストール

ESXi6.0をインストールしたホストのIPアドレスにブラウザからアクセスします。
ページが表示されたら「Download vSphere Client」のリンクがあるので、そこからインストーラをダウンロードして、インストールします。


### ライセンス登録

vSphere Clientを起動して、ESXi6.0をインストールしたホストに接続します。

「構成」タブを開くと「ライセンス機能」という項目があるので、そこでライセンスを入力します。
右上に「編集…」という小さいリンクがあるので、そこから入力画面を開きます。

ライセンスは下記ページで参照できます。
（VMWareのアカウントが必要です。）

https://www.vmware.com/jp/tryvmware/?p=free-esxi6
Visual Studio CodeでRustのコードをビルドするときのtasks.jsonの設定

Rustを触ってみたい。

けど、ガチプログラマじゃないので、Visual Studio Codeでふわっと触るくらいでいい。でも、ビルドのためにコマンドラインを開くのはだるいので、エディタからの操作で完結させたい。

みたいなニッチな欲望を満たすための設定。

## Tasks

Visual Studio CodeにはTasksというのがあって、これを設定すると`Ctrl+Shift+B`でビルドが、`Ctrl+Shift+T`でテストが走るようになる。

参考：https://code.visualstudio.com/Docs/editor/tasks


## `tasks.json`を設定

↓のブログ記事が詳しい。

参考：
[Rust Using Visual Studio Code | mobiarch](https://mobiarch.wordpress.com/2015/06/16/rust-using-visual-studio-code/)

`problemMatcher`を設定しておくと、エラーが出た場所をハイライトしてくれる？っぽいけど、めんどくさいのでとりあえず省略。とりあえずミニマルな設定はこんな感じっぽい。

```json:tasks.json
{
	"version": "0.1.0",
	"command": "cargo",
	"showOutput": "always",
	"tasks" :[
		{
			"taskName": "build",
			"isBuildCommand": true
		},
		{
			"taskName": "run"
		},
		{
			"taskName": "test",
			"isTestCommand": true
		}
	]
}
```
今後イケそうなデスクトップGUIフレームワーク

自分用の検討メモ。http://stackoverflow.com/questions/6834537/packaging-a-node-js-webapp-as-a-normal-desktop-app を参考にした。結論から言うと、[Electron](http://electron.atom.io/)にした。[いささか無理やりな方法](http://qiita.com/hachi8833/items/b43b564f7c218e885392)で。

# デスクトップ GUI フレームワークに自分が求めるもの

## 必須
* クロスプラットフォームであること。Mac、Win、Linuxで動いて欲しい。クロスコンパイルまでは我慢する。
* ブラウザのレンダリングエンジンを使用するWebKitが使えること。今ベースにするならChromeだろう。
* HTML/CSS ベースで UI を組み立てられること。GUI API でガシガシ作っても、5年もしたら陳腐化しそう。
* 無料であること。Qtにしたかったのだけど、この点で泣く泣く諦める。使いたかったのはWebKitだけなのだけど、それにしてはあまりに大袈裟過ぎる。
* アプリケーションを単一バイナリで配布できること。あれをインストールこれをインストールというのを一般のユーザーにさせたくない。
* httpサーバーを内包して、なんちゃって一人RESTみたいなこともできること。

## もし可能なら
* クロスランゲージであること。Golangが念頭にあるのだけど、言語を選ばないものがなおいい。
* iOS、Androidプラットフォームにも今後展開が見込まれるものであって欲しい。
* 単一バイナリが難読化されていること。unzipするだけで中身を見られたくない。

で、散々探して、以下が今のところイケてそう。

# [Thrust](https://github.com/breach/thrust)（[go-thrust](https://github.com/miketheprogrammer/go-thrust/)）

当初golang用の[go-thrust](https://github.com/miketheprogrammer/go-thrust/)を見つけて検討していくうちに、その本体である[Thrust](https://github.com/breach/thrust)が多数のプログラミング言語に対応していることを知り、一気に好印象。星も多数付いている。

[go-thrust](https://github.com/miketheprogrammer/go-thrust/)は思ったよりずっと簡単にチュートリアルを起動でき、自分のGolangコードにもあっさり移植できた。`go build`でスタンドアロンのバイナリをビルドできるのが最高。

まだMac環境でしか試していないけど、`go run` でGUIを起動するとメニューが表示されたりされなかったり、微妙に不安定。`go build`でバイナリを作れば大丈夫そうではある。

なぜかRubyには未対応。Rubyにも対応してくれればさらによいのだけど、構造がそこそこ簡素なので、腕に覚えのある人がちょっと頑張ればRubyにも移植できそうな雰囲気。もっといろんな言語に移植されて人気出て欲しい。

HTML/CSS/HTTPサーバー周りを直接サポートしているわけではないので、そのあたりは自前で導入が必要。逆に言えば好きなものを使えばよい。自分の場合は既存のコードが既にHTML/CSSベースだったので話が早かった。

[ここの記事](http://www.joshondesign.com/2014/12/16/nodethrusttut)がわかりやすい。

<del>追記: thrust-goのメニュー追加が今のところ動かない。もしかするとMac OS X El Capitanがらみかも。</del>

追記: 今のところカット/コピー/貼り付けという基本操作が使えないことが判明...惜しい。さらに微妙に不安定な動作も追い打ちをかけた。結局、go-thrustはやめて以下のElectronに乗り換えた。

## 追伸
Thrustと似たようなフレームワークで[CFE2Go](https://github.com/cztomczak/cef2go)というのもあった。しかしこちらはネイティブUI画面のためにC言語のソースなどが多数あり、`go build`一発というわけにはいかなさそう。せっかくGolangを使うのだから、今時Makeファイルとか使いたくない。

# [Electron](http://electron.atom.io/)

今急速に伸びているらしきJS+Chromeベースのフレームワーク。クロスプラットフォームであり、単体バイナリも作れる。機能がかなり豊富で、デフォルトのデザインもなかなか美しい。

基本JS以外の言語は念頭にない。すごく未練が残るのだけど、Golangと簡単に連携できなさそうなので今回は残念ながらパス。JSだけでアプリを作るなら今はこれだろう。Golangと連携できないかと思っていろいろ探したけどめぼしいものが今のところ見当たらず。

追記: GoでHTTPサーバーを作ってそれをElectronに内蔵すればいけそうな気がしてきた。記事を書いたときは[Electronで配布可能なスタンドアロンアプリを作れる](http://qiita.com/nyanchu/items/15d514d9b9f87e5c0a29)ことに気付いてなかった。ごめんなさいごめんなさい。
ただしMacで開発中にクリップボードが効かなくなることがあったので[この方法](http://qiita.com/hachi8833/items/12a06c5ba895f95eaf67)で回避が必要かも。
# [Nw.js](http://nwjs.io/)

旧Node-webkitだとのこと。こちらもElectronと基本的に同じ特性だけど、やや押され気味か。~~こちらには[golang-nw](https://github.com/lonnc/golang-nw)というバインディングがあるのだけど、うまく動かなかったのでパス。~~ちゃんと動きました。ごめんなさいごめんなさい。

# [gxui](https://github.com/google/gxui)

期待の新星（しかも公式）かと思いきや、早々にディスコンになってた...すごく星集まってるのに...

# [ui](https://github.com/andlabs/ui)

名前はそっけないけど、もしやいけるか？「まだ死んでない」というか「まだまだ作り中です」と言ってるけど。
GitHubのPull Requestが作成されたら自動でレビューアをアサインする


WebHookから呼ばれることが前提

```roulette.go
package main

import (
	"encoding/json"
	"io"
	"log"
	"math/rand"
	"net/http"
	"os"
	"strings"
)

var (
	githubToken = os.Getenv("GITHUB_TOKEN")
	githubUsers = strings.Split(os.Getenv("GITHUB_REVIEWERS"), ",")
)

// assign reviewer
func assign(url string, user string) error {
	assignBody := "{\"assignee\":\"" + user + "\"}"

	// update state
	r, _ := http.NewRequest("PATCH", url, strings.NewReader(assignBody))
	r.Header.Add("Authorization", "token "+githubToken)
	r.Header.Add("Content-Type", "application/json")
	client := &http.Client{}
	resp, err := client.Do(r)
	defer resp.Body.Close()
	if err != nil {
		log.Print(err)
		return err
	}
	return nil
}

func comment(url string, user string) error {
	body := "{\"body\":\"@" + user + "please review\"}"
	r, _ := http.NewRequest("POST", url, strings.NewReader(body))
	r.Header.Add("Authorization", "token "+githubToken)
	r.Header.Add("Content-Type", "application/json")
	client := &http.Client{}
	resp, err := client.Do(r)
	defer resp.Body.Close()
	if err != nil {
		log.Print(err)
		return err
	}
	return nil
}

func Hook(w http.ResponseWriter, req *http.Request) {
	err := req.ParseForm()
	if err != nil {
		log.Print(err)
		// TODO: 500 error
		return
	}

	v := req.FormValue("payload")
	var m map[string]interface{}
	err = json.Unmarshal([]byte(v), &m)
	if err != nil {
		log.Print(err)
		// TODO: 500 error
		return
	}

	if m["action"] != "opened" {
		return
	}

	links := m["pull_request"].(map[string]interface{})["_links"].(map[string]interface{})
	assignUrl := links["issue"].(map[string]interface{})["href"].(string)
	commentUrl := links["comments"].(map[string]interface{})["href"].(string)
	reviewer := githubUsers[rand.Intn(len(githubUsers))]
	assign(assignUrl, reviewer)
	comment(commentUrl, reviewer)
}

func ping(w http.ResponseWriter, req *http.Request) {
	io.WriteString(w, "pong\n")
}

func main() {
	log.Printf("reviewer candidates are %v", githubUsers)
	port := os.Getenv("PORT")
	if len(port) == 0 {
		port = "8000"
	}
	http.HandleFunc("/", Hook)
	http.HandleFunc("/ping", ping)
	log.Printf("start server. port: %v", port)
	err := http.ListenAndServe(":"+port, nil)

	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

```
個人的なjQuery覚書

# デバッグ

```js
console.log('hogehoge');
````

`Console`とか大文字だとダメ

# 変数の出力

```js
$('td').each(function() {
  console.log($(this).val());
});

```

# フォームを乱数とかで埋める

```js
function randString(n)
{
    if(!n)
    {
        n = 5;
    }

    var text = '';
    var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

    for(var i=0; i < n; i++)
    {
        text += possible.charAt(Math.floor(Math.random() * possible.length));
    }

    return text;
}


function fillup() {
    var $ = jQuery;
    $('input[name=name_attribute]').val('hoge' + randString(5));
}

(fillup());
```
Time Machineから復帰後に「エラーコード 213:5」がでてCS6が立ち上がらなくなった時の対処法


##[状況]##

Adobe Creative Suite 6のライセンス認証をちゃんと解除してからおこなったにも関わらず、Macをフォーマットして全消ししてからTime Machineのバックアップから復帰したあと、「この製品のライセンスで問題が発生しました。エラーコード 213:5」が表示されてCreative Suite 6 が以下のダイアログがでて起動しなくなってしまった。

##[解決手順]##
AdobeのサイトにあるCreative Cloud ヘルプに載っている以下３つを順に試す。（2015年10月時点）

**(1) アプリケーションの起動時に「設定エラー」や「エラーコード130:11」が表示される（Creative Suite 6）**

* https://helpx.adobe.com/jp/creative-suite/kb/cpsid_93721.html

 

**(2) アンインストール手順（Mac OS 版 Creative Suite 6）**

* https://helpx.adobe.com/jp/creative-suite/kb/cpsid_93592.html



**(3) 以前のバージョンを含むすべての Adobe アプリケーションを削除し Creative Suite 6 を再インストールする（Mac OS）**

* https://helpx.adobe.com/jp/creative-suite/kb/cpsid_93707.html


##[メモ]##
実際には3番目の再インストールの前に特に別ユーザは作らず、特にセーフモードにもしなかったが、いちおう再起動はして、立ち上がっているアプリはすべて終了させて、アクティビティモニタでSafariと名のつくサービスはすべて強制終了させてからインストールした。（結局セーフモードのほうが楽）
mysqlが起動できない（Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)）

この記事では、MacOS Xを使用しております。

# ある日突然、MySQLが起動できない現象が起こった
原因はわからないのですが、ある日突然mysqlが起動しなくなりました。

```
$ mysql -u root -p
```
と叩いても、

Can't connect to local MySQL server through socket '/tmp/mysql.sock'(2)

と表示され、途方にくれました。

（卒論のデータが完全に見れない状態になり、焦りました）


#原因は、mysql.sockファイルがないこと

mysqlサーバーに接続する際、mysql.sockファイルを使って接続するらしいのですが、
なんらかの原因により、このファイルが消えることがあるそうです。
エラー文で指定されているところに、mysql.sockファイルを作成します。

```bash
$ sudo touch /tmp/mysql.sock

```

#mysql再起動
```
$ sudo mysql.server restart
Starting MySQL
.. SUCCESS!
```
と表示されればOK。


#それでもなおらない場合

```
Can't connect to local MySQL server through socket '/tmp/mysql.sock'(38)　#2だったのが38に
```

この場合は、mysql.sockファイルが入っているディレクトリ権限が原因だと思われるので、

```
$ sudo chown mysql:mysql /tmp
```

これでもう一度、

```
$ sudo mysql.server restart
```

をしましょう。


#それでもなおらなかった場合

mysqlのエラーログを確認して、
ググりましょう笑

このエラーの事例は多いようなので、きっと見つかると思います。


#参考にしたサイト
http://www.hi-ho.ne.jp/tsumiki/book_sup2.html
http://www.vpswordpress-admindocs.com/wp/trouble/mysql-08
http://blog.dacelo.info/mysql/entry-9.html
iOS9でNSLocale preferredLanguagesの戻り値が変わった


## 言語コードのみから、言語コード+国コードへ
[Getting Preferred Languages](https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/index.html#//apple_ref/occ/clm/NSLocale/preferredLanguages)


* iOS9の戻り値
 * "ja-JP", "en-JP" 
 * 言語コード（ISO 639-1）+ 国名コード（ISO 3166-1 alpha-2） 
* iOS8以前の戻り値
 * "en", "ja", "es"
 * 言語コード（ISO 639-1）の2文字コード

リファレンスの戻り値には、Stringの配列が返ってくるとしか書いてない……。
明記しなくても、"当然、ISOでしょ？"ってことなのかな。
一応、日本には、JIS Xって規格もあるんだけど。


## 日本語判別方法変更
* iOS9

```Objective-c:Environment.m
@implementation Environment

+ (BOOL)isLocaleJapanise {
    NSArray *languages = [NSLocale preferredLanguages];
    NSString *languageID = [languages objectAtIndex:0];
    if ([languageID hasPrefix:@"ja-"]) {
        return YES;
    }
    return NO;
}

@end
```


* iOS8以前

```Objective-c:Environment.m
@implementation Environment

+ (BOOL)isLocaleJapanise {
    NSArray *languages = [NSLocale preferredLanguages];
    NSString *languageID = [languages objectAtIndex:0];
    if ([languageID isEqualToString:@"ja"]) {
        return YES;
    }
    return NO;
}

@end
```
完全一致から、前方一致にしただけ。
**言語**で区別するのか、 **国**で区別するのかで、前方一致、後方一致を決めればよい。

一つの国で、公用語が複数あるなんて状態が今後は増えていくのかなぁ。
昔、カナダに旅行した時、バンクーバーは英語だったけど、VIA鉄道でジャスパーに行ったら、フランス語だった。
レストランの店員が、接客の時は英語で、おしゃべりする時はフランス語を話しているのを見て、器用だな、と思ったのを思い出した。
Visual Studio Codeにフォントを複数設定する

フォントの変更の仕方はググればすぐでてきた。ので、早速やってみる。

参考：https://code.visualstudio.com/docs/customization/userandworkspace

Windowsの場合は「File > Preferences > User Settings」で以下のJSONファイルが開くので、そこに`editor.fontFamily`を指定。

```json:settings.json
// Place your settings in this file to overwrite the default settings
{
    "editor.fontFamily": "Source Code Pro"
}
```

けど、日本語がなんか違和感ある。「判」の縦棒が曲がったりとか。

![han.png](https://qiita-image-store.s3.amazonaws.com/0/80093/56c43a47-4640-6ab1-2146-090a931e68a6.png)

なので、日本語には日本語のフォントを別に当てたい。そういうときはこう。

```json:settings.json
// Place your settings in this file to overwrite the default settings
{
    "editor.fontFamily": ["Source Code Pro", "Yu Gothic UI"]
}
```

![han2.PNG](https://qiita-image-store.s3.amazonaws.com/0/80093/e70ed353-c44d-a6e1-31eb-a62a93ba5675.png)

（ちなみにこのファイル、`.json`という拡張子だけど、コメント書けるから厳密にはJSONではないのでは）
Log4JDBCをSpring JDBCに設定する際、バージョンによるエラーでハマった際のメモ

#目的
Log4JDBCを設定する際、org.springframework.bootのバージョンの相性が悪く
1.2.7.RELEASEでは、dataSourceが単一ではないという内容のエラーが発生
1.1.8.RELEASE　へバージョンを変更したら解決した

#環境
フレームワーク　Spring Boot　1.2.7.RELEASE　-> Spring Boot 1.1.8.RELEASE
DB　h2データベース


#手順
##pom.xmlの設定

log4jdbc-remixのdependencyを追記する

```
（略）----------
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.1.8.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
（略）----------
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>com.h2database</groupId>
			<artifactId>h2</artifactId>
		</dependency>
		<dependency>
			<groupId>org.lazyluke</groupId>
			<artifactId>log4jdbc-remix</artifactId>
			<version>0.2.7</version>
		</dependency>

	</dependencies>
（略）----------

</project>

```
##src/main/resources/logback.xmlの設定
Log4JDBCのログ出力の設定を、resourcesパッケージ直下へ配置する
```
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
	<include resource="org/springframework/boot/logging/logback/base.xml" />
	<logger name="jdbc" level="OFF" />
	<logger name="jdbc.sqltiming" level="DEBUG" />
</configuration>
```

##AppConfigクラスの設定
Log4JDBCを利用するために、DataSourceを明示的に定義し、DIコンテナに登録する。

```java
package com.example;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import net.sf.log4jdbc.Log4jdbcProxyDataSource;

@Configuration
public class AppConfig {
	@Autowired
	DataSourceProperties dataSourceProperties; 
	DataSource dataSource;
	
	@Bean(destroyMethod = "close")
	DataSource realDataSource(){
		DataSourceBuilder factory = DataSourceBuilder
				.create(this.dataSourceProperties.getClassLoader())
				.url(this.dataSourceProperties.getUrl())
				.username(this.dataSourceProperties.getUsername())
				.password(this.dataSourceProperties.getPassword());	
		this.dataSource = factory.build();
		return this.dataSource;
	}
	
	@Bean
	DataSource dataSource(){
		return new Log4jdbcProxyDataSource(this.dataSource);
	}
}
```

##メインのクラスの修正
@ComponentScanを追記し、明示的に定義したBeanを読み込む

```java

@EnableAutoConfiguration
@ComponentScan
public class FirstbootappApplication implements CommandLineRunner{	
```
これで設定は完了、コンソールにDBのログが表示されるはずなのだが...

#問題
この状態で実行した際、異常終了が発生する

Beanのインジェクションに失敗したというエラーログが出る
その原因は、DataSourceが一つでなければならないのに２つ(dataSource、dataSourceProperties)ある

というエラーログ

#対処
pomに定義されていたSpringBootのバージョン
1.2.7.RELEASE
を
1.1.8.RELEASE
に変更したところ、ビルドがとおり、正常にDBのログが表示されるようになった。
Scala  IDE の Scala Worksheet での日本語文字化けを解消する

Windows 環境 Scala IDE の Worksheet で日本語を使うとそのままでは出力が文字化けする。

```scala:hello.sc
object hello {
  val s = "日本語でおｋ"                                //> s  : String = 譌･譛ｬ隱槭〒縺奇ｽ�
  println(s)                                      //> 譌･譛ｬ隱槭〒縺奇ｽ�
}
```

これを解消するには、eclipse.ini に以下の行を追記しデフォルトエンコードを UTF-8 に変更する

```ini:/path/to/eclipse/eclipse.ini
-Dfile.encoding=UTF-8
```

Scala IDE をリスタートすると文字化けが解消している

```scala:hello.sc
object hello {
  val s = "日本語でおｋ"                                //> s  : String = 日本語でおｋ
  println(s)                                      //> 日本語でおｋ
}
```

Windows で Scala IDE for Eclipse をインストールするとデフォルトエンコードが MS932 になるが、ワークスペースやプロジェクトのレベルで UTF-8 にしてやってもダメで、Eclipse 本体のレベルでこれを変更してやる必要がある。

上記で Eclipse 本体のデフォルトエンコーディングが変わった事は、Preference/General/Workspace の 「Text file encoding」の「Default」が UTF-8 になっていることで確認できる。

素の Eclipse にプラグインで Scala IDE をインストールしている場合も同様。
Pleiades で日本語を当てている環境ではまた状況が違うかもしれないけど、未検証。
Windows 環境以外では問題ないと思うが、もし文字化けしたら同様の対処で解決するはず。


## Scala Worksheet について

Scala Worksheet は、 Scala IDE が拡張する実行形式で、Scala コード片を記述したWorksheet ファイルを更新（保存）すると、自動的にコンパイル・実行され、式の評価結果がコメントとして元ソースに挿入される

```scala:lesson_01.sc
object lesson_01 {
  1 + 1                                           //> res0: Int(2) = 2
  val l = List(1,2,3)                             //> l  : List[Int] = List(1, 2, 3)
  l.foreach(e => println(e))                      //> 1
                                                  //| 2
                                                  //| 3
}
```
IDE 上で REPL の代わりに使えるが、REPL と違って動くコードが残るので、ちょっとした文法の確認や、イデオムをメモしておくのに重宝する。
プロジェクトコードのデバッグやシナリオテスト、ツールスクリプトにも使えるかもしれない。
なにより Scala 言語の学習を始めたいならここからがベストだろう。

Worksheet を作成するには Scala パースペクティブの新規作成(New)で Scala Worksheet を選ぶ。
ファイルの拡張子は```.sc```で、ソースディレクトリの外に保存しても実行できる。

素の Eciplse に Scala IDE を入れている場合、新規作成メニューに Scala Worksheet が出てこないかもしれない。
Scala Worksheet は Incubation 扱いのプラグインなので、インストール時に「Scala IDE plugins (incubation)」にある 「Scala Worksheet」にチェックを入れておく必要がある。


* Download Scala IDE for Eclipse - Scala IDE for Eclipse
http://scala-ide.org/download/sdk.html
↑ Eclipse バンドル

* Download the 4.2 Release of the Scala IDE for Eclipse - Scala IDE for Eclipse
http://scala-ide.org/download/current.html
↑ プラグイン
ESLintの設定ファイルをブラウザでポチポチして作るツールを作った

![hoge.gif](https://qiita-image-store.s3.amazonaws.com/0/18346/d0afd3f5-af8f-eb3a-8e6a-4ec4eb82ee65.gif "hoge.gif")


まだバグや設定できない項目が少しあるけど、ある程度使えるものができた＆作るの飽きてきたので一度公開する。

https://pirosikick.github.io/eslintrc-editor/

### 課題感

- ESLintのルールが多すぎる
	- 一つ一つドキュメントを見ながらエディターで設定ファイルを書くのが辛い。
	- 「あーこれルールあるんだー」ってのに後で気づくことが多い
- （ただReact+Fluxで何か作りたかった）

### 機能

- localStorageに自動保存しているので、途中でやめても大丈夫
- import機能

### 技術的なメモ

- React + Redux
	- Reactは0.14
	- 最初はflummoxだったが、途中でreduxに乗り換え
- ドキュメントはmarkdownをmd2reactで表示
	- bundleするとサイズがバカでかくなるので、XHRで取得
	- 出力するElementをカスタマイズしたかったので、forkした → [@pirosikick/md2react](https://www.npmjs.com/package/@pirosikick/md2react)
	- HTMLに変換して使ったほうが良かった気がする
- 静的ページだけどサーバサイドレンダリング
	- 開発時はbrowser-syncのmiddlewareでReactDOM.renderToString
		- [このあたり](https://github.com/pirosikick/eslintrc-editor/blob/master/gulpfile.babel.js#L133)
	- テンプレートエンジンは使わず、HtmlコンポーネントをrenderToStaticMarkupして、アプリのrootをrenderToStringしたものをprops経由で渡すようにした
		- [Htmlコンポーネント](https://github.com/pirosikick/eslintrc-editor/blob/master/src/components/Html.jsx)

### 今後

- テストを書く
- 一部、設定できない項目がある
    - key, value共に任意入力可能なObjectとか
- ~~import機能が普通のJSONしか受け付けないので、コメント有りJSONも可能にする~~ → 対応しました。
	- eslintrcのJSONはコメント可能
	- [strip-json-comments](https://github.com/sindresorhus/strip-json-comments)
- PRとか来たらいいなー

バグ等あったらPR, Issue大歓迎ですー。
https://github.com/pirosikick/eslintrc-editor
【MKMapView】現在地の青い◎（ドット）の色を変える

# これは何

MapView で地図を表示すると、現在地が青い丸印で表示されますが、この色を変える方法です。iOS 7以上で有効です。

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/65ac1f53-d529-a65f-7add-7819f623e6af.png)

# Storyboardで変更する

`Tint` を好きな色に変更します。`User Location` にチェックを入れるのも忘れずに。

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/9d911eb0-0d73-9505-361b-94dbbd77b16b.png)

# コードで変更する

`MKMapView` の `tintColor` に好きな色をセットします。

```swift
mapView.showsUserLocation = true
mapView.tintColor = UIColor.greenColor()
```

# 実行結果

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/7a35bf03-b5ef-f7b6-bbd4-51bac19ea69c.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/f04033e2-7cc1-30b1-81b4-9aa13ec2372e.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/8292/ed0de1b5-2edc-fe5f-c960-9871ee1cdfb3.png)
Xcode6.4のOrganizerからitunes connectにアップロードできなくなってる＞＜


- （追記1）安全じゃないかも。更新は末尾に追加していきます。
- （追記2）Xcode7系のOrganizerからアップロードできました！（こちらの方法は安全そう）
- （追記4）フォーラムも盛り上がってる。

最低でも3日くらい前からXcode6.4でのビルドがitunes connectにアップロードできなくなっているようです。ちょっと調べて解決（？）したのでその方法を書いておきます。

何か情報があればコメントください〜。

## Error

![スクリーンショット 2015-10-25 12.22.38.png](https://qiita-image-store.s3.amazonaws.com/0/24041/e2d22585-956d-1932-b0eb-b771bf6660c5.png "スクリーンショット 2015-10-25 12.22.38.png")

いつも通り、Organizerから **Submit to App Store...** を選択したらこんなエラーが出ました。

このエラー文言で調べると同じような問題がStackoverflowでも上がっていました。

- [ios - Xcode 6.4 The Application You Have Selected Does Not Exist - Stack Overflow](http://stackoverflow.com/questions/33270301/xcode-6-4-the-application-you-have-selected-does-not-exist)

## Stackoverflowを参考にやってみる

### 1. Validate

Organizerから **Validate** します。

### 2. Export

Validateが通ったら、右のカラムに出てくる **Export...** を選択して、 **Save for iOS App Store Deployment** をします。

![スクリーンショット 2015-10-25 12.31.28.png](https://qiita-image-store.s3.amazonaws.com/0/24041/b64321e5-d949-58c1-4571-53e24c6e0584.png "スクリーンショット 2015-10-25 12.31.28.png")

AppName.ipa が出力されます。

### 3. Application Loaderをダウンロード

https://itunesconnect.apple.com/apploader/ApplicationLoader_3.0.dmg

ここからダウンロード

### 4. Application Loaderからアップロード

![スクリーンショット 2015-10-25 12.34.23.png](https://qiita-image-store.s3.amazonaws.com/0/24041/b9875be7-d662-d5d6-0f8f-2238259a49b3.png "スクリーンショット 2015-10-25 12.34.23.png")

### 5. DONE

できました。

## ところで

この方法が安全かはわかりません。Application Loaderって古いし。。

Apple早く治してくれないかな。というか、早くSwift2.0対応してXcode6.4を脱出しなければ。Apple古い環境切り捨てるの早いから焦る。

## 追記1

内部テストの対象に選択しようとすると、原因不明のエラーになる。

![スクリーンショット 2015-10-25 13.13.09.png](https://qiita-image-store.s3.amazonaws.com/0/24041/c5d5104d-e67a-7807-e179-08d4425bf4c5.png "スクリーンショット 2015-10-25 13.13.09.png")

さらに、外部テストの審査に出そうとしたら、「次へ」を押しても次に進まない。

はぁ。。

Stackoverflowの人はこの方法でうまくいったと書いているけど、内部テスト外部テストのことは書いてないからどうなったのかなぁ。

## 追記2

心優しい方がFacebookでアドバイスくれました。Xcode7.1のアップローダーを使えばアップロードできたということ。

手元が、Xcode7.0.1だったのですが、これのOrganizerでアップロードしたらいけました！

でも内部テストも外部テストもダメでした。

次はXcode7.1で試してみます。

## 追記3

内部テスト、外部テストが失敗する問題は別問題として考えても良いのかも。

[ios - Unable to 'Start Testing' for internal testing with Testflight - Stack Overflow](http://stackoverflow.com/questions/33321471/unable-to-start-testing-for-internal-testing-with-testflight)

## 追記4

https://forums.developer.apple.com/message/79442#79442

## 追記5

6.4のOrganizerからアップロードできない問題は今日時点でも続いている様子。Xcode7.0.1のOrganizerからアップロードできたけど、Xcode7.1からのアップロードは失敗した。この辺りは詳しく調べていない。

とりあえず、Application Loaderで過去にアップロードしたバージョンはテスト配布できるのは確認しました。今、アップロードしたビルドはずっと処理中。

## 追記6

11/2時点でまだXcode6.4のOrganizerからアップロードできないですね。対応、しないのかな。。

ただ、Application Loaderでアップロードしたビルドも内部テスト・外部テストはできるようになっている様子！とりあえず、よかった。

処理中ですが申請はできました^^
[Java] Javaの名前とバージョン


# 目的

Javaの名前とバージョンを整理します(基本、Sun/Oracleのもの)。

ついでに、サポートしているClassファイルのバージョン(メジャー番号、マイナー番号)も。

# 一覧

| 名前 | 製品バージョン | 開発者バージョン | サポートClassバージョン | 補足 |
|:--:|:--:|:--:|:--:|:--|
| JDK 1.0 | 1.0 | ← | 45.0 - 45.3 | JDK 1.0.2が初 |
| JDK 1.1 | 1.1 | ← | 45.0 - 45.65535 |  |
| J2SE 1.2 | 1.2 | ← | 45.0 - 46.0 |  |
| J2SE 1.3 | 1.3 | ← | 45.0 - 47.0 |  |
| J2SE 1.4 | 1.4 | ← | 45.0 - 48.0 |  |
| J2SE 5.0 | 5.0 | 1.5 | 45.0 - 49.0 |  バージョンが２体系に分離 |
| Java SE 6 | 6 | 1.6 | 45.0 - 50.0 | 製品バージョンが整数 |
| Java SE 7 | 7 | 1.7 | 45.0 - 51.0 |  |
| Java SE 8 | 8 | 1.8 | 45.0 - 52.0 |  |

# サポートしているClassファイルのバージョン

[JavaVMのクラスファイル仕様](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html)

>Oracle's Java Virtual Machine implementation in JDK release 1.0.2 supports class file format versions 45.0 through 45.3 inclusive. JDK releases 1.1.* support class file format versions in the range 45.0 through 45.65535 inclusive. For k ≥ 2, JDK release 1.k supports class file format versions in the range 45.0 through 44+k.0 inclusive.



# ２つのバージョン体系

- [J2SE 5.0 の Javadoc](https://docs.oracle.com/javase/jp/1.5.0/)  
  「外部バージョン番号は 5.0 であり、内部バージョン番号は 1.5.0 です」
- [Java SE 6 の Javadoc](https://docs.oracle.com/javase/jp/6/)  
  「製品バージョン番号は 6 であり、開発者バージョン番号は 1.6.0 です」
- [JDK7のネーミング](http://www.oracle.com/technetwork/java/javase/jdk7-naming-418744.html)
  （意訳）「バージョン番号は7で、バージョン文字列は 1.7 とか 1.7.0 です。ちなみに1.xとか1.x.0の、xの部分は製品バージョン番号です。」
- [JDK8のネーミング](http://www.oracle.com/technetwork/java/javase/jdk8-naming-2157130.html)
  （意訳）「バージョン番号は8で（以下略）」