OmniAICreator/Qiita-1.07M huggingface dataset:
Docker for Macでローカルの80番ポートにマッピングしたらつまづいた

※当故事は[個人ブログ](https://tech.tsukapah.com/docker-for-mac-port80/)に移行しました

Macを新しくしたのでdocker-machineからDocker for Macに乗り換えてみた。
nginxコンテナをローカルの80番にマッピングして動作確認しようとしたら微妙につまづいたのでメモ。

```bash
$ docker run --name nginx -d -p 80:80 nginx
241b1dc789fe4d699af662c872ca3703053b77715e56ef307919fa4fb5457d6b
$ curl localhost
curl: (52) Empty reply from server
```

おや？レスポンスが返ってこない。
リクエストヘッダを見てみる。

```bash
$ curl -v localhost
* Rebuilt URL to: localhost/
*   Trying ::1...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.43.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server
```

`* Connected to localhost (::1) port 80 (#0)`とのことなのでIPv6アドレスにリクエスト投げてるっぽい。
hostsを確認。

```bash
$ cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost
```

IPv6アドレスをコメントアウトし再トライ。

```bash
$ cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
#::1             localhost
```
```bash
$ curl -v localhost
* Rebuilt URL to: localhost/
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.11.5
< Date: Tue, 08 Nov 2016 05:27:01 GMT
< Content-Type: text/html
< Content-Length: 612
< Last-Modified: Tue, 11 Oct 2016 15:03:01 GMT
< Connection: keep-alive
< ETag: "57fcff25-264"
< Accept-Ranges: bytes
<
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
* Connection #0 to host localhost left intact
```

期待通り返ってきた。
localhostをIPv6で名前解決できないとダメな理由がない限り、このIPv6エントリはコメントアウトでいいと思います。
Safariでボタンの角丸が消えないときの対応

```
  input[type="button"],input[type="submit"] {
    border-radius: 0;
  }
```
上記のみの指定だけでは、角丸は消えないので下記で対応。

```
  input[type="button"],input[type="submit"] {
    -webkit-appearance: none;
  }
```

CSS初心者の僕は知らなかった・・・
jsのスムーススクロール

# ieで動かないときがある
動かないコード

```javascript
$('document,body').animate({'scrollTop':self.target[index]},450,'swing');
```

動くコード

```js
$('html,body').animate({'scrollTop':self.target[index]},450,'swing');
```


self.target[index]のところはスクロール先のDOMの位置に置き換えてください。
因みに、自分の書いた元コードは以下になります。
自分が描いたやつなんで、動かなかったらコメントよろしくお願いします。

```js
var pageLink = {
	init: function () {
		this.setParam();
		this.bindEvent();
	},
	setParam: function(){
		this.$link = $('.anc');
		this.target = [];
                this.$window = $(window);
		if(this.$link.length > 0){
			this.setPosition();
		}
	},
	bindEvent: function(){
		var self = this;
		this.$link.click(function(){
			self.scrollAnime(self.$link.index(this));
			return false;
		});
		this.$window.resize(function(){
			if(self.$link.length > 0){
				self.setPosition();
			}
		});
	},
	scrollAnime: function(index){
		var self = this;
		$('html,body').animate({'scrollTop':self.target[index]},450,'swing');
	},
	setPosition: function(){
		for (var i = 0; i < this.$link.length; i++) {
			this.target[i] = $(this.$link.eq(i).attr('href')).offset().top;
		}
	}
};
```

ページ内リンクにクラスをつけて、pageLink.init()すれば動きます。
これをそのままコピペしてました。

追記
慌てて作成したので、プログラム部分が間違っていました。
編集したので、使えるようになってます。
JavaScriptで配列の全通りの組み合わせを作る

メモの投稿ですみません。。。

```js
const a1 = new Array(10).fill(null).map((a, i) => i) // [0, 1, 2, ..., 9]
const a2 = new Array(10).fill(null).map((a, i) => i) // [0, 1, 2, ..., 9]

a1.reduce((acc,curr) =>{
    acc.push(...a2.map(a => [curr, a]))
    return acc
}, [])
```
CakePHP 2系のFormヘルパーの小ネタ(separatorらへん)

作業的・形式的に作るのと、実際の使用感を想像しながら作るのって違うなと強く感じた一つなのでまとめておきます。(ある意味こだわらなければすごいシンプルなのかもなーとか思ったり)
ここでは編集用のフォームを題材にします。主にViewのお話です。

#### CakePHPのFormヘルパー
```edit.ctp
<div class="form-group col-xs-12">
<?= $this->Form->input('meeting_datetime', [
    'label' => ['text' => '希望日', 'class' => 'col-xs-5'],
    'type'  => 'datetime',
    'dateFormat' => 'YMD',
    'timeFormat' => '24',
    'monthNames' => false,
    'separator' => array('年', '月', '日　'),
    'empty' => '-',
    'maxYear' => date('Y') + 1,
    'minYear' => date('Y') - 3
    ]); ?>
</div>
```

こんな感じ。一行目のやつを作るのに色々調べました。
<img width="319" alt="スクリーンショット 2016-11-08 14.58.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/145861/f6273fc8-7512-cfa5-4be6-2eb97bf9880c.png">


これで手間取った部分を解消された、という話なのですが、少し細かく書いておきます。

- typeを「date」とか「datetime」とかで勝手にCakephp側で体裁を整えてくれる。
- ○○formatとかmonthNamesのところを調整すれば、月の英語表記や24時間表記とか上手く整えてくれる。
- separator(※これ後述します)をわかりやすく設定できる。
- maxとかminYearを指定してセレクトしやすいようにできる。

**ライブラリをいじった**
lib/Cake/View/Helper/FormHelper.phpを app/View/Helper/FormHelper.phpにコピーして、

```app/View/Helper/FormHelper.php
$opt = implode($separator, $selects);
```
この部分を、

```app/View/Helper/FormHelper.php
// $opt = implode($separator, $selects);
$opt = "";
$i = 0;
if (is_array($separator)) {
    foreach($selects as $select) {
    $opt .= $select.$separator[$i];
    $i++;
}
} else {
    $opt = implode($separator, $selects);
}
```
こんな感じに修正。
 'separator' => '/' で年・月・日ごとに分けらんないと思ってたら行けたーという発見でした。
.NET EF4でbuild xcopyとかしていたやつを.NET Coreでやる方法

ビルド実行後にxcopyとかでファイルをbin下とかに置いていたと思いますが、.NET Coreの場合は以下のようにできます。

``` project.json
    "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": {
      "include": ["Templates/*.xlsx", "Nanka\\"],
      "includeFiles": ["systemsettings.yml"]
    }
```
Jenkins + Bitbucketで「No git jobs using repository」

# Jenkins + Bitbucketで「No git jobs using repository」

Bitbucketへpushした際にJenkinsへのhookが効かない。
Bitbucketの
設定 > フック > ポストレシーブ > Bitbucket Server Webhook to Jenkins
からwebhookの設定画面を起動し、「Trigger Jenkins」ボタンを押下したところ、「No git jobs using repository: https://～」という表示がされた。

下記URLを参考にジョブの設定画面からビルドトリガの「SCMをポーリング」にチェックを入れ、スケジュールを空にするとうまくいった。
[Debugging "Error: Jenkins Response: No git jobs using repository" #147](https://github.com/Nerdwin15/stash-jenkins-postreceive-webhook/issues/147)
スケジュールを空にすると「スケジュールされていないので起動しません。」と表示されるが、無視しても問題なさそう。
Pythonビギナーズガイド（導入編）

# 概要
自分の復習用のメモですが、誰かの役に立つかも・・・と思い、投稿しました。 
読者はPythonプログラミング初学者を想定しております。
Pythonの環境構築は、古い情報も多く、ネットで調べると色々な情報が混在しているため、
初学者にとっては最初に躓く壁です。

## Python環境構築あるある
* Pythonの2系と3系の違いがわからない。どちらをいれるべき？
* 環境構築に関してググると、"virtualenv"・"pyenv"・"easyinstall"・"setuptools"など、色々検索に引っかかるがどれを使えばいい?時代遅れはどれ？
* 結局、初学者でも簡単に導入でき、Pythonのバージョンアップにも楽に対応できる拡張性・汎用性のある方法は？

## Python環境構築するにあたり
他の記事を見て、混乱しないよう簡潔にオススメの環境構築の結論を述べます。
<Font color='red'>今後のことを考え、Python3の開発環境を構築しましょう（今回、紹介する導入方法ではpython2系・3系どちらでも対応可能)</Font color>

#### <Font color='blue'>「pyenv/pip/conda」この３つのコマンドが使える環境を構築することが、ベター！</Font color>
初心者は公式のPythonをいれるのではなく、condaコマンドの使える"anaconda"または"miniconda"を入れることがオススメです。"anaconda"・"miniconda"はPythonのディストリビューションの一種で、主要ライブラリが揃った状態で開発を進めることができます。

## Pythonの環境構築
virtualenv・easyinstall・setuptoolsを使用して、pythonの環境構築するのは古い情報。
導入に使用するのは、「pyenv(installerからダウンロードすると楽)、pip、conda」です。
とりあえず、導入するものがどんな役割を果すのかは、後で説明するのでまず環境を構築します。

1. pyenvのインストール。
    * [pyenv-installer](https://github.com/yyuu/pyenv-installer)を利用
    
    ```
$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
$ pyenv update
    ```
2. pythonのインストール
    * [pyenv](https://github.com/yyuu/pyenv)を利用(上記でダウンロードしたやつ）
    
    ```
$ pyenv install --list|grep miniconda  # インストール可能なリストを表示。minicondaがオススメ
$ pyenv install xxxxxx # バージョンxxxxxxをインストール
$ pyenv versions # インストール済みのバージョン一覧表示
$ pyenv use xxxxxx # 指定したバージョンを使用
$ pyenv version # 現在のバージョンを確認
# miniconda/anacondaをインストールした場合は、condaで補完が効くかどうか確認
$ conda update conda # 一応念のため
    ```
3. pipのインストール
    * Python 3.4以降のバージョンにはデフォルトでインストールされています。インストール済みのため割愛
    * 2系をダウンロードしてきた方は、[こちら](http://uxmilk.jp/12691)から
    
4. 仮想環境の構築
    * conda create -n <環境名> <スペース区切りでライブラリ名>
    * pyenv-virtualenvでも仮想環境構築は行えるがオススメしない。pythonのバージョン間の違いまで吸収できるのはcondaで作る仮想環境
    
    ```
$ pyenv global miniconda3.XXX　 # インストール済みのバージョンの中で、defaultで呼ぶものを定義
$ conda create -n test pandas # 仮想環境構築
$ pyenv versions # インストール済みのバージョン一覧表示
$ pyenv local miniconda3.XXX/test # もし、このディレクトリ下のみの仮想環境として利用したいなら
$ pyenv global miniconda3.XXX/test # もし、作成した仮想環境をdefaultで利用したいなら
    ```
上記の一連の作業で共通の環境構築部分は終了です。
後は必要なパッケージを適宜ダウンロードし、環境が汚染されたら適宜新たな仮想環境を構築し、切り替えるだけで良いです。

## 導入してきたやつらの役割

### pyenvに関して
pythonのバージョン管理ツール。
pythonの2系/3系やanaconda／minicondaの好きなバージョンを取得し、
切り替えることが可能。
使用方法は[こちら](http)

## pipに関して
pythonのスタンダードなのパッケージ管理ツール。
pipよりcondaを用いたパッケージインストールのほうが便利なため、
初心者はcondaに入っていないパッケージをpipでインストール程度の認識をもっていればよいかも。
pipがcondaよりも面倒なわけは、pipはクライアント側でコンパイルするので環境によって怒られることがある点。

## condaに関して
pythonの「パッケージ管理、バージョン管理、仮想環境管理」ができる万能ツール。
anaconda/minicondaを導入すると、もれなくついてくるw
普段はインストール方法に記載したように仮想環境構築に使用したり、パッケージのインストールに使用することが多い。
バージョン管理もcondaで行えるが、私はインストール時同様にpyenvで新しいバージョンをダウンロードして、切り替えを行っています。
Vagrant を用いた開発環境での作業

# 仮想環境を用いたきっかけ
qiita初心者です。普段は大学で複数のサーバによる並列処理の研究、開発をしています。以前はローカル(Mac book air)開発環境を使ってプログラムを書いて、そのプログラムを大学で管理している何台かのサーバ(12 ~ 24台くらい)に移して動かしていました。最終的にプログラムを動かすサーバの設定に手間取ったり、ネットワーク設定の変更など不便に感じることが多かったです。出先で何かする時など、ちょっとした用事の時に新たにサーバを用意しないといけない時にも不便でした。またmacの開発環境が混み合うのも嫌でした(これに対しては様々な解決法があると思いますが!)。 

# Vagrant を用いたきっかけ
とりあえずVirtual boxを導入してみましたが、GUIの操作はイマイチ慣れませんでした。(完全に個人的な理由です)特にネットワーク構成などに戸惑いました。そこで[Vagrant](https://www.vagrantup.com/)を導入してみました。簡単に言うとCUIベースで仮想マシンを操作することができます。rubyファイルに仮想マシンの設定を書いていくので非常に感覚的に扱えます。
構造としてはGithubとVagrantを組み合わせた開発です。

これはあくまで開発時であり、実際にシステム評価をする時には物理サーバに環境を構築して行なっています！！！！

# 作業の流れ
まず前提としてVagrant の開発環境を構築する必要があります。[このあたり](http://techacademy.jp/magazine/6304)を参考にしてmacに開発環境を構築します。

## プログラムの開発
プログラムの開発は仮想マシン中の/vagrant以下のファイルについて行なっています。共有ファイルが仮想マシンを立ち上げたディレクトリ(たいていvagrantfileがあるとこ)にできるためこれらのファイルに対して操作を行います。これらのファイルはgithubのプライベートレポジトリで管理しておりgit操作の権限をローカル環境(mac book air)のみにもたせています。その関係でgitに対する処理は別ターミナルでホストマシンから行なっています。
vagrantfile はrubyベースになっていて、とても簡単に設定をいじることができます。

```ruby:vagrantfile
config.vm.define "server1" do |server|
  server.vm.network "private_network", ip: "192.168.33.10"
  server.ssh.forward_agent = true
end

config.vm.define "server2" do |server|
  server.vm.network "private_network", ip: "192.168.33.11"
  server.ssh.forward_agent = true
end
```

といった感じに記述していくことで設定を少しずつ変えながら全く同じ環境を簡単に複数立ち上げることができます。もちろんメモリ割り当てなどの設定もいじれます。



##　開発環境の吐き出し
`vagrant halt [吐き出す対象の仮想サーバ名]` 
を入力し、package.boxを出力します。一台の仮想サーバなら[吐き出す対象の仮想サーバ名]は省略可能です。

##大学側のサーバ
vagrant を導入したのち、boxファイルを転送し、実行します。
`vagrant init [package.boxファイルの名前]` 
複数の物理サーバ上に複数の仮想サーバを実行する場合、サーバ間はネットワーク疎通を図れるようvagrantfileに設定します(私はVLANセグメントを切ってVMにそのセグメントのアドレスをつけるようにvagrantfileに設定しています)。Githubでプログラムを移植して移行終了です。
またはプライベートなgit管理をしないのならば開発したプログラムごとpackageするのもありだと思います。


# おわりに
直接遠隔のサーバにアクセスして開発からリリースまでを行うのもいいと思いますが複数のサーバを使った動作の検証を定期的にしたい場合、開発環境に適応した変更をそのまますべてのサーバに行なっていったり、普段の環境が使えない場所でデモをやるときなどにサーバを新たに用意したりするのは結構大変だと思うので仮想マシンは解決方法の一つとしてありだと思います。間違っているところもあるかもしれません。申し訳ありません。
OPL言語の基礎

# どんな言語なの？
OPL言語は数理最適化問題を解くソフトウェアである、IBM ILOGを利用するためのソフトウェアです。
この言語で問題をモデリングすることで、複雑な問題を高速に解かせることが出来ます。
# 基本事項
+ 使えるのは、`Integer`、`float`、`identifier`、`string`、予約語
+ `int+`、`float+`など符号をつけるを、その符号のみを取る型になる
+ Identifierは英文字もしくはアンダースコアで始めること、英文字・数字・アンダースコアが利用可能
+ Integerは整数、floatは小数点表示、浮動小数点表示
+ `//`をつけると行末までコメント、複数行のコメントは`/*  */`でくくる
+ 制御文字はほぼC言語などと同じ
+ 複数行に渡る記述は、　`\`（バックスラッシュ）を入れると、改行可

# Ranges
整数で作られるRangesはOPL言語の基本であり、配列や変数宣言、まとめた操作やクエリなどで使用します。基本的には`int`型で使用されますが、`float`型でも使用することが出来ます。
### 宣言
rangesを宣言するには、下限と上限を指定して、宣言します。

```
range Rows = 1..10;
```

```
int n = 8;
range Rows = n+1..2*n+1;
```

宣言したあとは、配列の添字などとして利用する事ができます。`range`が空の場合（上限が下限より小さい場合）などは、自動的に`0..-1`と置き直されます。言い換えると空の`range`はすべて等しくなります。

### 例
+ 配列の宣言時に使用する

```
range R = 1..100;
int A[R]; //サイズが100の配列
```

+ 繰り返し分のイテレーターとして

```
range R = 1..100;
forall(i in R){
 //roop
}
```
+ `int`型変数の領域として

```
dvar int i in R;
```

# 配列
### 1次元配列
基本的に先程のRangesを利用して宣言します。
配列の添字は任意の型の有限の集合である必要があります。

```
int a[1..4] = [10, 20, 30, 40];
string d[1..2] = ["Jan", "Feb"];
```

### 多次元配列
OPL言語は多次元配列をサポートしています。
添字は違うデータ型を組み合わせることが出来ます。

```
// 1.違うデータ型の添字
int a[Days][1..3] = ...;

// 2.違う配列の表現
{string} src = ...;
{string} dst = ...;
int arr[src][dst] = ...;

// 3. 2.と同様のタプルをつかった表現
{string} src = ...;
{string} dst = ...;
tuple edge {
        string s;
        string d;
}
{edge} edges = ...;
int arr[edges] = ...;
```

# タプル
OPL言語でのデータ構造はタプルを使って表現できます。
使い方はC言語の構造体と同じです。
多次元配列でタプルは使うことが出来ません。

```
tuple Point {
        int x;
        int y;
};
Point point[i in 1..3] = <i,i+1>;
Point p = <2,3>;
{Point} points = {<1,2>,<3,4>};
```

データーベースとして使いたいときは、タプルの要素にキーを追加することが出来ます。
キーは複数設定できますが、キーが1つであればキーとなる要素のみで呼び出すことが出来ます。

```
tuple people {
        key string name;
        int age;
        int gender;
}
```

### タプルの要素にできるもの
+ プリミティブ型
+ タプル（サブタプルと呼ばれます）
+ `string`型以外のプリミティブ型の配列
+ プリミティブ型のセット

*多次元配列は要素に出来ません!*


# セット
セットとはインデックス化されていない、重複のない要素の集合のことです（他言語で言うリスト）。
宣言はTを型とすると、以下のようにして行います。

```
{int} ints = ...;   // int型のセット
setof(string) strings = ...;　　　// string型のセット
```

|操作|記法|
|:--|:--|
|union, inter, diff, symdiff|`set = set1 function set2 `|
|first, last|`elt = function(set)`|
|next, prev|`elt = function(set,elt,int)`|
|nextc, prevc|`elt = function(set,elt,int)`|
|item|`elt = function(set,int)`|
|ord|`int = function(set,elt)`|

# 記述例　- 線形計画問題
基本的な線形計画問題の例

```math
\begin{equation*}
 \begin{aligned}
   & \text{minimize}   & &2x+3y \\
   & \text{subject to} & & 4x+3y\leq 120\\
   &                   & & x+2y\leq 60\\
 \end{aligned}
\end{equation*}
```

```opl:lp.opl
dvar int+ x;
dvar int+ y;

maximize x*2+y*3;

subject to{
 x*4+y*3<=120;
 x+y*2<=60;
};
```

`dvar`はOPL言語特有の記法で、決定変数のことです。プログラムによって値を変える変数に、`dvar`を指定します。

# 参考資料
[OPL Language Reference Manual - IBM](https://www.ibm.com/support/knowledgecenter/SSSA5P_12.6.3/ilog.odms.studio.help/pdf/opl_langref.pdf)
[Where to find the CPLEX examples - IBM](http://www.ibm.com/support/knowledgecenter/SS6MYV_3.4.0/ilog.odms.ide.odme.help/Content/Optimization/Documentation/ODME/_pubskel/ODME_pubskels/startall_ODME34_Eclipse1779.html)
[Xcode] 環境変数を設定して、iOS10のおせっかいなログを撃退

今日の収穫。

iOS 10 からだと思うのですが、コンソールに無駄に（失礼）システムから出力されるので、デバックの為に出力していた `print` の結果がみずらいと思っていましたが、検索中にこんな情報に遭遇。コンソールに静けさが訪れ快適になったものの、問題のある警告に単に目をつぶってしまう可能性もあるので注意する必要がありそうです。

Xcode のメニューから Product > Scheme > Edit Scheme ... とたどり
Run > Arguments > Environment とさらにたどれば、環境変数を設定できます。ツールバーからでもたどる事ができます。

<img width="166" alt="Screen Shot 2016-11-08 at 14.05.09.png" src="https://qiita-image-store.s3.amazonaws.com/0/65634/f5c2282d-0362-1aa7-155a-5006c38b20bf.png">

設定する環境変数は以下のとおりです。

<img width="388" alt="Screen Shot 2016-11-08 at 14.05.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/65634/e8e10364-873b-af0f-8e23-8b49990c4e60.png">

#### Environment Variables

|Name  | Value   |
|---|---|
|OS_ACTIVITY_MODE   |disable   |


### 情報元

iOS 10: “[App] if we're in the real pre-commit handler we can't actually add any new fences due to CA restriction”
http://stackoverflow.com/questions/38458170/ios-10-app-if-were-in-the-real-pre-commit-handler-we-cant-actually-add-any

### 環境に関する情報

```.log
Xcode Version 8.1 (8B62)
Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)

```
iPadの見分け方

社内で特定のiPadのテスト端末を探しているときなどに役立つ、人間を対象としたiPadの世代の見分け方です。
※iPad miniは対象外

![ipad.png](https://qiita-image-store.s3.amazonaws.com/0/33397/5c7f5a64-30d9-38d3-d08e-c9463c103df7.png)

- コネクタの形状は30-pin
    - 端の形状が角ばっている → iPad 1
    - 端の形状が丸い
        - 非Retinaディスプレイなので文字がぼんやり → iPad 2
        - Retinaディスプレイで文字がくっきり → iPad 3
- コネクタの形状はLightning
    - ベゼルの幅が広い → iPad 4
    - ベゼルの幅が狭い
        - 音量ボタンの隣にスイッチがある → iPad Air
        - 音量ボタンの隣にスイッチがない
            - 側面にSmart Connectorがない → iPad Air 2
            - 側面にSmart Connectorがある → iPad Pro (9.7inch)

### 参考

- [Apple公式の見分け方](https://support.apple.com/ja-jp/HT201471)
    - 背面のモデル番号で見分けるのが一番正しい方法ですね。たぶん……
AndroidのDebuggerがおそすぎる問題の対処法


## 再現環境
- AndroidStudio2.2.2
- Java8
- Nexus6(6.0.1), Nexus5(6.0.1)

## 現象
実機デバッグ実行時のみ、ネット通信処理が重くてSocketTimeoutExceptionが発生してしまう。

## 解決方法
1. Run/Debug Configurationを開く(アプリ実行ボタンの左のプルダウン > EditConfiguration)
1. Appの実行をしているメニューを選択(通常 AndroidApp > App)
1. Debuggerのタブを選択
1. DebugType をAutoからJavaへ変更

# 参考URL
http://stackoverflow.com/questions/39911318/slow-debugging-with-android-studio-2-2-on-marshamallow-6-0
NiftyCloudに最低限触れるだけ触れてみる

#セットアップ

セットアップとかはリンク先の公式チュートリアルを確認してくれた方が早いので割愛

ニフティクラウドmobile backendのAndroidStudio用チュートリアルページ
http://mb.cloud.nifty.com/doc/current/introduction/quickstart_android.html

後述するクラス・レコード・フィールドは学校で例えると
1年α組(クラス)の○太君(レコード)の握力(フィールド)
みたいな感じです。

#とりあえず保存しよ
まずクラス名からNCMBObjectを作成します(新規クラスならストア登録時に自動的に新たなクラスが作られると思われ)
下記だと「TestClass」のNCMBObjectを作ります。

```java
// クラスのNCMBObjectを作成
NCMBObject obj = new NCMBObject("TestClass");
```

次にデータの保存です
下記だとフィールド「num」に数値として「100」がセットされます。

```java
// オブジェクトの値を設定
obj.put("num", 100);
```
また、下記のようにidをセットするとセットしたidのデータを更新し、下記を書かなければ新規レコードとして保存されます。
え？idが分からないって？上記のチュートリアルページを見ましょう。

```java
//idのセット
obj.setObjectId("更新したいレコードのid");
```

最後にデータストアにデータを保存します。
ここで処理書いて遊びましょう。

```java
// データストアへの登録
obj.saveInBackground(new DoneCallback() {
    @Override
    public void done(NCMBException e) {
        if(e != null){
            //保存に失敗した場合の処理
        }else {
            //保存に成功した場合の処理
        }
    }
});
```

#じゃあ取得したい
まず同じようにクラス名からNCMBObjectを作成します。
ここで取得したいデータがあるクラス名を入れます。

```java
// クラスのNCMBObjectを作成
NCMBObject obj = new NCMBObject("TestClass");
```

そして取得したいレコードのidを入れます。
え？idが分からn(省略

```java
//idのセット
obj.setObjectId("取得したいレコードのid");
```

最後にデータストアからNCMBObjectとしてデータを取得します。
NCMBObjectとしてデータを取得するので、普通に使う場合は下記の「取得成功時の処理」内でやってるみたいにすれば取れます。

```java
//取得データ格納用
int test;
//データストアから取得
obj.fetchInBackground(new FetchCallback<NCMBObject>() {
    @Override
    public void done(NCMBObject object, NCMBException e) {
        if (e != null) {
            //エラー時の処理
        } else {
            //取得成功時の処理
　　　　　 　//整数型で取得
　　　　　　 test=object.getInt("取得したいデータのフィールド名");
        }
    }
});
```

#サンプルコード
とりあえずデータの保存と取得が出来ればいいやと思ったのでそれだけ

###保存

```java
// クラスのNCMBObjectを作成
NCMBObject obj = new NCMBObject("TestClass");

// オブジェクトの値を設定
obj.put("num", 100);

// データストアへの登録
obj.saveInBackground(new DoneCallback() {
    @Override
    public void done(NCMBException e) {
        if(e != null){
            //保存に失敗した場合の処理

        }else {
            //保存に成功した場合の処理

        }
    }
});
```

###取得
```java
//取得データ格納用
int test;

// クラスのNCMBObjectを作成
NCMBObject obj = new NCMBObject("TestClass");

//取得したいデータをidで指定
obj.setObjectId("取得したいデータのid");

//データストアから取得
obj.fetchInBackground(new FetchCallback<NCMBObject>() {
    @Override
    public void done(NCMBObject object, NCMBException e) {
        if (e != null) {
            //エラー時の処理

        } else {
            //取得成功時の処理
            //整数型で取得
　　　　　　 test=object.getInt("num");
        }
    }
});
```

#最後に
遊ぼう
atom スニペット登録

atom version 1.8.0
[Atom]>[スニペット]

```
# html、phpの場合
'.text.html.php,.text.html.basic':
  'html title':
    'prefix': 'title'
    'body': '<title>$1</title>'
# scssの場合
'.source.css.scss':
  'color - SASS':
    'prefix': 'sass-color'
    'body': """
@mixin ${1:color} {
	color:${1:color};
	font-size:${2:1.2em};
}
"""
```

### １行目：セレクタを指定
スニペットで使いたいセレクタを指定する。

調べる方法は該当ファイルを開いて[alt]+[command]+[P]
![スクリーンショット 2016-11-08 12.33.03.png](https://qiita-image-store.s3.amazonaws.com/0/30301/5ba08cef-afbb-f9ec-355e-1e0c281751dd.png)
SASSの場合画像のような .source.css.scss と記述する。

### ２行目：スニペットの説明

自分がわかるような説明を入れる。日本語でもOKだけど長いと省略される。
※自分は種類、内容などをいれるようにしてた。

```
  'html title':
```

```
add_image_size - WP
```

![スクリーンショット 2016-11-08 13.25.06.png](https://qiita-image-store.s3.amazonaws.com/0/30301/360cc7ae-c295-7a4a-a944-e3b78f46352e.png)


### 3行目：'prefix' はスニペットを展開する際に入力するキー

```
    'prefix': 'title'
```

```
'prefix': 'wp-add_image_size'
```

### 4行目：展開するコード

```
'body': '<title>$1</title>'
```
・複数行の場合は["""]で囲う
・展開時に特定のテキストを記入するには

```
function ${1:func1}{
  echo '${1:func1}';
  echo \$${2:func2} .  \$${3:func3};
}
```
[$]は[\\]でエスケープ
と書く1〜3とタブで進む。複数指定もできる。[:]のあとはデフォルト値


間違いがあったら教えてくださいー

追記：[＼]バックスラッシュを使いたいときは
http://qiita.com/KoiShin/items/5a34083b9c389ba411b0

```
echo "\\\\n";
```
GoogleChromeの知見を貯める会

## GoogleChromeブラウザのトラブルシューティングで使用するリンク

### 環境設定オプションの調整
> chrome://flags/

### ネットワーク設定
※DNSキャッシュクリア、HTTP通信内容確認等
> chrome://net-internals/

### HARアナライザー
リモート拠点のトラフィックのトラブルシューティングなどで使用。

1. Chrome検証ツール「ネットワーク」コンソールからHARファイルをローカルに保存。
2. HARファイルを以下アナライザーで解析。
https://toolbox.googleapps.com/apps/har_analyzer/

### 参照
http://blog.cototoco.net/work/201407/chrome%E3%81%A7%E3%80%81content-type-%E3%81%AE%E8%AA%BF%E3%81%B9%E6%96%B9/
groovyでexcelをCSV化する

groovy勉強のメモを残していきたいと思います。

## 環境

Windwows上でVM入れたりしていますが、Git bash 上で動かす方が多いと思います。
groovyは 2.4.7 でやっています。
groovyのソースはGGTSやEclipse neon上でいじっていますが、フリーズしたら vim でいじります。

## text化(csv)

またtextの話です（笑）
Qiitaはじめたばっかりなので似たような話でもいいですよねぇ(^ ^;

やっぱり excel もgrepしたいんですよね。
前はtextにするのに、こちらの
http://tatssuki.hatenablog.com/entry/2015/06/14/232111
のツールを使って、JSONにして扱ったんですよねぇ。
nodeやってるとjsonにして何かするっていう手順が多くなってきたんですけど、
ワンライナー的なものですとこったりしなくてもいいのでとりあえず使える的なところを落とし所にするので
短く（タイピング遅いものですから・・・）早くできるものがいいのでまた書いてみました。

Office関係を java でやるときはやっぱり [POI](https://poi.apache.org/) ですね。

全シートを標準出力に出すのでパイプで区切ってここでも grep です（笑）

```groovy
/**
 * Excelを読み込んで cell のテキストを出力するサンプル２
 */

import static groovy.io.FileType.*


@Grab("org.apache.poi:poi-ooxml:3.14")
@Grab("org.apache.poi:ooxml-schemas:1.1")
import org.apache.poi.ss.usermodel.*

/*
 * 後付で Cell の拡張を行う
 */
Cell.metaClass.define {
  getCellValue {
    switch (getCellType()) {
      case Cell.CELL_TYPE_STRING:
        return getRichStringCellValue().getString()
      case Cell.CELL_TYPE_NUMERIC:
        if (DateUtil.isCellDateFormatted(delegate)) { // thisではなくて delegate
          return getDateCellValue()
        } else {
          return getNumericCellValue()
        }
      case Cell.CELL_TYPE_BOOLEAN:
        return getBooleanCellValue()
      case Cell.CELL_TYPE_FORMULA:
        return getCellFormula()
      default:
        return ""
    }
  }
}


/**
 * 特定のディレクトリのexcelをcsv化する。
 */
def convertDir(dir) {
  dir.eachFileMatch(FILES, ~/.*\.xlsx?/) {
    convertFile(it)
  }
}

/**
 * 特定のファイルのexcelをcsv化する。
 */
def convertFile(file) {
  new FileInputStream(file).withStream { ins ->
    WorkbookFactory.create(ins).with { workbook ->
      workbook.each { sheet ->
  //      println sheet.getClass().getSimpleName()//getCellValue(cell)
        sheet.each { row ->
          println row.collect { cell ->
            return cell.getCellValue(cell)
          }.join(",") // Cellの値をとりあえずカンマで区切ってCSVっぽくする
        }
      }
    }
  }
}

def convert(path) {
  File target = new File(path)
  if (target.isDirectory()) {
    convertDir(target)
  } else if (target.isFile()) {
    convertFile(target)
  } else {
    println "skip $path"
  }
}

args.each {
  convert(it)
}

```

groovyの場合静的じゃないので、クラスとかが無いって言われて動かないこと多いんですよねぇ。
そのときには必要な jar を足していきますけど、今回は xlsとxlsxが混在するときにうまくいったりうまくいかなかったり...

```
@Grab("org.apache.poi:poi-ooxml:3.14")
@Grab("org.apache.poi:ooxml-schemas:1.1")
```

なのでこんな感じにしています。
なんちゃってCSV出力出来る感じになりました。

---

実は groovy も JSON 強かったりするので、 node使ってjsで書くよりは groovy の方がファイル１つで楽かもですね。
ま、どこかに見えないファイルはいっぱいたまっていきますが（笑）
セグウェイを自作してみた ～完成編～

#シリーズ目次
- [セグウェイを自作してみた ～材料編～](http://qiita.com/sasaco/items/54a1faec2ddaa935dec1)
- [セグウェイを自作してみた ～電子回路組立編～](http://qiita.com/sasaco/items/b72819993790443877ec)
- [セグウェイを自作してみた ～プログラム編～](http://qiita.com/sasaco/items/b72dec0edc16d19af6e4)
- セグウェイを自作してみた ～完成編～

---

この分野では門外漢の私が、「電子制御」をまったく勉強せずに
セグウェイを作ってみようと思います。

#外観

[![セグウエイ外観](http://img.youtube.com/vi/KIRQ7uoQJuw/0.jpg)](https://www.youtube.com/watch?v=KIRQ7uoQJuw)

#走行

[![セグウエイ走行](http://img.youtube.com/vi/szGmCRjBrcQ/0.jpg)](https://www.youtube.com/watch?v=szGmCRjBrcQ)

---
セグウェイを自作してみた ～電子回路組立編～

#シリーズ目次

- [セグウェイを自作してみた ～材料編～](http://qiita.com/sasaco/items/54a1faec2ddaa935dec1)
- セグウェイを自作してみた ～電子回路組立編～
- [セグウェイを自作してみた ～プログラム編～](http://qiita.com/sasaco/items/b72dec0edc16d19af6e4)
- [セグウェイを自作してみた ～完成編～](http://qiita.com/sasaco/items/7f361b4fa2d1db572a6f)


---

この分野では門外漢の私が、「電子制御」をまったく勉強せずに
セグウェイを作ってみようと思います。

#配線図

![arduino.png](https://qiita-image-store.s3.amazonaws.com/0/142847/e903199f-016e-bcad-f376-25abe5fc498d.png)


基本的にモーターシールド と arduino は 全部接続する(わからないから)
ただし 下表の ピン はジャイロセンサーにつなぐ

| arduino | ジャイロセンサー | 上図 |
|:-:|:-:|:-:|
|  3.3v | VCC  |  赤線 |
|  GND | GND  |  緑線 |
|  A5 |  SCL |  青線 |
|  A4 |  SDA |  黒線 |

1. モーターの動力は, 12V のバッテリー×２
2. arduino の 動力は, モバイルバッテリーから供給するため

始動するには
1. バッテリーとモーターシールドの間の「こたつスイッチ」と
2. モバイルバッテリーのスイッチを 

ＯＮ にして始動します。



#テスト

上図の状態で arduino に 以下の プログラムを 入れて
ジャイロセンサーのログを取ってみます。

>ジャイロセンサーの制御のために下記のモジュールを使います。
これは、arduino に標準で入っていないので、
下記の URL を参考に 各環境に モジュールを追加してください
>>[MPU-6050 Accelerometer + Gyro](http://playground.arduino.cc/Main/MPU-6050)



```c:test.ino
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"

/*  MPU-6050 Accelerometer + Gyro */
MPU6050 accelgyro;

void setup() {

    Wire.begin();
    Serial.begin(9600);

    // initialize device
    accelgyro.initialize();
    Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

}

void loop() {
  
  int16_t ax, ay, az;
  int16_t gx, gy, gz;
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  float acc_x = ax / 16384.0;
  float acc_y = ay / 16384.0; 
  float acc_z = az / 16384.0; 
  float rate_X = atan2(acc_x, acc_z) * 360 / 2.0 / PI; 
  float rate_Y = atan2(acc_y, acc_z) * 360 / 2.0 / PI;
  float rate_Z = atan2(acc_x, acc_y) * 180 / 2.0 / PI;
  
  Serial.print(rate_X);
  Serial.print("\t"); 
  Serial.print(rate_Y);
  Serial.print("\t"); 
  Serial.print(rate_Z);
  Serial.print("\t"); 
  Serial.println("");
 }
 
```


ログです。

```text
MPU6050 connection successful
Initializing Mortor Driver digital pins...
3.80	-2.61	62.21	
4.21	-2.29	59.24	
3.96	-2.11	59.01	
4.10	-2.42	60.26	
3.86	-2.58	61.87	
3.46	-2.83	64.63	
4.27	-2.49	60.12	
3.84	-2.40	60.95	
4.26	-2.19	58.56	
4.01	-2.33	60.09	
3.95	-2.30	60.09		
4.12	-2.50	60.62		
3.65	-2.47	62.04		
3.86	-2.14	59.49		
3.87	-2.55	61.66		
4.10	-2.40	60.14		
3.74	-2.94	64.09		
3.89	-2.22	59.84		
3.85	-2.22	59.97		
3.81	-3.00	64.11		
3.96	-2.01	58.46		
```

ジャイロセンサーを傾けてみて
ログの下表の値が思い通りに変化していたら 成功です。

| rate_X | rate_Y | rate_Z |
|:-:|:-:|:-:|
| 3.80 | -2.61 | 62.21 |	
| 4.21 | -2.29 | 59.24 |	
| 3.96 | -2.11 | 59.01 |	
| 4.10 | -2.42 | 60.26 |	
| 3.86 | -2.58 | 61.87 |
| … | … | … |



#ジャイロセンサーについて

上表のログでは、短いので 分かりにくいですが
何もしなくても ジャイロセンサーの値は 動いています。

静止状態の rate_X のログ
![log.png](https://qiita-image-store.s3.amazonaws.com/0/142847/f512c452-2eb1-f599-c546-5e6c3cea45a0.png)

これを いちいちモーターに出力命令として送出していたら
モーター静止することができません
((((；ﾟДﾟ))))ｶﾞｸｶﾞｸﾌﾞﾙﾌﾞﾙ

ですので、プログラム側で、滑らかにする処理が必要であることがわかりました


---

次回は、[プログラム編](http://qiita.com/sasaco/items/b72dec0edc16d19af6e4)についてお届けします。
Android build.gradleの設定を調べてみた

Androidのビルドが遅いなーと感じていたので、高速化するためにもbuid.gradleを少し調べてみました。


**Build Type + Product Flavor = Build Variants**
**なんですかそれってところから調べました**



####Build Typeとは
名前の通りbuild　の種類みたいです。
debug用とかリリース用とかそういった感じの。

例えばdebug用のapkには後ろにdebugとつけたり設定できます。
(apkをわけられるので、同じ端末にデバッグ用とリリース用を共存させられる)

難読化処理を掛けるのも、リリース用のみでいいので、リリースだけやるみたいな感じで振り分けできます。


Product Flavor
とは、アプリケーションのビルドをカスタムするときに使うみたいです。今回ならminSdkVersionの切り替えで使ってます。


Build Variants 
上記2つを組み合わせたものをBuild Variants と読んでいるみたいです。



説明めんどくさくなったのでとりあえずコード貼ります。

```build.gradle
apply plugin: 'com.android.application'

android {

    defaultConfig {
        //デフォルトで設定しておく内容
        compileSdkVersion 23
        buildToolsVersion "24.0.0"
        applicationId "org.test.gao.testApp"
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

    productFlavors {
        // Define separate dev and prod product flavors.
        dev {
            //21以上からビルド時にキャッシュが効くようになっているので、21(Android5.0)以降の端末をdebugで使用している際はそちらで
            minSdkVersion 21
        }
        prod {
            //実際にリリースするときはAndroid4.0以上がほとんどなので、4.0から指定
            minSdkVersion 14
        }
    }

    // 追加
    signingConfigs {
        debug {
            //ここにkeyStoreの設定を行うことでビルドを自動化出来る
            //storeFile file("debug.keystore")
            //storePassword "android"
            //keyAlias "androiddebugkey"
            //keyPassword "android"


        }
        release {
            // 追加
            //storeFile file("release.keystore")
            //storePassword "生成時に決めたpass"

            //keyAlias "生成時に決めたkeyAlias"

            //keyPassword "android"



        }
    }
    buildTypes {
        //debug時に使う内容
        debug {
            //apkのうしろにdebugを追加
            applicationIdSuffix ".debug"
            //デバック環境なのでdebug出来るように
            debuggable true
            //signingConfig signingConfigs.debug

        }
        release {
            //本番環境なのでdebugできないように
            debuggable false
            //この設定をtrueにしないと証明書付きのapkが作成されない
            zipAlignEnabled true
            //ビルド時にkeystoreを自動で使う場合に書く
            //signingConfig signingConfigs.release

            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'

}
```


参考記事
http://nextdeveloper.hatenablog.com/entry/2014/06/18/145745
http://qiita.com/kojionilk/items/0b34ad03497dae1093ff
GoogleChrome | Vimium でサイトごとに除外設定をする

# 1. 除外設定をしたいサイトに移動する

「サイトA」にいると「サイトB」の設定は出来ないようなので注意。

# 2. Vimium の拡張アイコンを押して除外設定をする

Keys は空欄のままSave Changes` を押す。
これで全てのキーが無効になる。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/b1a5d478-cb82-17a5-bcea-199f11d02e4a.png)

# 環境

- Vimium 1.57
- Google Chrome 5.4 (64bit) 
- Mac OS X El Capitan








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Serverless FW のデフォルトメモリサイズは1GB (AWS Lambdaの場合)

そろそろおなじみになったであろう[Serverless](https://serverless.com/)、便利なので使ってる人も多いだろうが、実は見落としがちな注意点がある。

というのは、Serverlessのデフォルト設定で`memorySize`が`1024`(MB)に設定されている。が、デフォルトのテンプレートで生成される`serverless.yml`にはその設定が何も書かれていない。

Lambdaを使うのに一般的にそこまで必要にならないことも多いだろうし、無駄な課金に繋がる可能性がある。(といっても、Lambdaのコストは非常に低いので気になることは無いだろうが。)

### 変更

サービス全体に適用するなら、ドキュメントに書かれているようにProviderに以下のようにしてやればよい。

```yaml
provider:
  name: aws
  runtime: nodejs4.3
  memorySize: 512
```

[Serverless Framework - AWS Lambda Guide - Services](https://serverless.com/framework/docs/providers/aws/guide/services/)

あるいは、函数毎に上書きすることも出来る。

```yaml
functions:
  functionOne:
    handler: handler.functionOne
    memorySize: 512 # function specific
```

[Serverless Framework - AWS Lambda Guide - Functions](https://serverless.com/framework/docs/providers/aws/guide/events#configuration)


`serverless logs` で実際の使用量(`Max Memory Used`)をみるなどしながら適切なサイズにしてやるといいだろう。
NetCDF / NCL > ncl実行時にcopyrightなどを表示しない > -Qオプション

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

```ncl05.nc
begin
	smat = (/ (/ "zun","zun" /),(/ "zun","zun" /), (/ "doko","KIYOSHI!" /) /)
	print( dimsizes(smat) )
end
```

nclコマンド使用時、Copyrightなどの表示を消す方法。
https://www.ncl.ucar.edu/Document/Manuals/Ref_Manual/NclCLO.shtml
>  `-Q`    Turn off echo of NCL version and copyright info

```txt:結果
$ ncl ncl05.nc 
 Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.
(0)     3
(1)     2
```

```txt:結果
$ ncl -Q ncl05.nc 
(0)     3
(1)     2
```
VBScriptで処理した結果をログに書き出す

```VBScript:sample.vbs
	Dim objFSO,objFile
    '1:読み取り 2:上書き 8:追加
	Const ForReading = 1, ForWriting = 2, ForAppending = 8
	Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
	Set objFile = objFSO.OpenTextFile("出力するフォルダパス＋ファイル名",ForAppending,True)
	objFile.WriteLine("出力するメッセージ")
	objFile.Close
	Set objFile = Nothing 
	Set objFSO = Nothing
NetCDF / NCL > dimsizes(smat) > smatの各次元の大きさを返す

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

N次元arrayに対してdimsizes()を使うことで、各次元の大きさが分かる。

```ncl05.nc
begin
	smat = (/ (/ "zun","zun" /),(/ "zun","zun" /), (/ "doko","KIYOSHI!" /) /)
	print( dimsizes(smat) )
end
```

```txt:結果
$ ncl ncl05.nc 
 Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.
(0)     3
(1)     2
```
NetCDF / NCL > 2d array > smat = (/ (/ "zun","zun" /),(/ "zun","zun" /), (/ "doko","KIYOSHI!" /) /)  /  smat(2,:) > 行インデックス?が2のものだけ返す

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

2d arrayを使ってみた。

```ncl04.nc
begin
	smat = (/ (/ "zun","zun" /),(/ "zun","zun" /), (/ "doko","KIYOSHI!" /) /)
	print( smat(2,:) )
end
```

```txt:結果
ncl ncl04.nc
...
$ ncl ncl04.nc 
 Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.


Variable: smat (subsection)
Type: string
Total Size: 16 bytes
            2 values
Number of Dimensions: 1
Dimensions and sizes:   [2]
Coordinates: 
(0)     doko
(1)     KIYOSHI!
```

row major orderかcolumn major orderかは未確認。
Objective-c画面遷移の移動と戻る方法

navigation bar表示backボタン自動表示
遷移元Storyboard sampleviewへ遷移
[self.navigationController pushViewController:sampleView animated:YES];
遷移先より元のページへ戻る
[self.navigationController popViewControllerAnimated:YES];

navigation bar非表示
遷移元Storyboard sampleviewへ遷移
[self presentViewController:sampleView animated:YES completion:nil];
遷移先より元のページへ戻る
[self dismissViewControllerAnimated:YES completion:NULL];
GoogleChrome | Mac | Vimiumが日本語対応していた

Vimiumはブラウザをキーボード操作するための拡張だ。

「日本語は使えない」という記事が多くて使うのを諦めていたが、画像の通り、いつの間にか日本語対応しているようだ。

ページで <kbd>/キーワード</kbd> と入力し、リンクにフォーカスが移ったら、<kbd>Enter</kbd> を2回押せばリンク先に飛べる。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/a5a20ba1-b9fa-be66-ecde-e2b77308f86e.png)

# ちなみに

ひらがなとカタカナの違いも吸収してくれる。いい感じだ。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/e9f748b4-4221-5240-571e-5b6bd7854ada.png)

# 環境

- Vimium 1.57
- Mac OS X El Capitan
- Google Chrome ver 54 (64 bit)

# ダウンロード

- https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb?hl=en








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
NetCDF / NCL > slist(:4) > インデックスが4までのstring array要素を返す

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

```ncl03.nc
begin
	slist = (/ "zun","zun","zun","zun","doko","KIYOSHI!" /) ; string array
	print(slist(:4))
end
```

```txt:動作確認
$ ncl ncl03.nc
...
 Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.


Variable: slist (subsection)
Type: string
Total Size: 40 bytes
            5 values
Number of Dimensions: 1
Dimensions and sizes:   [5]
Coordinates: 
(0)     zun
(1)     zun
(2)     zun
(3)     zun
(4)     doko
```
NetCDF / NCL > string array > slist = (/ "zun","zun","zun","zun","doko","KIYOSHI!" /) ;

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm

```ncl02.nc
begin
	slist = (/ "zun","zun","zun","zun","doko","KIYOSHI!" /) ; string array
	print(slist)
end
```

```txt:結果
$ ncl ncl02.nc
...
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.


Variable: slist
Type: string
Total Size: 48 bytes
            6 values
Number of Dimensions: 1
Dimensions and sizes:   [6]
Coordinates: 
(0)     zun
(1)     zun
(2)     zun
(3)     zun
(4)     doko
(5)     KIYOSHI!
```

最初、slistという名前をlistとしていたが、その場合はエラーとなった。
listは予約語なのだろう。
フロントエンド演出：物体に弾力をあたえる

# 演出の雰囲気を紹介する記事です

前回の記事「[フロントエンド演出：ふわふわ浮遊する動きの作り方](http://qiita.com/umi_kappa/items/9efe0478a8a5bf98141b)」でありがたい反応をいただいたので、不定期で演出系の記事を続けることにしました:bow_tone1:

特にソースコードなどは紹介しません。JSでもCSSでも使えるように雰囲気をお伝えできればと思います。演出づくりはその雰囲気で作っていくものなので（ここはビビビッと出てきてサッと消える感じなどなど）。

因みに、今回掲載する素材は[Animate CC](http://www.adobe.com/jp/products/animate.html)で作成しました。

# 物体に弾力をあたえる

今回のゴールはこちらです。円がぐーっと縮んで跳ねるように大きくなるという感じです。

![cap1.gif](https://qiita-image-store.s3.amazonaws.com/0/55103/3e13b2ee-28de-b815-529b-7d70c28b854a.gif)

# まずは動きのきっかけをあたえる

弾力に限らず、アニメーションする前に動くきっかけをつけてあげます。今回で言うと「ぐーっと縮んで」という部分です。人がジャンプするときも、体制を低くしてぐーっと力をためて飛びますよね？ あれと同じ感覚です。**「これから動きますよ〜」と見ている人に伝えます。この動きをつけることで、全体のアニメーションのリアリティが増します。**

# つくりかた

## 大きさ（scale）

今回は移動ではなく、大きさ（scale）で動きをつけます。動きの分け方は、「大きくなる→小さくなる」「小さくなる→大きくなる」の動きが変化するタイミングです。今回のサンプルでは次のように分けました（通常の大きさを100%として）。

1. 100%
2. 50%
3. 130%
4. 80%
5. 110%
6. 95%
7. 102%
8. 100%

一度ためたエネルギーは動きとともに消費されるので、だんだんと振れ幅を小さくします。これは僕の個人的な感覚なのですが、前の振り幅の半分くらいで変化すると自然に見えるかなと思います（前は50%小さくなったから、次はそのほぼ半分の30%振れるように130%の大きくしようかななどなど）。

## 時間

次にそれぞれの大きさに到達するまでの時間を設定します。前半ほど振れ幅が大きいので時間を長く、後半ほど短くします。今回は次のようにしました。

1. 100%→50%へ小さくなる：1000ミリ秒
2. 50%→130％へ大きくなる：233ミリ秒
3. 130%→80へ小さくなる：200ミリ秒
4. 80%→110%へ大きくなる：150ミリ秒
5. 110%→95%へ小さくなる：117ミリ秒
6. 95%→102%へ大きくなる：100ミリ秒
7. 102%→100%へ小さくなる：83ミリ秒

![cap2.gif](https://qiita-image-store.s3.amazonaws.com/0/55103/4bf424a3-f5b2-7df3-4a4c-d1f17c44204e.gif)

これだけでも良さげな動きになってきました。

## イージング

イージングを解説しようと思ったのですが、指定しなくても良さげな動きになってしまいました。が、さらに滑らかさを出すためにイージングを指定します。前回の[記事](http://qiita.com/umi_kappa/items/9efe0478a8a5bf98141b)ではイーズインとイーズアウトを使いましたが、**今回はイーズインアウトを指定します。**だんだん速くなって中間を越えたあたりからだんだん遅くなるというものです。

![cap1.gif](https://qiita-image-store.s3.amazonaws.com/0/55103/3e13b2ee-28de-b815-529b-7d70c28b854a.gif)

▲完成

# 動きの速さで固さに変化が

現状では柔らかいものがほわんとバウンドしている印象です。この動きの速さを全体的に短くすると固い印象になります。

![cap3.gif](https://qiita-image-store.s3.amazonaws.com/0/55103/13a287d4-27d3-c407-0ee6-d2af58abf9fc.gif)

**ゆったりしたものは柔らかく見え、キビっとしたものは固く見えるようです。**:relaxed:
NetCDF / NCL > hello world > print("hello")

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
```

NetCDFファイルを描画するためのNCLについて。
NCAR Command Language (NCL)。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm


NCLの構文。

```
begin
    ; 何かの処理
end
```

# hello world

http://www.ncl.ucar.edu/Document/Functions/Built-in/print.shtml

```ncl01.nc
begin
	print("hello")
end
```

```txt:結果
$ ncl ncl01.nc 
 Copyright (C) 1995-2015 - All Rights Reserved
 University Corporation for Atmospheric Research
 NCAR Command Language Version 6.3.0
 The use of this software is governed by a License Agreement.
 See http://www.ncl.ucar.edu/ for more details.
(0)     hello
```
UITableViewの見えない所にinsertした時に、表示部分がアニメーションしないようにする

UITableViewの見えない所にinsertした時に、それが現在の表示部分より上だと、
グイッと下にずれちゃうのをなんとかする方法です。

答えだけ書くと、

```swift
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
  return 40
}
```

で出来ます。

## 少し詳しく
`estimatedHeightForRowAt`を実装すると、中の数値に関係なく何故かアニメーションしなくなります。
`UITableViewAutomaticDimension`でもOK。

これが仕様なのかバグなのか、
バグだとして、グイッと下にアニメーションするのがバグなのか、しないのがバグなのか。

公式には何も書いていないので謎です。

絶対に自分の意図通りに動いてほしいなら、`contentOffset`とかいじって頑張ると良いと思います。
【メモ】GitでWinMergeを使ってマージする

自分の為の備忘録（ただし再び見るとはいっていない）

---

```
-e -u -wl -wr \"$LOCAL\" \"$BASE\" \"$REMOTE\" -o \"$MERGED\"
```

|コマンド|意味|
|---|---|
|-e|Escキーでウィンドウを閉じられるようになる|
|-u|最近使用した項目に追加されないようにする|
|-wl|左側で開くものを読み込み専用で開く|
|-wr|右側で開くものを読み込み専用で開く|
|-o|マージ結果を出力するパス|

\$LOCALを読み込み専用で左側に開く
\$BASEを中央に開く
\$REMOTEを読み込み専用で右側に開く
\$MERGEDにマージ結果を出力

あとは手動で設定するなり、SourceTreeでオプション＞Diffの項目からマージツールの設定をするなりといった感じだそうです。

---

参考：

Command line - WinMerge 2.12 Manual
http://manual.winmerge.org/Command_line.html

【ツール】オプションまとめ【WinMerge】
http://somemo.hatenablog.com/entry/2012/04/14/161510
LibreOfficeで楽々会計 GETPIVOTDATA関数編

LibreOffice AdventCalendar 2016 12月6日の記事です。
引き続きよろしくお願いいたします。

前回、[LibreOfficeで楽々会計 ピボットテーブル編](http://qiita.com/arachan@github/private/cfd995406e412d5bbf3c)でピボットテーブルを使って現金出納帳、預金出納帳、収支決算書が一瞬で作れてしまうことを説明しました。
収支決算書の現金残高、預金残高には何も入っていないので入力する必要があります。
既にピボットテーブルで現金出納帳の合計、預金出納帳の合計がでています。
これらのピボットデータのデータを取得する為の関数がGETPIVOTDATA関数です。

では、[マンション出納帳_h.ods](http://yahoo.jp/box/-4EPea)を使ってやってみましょう。

##GETPIVOTDATA関数を使って合計をGET

現金出納帳のピボットテーブルの合計を取得する

1. [マンション出納帳_h.ods](http://yahoo.jp/box/-4EPea)を開く
2. 収支決算書の現金の残高を選択
3. 関数ウィザードのボタンを押す
    4. ![getpivot00.png](https://qiita-image-store.s3.amazonaws.com/0/24550/8d9832f4-13ca-73c9-2657-ef0246ebbf7b.png)
4. 数式(M)に　=getpivotdata( と入力
    5. ![getpivot01.png](https://qiita-image-store.s3.amazonaws.com/0/24550/efb2ffe5-cacf-7e6a-0bfb-ec5ef8642257.png)
    5. getpivotdataの構文が現れます。
6. データフィールドに "収支" を入力
    - PivotTableで集計する前のdataのシートのデータフィールドの
    - 日付,決算か予算,出納帳種類,分類,勘定科目,摘要,収支
    - の中で集計したいのは収支なので収支を入力します。
    - ![getpivot02.png](https://qiita-image-store.s3.amazonaws.com/0/24550/caa96de8-68ee-2aff-bfa5-ddaeb5f68833.png)
7. ピボットテーブルの右の最小化ボタンを押す
8. 現金出納帳のシートの現金出納帳のPivotTableを選択
    9. ![getpivot03.png](https://qiita-image-store.s3.amazonaws.com/0/24550/67cc96f6-8b31-e5a0-1356-c0f975f82a69.png)
9. 最小化ボタンを押す。
10. [関数ウィザード]の画面に戻ると[数式の結果]に現金出納帳の合計が出力されています。
    11. ![getpivot04.png](https://qiita-image-store.s3.amazonaws.com/0/24550/35b52244-d527-334a-850c-29e6db214a20.png)
12. [OK]を押す
    13. ![getpivot05.png](https://qiita-image-store.s3.amazonaws.com/0/24550/883e369c-2af5-91bf-b7fe-30b10e801be0.png)

ちゃんと現金残高が表示されています。

同じように預金出納帳のピボットテーブルの合計データも取得してみましょう。

1. 収支決算書の現金の残高を選択
2. 関数ウィザードのボタンを押す
3. 数式(M)に　=getpivotdata( と入力
4. データフィールドに "収支" を入力
5. ピボットテーブルの右の最小化ボタンを押す。
6. 預金出納帳シートの預金出納帳のピボットテーブルを選択
7. 最小化ボタンを押す
8. [関数ウィザード]の画面に戻ると[数式の結果]に預金出納帳の合計が出力されています。
    9. ![getpivot06.png](https://qiita-image-store.s3.amazonaws.com/0/24550/c6cbd988-e9ae-fc26-345e-0c5722a6a412.png)
9. [OK]を押す

預金残高も表示されました。

やったね！
この収支決算書を印刷すればリアルタイムで収支決算が出せるようになりました。

##まだまだテンプレートにはできない

一瞬で収支決算書まで作れるので便利にはなりました。
このファイルをテンプレートとして渡すには不十分です。
以下のことが考えられます。

- 今のデータが16行あるけど16行以上になってしまったら…。
- dataシートの日付には日付だけしか入力できないようにしたい。
- 勘定科目には決まったものしか入力しないからドロップダウンで選べるようにしておきたい。

上記の要望は下記の技術で解決できそうです。

- PivotTableの集計のデータの範囲
- 入力規則

次は配布できるようなテンプレートにするために上記の設定を行っていきます。

1. [LibreOfficeで楽々会計 オートフィルターとSUBTOTAL関数](http://qiita.com/arachan@github/items/5f7a5f975f804ac4c5d1)
2. [LibreOfficeで楽々会計 ピボットテーブル編](http://qiita.com/arachan@github/items/cfd995406e412d5bbf3c)
3. [LibreOfficeで楽々会計 GETPIVOTDATA関数](http://qiita.com/arachan@github/items/a2a2b9ed36ba2c3c6843)<-ココ
4. [LibreOfficeで楽々会計 テンプレート編](http://qiita.com/arachan@github/items/42d05197fc76536f5245)
5. [LibreOfficeで楽々会計 金種表](http://qiita.com/arachan@github/items/f42990f4bb7d87df0be7)
複数のユーザーでHomebrewを使う


別の管理者ユーザーを作成しhomebrewを実行したところ、エラーが発生。

```
Error: Cowardly refusing to 'sudo brew update'
You can use brew with sudo, but only if the brew executable is owned by root.
However, this is both not recommended and completely unsupported so do so at
your own risk.
```

下記コマンドで、管理者ユーザーの場合、Homebrewが使えるようになる。

```
sudo chgrp -R admin /usr/local
sudo chmod -R g+w /usr/local
```

***
参考サイト

* [HomebrewとMySQLでMac複数ユーザに対応する](http://tech-blog.tsukaby.com/archives/1009)
iOSで録画するときにバックグラウンドで音楽を再生できるようにする

カテゴリに色々設定しても音楽が止まってしまって、
しかもよく調べると勝手にカテゴリ変わってるじゃん問題にイライラしている人向けです。

答えだけ書くと

```swift
captureSession.automaticallyConfiguresApplicationAudioSession = false
```

で解決します。

## 少し詳しく
`AVCaptureSession`のインスタンスに`automaticallyConfiguresApplicationAudioSession`というフラグが生えており、
それが`true`だと録画を開始したときによしなに変えやがります。

`false`に変えてあげれば万事解決です。
これデフォルトfalseなら便利だけどなぁ…。
しかももう少し分かりやすく何処かに書いておいてほしいよなぁ…。

## GPUImageを使っている場合
`GPUImageVideoCamera`に`captureSession`が生えているので、そいつをいじってあげましょう。

## 参考
- [Audio Sessionプログラミングガイド](https://developer.apple.com/jp/documentation/AudioSessionProgrammingGuide.pdf)の12ページ。「AVCaptureSessionを組み込む」
- [リファレンス](https://developer.apple.com/reference/avfoundation/avcapturesession/1620477-automaticallyconfiguresapplicati)
z/VMのバックアップをPCに保管する方法

# 概要
z/VMのコピー・ユーティリティーであるDDRはMinidiskイメージを物理コピーするもので、z/VMのシステムバックアップなどに利用されています。VM Download PackagesというVMお役立ちツールが掲載されているサイトにCMSDDRというDDRの物理コピー・イメージをCMSの1ファイルとして書き出すものがありました。このツールを利用することにより、z/VMのバックアップをPCに保管したり、FTPで遠隔地（災対センター）に送付することが可能になりますので、ツールの操作方法をご紹介します。CMSファイルのPC保管方法は別のスレッドに掲載します。

# セットアップ

1.CMSDDRツールをDownloadしてCMSファイルとして保管します。
[VM Download Packages - CMSDDR](http://www.vm.ibm.com/download/packages/descript.cgi?CMSDDR)

2.CMSDDRプログラムがコンパクションされているのでPIPEコマンドで解凍します。
[解凍手順](http://www.vm.ibm.com/download/)

3.Minidiskが処理対象なので、z/VMのSystem VolumeをDUMPする場合には以下の準備が必要となります。
- バックアップ元をFullpack Minidiskとして登録
- DDRイメージのCMSファイルの書き出し先として大容量のMinidiskを作成

# 操作方法
```xxx:コマンド構文
CMSDDR DUMP/RESTORE cuadd filename filetype filemode
- cuadd:DUMP/RESTORE対象となるMinidiskのアドレス
- filename filetype filemode:作成されるCMSファイル名
```
例１）MinidiskのBackup / Restore
q disk

```
IOC191 191  A   R/W 30 3390 4096 ...   <= 生成されるCMSファイルを格納する
TEMP2  222  T   R/W 20 3390 4096 ...   <= 復元先Minidisk 20Cyl
TEMP   111  Z   R/W 10 3390 4096 ...   <= DDR DUMP元Minidisk 10 Cyl
```

cmsddr dump 111 dump111 data a

```
z/VM DASD DUMP/RESTORE PROGRAM                         
HCPDDR696I VOLID READ IS TEMP   NOT VOLSER             
DUMPING   TEMP                                         
DUMPING DATA  02/07/06 AT 08.35.27  GMT FROM TEMP      
INPUT CYLINDER EXTENTS      OUTPUT CYLINDER EXTENTS    
      START       STOP         START        STOP       
   00000000   00000009      00000000    00000009       
END OF DUMP                                            
 BYTES IN 0007392600 BYTES OUT 0000213293              
 TRACKS NOT COMPACTED ON TAPE -  0000000001 
```

filel dump111 data a
```DUMP111  DATA  A1 V 49152 ... <= 作成したDDRイメージのCMSファイル```

cmsddr restore 222 dump111 data a

```
z/VM DASD DUMP/RESTORE PROGRAM                                           
RESTORING TEMP                                                           
COPYING DATA  02/07/06 AT 08.35.27  GMT FROM TEMP   RESTORED TO SCRATCH  
INPUT CYLINDER EXTENTS      OUTPUT CYLINDER EXTENTS                      
      START       STOP         START        STOP                         
   00000000   00000009      00000000    00000009                         
END OF RESTORE                                                           
 BYTES RESTORED 0007392600
```
q disk

```
TEMP2  222  T   R/W 10 3390 4096 ... <= 111を復元した為に10 Cylになる
TEMP   111  Z   R/W 10 3390 4096 ...
```


例２）VM System VolumeのBackup / Restore
CMSDDR Execの46行目をコメントアウトします。
（VTOCをCopyしないようにStart Cylから1を引くようになっているため）
```/* nr_cyls=nr_cyls-1 */```

q v da
```DASD 941B ON DASD  941B R/W 51AW01 <= DUMP元の941B Disk```
q disk
```MDC68F C68F Z   R/W  3339 3390 4096 0 <= 空のCMSファイル作成先Disk```
cmsddr dump 941b vmsys data z
q disk
```MDC68F C68F Z   R/W  3339 3390 4096 1 <= 1ファイル増加している```
cmsddr restore 7908 vmsys data z
q 7908
```DASD 7908 51AW01       <= 作成したCMSファイルを7908にRestore 完了```

# おわりに
プロフィールにも記載しておりますが、過去にzVMに携わった技術者として昔の知見が何らかのお役に立てればと紹介しているものです。このツールは10年位前には正常に稼動しておりましたが、現在は稼動検証するシステムが手元にありませんので、自己責任にてツールをご使用ください。
また、ツールの利用に関しては、以下のLicense Agreementにも留意して下さい。
[License Agreement](http://www.vm.ibm.com/download/license.html)