OmniAICreator/Qiita-1.07M huggingface dataset:
R　空間計量　メモ１

#目的
Rで空間計量経済学の分析ができるようにする。

#教科書
###ジュセッペ・アルビア　(著）、堤盛人　（訳）、2016、『Rで学ぶ空間計量経済学入門』、勁草書房

#参考文献
[(参考サイト) Rで地理空間データ分析（１）～ 拡張子shpのシェープ形式ファイルを読み込んで、地図に属性値情報を重ねて描画](https://qiita.com/HirofumiYashima/items/705b564e62c1946418b0)

#今回範囲
- 第２章 章末問題2.9
- 空間重み行列作り

#今回目的

**空間重み行列**は空間計量やるときのキモ。
空間的自己相関の有無を判断するときや、分析するモデルにもつかう。
とりあえず、できるようにしておく。

###**空間重み行列** 
近い地域同士の関係を行列で表す。

近さの決め方はいろいろあるが、今回は、とりあえす近いという基準の最大距離（閾値）を決めといて、その距離の内にある地域は近いとする。

（空間重み行列の例）

- １００キロ圏内が近いとする
- 東京、千葉、大阪、兵庫の近さの関係を考えると...
- 空間重み行列$W$は、

```math

W = 
\begin{matrix}
\\
東京\\
千葉\\
大阪\\
兵庫
\end{matrix}
\begin{matrix}
      東京 千葉 大阪 兵庫　\\
\begin{pmatrix}

0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0 \\
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 \\

\end{pmatrix}

\end{matrix}
```

という感じ

- 今回は近かったら$1$をとるようにしている
- 他の地域との近さに興味があるので、対角成分は$0$
- 近くない地域とは$0$
- 行ごとに、要素の合計が１になるように基準化しておくことが多いらしい







#章末問題2.9解答

- 準備
[https://gis.cancer.gov/tools/seerstat_bridge/fips_vars/#statefips](https://gis.cancer.gov/tools/seerstat_bridge/fips_vars/#statefips)
から、US_Stateという、米国５１地域のシェープファイルをダウンロード


- Rコード

```{r}
#パッケージのインストール
install.packages("spdep")
install.packages("maptools")
install.packages("gpclibPermit")

```

```{r}
#パッケージの読み込み
library(sf)
library(spdep)
library(maptools)

#データをダウンロードした、自分の使っているファイルに設定
setwd("/自分のファイル名/US_State")

#シェープファイルの読み込み
US_State <- readShapePoly("US_State.shp", IDvar="StateFIPSN")

#データに含まれる変数名の確認
names(US_State)

#読み込んだシェープファイルの図示
plot(US_State)

#各州の重心座標を求める
coords <- coordinates(US_State)

#州のインデックスを地図上に重ねて表示
text(coords[,1], coords[,2], US_State$StateFIPSN, col="black")
print(paste("coords[,1]:", coords[,1], "coords[,2]:", coords[,2], "US_State$StateFIPSN:",  US_State$StateFIPSN))
```
![Rplot.png](https://qiita-image-store.s3.amazonaws.com/0/177437/dfc5fbd3-7ddd-a510-243c-b8f03a534b22.png)

```{r}
#近いという基準の距離を決めて、州ごとに、その州と閾値の内にある近い州を登録
contnb <- dnearneigh(coordinates(US_State), 0, 1500000, longlat=F)

#空間重み行列の作成（行の要素の合計が１になるように各行について基準化してある）
W <- nb2listw(contnb, glist=NULL, style="W")
```
終

#まとめ
- ところどころ怪しいところあり。
- 「シェープファイルの読み込み」の部分での、IDvarの部分の変数
- 「州のインデックスを地図上に重ねて表示」の部分での、やり方（教科書本文のコードだとエラーがでてできなかった。
- 「距離の最低限の閾値を決めて、隣接している地域を登録」の部分での閾値の決め方

間違いが発覚したら訂正するので、ご指摘はありがたい。
Zabbix3.4以降でのJVM監視

Zabbix3.4以降でJVM監視のエンドポイントを設定できるようになり、Wildfly(JBoss)のJVMに接続するためにJava-Gatewayのソースを修正する必要がなくなったのでまとめておく。

###[zabbix-java-gatewayのインストール]

  yum -y install http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
  yum -y install zabbix-java-gateway

###[監視用ユーザの追加]
  add-user.sh で監視用のユーザアカウントを作成する
    What type of user do you wish to add?
     a) Management User (mgmt-users.properties) を選択
 
###[standalone.xmlの編集]

  *management-interfaces*セクションに下記を追加

    <native-interface security-realm="ManagementRealm">
      <socket-binding native="management-native"/>
    </native-interface>

  *socket-binding-group*セクションに下記を追加

    <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:(ポート番号)}"/>

###[クラスライブラリのコピー]

  *jboss-client.jar* を */usr/share/zabbix-java-gateway/lib* にコピー

###[zabbix-server.confの編集]

  JavaGateway=*zabbix-java-gatewayが稼動しているアドレス*
  JavaGatewayPort=*zabbix-server ⇔ zabbix-java-gateway の通信ポート*
  StartJavaPollers=*JavaPollerの数*

###[Hostの設定]

  JMX Interfaces:*(JVMが稼働しているマシンのアドレス):(ポート番号)*
  
###[Itemの追加]

  Type:*JMX agent*
  key:*(例：Heapのギザギザ)jmx["java.lang:type=Memory",HeapMemoryUsage.used]*
  Host interface:*上記Hostに設定した"JMX Interface"を選択*
  JMX endpoint:*service:jmx:remote://(JVMが稼働しているマシンのアドレス):(ポート番号)*
  User name:*監視用ユーザアカウント名*
  Password:*監視用ユーザのパスワード*
jQueryでの座標とサイズの取得

# jQueryでの座標とサイズの取得

時々使いたくなる座標操作やサイズの取得。
自分は忘れっぽいので使いたいときに忘れてしまい、何度も調べる事に...
なのでサンプルとしてまとめてみました。

```css:/css/sample.css
body {
  height: 2000px;
}
div#console {
  position: fixed;
  width: 20em;
  top: 0px;
  left: 0px;
  background-color: #000000;
  color: #ffffff;
}
```

```js:/js/sample.js
$(function() {
  $('body').append('<div id="console"><ul></ul></div>');
  $('div:#console ul').append('<li id="scroll"></li>')
                      .append('<li id="mouse"></li>')
                      .append('<li id="window"></li>');
  /* スクロール */
  $(window).scroll(function() {
    var x = $(this).scrollLeft();
    var y = $(this).scrollTop();
    $('li#scroll').html('scroll ' + x + ',' + y);
  /* マウス移動(画面上の位置) */
  }).mousemove(function(e){
    var x = e.clientX;
    var y = e.clientY;
    $('li#mouse').html('mouse ' + x + ',' + y);
  /* ウィンドウリサイズ(出力は描画範囲) */
  }).resize(function(){
    var w = $(this).width();
    var h = $(this).height();
    var sw = window.innerWidth - w; /* スクロールバー */
    $('li#window').html('window (' + w + '+' + sw + ')x(' + h + ')');
  /* クリックした位置が画面中央になるようスクロール */
  }).click(function(e){
    var x = e.pageX - ($(this).width() / 2);
    var y = e.pageY - ($(this).height() / 2);
    $('html,body').animate({scrollLeft: x, scrollTop: y});
  });
});
```

```html:sample.html
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="./css/sample.css" />
    <script type="text/javascript" src="./js/jquery.js"></script>
    <script type="text/javascript" src="./js/sample.js"></script>
  </head>
  <body>
  </body>
</html>
```

### 注意点
#### $(window).height()
環境によって何が取得できるのかが違う
Windows PC + (gc ff ie)：枠を含まない範囲のサイズ
iPhone + safari：メニューバーを含めた範囲のサイズ
Laravel5のFormRequestにバリデーションロジックを追加する


ルートパラメータの値を使ったバリデーションや複雑なロジックを持ったバリデーションを`Request`クラスに追加する。

```php
class SaveRequest extends Request
{
    /**
     * 追加バリデーション
     */
    public function withValidator($validator)
    {
        $validator->after(function ($validator) {
            $user = \Route::current()->parameter('user');
            if (!$user->isAdmin()) {
                $validator->errors()->add('user_id', '管理者しかつかえないよー');
            }
        });

        return $validator;
    }
}
```
AWS CLIのインストールから始める色々

##まずはインストール
http://docs.aws.amazon.com/ja_jp/cli/latest/userguide/awscli-install-linux.html

基本的には上記なのだが、root権限じゃなくても可能。

```
$curl -O https://bootstrap.pypa.io/get-pip.py
$python get-pip.py --user
$pip --version
pip 9.0.1 from /home/appluser/.local/lib/python2.7/site-packages (python 2.7)
$export PATH=~/.local/bin:$PATH
$source ~/.bash_profile
$pip install awscli --upgrade --user
$aws --version
aws-cli/1.11.189 Python/2.7.5 Linux/3.10.0-514.26.2.el7.x86_64 botocore/1.7.47
```

でインストール

##コンフィグ設定
```
$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [ap-northeast-1]:
Default output format [text]:
```

IAMを正しく設定できていない場合は、KeyIDとAccessKeyの設定が必要
東京リージョンの場合はap-northeast-1

##設定確認
```
$ cd ~/.aws
$ cat config
[default]
output = text
region = ap-northeast-1
```

##DynamoDBへの投稿
```
$ aws dynamodb put-item --table-name xxxxxxx \
--item     '{"id": {"N": "2"}, "count": {"S": "1000"}}' ;
```

ここで、複雑なJSONを構築しようとすると、JSONのスキーマチェックがないとやってられないことにきづく。
続く。
Cupy のインストールログ

# はじめに

Preferred Network が開発を主導するNumpy互換GPU計算を行うライブラリ Cupy を使う必要があったのでインストールしました。

いくつかはまりポイントがあったので、備忘録を兼ねてここに書きます。
なお、この情報は執筆時のものです。
（執筆日時：2017/11/21）
すぐに古くなると思いますので、気をつけてください。

## 現象

+ グラフィックカードが認識されない
+ `import cupy` としたときに `CuPy is not correctly installed.` と言われる

というようなことが起こりました。

# CUDAのインストール

まず、 Cupy をインストールするのに CUDA が必要です。
Cupyはnumpy互換なので、CUDAをインストールしなかった場合はNumpyが使われるのかなと
勝手に思っていましたが、そうではないみたいでした。

CPU, GPU両方で動くコードを作るためには、明示的に実装しないといけないみたいです。


## 環境

私の研究室には、GPUマシンが2台あります。

+ ml-server1 : GeForce GTX 1070 を2機搭載 Ubuntu 16.04
+ ml-server2 : GeForce GTX 1070 を1機搭載 Ubuntu 16.04

条件として、Tensorflow, Cupyともに同じマシンで動かすことがあります。
現在のCUDAの最新バージョンは 9.0 ですが、
現状 Tensorflow master はまだCUDA8.0にしか対応していません。
CupyはCUDA8.0にも対応しているため、ダウングレードしてインストールする必要があります。


## NVIDIA ドライバのダウンロード

NVIDIA のドライバダウンロードサイト  
http://www.nvidia.com/Download/index.aspx  
から、OS・グラフィックカードに対応するドライバをダウンロードします。

現在は、384.98 というバージョンが最新です。
`NVIDIA-Linux-x86_64-384.98.run` というようなファイルがダウンロードされます。

デフォルトでUbuntuはグラフィックドライバを用いる `lightdm` というサービスを実行しています。
これを止めてからインストールを始めます。

```bash
sudo service lightdm stop
chmod +x NVIDIA-Linux-x86_64-384.98.run
sudo ./NVIDIA-Linux-x86_64-384.98.run
```

色々聞かれますが、とりあえずデフォルトの選択肢を選んでおけばよいです。

## CUDA のインストール

Google で CUDA と検索してたどり着く先はCUDA9.0のダウンロードサイトなので、
頑張って8.0が置いてあるサイトを探します。

過去のアーカイブはここにあるようです。

https://developer.nvidia.com/cuda-toolkit-archive

ここでCUDA8.0 ga2をダウンロードします。
いくつかの形式を選ぶことができますが、とりあえずは実行ファイル形式の `run` ファイルをダウンロードすることにしました。

`cuda_8.0.61_375.26_linux.run` というファイルがダウンロードされます。

これも実行権限をつけて実行します。

```bash
chmod +x cuda_8.0.61_375.26_linux.run
sudo ./cuda_8.0.61_375.26_linux.run
```

色々聞かれるので、全てデフォルトを選んで…とするとハマります。

CUDA にはグラッフィクドライバも同梱されています。
`cuda_8.0.61_375.26_linux.run` の 375.26 はドライバのバージョンを指しているのですが
上でインストールしたバージョン `384.98` と異なります。

**インストールダイアログの中で  
`Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 375.26?`  
と聞かれるのですが、これで yes を選択すると、せっかくインストールしたドライバが上書きされ、
グラフィックカードを認識しなくなります。**

ここは No を選ぶ必要があります。
CUDA toolkit をインストールするか聞かれますので、これは yes を選択してください。

最後に、Path にCudaを追加すれば完成です。

## インストールの確認

インストールがうまくいっていれば   
`nvidia-smi`  
を実行するとGPUの使用状況が表示されます。


# NCCLのインストール

**Cupy のドキュメントでは、NCCL はなくてもよいと書かれています。
しかし、GPUが2機以上ある環境ではないと動かないようです。**


# Cupy のインストール

あとはドキュメントに従ってインストールを進めてください。
Powershellでファイルの作成日時を表示する

この記事は[SC（非公式） Advent Calendar 2017](https://qiita.com/advent-calendar/2017/unofficial-sc)の1日目です。

トップバッターなので思いっきり敷居を下げるために短く簡単なものを投稿します。

#はじめに
ファイルの作成日時を確認して指定日時よりも古かったら、ファイルを新しいバージョンに差し替えるというプログラムを作りたかったのですが、Powershellでファイルの作成日時を取得する方法を知らなかったので調べた結果を載せたいと思います。


#まずは
ファイルのプロパティを取得します

``` その１.ps1

PS E:\XXXXX> Get-ItemProperty .\sample.txt

```

実行結果は、、、

```
    ディレクトリ: E:\XXXXXX


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2017/12/01     00:00              0 sample.txt

```

#そして
最後に取り出したファイルプロパティから作成日だけを取り出して表示するだけです

``` その２.ps1

#下記コマンドでファイルのプロパティが取得できます。
$fileProperty = Get-ItemProperty sample.txt

#ファイルプロパティから作成日時を形式指定で取り出します。
$fileProperty.CreationTimeUtc.ToString("yyyyMMdd")

```

実行結果

``` 
PS E:\XXXXX> $fileProperty.CreationTimeUtc.ToString("yyyyMMdd")
20171201

```

日付の型指定しない場合は

```

PS E:\DeployCmd> $fileProperty.CreationTimeUtc

2017年12月01日 0:00:00

```

こうなります。


#以上

簡単でしたね。
これで、こんな内容でもいいのって思ってもらえれば幸いです。
Azure DevOps Projectsを試す

この記事は[SC（非公式） Advent Calendar 2017](https://qiita.com/advent-calendar/2017/unofficial-sc)の４日目です、早くも２回めの登場です。

#はじめに
AzureのDevOps Projectsというサービスがプレビューで公開されたので早速試してみようと思います。

#作成
それでは早速作成していきます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/646bf3ba-5be0-c8ba-d4f2-52c8cd12eb69.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/f645af92-0216-c5ce-991c-f90fa7fc70af.png)
使い慣れた.Netで作成します

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/7a059aff-5596-ea11-5c70-8a8060461f04.png)
standardでいきます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/b1040ebd-7786-12fc-314a-2750a60a6596.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/31b77600-1a80-7e53-9984-afb7e9866db2.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/b96f80e2-51eb-bd0d-e6d3-940bc43c8d82.png)
完成を待ちます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/9844deef-6680-216a-4114-f6c1c360c132.png)
裏でプロジェクトやらCI/CDの作成やサンプルプロジェクトの作成、コミット、デプロイまでやるのでそこそこ時間がかかります。

