OmniAICreator/Qiita-1.07M huggingface dataset:
Jupyter notebookでMySQLサーバに接続する

#1. 紹介
前回はAlibaba Cloud上でJupyter notebookのインストールをしてみました。続きとして今回はJupyter notebookを使ってMySQLの操作をやってみましょう。MySQLの操作はpythonを使います。

前回の内容は下記のリンクをご参照ください。
「Alibaba CloudでJupyter notebookを構築する」
リンク：　http://qiita.com/sbcnan/private/c4a5d3d578811ab62e02

#2. 前提
・Alibaba CloudのECSサーバの構築済み
・Jupyter notebookの外部ネットワークからの接続環境が設定済み
・Jupyter notebookでのpython2 or 3 kenelが設定済み

#3. MySQL環境について
Alibaba CloudではApsara DBというDatabaseサービスを提供しています。Apsara DBはいくつかの種類がありますが、今回は良く使うリレーショナルデータベースサービス (RDS)を紹介します。ApsaraDB for RDSは拡張可能なオンデマンドデータベースです。自動モニタリング、バックアップなど管理タスクもAlibaba Cloudでは簡単にできて作業の効率が高い特徴です。日本リジョンではMySQL，SQL Server, PostgreSQLのエンジンを使えます。
リンク：　https://jp.aliyun.com/product/apsaradb-for-rds?spm=a21mg.8121077.552287.11.mzwSsg


#3. Databaseサーバの立ち上げ
ここではApsara DB for RDS機能使ってDatabaseサーバ立ち上げます。RDSの設定に関する詳しい内容は次のリンクを参考しましょう。
リンク：　https://jp.aliyun.com/help/doc-detail/26126.htm?spm=a3c0i.o43185ja.b99.28.dcwfAS　

ここで、いくつかの設定内容についてまず説明します。
1.[Acount ID/PW]: 後のDBにログインのために、ここで[アカウント作成]する時のID/PWを記録しておきます。
2.[DB name]: データベース作ったデータベースの名前記録する
3.[RDS name]: ECSとRDSが同じリジョンに設置している場合はイントラネットで接続できます。イントラネットでRDSに接続するためにRDSインスタンス名を記録しておきます。
4.RDSはMySQLサーバを選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/181746/95455d00-0550-8c7c-b7df-0a7233560ce4.png)

#4. RDSサーバ接続の設定
####A.MySQLのためのパッケージインストール
1.PythonのMySQLパッケージをインストールします。

```
$ pip install pymysql
```

（オプション）関連パッケージもインストールします。

```
$ pip install pandas
$ pip install matplotlib
$ pip install ipython-sql
```

####B. Jupyter notebookでRDSに接続する

```
#python向けSQLパッケージをimportする
$ import pymysql
db = pymysql.connect(host=  'RDS name.mysql.japan.rds.aliyuncs.com',
                             user='Acount ID',
                             password='Acount PW ',
                             db='DB name',
                             charset='utf8',
                             cursorclass=pymysql.cursors.DictCursor)

#RDSサーバに接続する
db.commit()
```

これでJupyter notebookの接続が確認できます。