###注意点
サービスの作成に何度も失敗してしまいました。
原因は会社のsubscriptionを使用していたのですが、使用していたアカウントがAADユーザーではなかったためVSTSを扱うサービスを作成したりVSTS内をいじるための権限がなかったようです。
ですので、このサービスを使用するときはAzureActiveDirectoryに属したユーザーで作成してみてください
##完成
完成したものを見ていきます
###Azure側
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/167eeaa4-40b6-eea6-aa4a-21d8b50f62bc.png)
Web Apps、Visual Studio Team Services（VSTS） CI/CD、Application Insightsが自動で作られたことがわかります。さらにはサンプルアプリケーションをビルドしてデプロイまで行ってくれるようです。
###VSTS側
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/0d399db0-4ae3-b9ab-b952-013954c748d4.png)
自動でVSTSが作成されています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/da3a016a-82fa-9b49-631d-975f4849baeb.png)
サンプルプロジェクトが作成されています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/701ba7e0-7eec-1920-1d42-cbac8afd7432.png)
Buildprocessもできています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/feec4276-98df-d3d2-6c79-fb481bca7baa.png)
Release側もちゃんとできていました。
#終わり
それぞれ手で作ると結構手間がかかったり経験がないから取り掛からなかったりする人が多いので、これでみんなも試してみると面白いと思います。
最終的に弊社にも浸透しどんどん取り入れてもらえたらうれしいですね。
まぁ、そのまえにAzureADの導入から必要なんですが、、、
Dockerとは何？