####C.Jupyter notebookでSQLを楽しみましょう
1.Databaseにデータを書き入れる
![image](https://qiita-image-store.s3.amazonaws.com/0/181746/9ecea8d2-dd11-80fa-7f25-9ff5d6b13bb0.png)


2.Databaseからデータを読み取る
![image](https://qiita-image-store.s3.amazonaws.com/0/181746/b3caff06-8c72-42ac-ed5d-efc3813fb29c.png)

これで、Jupyter notebookでRDSサーバのDatabase編集の確認が完了しました。

#4. まとめ
Jupyter notebookはDatabaseサーバに接続することで便利に操作することができます。RDS以外にもローカルOS環境でのデータベース操作ができます。Jupyter notebookではデータをグラフとか動画に変化するなど色んなデータ分析、可視化ツールを利用することで、開発の効率が上がります。

<img width="697" alt="スクリーンショット 2017-06-06 18.05.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/181746/8f6995c4-d4cb-315f-f4e5-65b99809414b.png">
MacOS Sierra で gem install rmagick が失敗する

Ruby 向けの画像編集ライブラリ RMagick を使おうとしてハマったのでメモ。
RMagick は ImageMagick がインストールされている必要があり、その周辺でハマっている人がかなりいる模様。

## 発生した問題

```
% gem install rmagick
Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
        ERROR: Failed to build gem native extension.

    current directory: /Users/[username]/.anyenv/envs/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rmagick-2.16.0/ext/RMagick
/Users/[username]/.anyenv/envs/rbenv/versions/2.3.3/bin/ruby -r ./siteconf20170606-27346-1vveblx.rb extconf.rb
checking for clang... yes
checking for Magick-config... no
checking for pkg-config... yes
checking for outdated ImageMagick version (<= 6.4.9)... no
checking for presence of MagickWand API (ImageMagick version >= 6.9.0)... no
checking for Ruby version >= 1.8.5... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.16.0. Can't find MagickWand.h.
*** 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=/Users/[username]/.anyenv/envs/rbenv/versions/2.3.3/bin/$(RUBY_BASE_NAME)

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

  /Users/[username]/.anyenv/envs/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/rmagick-2.16.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/[username]/.anyenv/envs/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rmagick-2.16.0 for inspection.
Results logged to /Users/[username]/.anyenv/envs/rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-14/2.3.0-static/rmagick-2.16.0/gem_make.out
```

## 解決策
[ImageMagick 7 with RMagick 2.16 on MacOS Sierra Can't find MagickWand.h](https://stackoverflow.com/questions/41647979/imagemagick-7-with-rmagick-2-16-on-macos-sierra-cant-find-magickwand-h) にあった方法で解決しました。

```
brew uninstall imagemagick
brew install imagemagick@6
brew link --force imagemagick@6
```
Rails Tutorial 第１章・『開発環境を用意する』



開発環境？ピンとこない…というど素人がRailsチュートリアルを実施しました。
困ったこと、迷ったことなどを踏まえてまとめて振り返りを行います。

■実施バージョン　：Rails 4.2(第３版)
■使用PC　：MacBookPro (10.12.3)
■環境構築　：ローカル


##開発環境の構築手順リスト
MacにはRubyが最初からインストールされている為、リストにはありません。


|順番|対象ツール|理由|
|:-:|:---|:---|
|①|Xcode|コードを記述、編集する為|
|②|Homebrew|Mac OS上で動くパッケージ管理システム<BR>ターミナルから簡単にソフトウェアをインストールできるようにする為
|③|Git|プログラムソースなどの変更履歴を管理する為
|④|RVM|Ruby Version Manager<BR>Rubyの複数のバージョンを管理する為
|⑤|Rails|Rubyで書かれたWebアプリケーションフレームワークの為

①〜⑥まで、順を追ってインストール作業を行います。
詳細は下記に続きます。



##①：Xcodeのインストール
#####■これは何？
Apple社が提供している、Apple製品のアプリケーション開発に特化している開発ツール（ソフトウェア）です。

#####■インストール方法
Apple社製の製品のため、App Storeよりインストールします。
インストールにはApple IDが必要です。
Apple IDを取得するには、クレジットカード情報が必要です。
アプリケーションアイコンがデスクトップなどに表示され、可視できます。



##②：Homebrewのインストール
#####■これは何？
パッケージ管理システム。
対応しているパッケージをターミナルを経由して直接インストールできる。
Webページを経由せず、欲しいパッケージのバージョンまで指定してインストールできるので効率的。

#####■インストール方法
公式サイト
https://brew.sh/index_ja.html
ターミナルからコマンドを入力してPCへインストールします。
アプリケーションアイコンは存在せず、不可視です。



##③：Gitのインストール
#####■これは何？
PC上でファイルなどのドキュメントを変更した際の情報を記録し、変更履歴の差分を管理するためのバージョン管理ツール。
新規作成、編集、削除とあらゆる状態変化が記録対象となる。

#####■インストール方法
公式サイト
https://git-scm.com/
どうでしょう、英語だらけです。英語ができなければインストールするのにも一苦労です。
ですが、②でHomebrewをインストールしてあるので、ターミナルから簡単にインストールができます。
アプリケーションアイコンは存在せず、不可視です。


~~~
$ brew install git
~~~

~~~
$ git version
git version x.x.x
~~~

このあとは、Gitの設定を行います。
設定情報はユーザーのホームディレクトリに作成される「.gitconfigファイル」に記録されます。

ユーザー名とメールアドレスを設定します。

~~~
$ git config --global user.name "＜ユーザー名＞"
$ git config --global user.email "＜メールアドレス＞"
~~~

ターミルナルでgitコマンドを入力した際、出力結果をカラーリングするように設定します。

~~~
$ git config --global color.ui auto
~~~

gitコマンドはエイリアス設定ができます。
別名(エイリアス)を設定して長いコマンドを省略し効率化を目指します。
下記は「checkout」を「co」と別名付けをしています。

~~~
$ git config --global alias.co checkout
~~~

##④：RVMのインストール
#####■これは何？
Rubyのバージョン管理を行います。
Rubyは進化の早い言語です。
開発時は最新バージョンでも、少し経過したら最新バージョンではなくなるということもあります。
どのバージョンを利用したアプリケーションでも対応できるよう、複数のRubyバージョンを管理する必要性があります。

#####■インストール方法
Mac OSには最初からRubyがインストールされています。
Rubyの持っているgemからRVMのインストールできます。
もちろん他にもインストール方法はありますが、簡単な方法選びましょう。
アプリケーションアイコンは存在せず、不可視です。

~~~
$ gem install rvm
~~~

エラーが出る場合は下記を試してください。

~~~
$ sudo gem install rvm
~~~

##⑤：Railsのインストール
こちらは、Rails Tutorialに記述があります。
アプリケーションアイコンは存在せず、不可視です。

1.2.2 Railsをインストールする
https://railstutorial.jp/chapters/beginning?version=4.2#sec-installing_rails


##最後に
これで一通りの開発環境の構築が終わります。
開発環境？何からインストールして、全部でどれだけ作業すればいいの？
構築中だけどあとどれくらいあるの？いまどれくらいできてるの？
というように、手探り状態で迷子になってしまった経験があるのでまとめてみました。




参照サイト：
②Homebrew
http://original-game.com/homebrew/

③Git
http://www-creators.com/archives/768

④RVM
http://parrot.hatenadiary.jp/entry/20110117/1295253527
composerでcodeigniterをローカル環境にインストール！

インストールしたいディレクトリにcomposer.jsonを配置しておく。

```json:composer.json
{
	"description" : "The CodeIgniter Application with Composer",
	"require": {
		"php": ">=5.3.2",
		"codeigniter/framework": "3.1.*"
	},
	"require-dev": {
		"mikey179/vfsStream": "1.1.*"
	}
}

```

以下のコマンドプロンプトを順番に実行
```
composer create-project kenjis/codeigniter-composer-installer codeigniter
```

```
cd codeigniter/
```

```
sh bin/my-codeigniter.sh
```
を叩いていく。

【　用語　】
cd→移動

sh→デフォルトのシェルを起動し、その構文とフラグを使用します（なんのこっちゃ）
Xcode9 betaでワイヤレスデバッグをする手順


分かりにくい所のチェックボックス

# 前提条件
同一LAN内でないとできないので注意．

## Xcode9 beta / iOS11のインストール
Xcode9 beta/iOS11はApple Developer ProgramのメンバーシップがないとDownloadできません．

個人なら，2017年6月現在，年間11,800円+税
https://developer.apple.com/programs/jp/


ログイン後，downloadページからDL
https://developer.apple.com/download/

![スクリーンショット 2017-06-06 17.20.01.png](https://qiita-image-store.s3.amazonaws.com/0/77159/924f84c3-ec9c-ad3f-19c4-be523a07185d.png "スクリーンショット 2017-06-06 17.20.01.png")

すでにXcodeを持っている人でも，既存のXcodeに上書きされるのではなく，Xcode-betaを単体で扱えます．

iOS11は，デバイスから直接ダウンロードページにアクセスし，Donwloadしてプロファイルを追加
[設定->一般->ソフトウェア・アップデート]よりアップデート
iTunesから取り入れる方法もあるっぽい


## ワイヤレスデバッグの有効化

- デバイスのWifiをONに(同一LAN内)
- Macとデバイスをまずはケーブルで接続
- メニューの[Window->Devices and Simulators]
- Connect via networkにチェック

![01.jpg](https://qiita-image-store.s3.amazonaws.com/0/77159/a34fc590-757a-4bfe-1a09-9df01dfafd15.jpeg "01.jpg")

ケーブルを外してもビルド対象のデバイスが残っているので，普通にビルド

# 所感
ワイヤレスに慣れたら充電忘れそう

# 公式

https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/WhatsNewXcode/xcode_9/xcode_9.html
OpenMPI > インストールバージョンを確認する > ompi_info | head

```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.9.2 (とgfortran): Software Collections (SCL) で有効にした状態
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

WRF(Weather Research and Forecasting Model)に関して。

- WRFの前処理 WPS v3.9がGFortran v4.4.7のバグでコンパイルできない
- WPSをGFortran v4.9.2でコンパイルするにはNetCDFの(v4.9.2での)ビルドが必要 > 完了
- WRF v3.9をGFortran v4.9.2でコンパイル
   - mpi.mod(OpenMPIで使用)がGFortran v4.4.7で作られてますエラー

OpenMPIもインストールする羽目になりつつある。
http://gogen-allguide.com/ta/taraimawashi.html

### 本題

OpenMPIのどのバージョンが入っているか確認するには`ompi_info | head`を実行する。
https://stackoverflow.com/questions/10056898/how-do-you-check-the-version-of-openmpi

```
$ ompi_info | head
                 Package: Open MPI mockbuild@worker1.bsys.centos.org Distribution
                Open MPI: 1.8.1
  Open MPI repo revision: r31483
   Open MPI release date: Apr 22, 2014
                Open RTE: 1.8.1
  Open RTE repo revision: r31483
   Open RTE release date: Apr 22, 2014
                    OPAL: 1.8.1
      OPAL repo revision: r31483
       OPAL release date: Apr 22, 2014
```
Google Cloud Load Balancing を使って負荷分散してみる

## 設定
* GoogleCloudLoadBalancing を使って、Webサーバー2台に対してアクセスを分散する
* Webサーバーは GoogleComputeEngine（GCE) でLinux+nginxで作成済み

## ファイアウォールを設定
GoogleCloudPlatform（GCP）のメニューから、
ネットワーキング > ファイアウォール ルール
を選択

![2017-05-30_19h16_40.png](https://qiita-image-store.s3.amazonaws.com/0/93282/a261302d-482c-1fb4-706d-dc4a9a7f6545.png)

GCEのインスタンス詳細で、ネットワークタグに、ファイアウォールルールで指定したターゲットタグ（画像だと `http-server`）を追加
![2017-05-30_19h19_18.png](https://qiita-image-store.s3.amazonaws.com/0/93282/5a71fff9-9d35-73af-33d8-d1bcd663053f.png)

## ヘルスチェック
GCPメニュー > Compute Engine > ヘルスチェック
名前入力して他はデフォルト
![2017-05-30_19h23_47.png](https://qiita-image-store.s3.amazonaws.com/0/93282/159e96af-045d-4465-2346-a2fe9ddda06f.png)

## 外部IPアドレス
GCPメニュー > ネットワーキング > 外部IPアドレス
![2017-05-30_19h32_44.png](https://qiita-image-store.s3.amazonaws.com/0/93282/9942cae3-916a-43ee-3f64-14e82f83f94e.png)

## インスタンスグループ
![2017-05-30_19h48_14_2.png](https://qiita-image-store.s3.amazonaws.com/0/93282/50fdd4ec-6f43-cc1e-b693-85bbba1b7e6e.png)


## HTTPロードバランサ
GCPメニュー > ネットワーキング > 負荷分散
ロードバランサを作成 > HTTP(S)負荷分散 設定を開始
![2017-05-30_19h52_34.png](https://qiita-image-store.s3.amazonaws.com/0/93282/4d3382d6-9446-9942-575a-fc155a646485.png)

![2017-05-30_19h54_06.png](https://qiita-image-store.s3.amazonaws.com/0/93282/f5d36522-b707-6208-90ab-c21dabbe1a49.png)

![2017-05-30_19h55_01.png](https://qiita-image-store.s3.amazonaws.com/0/93282/6c0d93c1-bd49-18c5-27f7-4f21c408268c.png)

「バックエンドの設定」「ホストとルール」「フロントエンドの設定」まで済んだら、「確認と完了」で設定の内容を確認、問題なければ [作成] をクリックして、完成。
react nativeでadmobを導入する時にハマったこと

https://github.com/sbugert/react-native-admob
にあるAutomatic Installation (recommended)通りにインストール
https://firebase.google.com/docs/ios/setup#frameworks
の1~5を終わった後は、podfileに
```
pod 'Firebase/Core'
pod 'Firebase/AdMob'
pod 'Firebase/Messaging'  
```
とadmobとmessagingを追加してpod installし直さないといけない

### アプリで Firebase を初期化する
https://firebase.google.com/docs/ios/setup#frameworks
にある1.2を最初スルーしてて上手く行かなかった。
AppDelegate.hに
`` @import Firebase; ``
AppDelegate.mのdidFinishLaunchingWithOptions内に
`` [FIRApp configure]; ``
を追加する

### FirebaseとAdmobをリンクする
Firebaseコンソールの左下にある、Admobをクリックして、「Admobでアプリをリンク」を選択
Admobコンソールの左のアプリをクリックして「アプリを追加」を選択して指示に従う。

すぐに広告は表示されなかったが、ここから数時間放置してアプリを見てみると表示されてた。

react-native-admobの指示通りに手順を行うだけでは駄目で、「swift admob」のアプローチから攻めると十分な情報にたどり着くことが出来た。

podを使い始めたら、今までのyourappname.xcodeprojを開いて実機にビルドするのではなく、同じディレクトリにある、yourappname.xcworkspaceからビルドを実行しないといけないのも少しハマリポイント
SCRIPT_NAMEの値が/phpinfo.phpにならない

表記の件につき質問いたします。

/etc/nginx/conf.d/default.conf

```
server {
    listen       80;
    server_name  example.com;

    location / {
        root   /var/www/html/example.com;
        index  index.html index.htm index.php;
    }

    location ~ /\.ht {
        deny  all;
    }

    location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/example.com/$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

```

上記設定にて/var/www/html/example.comディレクトリに
wordpressのファイルを入れます。

外部からhttp://example.com/index.phpへアクセスすると
本来であれば、http://example.com/wp-admin/setup-config.phpへリダイレクトされる筈が以下のＵＲＬへ遷移してしまいます。

http://example.com/var/www/html/example.com/wp-admin/setup-config.php

尚、$_SERVERの配列をダンプした結果を以下に記します。

```
["SERVER_PROTOCOL"]=>
  string(8) "HTTP/1.1"
  ["SERVER_ADMIN"]=>
  string(0) ""
  ["SERVER_SIGNATURE"]=>
  string(0) ""
  ["SCRIPT_FILENAME"]=>
  string(45) "/var/www/html/example.com/phpinfo.php"
  ["REMOTE_ADDR"]=>
  string(0) ""
  ["REMOTE_PORT"]=>
  int(0)
  ["REQUEST_URI"]=>
  string(0) ""
  ["SCRIPT_URL"]=>
  string(46) "/var/www/html/example.com//phpinfo.php"
  ["SCRIPT_URI"]=>
  string(72) "http://example.com/var/www/html/example.com//phpinfo.php"
  ["SCRIPT_NAME"]=>
  string(46) "/var/www/html/example.com//phpinfo.php"
  ["PHP_SELF"]=>
  string(46) "/var/www/html/example.com//phpinfo.php"
  ["DOCUMENT_ROOT"]=>
  string(1) "/"
  ["PATH_TRANSLATED"]=>
  string(45) "/var/www/html/example.com/phpinfo.php"
  ["REQUEST_METHOD"]=>
  string(0) ""
 ※以下省略
```

解決する方法をご教授いただけますようお願いします。
WRF > CentOS 6.8 > setup with GFortran v4.9.2 >  NetCDF v4.4.1.1 / NetCDF (Fortran API) v4.4.4 > netcdf.mod

```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.9.2 (とgfortran): Software Collections (SCL) で有効にした状態
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

WRF(Weather Research and Forecasting Model)に関して。

WRFの前処理であるWPS v3.9がCentOS 6.8のGFortran v4.4.7ではコンパイルできない問題がある。gfortranの問題のようだ。
( http://qiita.com/7of9/items/186a1a81d889d6aa4ff0 )

対処として、GFortran v4.9.2の使用を検討しているが、そのためにはnetcdf.modをv4.9.2環境でビルドしないといけない。

上記の理由により、NetCDF v4.4.1.1をGFortran v4.9.2環境でインストールしようとした。

### NetCDF v4.4.1.1インストール
make checkでひっかかるが、以下の方法で成功した。
http://qiita.com/7of9/items/e736c9b6b8856e8be98c

### NetCDF (Fortran API) v4.4.4 インストール

参考: http://d.hatena.ne.jp/robikuru/20120823/1345730242

ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-fortran-4.4.4.tar.gz

```
$export CPPFLAGS="-I//usr/local/netcdf-4.4.1.1/gcc492/include -DgFortran"
$export LDFLAGS="-L/usr/local/netcdf-4.4.1.1/gcc492/lib -lnetcdf"
$export LD_LIBRARY_PATH=/usr/local/netcdf-4.4.1.1/gcc492/lib
./configure --prefix=/usr/local/netcdf-4.4.1.1/gcc492
$make check
$sudo make install
```

netcdf.modは以下に作成された。
/usr/local/netcdf-4.4.1.1/gcc492//include/netcdf.mod
プラットフォームのビット環境を調べる方法

[strconvパッケージ](https://golang.org/pkg/strconv/)でIntSizeという名前で定数定義されている

その導出方法は、書籍[プログラミング言語Go](https://www.amazon.co.jp/プログラミング言語Go-ADDISON-WESLEY-PROFESSIONAL-COMPUTING-Donovan/dp/4621300253)の演習問題6.5で言及されているテクニックを使用している

```
32 << (^uint(0) >> 63) 
```

uintはプラットフォームが32bit環境なら32bitの符号無し整数・64bit環境なら64bitの符号無し整数として振る舞う

\^uint(0)は32bit環境ならば0を反転しているので、32bit立った状態を表している
(^uint(0) >> 63)は63bit文右シフトしているので、32bitならば0になり、63bitならば最下位のbitだけが立っている状態になる
したがって、32 << (^uint(0) >> 63)は**32bit環境**ならば32 << 0 **(32)**となり、**64bit環境**ならば32 << 1 **(64)** となる
WindowsへMariaDBインストール



#入手方法

下記からインストーラーをダウンロードします。

MariaDB
https://mariadb.org/download/



#インストール手順
###1.インストーラーをダブルクリックして起動します。
![setup gamen.png](https://qiita-image-store.s3.amazonaws.com/0/172367/d64c9ab0-69b4-332c-1f05-dbffcb3b5cee.png)

###2.セットアップウィザードの初期画面です。「Next」ボタンをクリックします。
I accept the terms in the License Agreementにチェックを付けます。
![End-User License Agreement.png](https://qiita-image-store.s3.amazonaws.com/0/172367/1beb879c-5ea7-006a-43ce-195e21111cb0.png)

###3.create new database instanceにチェックを入れて「Next」ボタンをクリックします。
![create database instance.png](https://qiita-image-store.s3.amazonaws.com/0/172367/e4e92cd0-4d36-f765-0590-39cf0b6abe69.png)

###4.チェックを付けると「Next」ボタンが押せるようになるのでクリックして次に進みます。
インストールするモジュールを選択できて、インストール先を指定できます。
今回は、このままでインストールします。「Next」ボタンをクリックします。
![Custom Setup.png](https://qiita-image-store.s3.amazonaws.com/0/172367/e18e20e4-9c8b-2147-77bb-0296c0c47fc2.png)

###5.「root」ユーザーのパスワードを確認用も合わせて 2 回入力します。
そして、「Use UTF8 as default server’s character set」のチェックを付けます。
※UTF8 じゃないと文字化けするケースが多いようなのでチェックを付けておきます。
パスワードを入力すると「Next」ボタンがクリックできるようになるので、「Next」ボタンをクリックします
![Default instance properties.png](https://qiita-image-store.s3.amazonaws.com/0/172367/a2e4be6d-80c7-d45b-cef2-6460746dc3f5.png)

###6.「Next」ボタンをクリックします。
![Database setting.png](https://qiita-image-store.s3.amazonaws.com/0/172367/348d4c68-81b8-aea6-21c4-91704b4cf1e9.png)

###7.「Next」ボタンをクリックします。
![Mariadb 10.1 setup.png](https://qiita-image-store.s3.amazonaws.com/0/172367/ca27d99a-223d-8d51-5fc2-7cc1d08bebd2.png)

###8.「Install」ボタンをクリックします。
![Ready to install MariaDB.png](https://qiita-image-store.s3.amazonaws.com/0/172367/9b180a96-511d-2e3e-9a4f-1dc8bd8045ba.png)

###9.インストールの進捗状況を表示しています。
![Installing MariaDB.png](https://qiita-image-store.s3.amazonaws.com/0/172367/58a2409f-f8e4-471b-3eb5-39227f0a1eb2.png)

###10.インストールが完了した画面です。
「Finish」ボタンをクリックして、インストーラーを終了させましょう。
![Finish setup wizard.png](https://qiita-image-store.s3.amazonaws.com/0/172367/c6dee40b-4705-bcb6-c509-4fdd9387680e.png)
Null条件演算子をもっと便利にする拡張メソッド

C#6.0から導入されたNull条件演算子(?.)は非常に便利です。

```csharp
// nullチェックを行ってから実行していた構文が
if (hoge != null) { hoge.Piyo(); }

// nullチェック込みで簡潔に書ける
hoge?.Piyo();
```

ただし、Null条件演算子が適用できないケースもちょこちょこあります。

```csharp
// nullじゃない場合にPropertyに代入したい
if (hoge != null)
{
    hoge.Fuga="ほげほげ";
}
//これはコンパイルエラー
//hoge?.Fuga = "ほげほげ";


// nullじゃない場合に、何かのメソッドの引数として実行したい。
var list = new List<string>();
if (str != null) 
{
    list.Add(str);
}
//構文的にあてはまるものがない...
//list.Add(str?);
```

そんなときには、以下のような拡張メソッドを定義しておくと何かと便利です。

```csharp
/// <summary>
/// Actionを実行します。
/// </summary>
/// <param name="obj"></param>
/// <param name="action"></param>
public static void Invoke<T>(this T obj, Action<T> action) => action(obj);

/// <summary>
/// Funcを実行します。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="V"></typeparam>
/// <param name="obj"></param>
/// <param name="func"></param>
public static V Invoke<T, V>(this T obj, Func<T, V> func) => func(obj);
```

一見特筆すべき点の何もないどう使ってよいかわからない拡張メソッドですが、Null条件演算子と組み合わせるとそこそこ便利です。

```csharp
// 例えば上の方で書いた例だと
// nullじゃない場合に代入（ちょっと冗長。。）
hoge?.Invoke(h => h.Fuga = "ほげほげ");

// nullじゃない場合にメソッド呼び出し
str?.Invoke(list.Add);

// nullable型も、Valueの取り出しが自然に行えます。
int? ni = GetNullableInteger();
ni?.Invoke(i /* ここにはni.Valueがわたってくる */ => Console.WriteLine(i));
```

と、ifを書きたくない人にオススメですｗ
//if 書くとLambdaがExpression Bodyで書けないとかとか？
WRF > NetCDF 4.4.1インストール > Error:./run_tests.sh: line 22: ../ncdump/ncdump: No such file or directory

```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.9.2 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

WRF(Weather Research and Forecasting Model)に関して。

参考: http://d.hatena.ne.jp/robikuru/20120823/1345730242

NetCDF v4.4.1.1をインストールしようとした。
gccはv4.9.2をSoftware Collections (SCL) で有効にした状態。

リンク先の環境変数設定を行っておく。

次に以下を実行した。

```
$ tar xvzf netcdf-4.4.1.1.tar.gz
$ cd netcdf-4.4.1.1
$ ./configure --prefix=/usr/local/netcdf-4.4.1.1/gcc492 --disable-netcdf-4 --disable-dap
$ make check
```

```
...
# FAIL: 1
...
See ncgen/test-suite.log
```

```ncgen/test-suite.log
...
./run_tests.sh: line 22: ../ncdump/ncdump: No such file or directory
...
```

関連して以下を見つけた。
https://github.com/Unidata/netcdf-c/issues/339

v4.4.1.1のバグのようだ。

対策として以下の記載がある。

> edhartnett commented on 20 Dec 2016
> OK, this is pretty simple. make check did not work, but make all check did. I should have tried that, but I am used to make check working. ;-)

make all check
してから
make check
したら問題が出なくなった。

他のディレクトリにまとめる案も記載されている。
Mobyを使ってLinuxKitをビルドして起動してみる

# Mobyを使ってLinuxKitをビルドして起動してみる

## mobyを取得

```
go get -u github.com/moby/tool/cmd/moby
```

## Linuxkitを取得

```
go get -u github.com/linuxkit/linuxkit/src/cmd/linuxkit
```

## Linuxkitのビルド

```
cd $GOPATH/src/github.com/linuxkit/linuxkit
moby build linuxkit.yml
```

## 起動

```
linuxkit run linuxkit
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/7565/182f1120-1cef-c684-280a-c5462816820b.png)

haltコマンドを実行すると終了できる。

## 参考

* [Getting started with LinuxKit and Moby Project – Aishik Saha – Medium](https://medium.com/aishik/getting-started-with-linuxkit-and-moby-project-ff7121c4e321)
* [GitHub - moby/moby: Moby Project - a collaborative project for the container ecosystem to assemble container-based systems]
(https://github.com/moby/moby)
[GitHub - linuxkit/linuxkit: A toolkit for building secure, portable and lean operating systems for containers](https://github.com/linuxkit/linuxkit)
* [Moby で LinuxKit を起動してみる - Qiita](http://qiita.com/pottava/items/3e64cf0476d4cfa93169)
* [【参考訳】Mobyプロジェクトのご紹介(dockercon17での発表) - Qiita](http://qiita.com/zembutsu/items/c8f33b5fbc3211f5be52)
* [【参考訳】LinuxKitの公開：安全、無駄のない、ポータブルなLinuxサブシステム - Qiita](http://qiita.com/zembutsu/items/c17cdf1678f0cba72e06)
Microsoft AzureでUbuntuのサーバを立てる

# 記事の目的
とりあえずMicrosoft AzureでUbuntuのサーバを立てたのでメモ

# こんな人向け
- ITエンジニア
- Microsoft Azureは使ったことがない
- 他のクラウドサービスは使ったことある
- Mac

# アカウント作成
以下からMicrosoftのアカウントを作成
https://azure.microsoft.com/ja-jp/free/
30日間で¥20,500まで無料で試用できる。
上記を超えた場合でもデフォルトの設定ではインスタンスが削除され、請求されることはないみたいなのでご安心を。
期限後も同様に使い続けたいときはプランの変更が必要。
プラン変更はちゃんと調べていないので他の人の記事を見てください。（その時期になったら自分で記事書くかも）

# Microsoft Azureにログイン
以下からMicrosoft Azureにログイン
https://portal.azure.com/
ポータルを開く。

# Virtual Machinesのデプロイ
AWSのEC2に当たるのがVirtual Machines
ちなみに料金は一番安いので¥1,700/月くらい。
詳しくは以下のページを参照。
https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/linux/

1. 左のメニューからVirtual Machinesを選択
2. 左上の「追加」をクリック
3. Ubuntu Serverを選択
4. インストールするバージョンを選択（ここではLTSの16.04を選択）
5. デプロイモデルはResource ManagerのままでOK
6. 「作成」をクリック
7. 基本設定の構成を入力。ユーザ名はrootとadminは使えないみたい。公開鍵の作り方は[以下](#公開鍵の作り方メモ)を参照
8. サイズを選択（なぜかBasicの安いのが選べなかった。無料試用のプランでは選べないのかな？ここではDS1_V2を選択）
9. オプション機能を設定。「管理ディスクを使用」をはい。それ以外の設定はデフォルトでOK。
10. OKをクリックしてデプロイ
11. しばらくお待ちください。。。

## 公開鍵の作り方メモ
```
cd ~/.ssh
ssh-keygen -t rsa -f azure_rsa
cat azure_rsa.pub
```
# SSH
しばらくするとダッシュボードに作成したVMがrunning状態となる。
クリックするとVMの詳細が確認できる。
あとはパブリックIPアドレスが割り当てられているので先ほど設定した内容でSSHする。

以上！

## SSHメモ
```
ssh user_name@0.0.0.0 -i ~/.ssh/azure_rsa
```
バリデーション

angularJS

ある inputタグにバリデーションエラーがある場合に前画面に
戻り、その後同じフォームのinputタグのvalueには「undefined」が
セットされています。

解消する方法はありますか？

現象
inputタグには、ng-patternで数値のみ入力可能（それ以外はinvalid)
という前提

手順
バリデーションエラーが発生している場合＝数値以外が入力された場合
前画面「戻る」
フォームに戻る
そのときにinputタグに「undefined」という文字列が表示される

やりたいこと
バリデーションエラーの有無にかかわらず、フォームに戻った場合は
元の入力値がセットされてほしい
強制バージョンアップの作り方議論

##強制バージョンアップ

この処理で悩まされているアンドロイド開発者、iOS開発者は多いのではないでしょうか？

提案として WebView　でそれを行わせることができればいいのではと思いこの記事を書いていました。

iOSの場合 Apple審査の度にバージョンアップ画面で不具合ができるのかなと思った。

もっと詳しくは「いいね」が１００を超えた頃に、、、


## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
finallyとyieldを組み合わせた関数の返し値(ジェネレータ)は直接nextに渡してはならない


このようなコードがある。

```py
def yielder():
    #try:
    print('yielder setup')
    yield 'text'
    #finally:
    print('yielder teardown')

def yielder_with_finally():
  try:
    print('yielder setup')
    yield 'text'
  finally:
    print('yielder teardown')

def f(text):
  print(text)
```

yielderを呼び出すとき、`for y in yielder(): f(y)`とすると、出力は

```
yielder setup
text
yielder teardown
```

となるが、nextを1回しか呼び出さないような使い方(※後ろに書かれた4つの方法のうち前者を除いた3つ)をすると、

```
yielder setup
text
```

のようになる。teardownは呼ばれていない。finallyを付けることでteardownが呼ばれるようになる。

しかし、この関数を呼び出すとき、`for y in yielder_with_finally(): f(y)`や`y=yielder_with_finally();f(next(y))`では

```
yielder setup
text
yielder teardown
```

という予期した出力になるが、`t=next(yielder_with_finally());f(t)`や`f(next(yielder_with_finally()))`という呼び出し方をすると、

```
yielder setup
yielder teardown
text
```

という予期せぬ実行順序になってしまう。CPython2/3で同様の挙動であった。
ただ、nextを1回呼んだだけでteardownが実行されると(IPython等での)デバッグが困難になるので、そもそもこういう使い方はしてはいけないのかもしれない。 **yieldする場合のteardownはfinallyを使わないのが得策かも。**

なおpytestのyield fixtureではちゃんと2回回す実装になっているので、この不具合にはかからない。
https://docs.pytest.org/en/latest/_modules/_pytest/fixtures.html

---

PyPyではfinallyの有無にかかわらず、CPythonでfinallyがない場合と同じ挙動であった。

Rubyでも検証したが、ensureの有無で挙動は変わらなかった(PyPyと同様)。

```rb
def yielder()
  return to_enum(:yielder) if !block_given?
  #begin
    puts('yielder setup')
    yield 'text'
  #ensure
    puts('yielder teardown')
  #end
end

def yielder_with_ensure()
  return to_enum(:yielder_with_ensure) if !block_given?
  begin
    puts('yielder setup')
    yield 'text'
  ensure
    puts('yielder teardown')
  end
end

def f(text)
  puts(text)
end
```
long doubleと拡張倍精度浮動小数点数フォーマット

# はじめに

x86系では、long doubleが内部80bit精度の[拡張倍精度浮動小数点数フォーマット](https://ja.wikipedia.org/wiki/%E6%8B%A1%E5%BC%B5%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0)が採用されている。おそらく[x87系命令](http://qiita.com/kaityo256/items/1b59222e538335904b1c)の内部精度が80bitなのと合わせてあるのだと思われる。それをざっと確認しておく。

# 拡張倍精度浮動小数点数フォーマットとは

Wikipediaの[この図](https://ja.wikipedia.org/wiki/%E6%8B%A1%E5%BC%B5%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0#/media/File:X86_Extended_Floating_Point_Format.svg)の通りなんだけれど、要するに

* 符号 1bit
* 指数部 15bit
* 仮数部 64bit

の合計80bitの表現になっている。ここで気をつけなくてはならないのは、この仮数部はいわゆる「ケチ表現」になっておらず、正規化した数字の最上位ビット1を省略しないこと。従って、単精度、倍精度と仮数部のbit数を比較するなら、63bitの精度になっている。

# long double

環境に依存するのだろうが、手元のMacやx86 Linux+GCCの組み合わせでは、`long double`のサイズは16バイト、精度は80bitの拡張倍精度浮動小数点数フォーマットになっていた。

# 拡張倍精度浮動小数点数フォーマットを見てみる

というわけでそのビット表現を見てみる。こんなコードを書いてみよう。

```cpp:test.cpp
#include <stdio.h>

template <class T>
void bitdump(T a){
  char *x = (char*)(&a);
  int count = 0;
  int s = 8;
  int s2 = 12;
  if(sizeof(T)==16){
    s = 10;
    s2 = 16;
  }else if(sizeof(T) == 4){
    s = 4;
    s2 = 9;
  }
  for(int i=0;i<s;i++){
    for(int j=0;j<8;j++){
      if(x[s-i-1] & (1<<(7-j)))printf("1");
      else printf("0");
      count++;
      if(count==1 || count==s2)printf(" ");
    }
  }
  printf("\n");
}
```

これはいくつかの浮動小数点型のビットダンプを取る超手抜きコードである。これをこんな呼び方をしてみる。

```cpp
int
main(void){
  bitdump(1.125F);
  bitdump(1.125);
  bitdump(1.125L);
}
```

ケチ表現の有無がわかりやすいように、1.125を表現してみた。1.125は1 + 1/8なので、２進数で表現すると「1.001」となる。これを`float`、`double`、`long double`の型でビットダンプすると、こんな結果になる。

```shell-session
$ ./a.out  
0 01111111 00100000000000000000000
0 01111111111 0010000000000000000000000000000000000000000000000000
0 011111111111111 1001000000000000000000000000000000000000000000000000000000000000
```

仮数部が、`float`と`double`は最上位ビットが省略された「001」に、`long double`は省略されていない`1001`になっていることがわかる。

同様に、1.125の2倍である2.25 (二進表記 10.01)をそれぞれダンプしてみると

```shell-session
0 10000000 00100000000000000000000
0 10000000000 0010000000000000000000000000000000000000000000000000
0 100000000000000 1001000000000000000000000000000000000000000000000000000000000000
```

と、指数部の下駄に1足されて(小数点を左に一つ移動し)、整数部が1になるように調整されてから、`float`、`double`はケチ表現で「001」に、`long double`は最上位の整数部を省略せずに「1001」になっていることがわかる。

# まとめ

x86+GCCの組み合わせにおいて`long double`が80bitの拡張倍精度浮動小数点フォーマットになっていることを確認した。拡張倍精度浮動小数点フォーマットは単精度と倍精度のフォーマットと同じだが、ケチ表現の有無が異なる。

ちなみに`long double`のサイズ(`sizeof(long double)`が返す値)は16なので、16バイトを利用するのだが、内部的には10バイトしか使っておらず、残りの6バイトの値は何も保証されない。ゼロクリアもされないので、`long double`の指すポインタを16バイト分ダンプすると、6バイト分は実行の度に値が変わるので注意されたい[^1]。

[^1]: たまたまそのデータが意味ありげなビット列だったこともあって、筆者はそれで「あれ？どうして余計なbitが立ってるんだろ？」としばらく悩んでしまった・・・
Webスクレイピング＆クローリングにおけるトレードオフ

#さいしょに
<font color='Blue'>**インターネットは情報の宝の山だ！Webスクレイピング+クローリングを駆使して、データ分析をしよう！**</font>と思った人は多いのではないでしょうか？私もその一人です。

機械学習に使うためのデータ収集、データサイエンスの勉強のために等、データを簡単に入手する手段として、Webスクレイピング+クローリングの勉強をすることにしました。

本記事では、Webスクレイピング、クローリングについて勉強して感じたことをまとめています。

#Webスクレイピングとは
Webスクレイピングとは、Webサイトの情報を抽出する技術のことです。もう少し、具体的に言えば、HTML等から**情報を抽出する技術**です。Webサイトの情報を解析するために使います。

Webスクレイピングなら、Webページのデータ(HTML等)をダウンロードできれば、APIが公開されていないWebページの情報も取得することができます。また、ログインが必要なページにアクセスする技術があれば、ログインが必要なページであっても、スクレイピングすることが可能です。

#クローリングとは
クローリングとは、Webサイトのリンクを巡回して、Webページの情報を取得する技術です。定期的に巡回させ、ページ更新等の検知も可能です。ただし、クローリングを行うとサーバに負荷がかかるので、禁止しているサービスやBotによるクローリングを受け付けないサービスもあります。

クローリングを行うプログラムのことを**クローラー**や**スパイダー**と呼びます。

クローリングを行う際、注意しなければいけないのが**リンクのパス**です。パスを抽出する際、基準となるURL（クローリングを開始するページのURL）に対して絶対パスなら問題ありませんが、<font color="Red">**相対パスなら無限ループ**</font>する可能性があります（互いにリンクし合っているページがあると無限ループ）。通常、クローリングする際は抽出するリンクのパスを絶対パスに変換するなど処理が必要になります。

#Webスクレイピング+クローリングにおけるトレードオフ
Webスクレイピングとクローリングの勉強をやってみると意外と簡単にできます。私の場合、Python3を使うので**Beautiful Soup**や**Scrapy**等、便利なライブラリにお世話になっています。

Webスクレイピングとクローリングができるようになると、任意のURLにアクセスし、そのページのリンク先からも情報を収集することができます。しかし、収集したデータにはいらないゴミ情報が多く含まれているので、まずそのゴミを取り除くことから始めなければなりません。

そこで、必要な情報だけ取得するために**CSSセレクタ**を利用します。CSSセレクタを利用することで、指定した情報だけ収集することができます。例えば、クローリングするために、リンク先のアドレスを収集したいなら、aタグのhref属性の値のみ収集するといった具合です。

しかし、CSSセレクタも万能ではありません。例えば、クローリングするためにリンク先URLを収集する際、お問い合わせページへのリンクを除けれる方が良いでしょう、広告のリンクも除ける方が良いでしょう。そこで、CSSセレクタで必要な箇所だけ情報を収集する訳ですが、CSSセレクタが全てのWebページで統一されているわけではないのです。

そこで、Webスクレイピング+クローリングでインターネットから情報収集する場合、**汎用的に使えるが、大量のゴミ情報の処理も必要となるプログラム**を作るか、**必要な情報だけ収集できるが、CSSセレクタの調査が毎回必要になるプログラム**を作るかのいずれかを選択しなければならないのです。

汎用的に使えて、必要な情報だけ収集する方法を知っているという人がいらっしゃれば、是非コメントをお願いします。

#データ分析にWebスクレイピング+クローリングを活用するなら
Webスクレイピング+クローリングのトレードオフについて書いてきましたが、本来の目的はデータ分析をすることです。（検索エンジンを作るためという人もいるかもしれませんが…）データ分析をするためのデータ収集として、Webスクレイピング+クローリングをするなら、汎用的な収集か局所的な収集かどちらが良いか判断できるようになる必要があるのではないでしょうか。

データ分析において100％の分析結果がないように、どちらの方法が絶対ということはないでしょう。どちらの方法を採用するか考え続けるくらいなら、さっさと手を動かして分析に取り組むべきだと私は思います。


#さいごに
Webスクレイピング、クローリングについて学んだこと、気付いたことをまとめました。Webスクレイピング、クローリングをやっている人、やってみたい人にとって少しでも参考になれば幸いです。
Visual Studio / WPF > ObjectDataProvider | sys:Enumを用いてListBoxにenum値を表示

```txt:動作環境
Windows 7 Pro (32bit)
Microsoft Visual Studio 2017 Community
Sublime Text 2
```

```MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace _170606_1417_sysEnum
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
    public enum ColorEnum
    {
        Black = 0,
        Brown,
        Red,
        Orange,
        Yellow,
        Green,
        Blue,
        Violet,
        Gray        
    }
}

```

```MainWindow.xaml
<Window x:Class="_170606_1417_sysEnum.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_170606_1417_sysEnum"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ObjectDataProvider ObjectType="{x:Type sys:Enum}" MethodName="GetValues"
                            x:Key="colorEnum">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="local:ColorEnum"/>
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <ListBox x:Name="listBox1" ItemsSource="{Binding Source={StaticResource colorEnum}}"/>
    </Grid>
</Window>
```

![2017-06-06_14h29_26.png](https://qiita-image-store.s3.amazonaws.com/0/32870/c6aaa7ef-4818-75fa-42a3-9c0c62c0df7d.png)


新プロジェクトから追加したのは以下の部分。

- `xmlns:sys`の定義
    - sys:Enum使用のため
- public enum ColorEnum定義
- ObjectDataProvider タグとその子要素
- ListBoxの追加

以下をもとにした。
https://code.msdn.microsoft.com/windowsdesktop/WPF-ComboBoxEnum-ddd26709

`sys:Enum`でQiita検索してもこちらの記事ともうひとつの記事しか出てこない。
Google DatalabからBigQueryへ標準SQLを投げたい

Google Datalab から標準SQLを投げたい
しかし、やりたい。どこにも書いてない。

~~以下のようにStandardSQLはまだ推奨はされていない~~

> ~~注: 標準 SQL を使用して BigQuery クエリを記述する機能は、現在ベータ版です。詳細については、クエリ リファレンス（レガシー SQL）をご覧ください。
https://cloud.google.com/bigquery/docs/visualize-datalab?hl=ja#whats-next~~
私BigQuery 知ッテイルヨソレチガウヨ 的な発言を受けたので、消しておきます。

# %%形式
```sql
%%sql -d standard
WITH q1 as (
  SELECT count(*)  FROM `myds.logs_*`
)
select * from q1
```

# bigquery module 利用形式
dialect へ standard を指定することで、standard を利用できるようになります。

> dialect – {‘legacy’, ‘standard’}, default ‘legacy’ ‘legacy’ : Use BigQuery’s legacy SQL dialect. ‘standard’ : Use BigQuery’s standard SQL (beta), which is compliant with the SQL 2011 standard.
http://googledatalab.github.io/pydatalab/datalab.bigquery.html#datalab.bigquery.Query.to_dataframe


```sql
%%sql --module std_sql_sample
WITH q1 as (
  SELECT count(*)  FROM `myds.logs_*`
)
select * from q1
```

```py
import datalab.bigquery as bq
bq.Query(std_sql_sample).to_dataframe(dialect='standard')
```


# 参考
https://github.com/googledatalab/datalab/issues/949

Datalab♡BigQuery
OxyPlotのコントロールをVisual Studioのツールボックスへ表示させる方法

#はじめに
[OxyPlot](http://www.oxyplot.org/)をVSにインストールした後に、WindowsFormにコントロールを追加するまでにしたことのメモです。

#ツールボックスにPlotViewコントロールが表示されない
c#のWindowsFormで使用したかったので、[このページ](http://docs.oxyplot.org/en/latest/getting-started/hello-windows-forms.html)に沿って、インストールしていきました。

フォームにコントロールを追加するときに、"PlotView"のコントロールが見当たらないので、以下の操作でコントロールの追加をします。
(1)ツールボックスの適当なところで右クリック
(2)[アイテムの選択]を選び、[ツールボックス アイテムの選択]ダイアログを表示させる
(3)[.NET Framework コンポーネント]タブの、[参照]ボタンを選択
(4)"(OxyPlotをインストールしたフォルダ)\packages\OxyPlot.WindowsForms.X.X.X\lib\netXX"フォルダの"OxyPlot.WindowsForms.dll"を開く


#コンポーネントが配置できないエラー
上記手順でインストールしていくと、次のようなエラーが生じることがあります。
>
>'OxyPlot.WindowsForms.dll'には、ツールボックスに配置できるコンポーネントが何もありません。
>

#エラーの解決方法
"(OxyPlotをインストールしたフォルダ)\packages\OxyPlot.Core.X.X.X\lib\netXX"フォルダの"OxyPlot.dll"を"OxyPlot.WindowsForms.dll"と同じフォルダへコピーします。
これでもう一度、上記の(1)～(4)の操作をすると、エラーなくインストールできます。

PlotViewというコントロールがツールボックスへ表れて、OxyPlotがWindowsFormsで使用できるようになります。
PythonのWaveモジュールを使ってwavファイルを編集する

こんにちはみなさん

Pythonにはwaveモジュールっていうのが標準でついているようで、こいつを使うことでwavファイルを読み込んだり書き込んだりできるようです。
今回は、そいつを使って長いwavファイルに対して後半を切り取った短めのwavファイルを作るようなプログラムを組んで遊んでみましょう。

# 環境準備
私はPHPerなので、python環境の用意の仕方なんてようわからんのですが、よく使っているkeras入りのdockerイメージがあったので、こいつを使っちゃいます。(かなり重いけど)
https://hub.docker.com/r/gw000/keras-full/

また、当然ファイルを作ってコンソールで繰り返し動かすような根性を持っているわけではないので、jupyterをササッと起動させてブラウザ経由で動かすします。

```
$ docker run --rm -v `pwd`/src:/srv -v `pwd`/data:/data -p 8888:8888 -p 6006:6006 -m 2g gw000/keras-full
```
メモリが心配だったので、念のため2GB確保しています。
あとは、
http://127.0.0.1:8888
にブラウザでアクセスすれば、jupyterが動いているので、パスワード[ keras ]を入れて、はじめちゃいます。

# wavの読み込み
準備が完了したので、早速waveファイルを読み込んで、その情報を取得してみましょう。
jupyter上で以下のように入力します。

```python
import wave
import struct
from scipy import fromstring, int16

# ファイルを読み出し
wavf = '/data/input/test.wav'
wr = wave.open(wavf, 'r')

# waveファイルが持つ性質を取得
ch = wr.getnchannels()
width = wr.getsampwidth()
fr = wr.getframerate()
fn = wr.getnframes()

print("Channel: ", ch)
print("Sample width: ", width)
print("Frame Rate: ", fr)
print("Frame num: ", fn)
print("Params: ", wr.getparams())
print("Total time: ", 1.0 * fn / fr)

# waveの実データを取得し、数値化
data = wr.readframes(wr.getnframes())
wr.close()
X = fromstring(data, dtype=int16)
```
一旦ここまでで実行してみます。

```
Channel:  2
Sample width:  2
Frame Rate:  44100
Frame num:  15884224
Params:  _wave_params(nchannels=2, sampwidth=2, framerate=44100, nframes=15884224, comptype='NONE', compname='not compressed')
Total time:  360.18648526077095
```
こんな結果が出力されます。
Channelが2になっているので、このファイルがステレオになっていることがわかります。
また、Total timeが360秒 = 6分と、わりと長めのファイルになっていることがわかります。

# waveへの書き出し
次に読み出した内容を頭から９０秒だけ取り出したものを別のファイルとして書き出してみましょう。

```python
# 90秒分に相当するフレーム数を算出
time = 90
frames = int(ch * fr * time)

# 出力データを生成
outf = '/data/output/test.wav'
Y = X[:frames]
outd = struct.pack("h" * len(Y), *Y)

# 書き出し
ww = wave.open(outf, 'w')
ww.setnchannels(ch)
ww.setsampwidth(width)
ww.setframerate(fr)
ww.writeframes(outd)
ww.close()
```
こんな感じです。
チャンネルが複数あると、その分必要なフレーム数が増えるので、それを考慮してあります。
で、出力データを再度文字列の形式に直してから、読み出し時と同じパラメータを指定して書き出しているっていう感じですね。
で、実際にファイルができたかを見ると、

<img width="213" alt="スクリーンショット 2017-06-06 13.53.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/102182/0d87ef62-dcd8-0961-acc8-8450c37c2540.png">

できてるみたいです。

# まとめ
今回はPythonの標準モジュールであるwaveを使ってwavファイルを直接編集するやり方を調べてみました。
だからなんだって話ですが。。。

今回はこんなところです。

# 参考
http://yukara-13.hatenablog.com/entry/2013/11/09/103848
http://denshi.blog.jp/signal_processing/python/save_sine_wave
Azure File Storageをオンプレミスから使う

#はじめに

Azure File StorageはCIFSを使ってWindowsやLinuxから共有できるストレージサービスです。
無論Azureの複数の仮想マシンからファイルを共有するときにも便利に使えますが、オンプレミスのWindows PCなどからもマウントして利用することができます。

では早速オンプレミスのWindows 10マシンからAzure File Storageの共有フォルダをマウントしてみましょう。

#ストレージアカウントの準備

Azureのストレージアカウントを作成して、「ファイル」アイコンをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/ee172429-034e-7762-756a-13505c495304.png)

「＋ファイル共有」ボタンを押して、共有名とクオータサイズをGB単位で設定します。
この例ではbackupフォルダを最大100GBで作成しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/db1b76c5-80ff-3e90-196e-9c4025e628ce.png)

#接続文字列の確認

先の画面で共有名一覧(backup)をクリックして展開された画面から「Connect」をクリックすると、クライアントPC側で入力するマウントコマンドが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/bbd4791c-a8e5-62ab-695f-c7654d066b9b.png)

マウント時にはストレージアカウントのアクセスキーも必要となりますので、こちらも確認しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/2e64fe4e-b6df-6c2e-d304-8cd809a89935.png)

で、実際のマウントコマンドは以下のようになります。

```
net use [drive letter] \\XXXXXXXX.file.core.windows.net\backup /u:XXXXXXXX [storage account access key]
```

[drive letter]は「X:」とか指定。[storage account access key]は先のKEY1かKEY2を入れます。

#ルーターの設定確認

オンプレ側(会社、自宅側)には大抵はインターネット接続用のルータがあると思いますが、ルータによってはデフォルトでSMB3.0用のプロトコルTCP/445を通さない設定になっている場合があります。

##YAMAHA RTX1210の場合

管理画面GUIの「詳細設定」→「IPフィルター」から静的フィルターの編集を行い、送信先ポート445のフィルタ定義を「reject」から「pass」に変更します。

(下記画面例では番号201025の定義)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/6699895f-0801-ef9a-34c6-d54ebd667518.png)

##Buffalo BBR-4HGの場合

管理画面から「アドバンスド」→「ネットワーク設定」→「パケットフィルタ」を選択後、簡易フィルタ情報の「NBTとMicrosoft-DSのルーティングを禁止する」のチェックを外して「設定」をクリックします。

(本操作を行ってもネットワークの瞬断やルータの再起動は発生しないようです)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/b00728b7-b2ea-96d1-2476-b63979a29490.png)

##Wifiルータ経由の場合

試したところ、以下のWifiルータではTCP/445の制限がかかっていないため、特に設定変更不要で利用可能でした。

emobile GL10P
iPhone 6のテザリングモード(SIMはIIJmio)

#クライアントPCからのマウント

利用できるクライアントPCはSMB 3.0を喋れる必要があるため、Windowsの場合は以下に限定されます。

- Windows 8/8.1
- Windows 10
- Windows server 2012/2012 R2

残念ながら、自宅のWindows 7はSMB 2.1であるため、オンプレからのAzure File Storageは利用不可でした。

(ストレージアカウントと同一リージョン内の仮想マシンからであればSMB 2.1での接続は可能とのことです)



実際のマウントはドライブレターに割り当てる形で、クライアントPCのコマンドプロンプトから実行します。

特に管理者モードでなくても大丈夫そうです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/af01c48b-25ab-9214-fab2-44f8bce83b1f.png)

エクスプローラからもちゃんと見えていますね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137436/d45602e0-fd99-f2d0-41c7-f9eb63fe700f.png)

#おわりに
本記事は昨年9月末にAzure File StorageがGAしたタイミングで(別Blogで)執筆した記事の再掲です。
オンプレからの利用もルータの設定を若干変更するだけで可能になるため、プライベートでも大事な写真のバックアップ等便利にAzureが利用できると思います。
AWSでMySQL DB インスタンスを作成するには


# AWSでMySQL DBインスタンスを作成するには
1.AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。![2017-06-06_9-54-21.png](https://qiita-image-store.s3.amazonaws.com/0/172367/844d400f-a9a9-6b51-0d58-40d4c4440de4.png)

2.Amazon RDS コンソールの右上隅で、DB インスタンスを作成するリージョンを選択します。

3.ナビゲーションペインで、[Instances] を選択します。

4.[Launch DB Instance] を選択します。[Launch DB Instance Wizard] が起動し、[Select Engine] ページが開きます。

5.[Select Engine] ページで、[MySQL] アイコンを選択し、[Select] を選択して MySQL DB エンジンを選択します。

![2017-06-06_9-56-38.png](https://qiita-image-store.s3.amazonaws.com/0/172367/8d9acfc1-9cc2-797b-1580-64bc5c46769e.png)

6.[Specify DB Details] ページで、DB インスタンスの情報を指定します。次の表は、サンプルの DB インスタンスの設定を示しています。すべての設定が正しいことを確認したら、[Next: ] を選択します
![2017-06-06_10-00-25.png](https://qiita-image-store.s3.amazonaws.com/0/172367/8ff1aefb-df18-846c-66d4-40ee472fdb3b.png)

7.![2017-06-06_10-03-28.png](https://qiita-image-store.s3.amazonaws.com/0/172367/869145a5-c11d-6db0-93e6-c46fdb9f31cd.png)



8.DB作成中という画面が表示されます。
![2017-06-06_10-08-12.png](https://qiita-image-store.s3.amazonaws.com/0/172367/6189152d-d960-b902-f3ad-b2363fc213c0.png)


9.ステータスに作成中という画面が表示されます。
![2017-06-06_10-09-12.png](https://qiita-image-store.s3.amazonaws.com/0/172367/2a3f9c52-6fb3-ee59-77b5-9f96b4eb6129.png)


10.ステータスに利用可能と表示されるとOKです。
![2017-06-06_10-20-19.png](https://qiita-image-store.s3.amazonaws.com/0/172367/556e3fbe-c2fd-c913-06a4-02cfa02a346f.png)

# DBへ接続
11. MySQL モニターを使用して DB インスタンス上のデータベースに接続するにはプロンプト上で下記のようにendpoint名とユーザ名を記入します。正常に入力すると下記のようにMySQLインスタンス上のデータベースに接続できます。
PROMPT> mysql -h <endpoint> -P 3306 -u <mymasteruser> -p
![2017-06-06_13-26-55.png](https://qiita-image-store.s3.amazonaws.com/0/172367/ae6ea720-2dbc-07cf-2c33-635b0ee5d7e1.png)
single page application に対応した web application monitoring service

# Google Analysis + Google Tag Manager
- [SPAの各ページビューをGoogleアナリティクス＋Googleタグマネージャーで簡単トラッキング！](http://qiita.com/OnederAppli/items/0c35dc6c72da7bcada7a)
- [GoogleAnalytics＋GoogleTagManagerでJSエラーを収集する
](http://qiita.com/OnederAppli/items/0b64df149e352a8cc7c6)

# New Relic APM
- [New Relic APM](https://newrelic.degica.com/apm)
- [シングルページアプリケーション(SPA) 監視機能リリース(パブリックベータ)](https://newrelic.degica.com/blog/2016_07_12_spa-public-beta)

# dynatrace
- [Performance monitoring for React apps
](https://www.dynatrace.com/technologies/web/react-monitoring/)

# Sentry
- [React error tracking with Sentry](https://sentry.io/for/react/)

# Opbeat 
- [Opbeat open beta ?](https://opbeat.com/react/)

# Track.js
- [Track.js](https://trackjs.com/)

# SOASTA 
- [Performance Monitoring for the Real World.](https://www.soasta.com/performance-monitoring/)
サイト制作時の基本ルール

#SNS
##facecebook
**画像サイズ**
<pre>高解像度デバイス上で最適に表示されるよう、1200 x 630ピクセル以上の画像を使用します。
リンクページ投稿で大きい画像を表示するには、少なくとも600 x 315ピクセルの画像を使用してください。 
画像の最大サイズは8MBです。</pre>
「1200 x 630ピクセル以上」だからこれよりも大きくなってもいいのか…

https://developers.facebook.com/docs/sharing/best-practices
validates_uniqueness_of で大文字小文字を無視する case_sensitiveオプション


ユーザーコードの大文字小文字間違いをなくして欲しいと言う要件で調べたら存在した。
Railsのオプションの豊富さって凄い。

```ruby
validates_uniqueness_of :user_code, allow_blank: false, case_sensitive: false
```


参考: http://somethingpg.hatenablog.com/entry/2013/12/23/085210


尚、昔はMySQLでできなかった見たい

https://rails.g.hatena.ne.jp/willnet/20080912/1221219644

> validates_uniquenessのオプションである:case_sensitiveはデフォルトtrue(2.2.0より)。かといってtrueにしても、mysqlを使用している場合は区別されないらしい。(mysqlは大文字小文字を区別せず保存する仕様なので。)



そして、こう言うオプションって割りとドキュメントに載ってない事が多いイメージだったけど、ちゃんと載っていた 
http://railsdoc.com/validation#%E5%B1%9E%E6%80%A7%E3%81%AE%E5%80%A4%E3%81%8C%E4%B8%80%E6%84%8F%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E6%A4%9C%E8%A8%BC(validates_uniqueness_of)
2017-06-06 Paper > Deep Frame Interpolation

補間処理関連の論文。

https://arxiv.org/abs/1706.01159
Deep Frame Interpolation
Vladislav Samsonov

```
Cite as:	arXiv:1706.01159 [cs.CV]
 	(or arXiv:1706.01159v1 [cs.CV] for this version)
```

アニメーションのフレーム間の描画を計算してしまおうというもののようだ。

気になったキーワードだけ抜粋。

- Adversarial approach
- optical flow prior
- DeepFlow (open-source implementation)
   - 関連: http://qiita.com/wakaba130/items/546add100ca965d22893
- the Displacement Layer
- simple warping

多変数関数の補間に使えるだろうか。
composer installしたらOpenSSLのエラーが出た

composer installしたら以下のエラーが出た

```shell-session 
[Composer\Downloader\TransportException]                                                                                          
  The "https://packagist.jp/packages.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:  
  error:100AE081:elliptic curve routines:EC_GROUP_new_by_curve_name:unknown group                                                   
  error:1408D010:SSL routines:SSL3_GET_KEY_EXCHANGE:EC lib                                                                          
  Failed to enable crypto                                                                                                           
  failed to open stream: operation failed
```

ググったらどうやらOpenSSLのバグっぽい。

解決方法としてはOpenSSLのアップデート

アップデート前

```shell-session
$ rpm -q openssl
openssl-1.0.1e-15.el6.x86_64
```

アップデート

```shell-session
$ sudo yum update openssl
```

アップデート後

```shell-session
$ rpm -q openssl
openssl-1.0.1e-57.el6.x86_64
```

問題なくcomposer installできました。
一番簡単なラベルのタッチ処理 by Swift3

```swift
    @IBOutlet weak var YourLabel: UILabel!
```

```swift   
    override func viewDidLoad() {
        super.viewDidLoad()
        let tap = UITapGestureRecognizer(target: self, action: #selector(クラスの名前.tapFunction))
        YourLabel.isUserInteractionEnabled = true
        YourLabel.addGestureRecognizer(tap)
    }

    func tapFunction(sender:UITapGestureRecognizer) {
        print("tap working")
    }
```
Win10でApple Wireless Keyboardを使う


Windows10でApple Wireless Keyboardを使えるようにする。
以下の動作を想定する。

- 「かな」「英数」での日本語IMEのON/OFF（※ただしIMEはATOK）
- 上部Functionキーは「fn」との同時打鍵でwindowsのFunctionキーと同等の作用
- 左Commandキーをaltキー、optionキーをwindowsキーとして使う

# Bluetoothアダプタの設定
使用するwin10マシンにはBluetoothが標準で付いていないので、Bluetooth-USBアダプタを使うことにする。
使うアダプタはだいぶ前に買った「iBUFFALO Bluetooth4.0+EDR/LE対応 USBアダプタ ブラック BSHSBD08BK」

## ドライバのインストール
ドライバはwin10の標準ドライバが利用できる。
bluetoothアダプタを差して検出されたらwin10標準ドライバをインストールすれば利用できるようになる。
※Buffaloのサポートページからドライバがダウンロードできるが、win10対応のものは無いのでインストールしてはいけない。

# Apple Wireless Keyboardの設定
## キーボード認識
win10にキーボードを認識させる。

1. タスクバーのbluetoothアイコンを右クリック→「Bluetoothデバイスの表示」→Bluetoothアダプタをonにする。
2. ライトが点滅するまでAppleWirelessKeyboardの電源ボタンを長押しする。
3. PCにキーボードが検出され、パスフレーズが表示されたらAppleWirelessKeyboardで入力してペアリングする。

## Bootcampからキーボードのドライバをインストール
このままだとキーボードの「かな」「英数」など一部のキーが反応しない。
AppleWirelessKeyboardのwindows用ドライバをインストールする必要がある。

1. AppleのサポートページからBootCampサポートソフトウェア BootCamp*.zipをダウンロードする。  
    現バージョンはBootCamp5.1.5722.zipだった。  
   https://support.apple.com/kb/DL1836?viewlocale=ja_JP&locale=ja_JP
2. 解凍して、AppleKeyboardInstaller64.exeをインストール

これで「かな」「英数」その他のキーが利用できる。

# 雑多な設定
## 「かな」「英数」のキー割り当て
ATOKプロパティ→「キー・ローマ字・色」→「キーカスタマイズ」から以下の設定を割り付ける。

|キー|文字未入力|
|:--|:--|
|ひらがな|日本語入力ON|
|無変換|日本語入力OFF|

## Altキーとcommandキーの入れ替え
デフォルトで左commandがwinキーになっている。
左commandをalt、altをwinキーに入れ替えた方が使いやすいのでChangeKeyで入れ替えておく。
ChangeKey：http://klx.ldblog.jp/archives/changekey_windows10.html