最近、**Docker**のコミュニティがとても発展しています。それは、どうしてでしょうか。皆一緒に理解していきましょう。
###Dockerとは何？食べることができますか？###
もちろん、食べることができませんね。大体皆知ってるように、開発の中では色々問題があります。一つの問題は開発環境です。それで、開発環境の件、DockerはContainer（独立Container）でアプリを管理します。

*Dockerの構造*
![Screen Shot 2017-11-19 at 10.46.48 PM.png](https://qiita-image-store.s3.amazonaws.com/0/173855/4f806129-25be-3584-0de7-e7a124014332.png)

*Dockerの特徴*
何でもContainer化することができます。
私たちのシステムがContainerに孤立します？

- 環境開発をするように、DockerContainerをインストールします。
- アプリの具体設計（設計自由）
- 内部のネットワークやContainerとContainer

どうすれば？　Dockerをインストールするには、以下のリンクを参考にします。
https://docs.docker.com/engine/installation/

####**IMAGE**####
具体的には、IMAGEがLinux OS を梱包します。Dockerの中に、Dockerfileがあります、このファイルの目的はなんでしょうか。そのファイルは新たにImageを立てる。Dockerfileの中に、いろいろなlayerがある、でも、最高layerはいつも  OSである。

*例えば*
PHP-FPM 7.0のDockerfile見ると、Debian (debian:jessie)のOS Image を継承して、あと、PHP-FPM をインストールします。あと、ダウンロードをして、Imageになった。
https://github.com/docker-library/php/blob/0792ba42f0ea7435ceb26b42a066274e028b30e3/7.0/fpm/Dockerfile 

IMAGEを設計して、何が面白いか。

- 他のImageから継承することができます。
- アップロードとシェアは簡単です。
- https://store.docker.com/ でほとんど何もありますね。


また、他のIMAGEを利用する際に、Docker Storeでpullをします。

```
docker pull <イメージの名前>
```

####**Containerは何？**####
ContainerはOSと関係のlibraryとアプリを包む。
どうすれば、新たなContainerをつくれますか。
ImageからContainerを作っています。

```
docker run <イメージの名前>
```
Containerを作りましたあと、```docker exec``` でこのContainerを対応しています。

*例えば*

```
 docker exec -it <containerの名前> bash
```
その中で
>i (interactive): OSのterminalにアクセスします。
>t (#): stdoutに表示される

Containerとcontainerをインタラクティブする際に、network、volume等が必要です。
*例えば*
> nginx:  80番ポートを開くと、 clientからアクセスすることができます。
> php-fpm:  9000番ポートを開くと、 nginxとproxyをコネクトします。
> mysql: 3306番ポートを開くと、DBをコネクトすることができます。

###**結論**###
- Microserviceに適当である。
- 資源がかかることの減る。
- 環境開発の方が早くて、安全である。

**参考リンク**
https://docs.docker.com/
jQueryのdeferred用いたAJAXについての備忘録

まだ、業務で使ったことがないのですが
少しjQueryのAJAXの書き方をお勉強しましたのでまとめます。

Deferredオブジェクトを使うことによって
シーケンシャルな非同期処理の実装が可能になります。


```js:Deferred
// 関数定義
function ajaxWithAppendToBody(ajaxOptions){
    var deferred = new $.Deferred;

    $.ajax(ajaxOptions).done(function(data){
        $(data).appendTo("body"); // ajax通信が成功したらbodyにappendする。
        deferred.resolve(data); // resolve()でdoneメソッドを呼び出す

    }).fail(function(data){
        deferred.reject(data);  // reject()でfailメソッドを呼び出す
    });

    return deferred.promise();  // 戻り値はpromiseにする
}

// 利用側
ajaxWithAppendToBody({
    url: "//example.com"

}).done(function(data){
    // 非同期処理が成功時の処理

}).fail(function(data){
    // 非同期処理が失敗時の処理
});
```

非同期処理の成功時:```deferred.resolve```, 
非同期処理の失敗時:```deferred.reject```,
非同期処理の戻り値:```deferred.promise```
とすることで

非同期処理を受け取る側は
成功時:```done```, 
失敗時:```fail```,
常時:```always```
で非同期処理を受け取って次の処理へ繋げられます。

尚、ajax()メソッドではDeferredオブジェクトが返ってくるので、
そのままdone, fail, alwaysは使えます。

---
参考: [jQuery Deferred 基礎の基礎 ](https://www.deep-rain.com/programming/javascript/599)
RubyからXcodeのビルド環境変数を読み込む

XcodeからRunScriptを呼ぶ時に、`SRCROOT`などのビルド実行時によみこまれる環境変数ってありますよね？

あれをRunScript以外のスクリプトからも読み込みむための方法です。

この投稿のタイトルにはRubyとしていますが、Shellプロセスを起動することの出来るプログラミング言語であれば同じことが出来るはずです。

## Xcodeへの環境変数の参照方法

方法はこちらの投稿に記載されている通り。
[Xcodeの環境変数 $(PROJECT_DIR)や$(SRCROOT) などを確認する方法](https://qiita.com/kitanoow/items/626f1975a52a2829fe55)

BuildSchemeやBuildConfig別に設定値を変えているなら、それぞれ、`-scheme [scheme name]`、`-configuration [configuration name]`オプションを指定してあげればそれぞれの設定値を読み込むことが出来ます。

```:例
xcodebuild -showBuildSettings -scheme [scheme name] -configuration [configuration name]
```

ちなみに、BuildSchemeやBuildConfigは以下のコマンドで確認することが出来ます。

```
xcodebuild -list
```

## Rubyで環境変数を読み込む

Xcodeプロジェクトの開発中、少なからずRunScript以外のスクリプトからもビルド環境変数を参照したい時があると思います。

先程紹介したコマンドをRubyから読み込むことで、ビルド環境変数へアクセスすることが出来るようになります。

```rb
# Xcodeプロジェクトのルートディレクトリ（*.xcprojeディレクトリの置いてある場所）
PROJECT_ROOT = File.join("path", "to", "root").freeze

# ビルド環境変数を読み込むコマンド
BUILD_SETTINGS_LOAD_CMD = "xcodebuild -showBuildSettings".freeze

# ビルド環境変数をRubyの環境変数に設定
Dir.chdir PROJECT_ROOT do
  `#{BUILD_SETTINGS_LOAD_CMD}`.split("\n").each do |line|
    k, v = line.split(" = ")
    ENV[k.strip] = v
  end
end
```
MATLAB: x1*x2' > Numpy: np.sum(x1 * np.transpose(x2))

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
```

### MATLABコード

```matlab
>> x1 = [ 3 1 4 ];
>> x2 = [ 1 5 9 ];
>> dp = x1 * x2'

dp =

    44
>> dp = x1 * transpose(x2)

dp =

    44
```
(参考コードが省略表記になっている）。

### Numpyコード

対応するNumpyコードは以下だろう。
https://ideone.com/wWmZRy

```numpy
import numpy as np


def testTrisectEdge(x1, x2):
	dp = x1 * np.transpose(x2)
	print(dp)
	dp = np.sum(x1 * np.transpose(x2))
	print(dp)
	
	
x1 = np.array([ 3, 1, 4 ])
x2 = np.array([ 1, 5, 9 ])
res = testTrisectEdge(x1,x2)
```

```txt:run
Success	#stdin #stdout 0.23s 92672KB
[ 3  5 36]
44
```

Numpyの場合はnp.sum()を使うことになりそうだ。
Rails 5.1.4でacts-as-taggable-onを使おうとしたら色々大変だったメモ

# 環境

- Ruby on Rails 5.1.4

# 問題

[acts-as-taggable-on](https://github.com/mbleigh/acts-as-taggable-on)を使おうとしたら
以下のGemfileで`bundle`してmigrateやrollbackがうまく動かなかったのでメモ

```rb:Gemfile
gem 'acts-as-taggable-on', '~> 4.0'
```

# 解決策

```rb:Gemfile
gem 'acts-as-taggable-on', git: 'https://github.com/mbleigh/acts-as-taggable-on'
```

# 参考

- https://rubyplus.com/articles/4231-Tagging-using-Acts-as-Taggable-On-in-Rails-5
Rails erbをhamlにする

# gemの追加 

```rb:Gemfile
gem "haml-rails", "~> 1.0"
gem "erb2haml", :group => :development
```

- [indirect/haml\-rails: let your Gemfile do the talking](https://github.com/indirect/haml-rails)
- [dhl/erb2haml: Simple script to bulk covert ERB files in a Rails app to Haml](https://github.com/dhl/erb2haml)

```shell-session:term
bundle install
```

# erbをhamlに変換

```shell-session:term
replace_erbs
```

# ローカルサーバー起動して動作を確認
IBM Cloud（Bluemix）のライトアカウントでNode-REDを利用する

IBM Cloudの無料アカウントの体系が2017年11月から変わり、
ライトアカウントとして利用できるようになりました。


ただ一つ問題が、、、
IBMのBluemixを利用した際に、これまでの無料30日間トライアルアカウントの場合には、
Node-RED Starterボイラープレートを利用することでNode-REDを使えていましたが

<b>ライトアカウントにはNode-RED Starterボイラープレートがない。。。</b>



無料で利用できていたので、非常に助かっていたのに残念と思いきや、
実は、Internet of Things Platform Starterボイラープレートを利用すれば
Node-REDが使えるみたいです。


<img width="954" alt="IoT.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/215347/25d23c54-7cdd-2236-1df1-a134660b556d.jpeg">



多くの方々の投稿で、Node-RED Starterボイラープレートを利用する手順の情報を参考にさせてもらっていましたが、<b>「Node-RED Starterボイラープレート」を「Internet of Things Platform Starterボイラープレート」に読み代えれば</b>よさそうですね。
ltspiceでラジオ その3

#概要
ltspiceでAMラジオやってみた。

#写真
電波の波形

![](https://camo.qiitausercontent.com/72fddde659e4f96e976387ddc0f276fb039d860b/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f31383130342f66386636623563642d363133372d343236322d656561392d3834653136613066336364392e706e67)

#写真
出力の波形

![f.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/b687ee3b-5b95-0160-40b4-0ca4a28aa509.jpeg)


#回路図
真空管、使ってみた。

![image](https://qiita-image-store.s3.amazonaws.com/0/18104/d562006d-74d6-5326-e359-327286119852.png)

以上。
初期ウィジェットを無効化

独自ウィジェットを追加する場合、初期ウィジェットは不要なので無効化する関数

## ソースコード

```php5:functions.php
/**
 * 初期ウィジェットを無効化
 */
function remove_widgets(){

  unregister_widget('WP_Widget_Archives'); //アーカイブ
  unregister_widget('WP_Widget_Calendar'); //カレンダー
  unregister_widget('WP_Widget_Categories'); //カテゴリー
  unregister_widget('WP_Widget_Media_Audio'); //音声
  unregister_widget('WP_Widget_Media_Image'); //画像
  unregister_widget('WP_Widget_Media_Video'); //動画
  unregister_widget('WP_Widget_Meta'); //メタ情報
  unregister_widget('WP_Widget_Pages'); //固定ページ
  unregister_widget('WP_Widget_Recent_Comments'); //最近のコメント
  unregister_widget('WP_Widget_Recent_Posts'); //最近の投稿
  unregister_widget('WP_Widget_RSS'); //RSS
  unregister_widget('WP_Widget_Search'); //検索
  unregister_widget('WP_Widget_Tag_Cloud'); //タグクラウド
  unregister_widget('WP_Widget_Text'); // テキスト
  unregister_widget('WP_Nav_Menu_Widget'); //カスタムメニュー
  unregister_widget('WP_Widget_Custom_HTML'); // カスタム HTML

}
add_action('widgets_init', 'remove_widgets');
```
JavaMail で送信したメール　Gmail で添付ファイルのファイル名を復元できない

Java でメールを送信する場合、JavaMail を使用するのがほとんどだと思います。

最近、JavaMail で送信したメール、Gmail で添付ファイルのファイル名を復元できないという問題が発生するようになりました。

添付ファイルのファイル名は、基本的には Content-Disposition ヘッダの filename パラメータで指定されます。メーラによっては、Content-Type ヘッダの name パラメータを見る場合もあるようで、javamail はどちらにもファイル名を埋め込むようです。

ただこの埋め込み方の部分について、JavaMail 1.5.3 で修正が入ったようです。

https://github.com/javaee/javamail/commit/85051272fde868b9fa51e5eb9ca57dcbffffab5a

パラメータの値が長い場合、[RFC 2231](https://tools.ietf.org/html/rfc2231) に従って、分割するようになりました。

簡単なプログラムで確認してみます。1つ目は「数字のみ 70 文字」、2つ目は「ひらがなのみ 30 文字」です。

```java:ContentDispositionTest.java
import javax.mail.internet.ContentDisposition;
import javax.mail.internet.MimeUtility;

public class ContentDispositionTest {
    public static void main(String args[]) throws Exception {
        ContentDisposition cd = new ContentDisposition("attachment");
        cd.setParameter("filename",
                        "1234567890123456789012345678901234567890123456789012345678901234567890");
        System.out.println(cd.toString());

        cd.setParameter("filename",
                        MimeUtility
                                .encodeText("あいうえおかきくけこさしすせそ", "UTF-8", "B"));
        System.out.println(cd.toString());
    }
}
```
JavaMail 1.5.2 と 1.5.3 の結果は以下の通りです。

```:1.5.2
attachment; 
	filename=1234567890123456789012345678901234567890123456789012345678901234567890
attachment; 
	filename="=?UTF-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd?="
```

```:1.5.3
attachment; 
	filename*0=123456789012345678901234567890123456789012345678901234567890; 
	filename*1=1234567890
attachment; 
	filename*0="=?UTF-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44"; 
	filename*1="GZ44Gb44Gd?="
```

Gmail では、1つ目は正しいファイル名に復元できますが、2つ目は復元できないことが解っています。(2017-11-21 時点)

Gmail の「メッセージのソースを表示」する機能で Content-Disposition ヘッダを見ると、2つ目はパラメータの値が元の形に連結されていないと解ります。

```
Content-Disposition: attachment; filename="=?UTF-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44\"; filename*1=\"GZ44Gb44Gd?="
```

JavaMail のこの動きが、MIME の仕様として正しいのかどうか、解っていません。（解る方、教えていただけると幸いです）
1.5.3 だけでなく、現在の最新版 1.6.0 でも同様の動きになることが解っています。

なお、mail.mime.splitlongparameters システムプロパティの値を false にすることで、1.5.2 までの動きと同じになります。

```1.5.3(mail.mime.splitlongparameters=false)
attachment; 
	filename=1234567890123456789012345678901234567890123456789012345678901234567890
attachment; 
	filename="=?UTF-8?B?44GC44GE44GG44GI44GK44GL44GN44GP44GR44GT44GV44GX44GZ44Gb44Gd?="
```

追加 (2017-11-30)

ContentDisposition#setParameter() に、MIME エンコードした文字列を渡すやり方が悪いと解りました。どうするべきか、後日まとめます。
Gradle を使った IntelliJ プロジェクトで "Cannot resolve symbol" を解消する

Java 力が皆無なので、日々しょうもないことを学んでいる。

今日の「しょうもない学び」は `build.gradle` に次の記述をしたのに、IntelliJ で `import lombok.Data;` が "Cannot resolve symbol" と言われてしまったのを解消した件だ。

```
dependencies {
	compile 'org.projectlombok:lombok:1.16.10'
}
```

本当にしょうもない話だけど、"File" => "Invalidate Caches / Restart..." を選択して IntelliJ を再起動すると、キャッシュが削除された状態で IntelliJ が再起動される。さらに、わたしのケースでは "Import Module from Gradle" というウィンドウが立ち上がり、そこで "Use gradle wrapper task configuration" にチェックを入れることで問題を解消できた (`gradlew` ファイルが作成される)。

しょうもな過ぎて Qiita に書くのもためらわれるけど、しょうもないレベルなのを受け入れてやっていくしかない...。
WindowsServer2012のパラメータシートについて

あるプロジェクトでWindowsServer2012を構築する必要になり、そこでパラメータシートを起こす必要になり、一から起こす時間がないのでもし、WindowsServer2012とActiveDirectoryのサンプルやテンプレートが公開されているサイトをご存じの方がいらっしゃいましたらご教授頂けれ大変助かります
Gmail の 「メッセージのソースを表示」 は、本当のソースを表示しない

メールに関するプログラムを記載していると、メールのソースを確認したいことが多々ある。そのような時、Gmail の「メッセージのソースを表示」する機能は便利なのだが、これは本当のソースを表示しないので、ご注意を。

- 添付ファイルの中身 (MIME エンコード文字列) がカットされている

は、気づきやすいところですが、他に以下の違いがあります。(他の違いがあれば、教えていただけると幸いです)

- From / To などの名前部分が、既に MIME デコードされている
- Subject が、既に MIME デコードされている
- Content-Disposition の filename や Content-Type の name など、[RFC 2322](https://tools.ietf.org/html/rfc2231) で分割されているパラメータの値が、既に連結されている

本当のソースは、そこから「元のメールをダウンロード」した先で確認することができます。昔は「メッセージのソースを表示」で、本当のソースを表示していたと思うんですけどね．．．
3GIM > 3GIMの組み立て


# 3GIMの組み立て

## 組み立て

3GIMとIoTabを接続するために、３GIM側にピンをハンダ付けします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/49910/e3a8bdad-c689-69f0-004b-40eb30b64902.jpeg" width="400px" /><img src="https://qiita-image-store.s3.amazonaws.com/0/49910/90478f46-8246-89e5-64ba-380bfe8a1376.jpeg" width="400px" />

長い方をSIM側へ出るようにセットします。
あとはそれぞれのピンをはんだ付けしていきます。

> はんだ付けの練習はこれでもかというくらいに練習しときましょう。
> はんだ付けさえ成功したら８０％は出来たと思ってOKです。（私は失敗しました）
> おすすめは、ピンヘッダとただの基盤を買ってきてピンヘッダのハンダ盛りが均一にできるくらいに練習しましょう。

<img src="https://qiita-image-store.s3.amazonaws.com/0/49910/ae9edca2-3d15-0f70-dd33-9d45b52dde20.jpeg" width="400px" />
（これは失敗例です）

はんだ付けが終わったら3GIMとIoTabを接続します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/49910/7c94d5a6-b98e-e788-c475-12f5fb3be634.jpeg" width="400px" />

<img src="https://qiita-image-store.s3.amazonaws.com/0/49910/ac34382a-c0a9-c739-a30c-add1d7e17f62.jpeg" width="400px" />
3GIM >3GIMのケース

# 3GIMのケースを探していきます。

## 汎用ケース

タカチのケースが汎用でいろいろよさそうです。
http://eleshop.jp/shop/r/r1810/

### TWシリーズなんかサイズ豊富でよさそうです。
http://eleshop.jp/shop/r/r181060/
> TW4-2-5B　35×20×50　3GIM+IoTabは入りますが、ケース単体と考えるとちょっとイマイチ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49910/4fbf3000-5c8f-b9c7-ccef-0472d1c70b08.png)


### PSシリーズ
http://eleshop.jp/shop/r/r181045/
> PS-50C 入りませんでした。
> PS-65C 入りませんでした。
> PS-85 検証待
> PS-100 手に入りませんでした。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49910/859d7d21-69b4-8a7e-2eba-15ff39fcb7bc.png)


### SWシリーズ
> SW-40B　30×20×40 入りませんでした。
> SW-50B　35×25×50 入りませんでした。
> SW-85B　60×40×85 入るかと思ったが、電池2本+3GIM+IoTabだと微妙に高さが。あと2mm高さが足りない。

### WC
WC72-15-N-BM
WC90-15-N-BM
http://eleshop.jp/shop/r/r181018/
![image.png](https://qiita-image-store.s3.amazonaws.com/0/49910/f947e885-154f-6083-f847-7e066f5923e6.png)



## 100均のタッパー
その他に100均のタッパーなども使えるようです。

## ラズパイ用ケース

### Adafruit Raspberry Pi Zero用ケース
https://www.switch-science.com/catalog/3240/

### Raspberry Pi Zero ケース
https://www.switch-science.com/catalog/3201/




## 自作モバイルバッテリーケース
よくよく考えればバッテリーケースの中に入れ込んでしまえばいいのでは？
http://www.chikuden-sys.com/category/iron-battery.asp?id=4766&c2id=367
<img src="https://qiita-image-store.s3.amazonaws.com/0/49910/ece2b736-021d-2dc4-9e18-9e010138553d.png" width=300px />

基盤の部分に3GIMをうまく入れれば、これがケースとるのでは！

## モバイルバッテリーを分解
モバイルバッテリーにはだいたい18650が入っているらしいので、
よさげなものを分解したら基盤がはいるのでは？


## エッグシェイカー

上記のものはどれもいかにも電気製品っぽい見た目です。

音楽好きの人は一度は楽器屋で手に取った事があるであろう卵
なんともいえないフィット感、小さいながらも楽器としての存在感。

![image.png]
<img src="https://qiita-image-store.s3.amazonaws.com/0/49910/bd9301f8-e275-8265-79b9-9bceb233a4a0.png" width=400px />

これにうまいこと収める事ができれば、それだけで所有欲が満たされそうです。
3GIM > 3GIM サーバー側

# サーバー側の環境構築

## PHPでのサンプルプログラムを提供いただきました。

中身はGETで送信されたデータをそのままファイルに追記していくだけというシンプル構成
最初の検証はこれで進めていきます。

日付のファイル名に対して、
12時34分56秒に取得したデータは以下になります。
123456G127.0000000,35.0000000\n

日付と座標はGで区切ってあります。

ファイルのこのようなデータが書き込まれていれば、無事に3GIM からデータが飛んでいるという事になります。
3GIM > 3GIM コマンド集

# 3GIM コマンド集

## GPS(全地球測位システム)の取得

$LGコマンド

例
```
//$LG:コマンド名：位置情報の取得 x:メソッドを指定しない  0:緯度・経度を表示
gps = com3gim("$LG x 0"); 
```

メソッド（第2引数）
- method:測位の方法(下記のいずれかを指定:現時点任意文字受付可)
- MSBASED: GPSで測位、GPSが利用できない時は3Gネットワークを利用
- MSASSISTED: 3Gネットワークを利用して測位(A-GPS)
- STANDALONE: GPS単体で測位

Option（第3引数）
- 0: 緯度・経度を表示(V1.0と同じ)
- 1: 緯度・経度の他にUTC、品質、捕捉衛星数、高度を出力 
- 2: $GPGGAセンテンスの生データを出力(ダブルクォート付)
- 3: NMEAフォーマット(各NMEAセンテンス)出力※ 
- 9:ロケーションサービスを停止(SLEEP)させる(methodは任意文字/’x’などでも可)

repeatCount（第4引数）
- opthion=0,1,2の場合:測位・出力の回数(opthion=0,1,2の場合)
- option=3の場合: 行数
- 1~100までの回数を指定(出力間隔は測位状況によるが1秒間隔以上)
もしもドメインモデルを日本語で表現したら

```php
// 入退場管理システムの入退場カードエンティティ
class 入退場カード
{
    // ...
	
    public function 入退場する(入退場 $入退場): 入退場イベント
    {
        // このドメインでは不審な入退場を検知する必要がある
        if ($this->未登録カードか()) {
            return 不審な入退場::未登録カードで入退場した($this->製造番号, $入退場);
        }
        if ($this->保有者未割り当てカードか()) {
            return 不審な入退場::未割り当てカードで入退場した($this->製造番号, $入退場);
        }
        if ($this->保有者->契約期間超過か($入退場->日時)) {
            return 不審な入退場::契約期間超過の従業員が入退場した($this->製造番号, $this->従業員, $入退場);
        }
        if ($入退場->入場か() && $this->前回の入退場->入場か()) {
            return 不審な入退場::連続入場した($this->製造番号, $this->従業員, $入退場);
        }
        if ($入退場->退場か() && $this->前回の入退場->退場か()) {
            return 不審な入退場::連続退場した($this->製造番号, $this->従業員, $入退場);
        }
        // 正常な入退場
        return new 入退場した($this->製造番号, $this->従業員, $入退場);
    }
    
    // ...
}
```
Remote Tools for Visual Studio 2015 はどこにある？

わけあって Remote Tools for Visual Studio 2015 をインストールしたくなったが、どうもMSのサイトからはダウンロードできなくなっているっぽい？
少しググって見つかったURLは404になっていた。

もう少し探してみたところ、chocolatey からリンクしているURLは生きている模様。

x86
https://download.microsoft.com/download/c/8/9/c8986418-b5cb-4692-946e-a9f029c6d369/rtools_setup_x86.exe
x64
https://download.microsoft.com/download/1/2/2/1225c23d-3599-48c9-a314-f7d631f43241/rtools_setup_x64.exe
JS(javascript)でajaxの通信部分を同期的にして共通化する

よく新しいプロジェクトに行くと書き方忘れてググるのに時間がかかるのでメモ。

サンプルとして作るものは2ファイル4ファンクション。

- test.js（ajaxの通信部分を呼び出す処理と戻ってきてからの処理を書くファイル）
 - test
 - testSuccess
 - testError

- common.js（ajaxの通信部分を書く共通ファイル）
 - connect


```js:test.js
// html側で両方呼び出してれば書く必要なし
document.write("<script type='text/javascript' src='js/common.js'></script>");

// 参照先：common.js
function test () {

    var actionPath = '/xxx/xxxx';

    var param =  {
        'code' : 'xxxxxxx',
    };

    // result = connect(HTTPメソッド, パス, パラメータ, 正常時ファンクション, 異常時ファンクション);
    result = connect('POST', 'actionPath', param, testSuccess, testError);
}

// testで同期処理にするための正常時コールバック関数
function testSuccess(data){
    // 正常処理の実装
}

// testで同期処理にするための異常時コールバック関数
function testError(data){
    // 異常処理の実装
}
```


```js:common.js
// ajax通信をする
function connect(type,actionPath, param, successCallBack, errorCallBack) {

    //* ajax
    $.ajax({
        type: type,
        dataType: 'json',
        url: 'http://'+location.host+actionPath,
        data: param
    }).done(function (data, textStatus, xhr) {
        //* success
        if (data.status) {
            return successCallBack(data);
        } else {
            return errorCallBack(data);
        }

    }).fail(function(xhr, stat, e){
        //*  error 
        //console.log(xhr);
        return 'fail error';

    }).always(function(data){
        // --
    });

}
```

正直ajaxのソースでxhrとか理解してないところは多々あるのですが^^;
まぁ、よくこんな感じでajaxで値を引っ張ってきてそれを使いたいって時は
これを使って、同期的にして非同期で値が引っ張れてないのに処理が進むというのを回避してます。
CNTKによる画像認識のサンプルをAzure DSVM上で動かしてみる

# はじめに
今回は、CNTKでの画像認識処理の例として、Fast R-CNNという手法とAlexNetというモデルを使い、冷蔵庫内の画像に写る品物の種類を識別するサンプルプログラムを動かしてみます。
参考にしたサイトはこちら([Object Detection using Fast R-CNN](https://github.com/Microsoft/CNTK/wiki/Object-Detection-using-Fast-R-CNN))です。

# 今回の概要
サンプルプログラムは[前回](https://qiita.com/masa_sato/items/b5bae7ced66cfa2f2797)構築したDSVMに既に入っているので、今回はひとまずサンプルプログラムの実行まで試してみます。
(具体的な処理内容については、次回以降で追ってみます。)

[作業手順]
1. 環境準備
2. サンプルプログラム実行

# 1.環境準備
今回はDSVMにプリインストールされているPython 3.5を利用するので、Anaconda PromptのPython3.5用を起動します。
[Anaconda Prompt実行手順]
・スタートメニューのプログラムリストの中から、「Anaconda2 (64bit) 」を選択
・「Anaconda Prompt (py35)」を選択

次に、環境設定とモデル・データファイルのダウンロード、ライブラリのインストールを行います。
[設定・導入手順]
・カレントディレクトリをFast R-CNNのサンプルプログラムディレクトリに変更
　`cd "C:\dsvm\samples\CNTK-Samples-2-0\Examples\Image\Detection\FastRCNN"`
 ・ファイルダウンロード用プログラムを起動
 　`python install_fastrcnn.py`
  　これで、AlexNetのモデルと冷蔵庫画像のデータ一式が所定ディレクトリにダウンロードされます。
![事前インストール作業.png](https://qiita-image-store.s3.amazonaws.com/0/204058/e62bf5b8-a5e4-0c0a-1af9-90e822af9bf5.png)
・今回はPython3.5.3を利用した環境を作ります。(環境名は"cntk"としています。)
　`conda create --name cntk python=3.5.3 numpy scipy`
　`activate cntk`
・scikit-learn、open-cvパッケージを[こちら](https://www.lfd.uci.edu/~gohlke/pythonlibs/)のサイトからダウンロード
　今回は下記2つのパッケージを導入しました。
　・scikit_image-0.13.1-cp35-cp35m-win_amd64.whl
　・opencv_python-3.3.1-cp35-cp35m-win_amd64.whl
 　インストールは、下記pipコマンドで実行しました。
  　`pip install (ダウンロードフォルダ 例:C:\users\[ユーザー名]\Downloads)\scikit_image-0.13.1-cp35-cp35m-win_amd64.whl`
  　`pip install (ダウンロードフォルダ 例:C:\users\[ユーザー名]\Downloads)\opencv_python-3.3.1-cp35-cp35m-win_amd64.whl`
・環境変数"path"に、cntk.exeのあるディレクトリ(今回の場合は"c:\dsvm\cntk\cntk")を追加する。

# 2.サンプルプログラム実行

## データ前処理
1. 物体領域候補の取得 (A1_GenerateInputROIs.py)
今回のサンプルの学習データには、野菜や飲料等の内容物のラベル情報と、それらが冷蔵庫画像の中のどの領域にあるか、という情報が付加されています。
Fast R-CNNの学習処理を実行する前に、先ずSelective Searchという手法を用い、画像の中で物体と思しき領域(ROI)の候補をリストアップする処理を実行します。
下記で実行します。
`python A1_GenerateInputROIs.py`
[実行例]
![A1_中略.png](https://qiita-image-store.s3.amazonaws.com/0/204058/bcf3174a-b705-617f-ae7e-c3aa26197c0d.png)


2.  物体領域の可視化
`python B1_VisualizeInputROIs.py`を実行すると、学習・評価データそれぞれに対し、1.で算出されたROIを合成した画像が表示されます。(最大10画像)
[実行例]
![B1_画像.png](https://qiita-image-store.s3.amazonaws.com/0/204058/aca7a048-29bb-ab11-a81c-dfb8eefb9977.png)


3.  算出した領域の評価
`python B2_EvaluateInputROIs.py` を実行すると、1.で算出されたROIの評価が実施されます。
[実行例]
![B2.png](https://qiita-image-store.s3.amazonaws.com/0/204058/1c00e2ef-aa39-07da-e30a-53ef3848e82c.png)


## Fast R-CNNによる画像認識処理
4.  Fast R-CNNによる学習
　`python A2_RunWithBSModel.py`を実行すると、学習処理が実行されます。
 　このプログラムは、BrainScriptという言語で書かれた設定ファイル(fastrcnn.cntk)を利用して、Fast R-CNNのトレーニング処理を実行しています。
  　※上記手順で記載した環境変数設定が無いと、ここでエラー(`The system cannot find the file specified`などのメッセージ)が出ることがあります。

5.  モデルの精度評価
`python A3_ParseAndEvaluateOutput.py`を実行すると、認識精度を解析して評価が行われます。
[実行例]
![A3.png](https://qiita-image-store.s3.amazonaws.com/0/204058/5a75da16-4928-5f18-941d-10aac9da20ee.png)

6.  評価結果の可視化
`python B3_VisualizeOutputROIs.py`を実行すると、認識結果が画像に重ね合わせて表示されます。
[実行例]
![B3_画像.png](https://qiita-image-store.s3.amazonaws.com/0/204058/6390cbb7-2e23-f632-ec8e-5a69c19987b9.png)



# 次回
上記までで、Fast R-CNNでの画像認識サンプルが実行できました。
次回は、今回のサンプルプログラムをベースに、少し詳しく内容を確認してみます。
SketchをjsonファイルにしGitで管理する

## はじめに
去年は、[SketchToolで画像書き出しを自動化 - Qiita](https://qiita.com/kyota/items/0730519a8d2e964198fd)の記事を書きましたが、今年も続けてSketchネタです。

Sketchはv43からファイル形式がJSONファイルとなったので、ちょっと遊んでみようと思います。

## JSONファイルってどういうこと？
はい、まず、`.sketch`の拡張子を`.zip`に変更して解凍みてください。

↓すると、こんな感じのファイル構成になっていると思います

```
document.json
user.json
meta.json
pages/...
previews/...
```

このように、`.sketch`の実態はjsonで構成されているのです。

## なにが嬉しい？
それまではバイナリデータだったのが、jsonファイルになるのでGitで管理しやすくなると思います。
デザインの変更点をエンジニアに口頭で伝えなくても、コードで会話できるようになります。

## が、解析はちょっと辛いかも
`pages`フォルダ内のjsonが各ページのオブジェクトなどの情報が入っているのですが、情報量が多く解析が辛いです。。ちょっと移動させたや色を変更した程度なら分かるかもですが、視覚的に理解はまず無理だと思います。

### 例（diff）
```diff
-"x": 135,
-"y": 281

+"x": 143,
+"y": 289

...

-"blue": 0.847, 
-"green": 0.847, 
-"red": 0.847

+"blue": 0.1066960170865059,
+"green": 0.007513228338211775, 
+"red": 0.816203773021698
```

うーん、位置の移動は分かりやすいですが、色の変更は何色になったのかが分かりづらいです。。
が、変更点がコードで分かるようになっただけでも、世界が広がった感じがします。

### スクリーンショット
#### 変更前
![1.png](https://qiita-image-store.s3.amazonaws.com/0/33699/6dfd2294-217d-5d1b-3b0f-e7dd966cd0e2.png)


#### 変更後
![2.png](https://qiita-image-store.s3.amazonaws.com/0/33699/f4f5c5bb-6e09-68bb-c557-666c2bf154b9.png)


## zip → json化を自動化する
毎回手作業でzipをjsonに変更するのは手間ですよね。
こちらを細かく説明しようと思ったのですが、既に[こちらの記事](https://qiita.com/poyosi/items/50ac33d83d6f3fa29e72#sketch%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AB%E5%B1%95%E9%96%8B%E3%81%99%E3%82%8B)に詳しく書いてあるので参考にしてみてください。

コマンド一発でjson化してくれます。

## コマンドも面倒だよ！
はい、面倒ですね。
ファイルの保存毎に書き出してくれるテンプレートを作成しました。
[GitHub - mdb-konno/sketch-template:  sketch-template](https://github.com/mdb-konno/sketch-template)

npm scriptsを利用してファイルの監視＆圧縮＆書き出しをしてくれます。


## 実務で使えるか？
正直、テンプレート作って、この記事書いておきながら、実務ではGit管理までは使っていません。（ファイルの圧縮の自動化は便利なので使っています）
デザイン作業を並行して作業することが多く、本来であれば、ブランチ切って作業すべきなのでしょうが、ちょっと面倒です。。

## もっといいツールがある
こんな地味なことしなくても、既に便利なツールが世の中に登場しました。

- [Abstract - Secure version control and design workflow management](https://www.goabstract.com/)
- [Kactus](https://kactus.io/)
- [Introducing InVision Design System Manager + Brand.ai is joining InVision - InVision Blog](https://www.invisionapp.com/blog/announcing-invision-design-system-manager/)

恐らくSketchは上記のようなツールが出ることを期待し、jsonファイル化にしたのかもしれません。

## まとめ
- Sketchがjsonファイルになったけど、自力で解析などをするには辛い
- 財布と相談し、他ツールを使う方がいいかも
- ファイル形式が変わっただけで、デザインフローに大きく関わる時代に突入しそう。今後に期待
Pythonの基礎知識：ファイル書込み編

##Pythonで簡単なメモ帳を作って見た
Pythonを数時間触ってみて、簡単なシステムを作るという機会があったので、その時に役に立った知識をメモ程度に書いていきます。

###1.ファイルへの書き込み

```py:readWrite.py
fout = open('data.txt', 'w')
fout.write('任意の文字列')
fout.close()
```

まず、
```fout = open('data.txt', 'w')```
で、data.txtファイルをw:書き込みモードで開きます。

次にファイルを開いて格納した変数foutに書き込みます。
```fout.write('任意の文字列')```
fout.に対する関数でwrite(str)で指定されたファイルに書き込みます。

最後に、開いているファイルを閉じます。
```fout.close()```
close()関数で、開いているfoutを閉じます。

そして、テキストファイルdata.txtを開いてみると、任意の文字列が書き込まれていることがわかると思います。
Mastodonのbundle installを実行したらcld3に関するエラーの対処方法

***※当記事は2017年7月9日にDiscordグループ「Mastodon-jp」に投稿されている質問・回答内容のメモ書きです。***

動作環境
・CentOS7.3
・<ユーザー名>のディレクトリ直下にliveディレクトリを配置し、その中にMastodonを構築
・Mastodon1.4.7（前提パッケージはインストール済み）

Mastodon1.4.7に更新作業を苦戦して、やっと更新終わらしてbundle installを実行するとこのようなエラーの場合

```ruby:エラー本文
current directory:
/home/<ユーザー名>/live/vendor/bundle/ruby/2.4.0/gems/cld3-3.1.3/ext/cld3
/home/<ユーザー名>/.rbenv/versions/2.4.1/bin/ruby -r ./siteconf20170709-25674-i0yzxc.rb
extconf.rb
Failed to locate protobuf
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/user/.rbenv/versions/2.4.1/bin/$(RUBY_BASE_NAME)
        --with-protobuf-config
        --without-protobuf-config
        --with-pkg-config
        --without-pkg-config

To see why this extension failed to compile, please check the mkmf.log which can
be found here:

/home/<ユーザー名>/live/vendor/bundle/ruby/2.4.0/extensions/x86_64-linux/2.4.0-static/cld3-3.1.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in
/home/user/<ユーザー名>/vendor/bundle/ruby/2.4.0/gems/cld3-3.1.3 for inspection.
Results logged to
/home/user/<ユーザー名>/vendor/bundle/ruby/2.4.0/extensions/x86_64-linux/2.4.0-static/cld3-3.1.3/gem_make.out
```

こちらのエラーの場合は
`export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/share/pkgconfig`
というコマンドを実行したら治りました。


実は、この件が解決してから投稿を後回しにしてたら、先日1.4.7から2.0.0に上げた際にこの症状が再発したので書いときました。(追記：Rubyのアップデート後bundle installをした際にも起きます。)
Windows10にPHP7.0をインストール

# 環境
- Windows10
- PHP7.0

# ダウンロード
[PHP.Net](http://jp2.php.net/downloads.php)
今回は、PHP7.0.25を入れます

# インストール
ZIP展開→任意のフォルダへ

# PATHを設定
スタートメニューの設定を開き「環境変数」で検索
「環境変数の設定」画面で、PATH の最後に、展開したフォルダのフルパスを追記

# 確認
「設定」を閉じてコマンドプロンプトを開く
```php -v``` で以下の通り表示されればOK

```
PHP 7.0.25 (cli) (built: Oct 24 2017 13:54:39) ( ZTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
```

# composerのインストール
必須ではないけれど、おそらく使うケースが多いので。。。
https://getcomposer.org/download/

Windows Installer がお手軽かと。
PHPを選択する画面では、上でインストールしたものを選んでください。



**Have a Nice PHP Development!!**
VMware上のCentOS 7でnode.js開発環境を整えるまで

#はじめに
これまでWindows上でnode.js開発をしようと試みていた私ですが、node.jsのバイナリにおけるWindows版とLinux版の動作の違いによりどうしても解決できない問題が出てきてしまったので、思い切って仮想環境に開発環境を移そうと思い奮闘した記録です。
##何が起こったのか
当初、[express-vue](https://www.npmjs.com/package/express-vue)を用いて開発を行っていたのですが、.vueファイル上で別の.vueファイルを参照したときに、

```
Cannot find module 'E:UsershogeDocumentsProgramfugaroutes/ ./components/header.vue'
```

とか、

```
Error: Could not find view file at header.vue
```

といった感じで怒られてしまいました。
もうこの時点で明らかにパスがおかしいですね。
nodeのバージョンを変えたり、npmのバージョンを変えたり、絶対パスにしてみたりしたのですが、何をしても治らず。
調べるとexpress-vueのissueにこんなものが。
https://github.com/express-vue/express-vue/issues/120
これはWindows特有の既知の問題らしく、これを解消したバージョンが10/27あたりに出ているとか。（これがnode v9かな？）
しかし、LTS版を使いたい私はいっそ開発環境を変えてしまおうと決意。
#下準備
以下をダウンロード・インストール。
・VMware Workstation Player
https://my.vmware.com/jp/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/14_0
・CentOS 7
https://www.centos.org/download/
GUI環境が欲しいので私はDVD ISOにしました。

先にBIOS画面でVT-x/AMD-V機能を有効にしておきます。これをしておかないと仮想化できません。
#仮想環境のセットアップ
VMwareを起動して、まずは仮想環境を作ります。
GUIの指示通りに進めばOK。仮想HDD容量は50GB固定にしました。
作成出来たら、仮想マシン設定で

- プロセッサ数→4
- メモリ→4096M
- CD-ROM→CentOSのISOを指定

と設定して起動。各自の環境に合わせて適宜設定してください。
CentOSのInstallerが起動するので、一番上の選択肢を選択。
#CentOSのインストール
これもGUIに沿って進むだけ。
途中、ソフトウェアの選択で「最小限のインストール」を「サーバー（GUI使用）」に変えておきます。
rootパスワードとユーザーも適宜設定。
#起動したら
まずはyum updateします。

```bash
$ sudo yum update -y
```

その後一回再起動しておくと安心。
VMwareの便利機能であるVMware Toolsは、オープンソース化して「open-vm-tools」となり、すでにインストールされているようです。時代は変わったんですね…
#共有フォルダ設定
しかし、このopen-vm-toolsでは共有フォルダをホストOS側で設定すれば自動的に認識…とはいきません。
https://communities.vmware.com/people/gowatana/blog/2017/04/08/open-vm-tools-hgfs
ここを参考に、手動でマウントする必要があります。
#Dropboxを入れる
私はソースコードをDropboxで管理しているのでその関係で必要となりました。
https://ywnb.net/p/201606/3025
こちらを参考に。
作業としては、~/binにdropbox.pyをダウンロードして、

```bash
$ ./dropbox.py start -i
```

を叩くだけです。わざわざ実行ファイルをダウンロードしてこなくても、このPythonスクリプト叩くだけで勝手に実行ファイルまでダウンロードしてきてくれます。
ログイン処理も自動的にブラウザが開いてメールアドレスとパスワードを入れるだけ。あら簡単。
デーモンを起動するときは

```bash
$ ./dropbox.py start
```

止めるときは

```bash
$ ./dropbox.py stop
```

状況確認は

```bash
$ ./dropbox.py status
```

です。
#nvmでnode.jsをインストール
https://qiita.com/akippiko/items/3708016fc43da088021c
https://qiita.com/makeneko/items/66309713c4ebe0b46c47
こちらを参考にさせていただきました。

```bash
$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ nvm install 8.9.1
$ nvm alias default 8.9.1
$ echo "source ~/.nvm/nvm.sh" >> ~/.bashrc
```

これで動作確認。

```bash
$ node -v
v8.9.1
$ npm -v
5.5.1
```

#おわりに
パス問題に振り回されて一日無駄にしました。最初からLinux使っとけばよかったと思う今日この頃です。いつになったらプロダクト開発できるんだろうか。
JSTQB TA勉強メモ#1

# やった事
* シラバスのダウンロードと概要確認
 * http://jstqb.jp/syllabus.html
 * Advanced Level概要
 * TA
 * 用語集


# 勉強メモ
## TAの章立てと目安の時間
1. テストプロセス:300min
1. テストマネジメント:90min
1. テスト技法:825min
1. ソフトウェア品質特性のテスト:120min
1. レビュー:165min
1. 欠陥マネジメント:12min
1. テストツール:45min

## 雑感
* 時間の配分で見ると「テスト技法」が圧倒的に多いのでここを重点的に実施していく事になりそう。
* もう少し情報収集したい。

# 次回以降
* シラバスに一通り目を通す
* 全体計画を立てる
* 折を見て情報収集
Wordpress > kusanagi > HTTP → HTTPS へリダイレクト設定


nginxでHTTP → HTTPS へリダイレクト設定はいろいろあるようですが、

kusanagiでは以下のコマンド一発でOKでした。



<pre>
kusanagi ssl --https redirect プロファイル名
</pre>


[KUSANAGIコマンド – KUSANAGI](https://kusanagi.tokyo/document/command/#ssl)
CircleCI 2.0 をlocalで動かす

自分のブログに書いたけれども誰にも見られてなくて悲しかったので転載しました。
http://selmertsx.hatenablog.com/entry/2017/11/20/192719

## 概要

自分がいるプロダクトでCircleCI 2.0 の導入をすることになった。
恥ずかしいことにCircleCIの設定を自分でしたことが無かったので、設定を簡単にする方法を探した。
公式ドキュメントを読んでいたら、circleci をlocalで動かす方法が見つかったのでやってみた。
その結果、10minくらいで簡単に動かせることが分かった。

このドキュメントには、circleciをlocalで動かす方法と、localで動かす際の注意点を記載する。
基本的には、[このドキュメント](https://circleci.com/docs/2.0/local-jobs/)からの抜粋なので、疑問に思ったらそっちを見て頂けると :pray:

## 手順

- circleciコマンドのインストール
- circleci 2.0用の設定ファイルを書く
- local環境でcircleciを動かす

## circleciコマンドのインストール

```shell
curl -o /usr/local/bin/circleci https://circle-downloads.s3.amazonaws.com/releases/build_agent_wrapper/circleci && chmod +x /usr/local/bin/circleci
circleci update
```

これだけで完了

## circleci 2.0用の設定ファイル

今回利用した circleci設定ファイルはこちら。

```yaml
#.circleci/config.yml
version: 2
jobs:
  build:
    docker:
      - image: circleci/node:8.9
    working_directory: ~/repo
    steps:
      - checkout
      - restore_cache:
          keys:
          - v1-dependencies-{{ checksum "package.json" }}
          - v1-dependencies-
      - run: yarn install
      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}
      - run:
          name: Running tests
          command: yarn test
      - run:
          name: tslint
          command: yarn lint
```

ここでは、この設定の説明はしない。下記のページにconfigの書き方が記載されているので、必要あれば確認して欲しい。

https://circleci.com/docs/2.0/configuration-reference/

## local環境でcircleciを動かす

```shell
# 設定した config.ymlが正しいか確認する
$ circleci config validate -c .circleci/config.yml 
config file is valid
# circleciをlocalで動かす
$ circleci build .circleci/config.yml

====>> Spin up Environment
Build-agent version 0.0.4536-a668371 (2017-11-15T20:13:56+0000)
Starting container circleci/node:8.9
  using image circleci/node@sha256:80714f293dfc6fc72c815a5bc1dc35bf33b3b8e0ebfaec0b4a64c567bbd1e766
....
$ /home/circleci/repo/node_modules/.bin/jest
 PASS  __tests__/parse.spec.ts
 PASS  __tests__/checker.spec.ts

Test Suites: 2 passed, 2 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        3.074s
Ran all test suites.
Done in 3.73s.
Success!
...

```

これで circleciをlocalで動かすことができた。
続いて、circleciをlocalで動かすときの注意点を記載していく。

## 注意点

- 環境変数を指定するときは -e オプションを使うこと
  - `circleci build .circleci/config.yml -e VAR=VAL` みたいに書く必要がある
- circleci CLIは Workflowsに対応していない
- restore_cache, save_cache が使えない


```
# restore_cacheのエラーログ
====>> Restoring Cache
Error: Skipping cache - error checking storage: not supported

Step failed
```

## 最後に

circleciの設定をlocalで確認できるようになると、ちょっと書き換えるときにも色々と捗るので便利そう！
ltspiceでラジオ その2

#概要
ltspiceでAMラジオやってみた。

#写真
電波の波形

![image](https://qiita-image-store.s3.amazonaws.com/0/18104/f8f6b5cd-6137-4262-eea9-84e16a0f3cd9.png)

#写真
出力の波形

![image](https://qiita-image-store.s3.amazonaws.com/0/18104/66f98ea5-86c7-9e89-021b-8f5491a1f86e.png)


#回路図
BAT54、使ってみた。

![image](https://qiita-image-store.s3.amazonaws.com/0/18104/fb651306-2db7-2e83-28a9-73bc95ba1549.png)


以上。
データ前処理に使えるノウハウ満載の書籍『Pythonではじめるデータラングリング』レビュー

プログラマによる書籍『Pythonではじめるデータラングリング』の簡単なレビューです。

本書では、さまざまなデータ処理に関するノウハウが多数紹介されており、データ前処理に悩む方にはおすすめです。

https://www.oreilly.co.jp/books/9784873117942/
Pythonではじめるデータラングリング
――データの入手、準備、分析、プレゼンテーション
Jacqueline Kazil、Katharine Jarmul　著、長尾 高弘　訳、嶋田 健志　技術監修
2017年04月 発行
516ページ
ISBN978-4-87311-794-2
フォーマット Print PDF
原書: Data Wrangling with Python

上記URLに目次が記載されています。各章を通読する必要はなく、必要に応じてひろい読みすれば良いかと思います。

以下気になったところです。

```
----
データ処理のプロセスは以下の通り。
・ストーリー、問題の設定
・データの明確化
・データのパースとクリーンアップ（獲得、保存、探求）
・プレゼンテーション、データ共有

----
・まず、データの型を決める、確認することが重要
数値
文字列
リスト、辞書

・次に、データを格納するファイル形式を決めることが重要
いわゆるmachine readable（機械可読）なフォーマット
例）
CSV、JSON、XML
そしてExcel
注）エクセル用Pythonライブラリの例
http://www.python-excel.org/
ほかにもさまざまある

注）PDFはパースが難しいので使わない

----
データの獲得について
・APIの長所、短所
長所
すぐアクセスできる
大量のデータがある
ストレージの心配不要

短所
大規模APIはデータの信頼性に欠ける
データが重すぎる
APIの制限やダウンタイムに左右される

----
以下気になったライブラリ
Celery：キューベースの自動化

分散キューシステムを作るためのPythonライブラリ

向いているタスク
・期限がない
・タスク数を知る必要がない
・タスクは必ずしも順番に実行しなくてもよい
・タスクが失敗しても再実行すればよい

逆に上記以外であれば、
一般的なスケジュールベースの処理にすべき


----
最後に
データアナリスト向け
開発者向け
ビジュアルストーリーテラー向け
システムアーキテクト向け
の発展的な課題を示しています
```

以上、気になったところです。

汎用的な前処理フレームワークは存在しないので、
前処理プラグインを多数準備していくことが、
実装上で必要となります。

以上です。




余談：
データ前処理について、以下のイベントで研究しているので、参加をおすすめします。
https://teamai.connpass.com/event/70920/
[Java]CSVの特定カラムだけにクオートをつける

# 背景

- SpringでCSV出力機能を作ろうとしている
- ベースは[この記事](https://qiita.com/yo1000/items/050c5c47daabf7a10e10)を真似すればすぐにできた

# 課題

- CSVの特定のカラムだけにクオートをつけたい
- 少し調べただけだとString型のカラム全てクオートをつけるかつけないかしかできなかった

# 対応策

- String型は全てクオートをつける設定にする
- クオートをつけたくないカラムに`@JsonRawValue`をつける

# サンプル

```java:SampleController.java
@RestController
public class SampleController {
    @GetMapping(value="/sample.csv", produces="text/csv;charset=utf-8;Content-Disposition:attachment")
    public String csv() throws JsonProcessingException {
        List<UserBean> rows = new ArrayList<UserBean>() {
            {
                add(new UserBean("ozaki", "runners", 27));
            }
        };
        CsvMapper mapper = new CsvMapper();
        // withHeaderをつけると一行目にヘッダーがつく
        CsvSchema schema = mapper.schemaFor(UserBean.class).withHeader();
        // ALWAYS_QUOTE_STRINGSとするとString型のカラムはクオートをつけるよってことになる
        mapper.configure(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS, true);
        return mapper.writer(schema).writeValueAsString(rows);
    }
}
```
```java:UserBean.java
// CSVのカラムの順番をセット
@JsonPropertyOrder({"name", "team", "age"})
public class UserBean {
    private String name;
    // JsonRawValueがあるとクオートがつかない
    @JsonRawValue
    private String team;
    private Integer age;

    public UserBean(String name, String team, Integer age) {
        this.name = name;
        this.team = team;
        this.age = age;
    }

    /* setter/getter */
```

```csv:sample.csv
"name","team","age"
"ozaki",runners,27
```