OmniAICreator/Qiita-1.07M huggingface dataset:
スレーブ DNS サーバーの構築方法

BIND で スレーブ DNS サーバーを構築する方法です。
IP アドレス 133.130.100.15 にスレーブ DNS サーバーを立てます。
マスターは、160.16.10.150　とします。
そのうち、example01.jp と example02.jp をミラーする例です。

１）マスター DNS サーバーで、転送を許可する
　>/etc/named.conf を編集
　allow-transfer { 133.130.100.15; };

 編集後、サーバーを再起動
 > sudo systemctl restart named

２）スレーブ DNS サーバーの設定
>/etc/named.conf を編集
allow-notify {
160.16.10.150;
};

zone "example01.jp" {
        type slave;
        allow-query { any; };
        masters { 160.16.10.150; };
        file "/var/named/slaves/example01.jp.bak";
        };

zone "example02.jp" {
        type slave;
        allow-query { any; };
        masters { 160.16.10.150; };
        file "/var/named/slaves/example02.jp.bak";
        };

編集後、サーバーを再起動
 > sudo systemctl restart named
次のファイルが作成されます。
/var/named/slaves/example01.jp.bak
/var/named/slaves/example02.jp.bak

```text:/etc/named.conf
// vim:set ts=4 sw=4 et:

options {
	listen-on port 53 { 127.0.0.1;};
listen-on-v6 port 53 { ::1; };
    directory "/var/named";
    pid-file "/run/named/named.pid";

    // Uncomment these to enable IPv6 connections support
    // IPv4 will still work:
    //  listen-on-v6 { any; };
    // Add this for no IPv4:
    //  listen-on { none; };

    allow-query { none; };
    allow-recursion { none; };
    allow-transfer { none; };
    allow-update { none; };

allow-notify { 160.16.10.150; };

recursion no;

    version none;
    hostname none;
    server-id none;
};

zone "localhost" IN {
    type master;
    file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "127.0.0.zone";
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
    type master;
    file "localhost.ip6.zone";
};

zone "255.in-addr.arpa" IN {
    type master;
    file "empty.zone";
};

zone "0.in-addr.arpa" IN {
    type master;
    file "empty.zone";
};

zone "." IN {
    type hint;
    file "root.hint";
};

zone "example01.jp" {
	type slave;
	allow-query { any; };
	masters { 160.16.10.150; };
	file "/var/named/slaves/example01.jp.bak";
	};

zone "example02.jp" {
	type slave;
	allow-query { any; };
	masters { 160.16.10.150; };
	file "/var/named/slaves/example02.jp.bak";
	};
```


３）　スレーブサーバーの動作確認

```bash
dig example01.jp @133.130.100.15
dig example02.jp @133.130.100.15
```

マスターへの問い合わせと同じ結果が得られるか確認

```bash
dig example01.jp @160.16.10.150
dig example02.jp @160.16.10.150
```
EF6でコードからMigrationするときにログする方法

# 概要
EF6でコードからMigrationするときに、Migrationの実行内容を見たいときがあります。
その方法です。

# やること
1\. MigrationsLoggerを継承したロギングクラスを作成します。以下はConsoleに出力する例です。

```c#:MyLogger.cs
    public class MyLogger : System.Data.Entity.Migrations.Infrastructure.MigrationsLogger
    {
        public override void Info(string message)
        {
            System.Console.WriteLine($"[Info]{message}");
        }

        public override void Verbose(string message)
        {
            System.Console.WriteLine($"[Verb]{message}");
        }

        public override void Warning(string message)
        {
            System.Console.WriteLine($"[Warn]{message}");
        }
    }
```

2\. MigrationLoggingDecoratorを生成してUpdate()します。

```c#:Program.cs

        static void Main(string[] args)
        {
            var configuration = new Configuration(); // Enable-Migrationsで自動生成されたクラス
            var migrator = new System.Data.Entity.Migrations.DbMigrator(configuration)
            MigratorLoggingDecorator logger = new System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator(migrator, new MyLogger());
            logger.Update();
            :
            :
```

# 参考URL
- http://whiteknight.github.io/2013/01/26/efcodeonlymigrations.html
    - コードからMigrationを実行する方法全般について書いてある記事<br />下記のstackoverflowの記事からも参照している。
- https://stackoverflow.com/questions/24357963/dbmigrator-verbose-code-first-migration
    - 同じ悩みを持ったstackoverflowの記事
UnityのUTS_EdgeDetectionでアウトラインを表示する。

VRには使えないがUnityでUTS2の新しいのが出てたので。
今回はポストエフェクトでアウトラインを表示するので、カメラごとに適用される。

# 環境
Unity2017.1.0f3

#はじめに
[DATA DOWNLOAD\-利用規約 \| UNITY\-CHAN\! OFFICIAL WEBSITE](http://unity-chan.com/contents/guideline/)からUTS2.0.4をダウンロード。
プロジェクトにUTS2.0.4のファイル内にある、`UTS_EdgeDetection.unitypackage`をインポートしておく。

# アウトラインの表示
適用したいカメラにAdd ComponentからUTS_EdgeDetectionを追加する。
![2018-05-06 16_11_36-Unity 2017.1.0f3 Personal (64bit) - Untitled - UnityChanToonShaderVer2_Project-m.png](https://qiita-image-store.s3.amazonaws.com/0/46612/21bad275-7747-8ad2-e125-1b1d07ad9846.png)

# 各Modeの説明
## Sobel Depth
距離によるエッジ検出。
デフォルトだと距離によって濃さが異なる。
`Edges Color`でアウトラインの色を変えられる。
`Edge Exponent`で距離による濃さを調整出来る。下げるときは面にも表示がかかるので注意。

`Edge Exponent` が 1 の場合
![2018-05-06 17_27_26-.png](https://qiita-image-store.s3.amazonaws.com/0/46612/0b2ade54-07e9-5458-f1a3-54316196f0ec.png)
`Edge Exponent` が 0.1の場合
![2018-05-06 17_29_11-.png](https://qiita-image-store.s3.amazonaws.com/0/46612/de41bf28-b3aa-fa85-4809-b12e5242cca1.png)

## Sobel Depth Thin
Sobel Depthの細い(1px?)バージョン
![2018-05-06 17_32_17-.png](https://qiita-image-store.s3.amazonaws.com/0/46612/d10e3294-bd1f-124f-51f3-f4a9b824b745.png)

## Roberts Cross Depth Normals
Sobel Depthより太く強調される。
法線も使っているっぽいので角も検出されている。

値がデフォルトの場合
![2018-05-06 17_39_17-.png](https://qiita-image-store.s3.amazonaws.com/0/46612/64d971ac-4ee4-a050-3e9f-627b4d8c202c.png)

## Sobel Color
色の違いによるエッジ検出。
`Color Filter Power`で検出する範囲を変えられる。
公式には
> Sobel Color Filterを使うことで、効果的にトゥーンラインエッジを強調し、セル画時代の色トレス風の雰囲気を出すことができます。

とあるので、キャラクターに向いてると思われる。

`Color Filter Power`が 1 の場合
![2018-05-06 17_42_52-.png](https://qiita-image-store.s3.amazonaws.com/0/46612/aa108674-b0ac-5669-67b6-5d9ac04fd0c2.png)
Scratch2.0オフラインエディタv460へのアップデート方法

Scratch2.0オフラインエディタを昨年よりMac（わたし用）Windows10（子ども用）にインストールしていたのですが、v460へのアップデートがうまく出来なかったのでその対処法の覚え書きです。

![スクリーンショット (1).png](https://qiita-image-store.s3.amazonaws.com/0/47128/9fcff3eb-d3c3-ee59-28fb-3464de973551.png)

HTML5対応になるScratch3.0は8月より使用可能なようなのですが、（[Scratch 3.0プレビュー版についての、よくある質問と答え](https://scratch.mit.edu/preview-faq)）現状のScratch2.0対応ということでまとめます。

## 環境
![1_W2yJmML6yf_DiYIw5nt9aA.jpeg](https://qiita-image-store.s3.amazonaws.com/0/47128/73362094-d602-3e3f-a8d0-540c0c753694.jpeg)

- ハード：ASUS VivoBook E203NA（Windows10）
- ソフト：Scratch2.0オフラインエディタv458.0.1

## 対応

「新しいバージョンのScratchがありますv460」のアラートが出るのですが「直ちにアップデート」を選択しても、エラーになりアップデートできません。

[オフラインエディターのダウンロード方法 - Scratch Japan Wiki](https://ja.scratch-wiki.info/wiki/%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%BC%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E6%96%B9%E6%B3%95)

上記リンクより特定のバージョンを指定しダウンロードするとうまくアップデートできました。

```
# Windows
https://scratch.mit.edu/scratchr2/static/sa/Scratch-460.0.exe

# Mac
https://scratch.mit.edu/scratchr2/static/sa/Scratch-460.0.dmg
```
![スクリーンショット (1)のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/47128/ceb21a02-c7bc-d87a-e8a4-44647bc2d972.png)

上記リンクよりダウンロード。

![スクリーンショット (2)のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/47128/0925c047-1c68-ff66-531f-a7f18292452b.png)

`.exe`ファイルを実行します。

![スクリーンショット (3)のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/47128/c727555a-2718-5282-2a38-4f2927e74892.png)

「置換」を選択します。

![スクリーンショット (4).png](https://qiita-image-store.s3.amazonaws.com/0/47128/ef9f9fb9-c09d-87bd-60f9-e3c2008ed494.png)

あとは自動的にアップデートされます。

## まとめ

特に前バージョンでも問題ないのですが、エラー表示が目障りな場合上記方法をお試しください。
AWS S3でPHP+javascript でブラウザからアップロードするサンプル

## なぜこれを作ったのか？
- 30MB以上のファイルを数多くアップロードする案件があって、サーバ経由でS3にファイルを送るとサーバの負荷がかかる。それを減らすためにブラウザとS3の間で直接通信をする方法を選んだ。
- ユーザがアップロードするファイルサイズは 10MB ～ 100MB くらいの幅があると考えられる。
- 今後の案件で 500MB くらいのファイルサイズもあるかも。

## S3 ファイルサイズ要件
- [1 回の PUT オペレーションでアップロードできる最大サイズは 5 GB です。](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UploadingObjects.html)
- [100 MB 以上の場合は、マルチパートアップロードを考慮してください。](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/uploadobjusingmpu.html)
- [完了リクエストが正常に送信されなかった場合、パートはS3に残るためパートに対して支払いが発生します。](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/mpuoverview.html#mpuploadpricing)

## 調べて分かったこと
- javascript用のSDKを使う方法と、もう一つは、php用のSDKを使ってURLを作成してからjavascriptで送信する方法がある。
- javascript用のSDKを使う場合、[evaporate.js](https://github.com/TTLabs/EvaporateJS) というライブラリがあるようです。
- php用のSDKを使う場合、phpでURLを発行してjavascriptでS3へマルチパートアップロードをする。この場合は、完了処理のときにPHPで一括してETagを取得する。
- マルチパートアップロードでアップロード途中のファイルはS3の管理画面上に表示されない。そのため、アップロードに失敗し(中止処理もおこなわれなかっ)たファイルはライフサイクルで削除する設定が必要。**※削除する設定をしないで放っておくと見えないまま課金されますので注意してください。**


案件で node.js を使っていないので、PHP(署名) + ブラウザのjavascriptで送信という処理を選択しました。


## 動作確認環境
- サーバ: AWS ではない CentOS7 環境
- PHP 7.2
- aws-sdk-php: 3.52
- signature_version: v4

## Github
こちらにすべてのソースコードを置いてます。
https://github.com/gold1/aws_s3_upload_sample

## インストール

```linux
$ git clone https://github.com/gold1/aws_s3_upload_sample.git
$ cd aws_s3_upload_sample
$ mkdir download
$ chmod 777 download
$ composer install
```

config.php にAWSのIAMのキーとバケット名を指定してください。

```php
$config = array(
    'key'     => '',
    'secret'  => '',
    'bucket'  => '',
);
```

S3 のバケットのCORSの設定を変更して、ブラウザからアップロードできるようにしてください。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
```

S3のバケットのライフサイクルの設定で失敗したマルチパートアップロードを一定期間後に削除するようにしてください。

```linux
不完全なマルチパートアップロードをクリーンアップする
次の後: 3 Days アップロード開始からの日数 
```


## Apache でアクセス

test1.html  : ブラウザからアップロードするサンプル
test2.html  : ブラウザからマルチパートアップロードするサンプル
server3.php : PHPでアップロードするサンプル

## ソースファイルの補足

- マルチパートアップロード後に listParts() という関数で ETag を取得しています。
- このサンプルは、マルチパートアップロードのファイルサイズが200MBくらいでエラーになるバグが残っています(未解決)。test1.html の通常のアップロードのサンプルは800MBで問題なく動作しました。


## 参考
https://github.com/ienzam/s3-multipart-upload-browser
if(null==0) -> TRUE なら if(null > -1) はTRUE？



# 本題

```php
if(null == 0){
	echo "TRUE\n";
}else{
	echo "FALSE\n";
}
```

phpだとこれで`TRUE`が出力されます

なら、タイトルのように`null > -1`は成り立つのか...？


# 答え

```
if(null > -1){
	echo "TRUE\n";
}else{
	echo "FALSE\n";
}
```

結果は`FALSE`です

もちろんですが、`null`を`int`でキャストすれば`TRUE`になります

ただし`null < -1`は`TRUE`です


# おまけ
```php

$array = [null, 0, false, '', []];

for ($i=0; $i < count($array); $i++) {
  for ($j=0; $j < count($array); $j++) {
    if($array[$i]==$array[$j]){
      $results[$i][$j] = 'T';
    }else{
      $results[$i][$j] = 'F';
    }
  }
}

var_dump($results);
 
```



```php:結果

array(5) {
  [0]=>
  array(5) {
    [0]=>
    string(1) "T"
    [1]=>
    string(1) "T"
    [2]=>
    string(1) "T"
    [3]=>
    string(1) "T"
    [4]=>
    string(1) "T"
  }
  [1]=>
  array(5) {
    [0]=>
    string(1) "T"
    [1]=>
    string(1) "T"
    [2]=>
    string(1) "T"
    [3]=>
    string(1) "T"
    [4]=>
    string(1) "F"
  }
  [2]=>
  array(5) {
    [0]=>
    string(1) "T"
    [1]=>
    string(1) "T"
    [2]=>
    string(1) "T"
    [3]=>
    string(1) "T"
    [4]=>
    string(1) "T"
  }
  [3]=>
  array(5) {
    [0]=>
    string(1) "T"
    [1]=>
    string(1) "T"
    [2]=>
    string(1) "T"
    [3]=>
    string(1) "T"
    [4]=>
    string(1) "F"
  }
  [4]=>
  array(5) {
    [0]=>
    string(1) "T"
    [1]=>
    string(1) "F"
    [2]=>
    string(1) "T"
    [3]=>
    string(1) "F"
    [4]=>
    string(1) "T"
  }
}
```
IDCFクラウドでAnsible Dynamic Inventory


[IDCFクラウド](https://www.idcf.jp/cloud/)は価格がお手頃なので個人的によく使っているのですが、Ansibleを使うときにIPをinventoryファイルに直書きするのが不便なのでシェルスクリプトで[Dynamic Inventory](http://docs.ansible.com/ansible/latest/user_guide/intro_dynamic_inventory.html)を簡易的に実装してみました。

# 実装したスクリプト

```idcf.sh
#!/bin/bash -e

groups="$(idcfcloud compute listVirtualMachines | jq -r '.data.virtualmachine[].group' | uniq)"

for group in $groups ; do
  ips=$(idcfcloud compute listVirtualMachines | jq -r ".data.virtualmachine[] | select(.group == \"$group\") | .nic[0].ipaddress")
  jo_params=$jo_params\ $group=$(jo hosts="$(jo -a $ips)")
done

jo -p $jo_params
```

# 実行に必要なツール

実行するにはidcfcloudとjqとjoコマンドがインストールされている必要があります。

- idcfcloud
http://blog.idcf.jp/entry/idcfcloud-cli-1

- jq
https://github.com/stedolan/jq

- jo
https://github.com/jpmens/jo


# スクリプト実行結果例

仮想マシンに設定したグループ名毎にIPのリストが出力されるようにしました。

- IDCFクラウドの仮想マシンのグループ名設定箇所
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130897/d7269076-c7c6-768a-70f0-818116401f4e.png)

```bash
$ ./idcf.sh
{
   "group1": {
      "hosts": [
         "10.13.0.250",
         "10.13.0.199"
      ]
   },
   "group2": {
      "hosts": [
         "10.13.0.149"
      ]
   }
}
```

# 配置例

 Inventoryとして指定してあげればAnsibleが実行してくれます。

```
├── ansible.cfg
├── playbook.yml
├── group_vars
│   ├── all.yml
│   ├── group1.yml
│   └── group2.yml
├── hosts
│   ├── base
│   └── idcf.sh
```
RHEL FasTrackリポジトリの追加

# はじめに
RHELにおけるFasTrackリポジトリというのをご存知だろうか。お恥ずかしながら私はこの間知った。
詳しいことは下記のURLを参照して頂きたい。
[Red Hat Enterprise Linux 6 & 7 FasTrack program deprecation ](https://access.redhat.com/articles/2153451)

簡単に言うと、優先度の低い軽微なバグフィックスを配布しているリポジトリである。
例えば、今、RHEL7.5を使っていたとして、httpdにごく軽微なバグが存在していたとする。
これに対するバグフィックスがFasTrackリポジトリでは配布されている。
もし軽微ではない、やばめなバグフィックスであればデフォのリポジトリで配布される。

単に優先度が低いから、デフォのリポジトリでは配布されないし、優先度が低いっていってもバグフィックスであることに変わりはないので、後々のRHEL7.6では配布される。
ただ、RHEL7.6が出ていない現状でも、現状で困ってる人はFasTrackリポジトリ使ってね、ということらしい。
※間違ってたらマジでごめんなさい

# 追加方法
※RHEL6.9で確認済み
当然デフォではこのリポジトリは使えないので、敢えて追加してあげる必要がある。
といっても非常に簡単で、 **subscription-manager** を使って、使用可能なリポジトリ一覧を表示させて、そこからFasTrackリポジトリの正式名称を確認して、enableオプションを使って追加してあげるだけ。追加というより、有効化が正しいか？

```
# subscription-manager repos --list
※大量に使用可能なリポジトリのリストが出てくる

# subscription-manager repos --enable=rhel-6-server-fastrack-rpms

# subscription-manager repos --enable=rhel-6-server-optional-fastrack-rpms
```

FasTrackリポジトリはわかりやすくfastrackと書いてるので、上記のように2つ追加してあげれば良い。
他にもソースコード用のリポジトリやデバッグ用もあるので、必要なら適宜追加すればOK
あくまで上記はRHEL6.9で試したが、まぁ7も名称はほぼ変わらないだろう。

ちなみに、削除(無効化)は以下のように **--disable** するだけ。

```
# subscription-manager repos --disable=rhel-6-server-fastrack-rpms

# subscription-manager repos --disable=rhel-6-server-optional-fastrack-rpms
```

# 注意
* 別にFasTrackに限らず、RHELが公的に提供しているリポジトリは大量にあるので、同じ手順で追加/削除可能。
* 追加したリポジトリはenabled=1状態なので、リポジトリとしては追加しておいて、普段は使いたくないというなら、単純にenabled=0状態にしておけば良いと思う。
python 画像スクレイピング　うっかりポイント

# python画像データのスクレイピングについて

画像データのスクレイピングにて、次からは失敗したくないと感じた点について記載しています。
画像データのスクレイピングについて参考にしたurlは下記のものです。
url:http://su-gi-rx.com/2017/11/06/scraping-picture/

```言語:open
・with open('img/' + target.split('/')[-1], 'wb') as f: # imgフォルダに格納
```

*python openモジュールのfilename記載方法について*
このように記載するコードがあるが、'img/' + target.split('/')[-1] において、
filename = 'img/'と考えていた。
 + target.split('/')[-1]は一体何を記載しているのだろうかと。。。

しかし基礎を振り返ってみると,文字列のtargetは変数名でありただ、+で文字列と文字列が格納されている変数を結んでいるだけだと納得。

また、filenameに「img/」のように記載すると、imgディレクトリがあった場合はその下にファイルが入るtことに気づいた。これは調べたけれど記述があるページを見つけることができなかった。

*htmlタグの記載について*
imgタグないをみるとformatというところがある、そこでjpgと記載があるとおり、どの拡張子を選択すれば良いのか記載があるため、取得してきたもののファイル名の最後に「.jpg」を付け足す必要あり。

*urllib3ライブラリのバイナリーデータについて*
参考にしたサイトではrequestsライブラリを使用しているが、自分はurllib3を使用したため、httpレスポンス.dataでバイナリーデータとして取得することができる。
画像ファイルなどはバイナリーデータなのでこのようにテキストデータではなく、バイナリーデータに変換する必要がある。

####今回のスクレイピング対象サイト####
URl:https://matome.naver.jp/odai/2134591269077742301


####urllib3ユーザガイド####
URL:http://urllib3.readthedocs.io/en/latest/user-guide.html
Mac上でPySparkのテスト環境を整える

# 動機
Sparkの環境はAzureのHDinsightを使っていたが、お金がかかって仕方ないのでローカル環境に作ることにした。
↓の本の付録通りやっていけばできるのだが、いくつかハマったのでメモ。
https://www.oreilly.co.jp/books/9784873118185/

# 動作環境

- macOS High Sierra
- java version "1.8.0_171"
    - java7とかだとエラーが出るので要注意だ！
- Python3.5
    - Python3.6とかだとエラーが出るので要注意だ！
- Spark2.1.0
- sbt最新版
    - 必須ではないがScalaで書きたくなったときに必要だ！

# Java8のインストール 
ここだ！
https://www.java.com/ja/download/

# Python3.5のインストール
macユーザーだと最初から3.6がインストールされていると思うがこれだとnumpyがナンタラカンタラとエラーが出るぞ！
python3.5を準備しよう！作戦としてはanacondaでpython3.5の環境を作る。

##anacondaのインストール
こっからダウンロードだ！
https://www.anaconda.com/download/#macos
##python3.5の環境作成
このコマンドを打て！
```conda create -n py35 python=3.5 anaconda```
するとここにpython3.5の環境ができあがるぞ！
```$HOME/anaconda3/envs/py35/bin/python```

#sbtのインストール
参考：
https://www.scala-sbt.org/1.0/docs/ja/Installing-sbt-on-Mac.html
このコマンドを打て！
`brew install sbt@1`
brewは予めインストールしておけ！

# sparkのインストール
ここでコンパイル済みのSpark2.1を選択してダウンロードして解凍だ！
https://spark.apache.org/downloads.html
ここでは`$HOME/spark-2.1.0-bin-hadoop2.7`に解凍したとしよう！

#PATHを通せ！
vi ~/.bash_profile
に以下を書き込む
1行目はSparkを解凍した場所
2行目はPython3.5の環境のpythonコマンドの場所
3行目はjupyterノートのコマンドの場所
4行目はよくわからんが`PYSPARK_DRIVER_PYTHON_OPTSは、Jupyterに対してnotebookパラメータをJupyterに渡し、それをpysparkの新しいインスタンスにリンクさせるためのものです。` 入門PySaprk p.252　だそうです。
 
```
export PATH=$PATH:$HOME/spark-2.1.0-bin-hadoop2.7/bin
export PYSPARK_PYTHON=$HOME/anaconda3/envs/py35/bin/python
export PYSPARK_DRIVER_PYTHON=$HOME/anaconda3/envs/py35/bin/jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook' pyspark
```

これで`pyspark`とコマンドを打つとjupyternotebookでSparkの作業ができるぞ！


＃疲れた
marked.jsを使ってリアルタイムにマークダウン変換したら、改行が反映されなかった

# やりたかったこと

railsを使い、テキストエリアに文字を入力するとリアルタイムでマークダウンに変換。
ちょうどqiita投稿画面のようなイメージです。

![markdown2.PNG](https://qiita-image-store.s3.amazonaws.com/0/199678/4369ac2b-c7e0-8caa-6487-da0cec9b7a5a.png)

# 導入手順

以下記事を参考に、railsでqiita-markdownというgemを導入。

参考：[5分でRailsアプリにマークダウンとプレビューを実装。](https://qiita.com/k_s/items/40ac2c6b24d56bb667dc)

結構簡単に導入できて、「おっ、これ便利で良いな」と思ったのも束の間。

![markdown1.PNG](https://qiita-image-store.s3.amazonaws.com/0/199678/1ff12994-306b-6aac-fd00-b861b62c2dfe.png)

改行がうまく反映されないのです…（上記「bcd」部分）

# 解決法

marked.jsの改行オプションが、デフォルトでfalseになっているだけでした…


```javascript

<script type="text/javascript">
marked.setOptions({breaks : true});
...
</script>
```

なんかいろいろ調べても解決法が見つからなかったので、同じことで詰まりそうな人がいそうだなと思った為記事投稿。
使うライブラリのドキュメントはしっかり読みましょうということですねぇ
python エラー処理

For文内のエラーの種類を同定するのにググっても、知識がなさすぎてあまりしっくりくるものがないため、メモ。いい情報を見つけたら適宜追加する。


Exception クラスを使うより　sysを使用した方が、エラー内容までわかるため便利？

```py

except Exception as e:
            print(e.args, e.with_traceback)     

```

```py

except:
            print(sys.exc_info())
           
```

https://stackoverflow.com/questions/18982610/difference-between-except-and-except-exception-as-e-in-python
ViewControllerの3DTouch、Peek&Popを導入


ViewControllerの3DTouch画面遷移、Peek&Popの実装について。
下記サンプルを作成。

## 開発環境

Mac OS High Sierra 10.13.3 
Xcode 9.3 
Swift 4

## 作ったもの

- MainVC -> SecondVCへの画面遷移する「次へ」ボタンについて、Peek&Popを導入

![Peek&Popサンプル実装_改.gif](https://qiita-image-store.s3.amazonaws.com/0/136401/48ea8495-f854-6643-6a92-4e7288e5fcdf.gif)

## 事前準備：MainVC -> SecondVC への画面遷移

### MainVC.swift

```swift
class MainVC: UIViewController {

    @IBOutlet weak var nextButton: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func nextButtonAction(_ sender: Any) {
        transitionToSecondVC()
    }

    func transitionToSecondVC() {
        self.performSegue(withIdentifier: "toSecondVC", sender: nil)
    }
```

### SecondVC.swift

```swift
class SecondVC: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func CloseButtonAction(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }
}
```

### Main.storyboard

注意ポイント：

- MainVC -> SecondVC間を紐付け、identifierを設定
- SecondVCのStoryboard Identifierを設定

<img width="989" alt="storyboard.png" src="https://qiita-image-store.s3.amazonaws.com/0/136401/d17f421a-01ad-3e77-dcd0-92a80299218a.png">

## Peek&Pop設定

### MainVC.swift

- `registerForPreviewing` でPeek&Popを有効化する
- `UIViewControllerPreviewingDelegate` を継承し、2つの `previewingContext` を定義

```swift
class MainVC: UIViewController, UIViewControllerPreviewingDelegate {

    override func viewDidLoad() {
	    ...
        // 3DTouch対応端末かどうか判定して、Peek&Popを有効化
        if self.traitCollection.forceTouchCapability == UIForceTouchCapability.available {
            self.registerForPreviewing(with: self, sourceView: self.view)
        }
    }

    // Peek時アクション
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        // 押下している範囲がボタン内かどうか判定
        let point: CGPoint = nextButton.convert(location, from: self.view)
        guard point.x > 0, point.x < nextButton.bounds.width, point.y > 0, point.y < nextButton.bounds.height else {
            return nil
        }

        let storyBoard = UIStoryboard(name: "Main", bundle: nil)
        let secondVC = storyBoard.instantiateViewController(withIdentifier: "SecondVC")
        return secondVC
    }

    // Pop時アクション
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
        transitionToSecondVC()
    }
}
```

### SecondVC.swift

- peek時のアクションボタンを設定（peekして上にスワイプした際に表示されるボタン）

```swift
class SecondVC: UIViewController {

    // peek時のアクションボタン設定
    override var previewActionItems: [UIPreviewActionItem] {
        get {
            let backAction = UIPreviewAction(title: "戻る", style: .default) { _, _ in
                self.dismiss(animated: true, completion: nil)
            }
            return [backAction]
        }
    }
}
```

### 注意点

- peek時のアクションボタン設定について、遷移前じゃなくて遷移後のViewControllerに設定しないと。

## まとめ

`previewActionItems` の設定が、以前は、

```swift
override func previewActionItems() -> [UIPreviewActionItem] {}
```

という形式だったので注意が必要そうです。
別シェル(bash)で履歴を共有

#~/.bashrcに以下スクリプト追加

```bash
 # セッションクローズ時の.bash_historyへの書き込みをoff
 shopt -u histappend
 # .bash_historyとメモリ上のコピーを頻繁に同期
 share_history(){
   history -a
   history -c
   history -r
 }
 PROMPT_COMMAND='share_history'
```
###・historyオプション
 -a : bashのセッションが開始されてから現在までに入力されたコマンド行を履歴ファイルに追加する
 -c : コマンドの実行履歴を消去する
 -r : 指定された履歴ファイルを読み出し，現在の履歴と置き換える

###・PROMPT_COMMAND
 関数やコマンドがセットされていると、Bash でプロンプトを表示する直前に、毎回それが実行される。
 
引用元：[まんがでわかるLinux シス管系女子](https://www.amazon.co.jp/%E3%81%BE%E3%82%93%E3%81%8C%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8BLinux-%E3%82%B7%E3%82%B9%E7%AE%A1%E7%B3%BB%E5%A5%B3%E5%AD%90-%E6%97%A5%E7%B5%8CBP%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%83%99%E3%82%B9%E3%83%88%E3%83%A0%E3%83%83%E3%82%AF-Piro-%E7%B5%90%E5%9F%8E%E6%B4%8B%E5%BF%97/dp/4822224961/ref=pd_sim_14_2?_encoding=UTF8&pd_rd_i=4822224961&pd_rd_r=017df8c4-5101-11e8-907c-4fb889242257&pd_rd_w=mb9OB&pd_rd_wg=MJmBV&pf_rd_i=desktop-dp-sims&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=7990452376513976631&pf_rd_r=1NKF66M4FKJS3JKRKVZJ&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=0J0Y75PZ8361JXHBGS4B)
引用元：http://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230795/
Mac で Ubuntu 18.04 のインストールUSBメモリスティックの作成


macOS High Sierra で Ubuntu 18.04 LTS Server のインストール USB メモリスティックを作成した際のメモ

# 参考
- [Mac OSX上でISOイメージからBootable USBを作成する](http://hal0taso.hateblo.jp/entry/2016/09/08/190140)
- [MacでUbuntuのインストールUSBディスクを作成する](https://qiita.com/kpkpkp/items/6664a1dba97198b984ec) 
- [MacでUbuntu 16.04ブータブルUSBの作成](http://blog-sk.com/mac/ubuntu_bootusb/)

# 手順
1. https://www.ubuntu.com/download/server から ubuntu-18.04-live-server-amd64.iso を `~/Downloads` にダウンロード

1. USB メモリスティックを接続後、デバイスパスを確認

    ```
  $  diskutil list
    ```

1. USB メモリスティックをアンマウント（N はデバイスパス番号）   

    ```
  $  diskutil unMountDisk /dev/diskN
    ```

1. dd コマンドでインストールUSBの作成（N はデバイスパス番号）
 
     ```
  $  cd ~/Downloads
  $  sudo dd if=ubuntu-18.04-live-server-amd64.iso of=/dev/rdiskN bs=1m
     ```

1. USB メモリスティックの取り外し（N はデバイスパス番号）

    ```
  $  diskutil eject /dev/diskN
    ```
初心者が機械学習で競艇予想に挑戦してみた



# 経緯、ゴール、スタート時の知識

## 経緯
- 新しいことに挑戦してみたくなった。
- よく聞くし、それらを利用したサービスも沢山あるようだが、そもそもの原理を知りたくなった。
- ロト、ナンバーズ、競馬、競艇に応用して一発当てたかった
- むしゃくしゃしてやった

## 挑戦のゴール
 - 原理を理解する
 - ~~ロト、ナンバーズ、競馬、競艇に応用して一発当てる~~
 - 「競艇3連複2点買いで50％以上の確率で当てるモデルの作成」


## スタート時の知識
| 項目 | 程度 |
|:-----|-----|
|英語 |数年前にTOEIC600とったくらい|
|数学|理系の工学部の大学1,2年の数学くらいの知識（マクローリン展開とか）|
|経験のある言語|HTML, PHP, JavaScript, bash|
|データ分析の経験|大学の実験のみ。（Excelで近似式を出す程度）|
|データ分析の認識|「なんか専用のソフトがあって、それを使えるようになればOKなんでしょ？」、「パソコンのスペック高くないと出来なさそう」|

# 挑戦記
## 一日目 学習内容
### qiitaでデータ分析、機械学習、ディープラーニングに関する初心者向けの記事を読む
- https://qiita.com/taki_tflare/items/42a40119d3d8e622edd2
- https://qiita.com/daxanya1/items/218f2e3b922142550ef9
- https://qiita.com/hi-ro-to/items/bae866695dfdd4a4b5b5
- https://qiita.com/wingsys/items/191b6ede891301c0bfe7
- https://qiita.com/icoxfog417/items/242439ecd1a477ece312

### 競艇や競馬の事例を調べた
- https://alphaimpact.jp/2017/02/02/horse-table/
- https://python-8.blogspot.jp/2017/10/python.html
- https://qiita.com/uo_ta/items/57e55565a93f7557cbb4
- https://qiita.com/cb400sp2/items/92d4f2699248fc479138


### 理解したこと
- couseraが良いらしい。
- 目的を決めることが大事
- 全部の手法を理解しようと思うな

### 所感
- 事例は多分にあるので、参考にすればなんとかできそう。
- ゴールを決めることが大事なので、今回のゴールは「競艇2点買いで3連複を50％以上の確率で当てるモデルの作成」とする。
- 色々な手法があるため、どのようにモデルを作るかによって精度が大きく変わってくるようだ。複数のモデルを設定し、どれが一番良さそうかを考える必要もある。
- どの値を使用するかでも結果が変わってくるようだ。
- 結構、地味な作業が多そう

---

##　二日目　学習内容
### Couseraで学習してみた
- https://www.coursera.org/learn/machine-learning/lecture/1VkCb/supervised-learning

機械学習に「教師あり学習」と「教師無し学習」があることは理解した。
ただ、全体的に話についていけてないので、頭がボーっとしてしまった。早くもドロップアウト。

### qiitaに助けを求めた。
- https://qiita.com/katsu1110/items/fac314996f34540da260

### 所感
Couseraの内容を先人が分かりやすくまとめたものを見つけた。ということで、しばらくこれを見て学習することにする。

---

## 三日目　学習内容
### Azure Machine Learningについて学ぶ
だんだん、勉強が面倒くさく感じ始めた。
過去の事例　https://qiita.com/cb400sp2/items/92d4f2699248fc479138
があるので、「機械学習というより、Azure Machine Learningについて学べば良さそうだよね？」
と思い始めた。
- https://qiita.com/icoxfog417/items/f32f89a0d5145d9861bc
- http://pronama.azurewebsites.net/2015/03/16/azure-machine-learning/
- https://docs.microsoft.com/ja-jp/azure/machine-learning/studio/algorithm-cheat-sheet
- 

### 所感
- Microsoft Azure Machine Learning Studio の機械学習アルゴリズム チート シートが良さげ

---
## 四日目　学習内容
### 予想ブログを見つける
たまたま見つけたブログ　http://2tengai.blog.fc2.com/
独自の計算された指数に基づいて予想をしている。
なお予想結果を見ると、結構当たっているようである。
また、この予想方法だとレースの後半８R以降の的中率が良いようである。

似たようなデザインのブログもあった。http://jiku1.blog.fc2.com/blog-entry-1150.html
こちらでは軸となる選手を予想している。
結果を見たが、とにかく固いレースを当てることに特化しているようだ。

### オッズのゆがみ
レースによっては2連単よりも2連複のほうがオッズが高いケースもある。
競馬でも2連単の裏表よりも2連複が高いことは、たまにある。

### バルサラの破産確率表
FX界隈では知られている、収益と勝率の表の存在を知った。
- http://toushi-kyokasho.com/the-rate-of-bankrupt-of-bulsara/

回収率を上げるうえで参考になりそうだ。

### 所感
- 後半のレースに絞る作戦も良いかもしれない。
- 舟券の種類によってオッズにゆがみが発生しうる。常に同じ種類の舟券を買うのではなく、状況に応じて切り替えるべきなのかもしれない。
- バルサラの破産確率表が役に立ちそう




～～～　引き続き、勉強次第追記していきます　～～～
LaravelアプリのためのWindowsでの開発用のバッチファイル紹介

最近、Laravelの勉強を始めまして、開発用のエクスプローラーやコマンドプロンプトや簡易サーバーを用意するのに便利なバッチプログラムを作りました。
Laravelのアプリケーションを"D:\LaravelApp"に展開しているとして、以下のバッチファイルを起動します。

```DOS Batch:LaravelApp.bat
d:
cd \LaravelApp
explorer .
start cmd /k cd d:\LaravelApp
cmd /k php artisan serve
```
簡易サーバーのサーバ名やポートの設定を必要に応じて設定してみて、よかったら活用してみて下さい。
Pandoc MarkdownでYAMLヘッダにテンプレートを指定したい話

## 何のためにPandocを使っているか
レポートを書くために使っている．(Markdown->LaTeX->PDF)
レポートによってテンプレートが違うが，切り替えるのが引数だし，いつも引数を指定するとか面倒くさい．
Makefile作るのもなんか違うし，どうせならYAMLヘッダにそういうの書きたいよね？みたいな話．

## Pandoc Markdown のテンプレートの話
[引数で指定できたり，テンプレートディレクトリがある](https://qiita.com/sky_y/items/3736faa6c9dca1f554be)のは知っているが，そういうことではない．
独自のhashを指定して，Markdownを読み込ませた時に上のヘッダをパースして，引数を構築して渡してあげるだけのシェルスクリプトを書いただけの話である．

## シェルスクリプトでYAMLパース
[bash-yaml](https://github.com/jasperes/bash-yaml)という便利なシェルスクリプトがあったので利用した．

## どんな感じのツールになったか？
[atpons/pdmk](https://github.com/atpons/pdmk)で公開している．

homebrewで入れたい場合は，以下のようにしてインストールする．


### 使い方
```bash
$ brew tap atpons/pdmk
$ brew install pdmk
```

文書として以下のようなファイルがあるとする．

```markdown:file.md
---
_pdmk_template: template.tex　# 喰わせたいテンプレートファイルの名前．保存場所は以下に示す
_pdmk_output: pdf # 出力ファイル拡張子
_pdmk_arg: "--latex-engine=lualatex --toc" #その他のオプション
title: hogehoge # 以下はテンプレート準拠のヘッダでOK
---

ここに文章
```
pdmkに喰わせるときは以下のように入力する．

```bash
$ pdmk file.md
```
すると，`file.pdf`が同じ場所に落ちてくる．

`_pdmk_template`に入力されたファイルがドキュメントルートと同じ場所にあった場合はそのファイルをテンプレートとしてPandocに渡す．

もし存在しない場合は `~/.pdmk/template` 内にある同名ファイルをテンプレートとして渡す．

このようにすることで，テンプレートファイルの管理がしやすくなると考えた．

### 共通テンプレートディレクトリを使う
```
~/.pdmk
└── template
    └── template.tex
```

### テンプレートとドキュメントと一緒に管理したい時
(あまり使わない，というか標準でもこれなら出来ないこともないはず)

```
mydocument
├── document.md
└── template.tex
```

## どう使っていくか
テンプレートディレクトリにはテンプレートをガンガン保存していき，ドキュメントの作成時に3つのhashを書く．
あとはコマンドを打つだけで，ストレスフリーなレポート書き環境を実現できる．

完全に自分向けであるが，やりたいことが出来たのでよしとする．


# あとがき
https://github.com/jgm/pandoc/issues/4627
https://github.com/msprev/panzer
https://github.com/htdebeer/pandocomatic

これぞ車輪の再発明，でした・・・
Railsの学習メモ　～bootstrapの導入

アプリケーションのデザインにbootstrapを利用させてもらう。

##bootstrapの導入
Gemfileにgemを追記

```ruby:Gemfile
gem 'bootstrap-sass'
```

インストール

    $ bundle install

続いて　application.scss　にbootstrapを利用するための記述を追記

```ruby:app/assets/stylesheets/application.scss
@import "bootstrap-sprockets";
@import "bootstrap";
```
　aplication.js　に下記を追記

```ruby:app/assets/javascripts/application.js
//= require bootstrap-sprockets
```

これでbootstrapの導入はできたはず。
[Heroku CLI ] install時に「rm /usr/local/bin/heroku」が失敗する場合の対処法

# 実施事項
[heroku公式サイト](https://devcenter.heroku.com/articles/heroku-cli#standalone)の記載通り、以下コマンドにてheroku CLIをインストールしようとしたら、エラーでインストール出来ませんでした。

```bash
curl https://cli-assets.heroku.com/install-standalone.sh | sh
```

# error内容
/usr/local/bin/herokuのrmに失敗している模様

```sh
+ rm /usr/local/bin/heroku
rm: cannot remove `/usr/local/bin/heroku': No such file or directory
```

# 対処法
/usr/local/bin/herokuを作成し、再実行したらインストール出来ました。

```bash
[root@myServer lib]# cd /usr/local/bin/
[root@myServer bin]# ls
ajaxterm
[root@myServer bin]# touch heroku
[root@myServer bin]# curl https://cli-assets.heroku.com/install-standalone.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
103  1349  103  1349    0     0   6763      0 --:--:-- --:--:-- --:--:--  439k
+ [[ ! :/usr/local/rbenv/shims:/usr/local/rbenv/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin: == *\:\/\u\s\r\/\l\o\c\a\l\/\b\i\n\:* ]]
++ uname
+ '[' Linux == Darwin ']'
+++ uname -s
++ expr substr Linux 1 5
+ '[' Linux == Linux ']'
+ OS=linux
++ uname -m
+ ARCH=x86_64
+ '[' x86_64 == x86_64 ']'
+ ARCH=x64
+ mkdir -p /usr/local/lib
+ cd /usr/local/lib
+ rm -rf heroku
+ rm -rf /root/.local/share/heroku/client
+ tar xz
+ curl https://cli-assets.heroku.com/heroku-linux-x64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20.6M  100 20.6M    0     0  3419k      0  0:00:06  0:00:06 --:--:-- 3071k
+ rm /usr/local/bin/heroku
+ ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
heroku installed to /usr/local/bin/heroku
heroku/7.0.26 linux-x64 node-v10.0.0
[root@myServer bin]# which heroku
/usr/local/bin/heroku
[root@myServer bin]#
Windowsアプリ開発者がDocker触ってみる Webサーバーを動かしてみる

[Hello World](https://qiita.com/misuzoo/items/32592e2d4b0739c4ca7b)の続きです。

[こちらの本](https://www.amazon.co.jp/プログラマのためのDocker教科書-インフラの基礎知識%EF%BC%86コードによる環境構築の自動化-WINGSプロジェクト阿佐志保-ebook/dp/B017UGA7NG)の「Chap3.2Webサーバを動かしてみよう」を実践してみた時のメモです。

# WebサーバNginxの環境を構築
オープンソースのWebサーバであるNginxの環境を構築し、Dockerを使ってWebサーバを動かしてみる。

1.Dockerイメージをダウンロード
Docker Hubでイメージが公開されている。
https://hub.docker.com/_/nginx/

`sudo docker pull nginx`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/49c99711-bdd5-40df-0046-395249e95535.png)

2.ダウンロードしたイメージの確認

`sudo docker image ls`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/2fabdcb5-fba7-d5a7-43c3-deed06b438da.png)

3.Nginxを動かしてみる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/0d266e52-a5e9-869b-0c15-65895988ab2a.png)

4.Nginxの動作確認

Azure仮想マシンにhttpでアクセスするための設定を実施。設定はこちらの[CoreOSの仮想マシンにエンドポイントを追加](http://www.atmarkit.co.jp/ait/articles/1504/13/news020_2.html)を参考にしました。

ソースポート範囲は「*」に設定する必要あり。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/ac41f5f8-396f-6724-e6e5-4e8c84ca3625.png)

`http://VMのパブリックIP:80/でアクセス`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/400dd18c-170f-d4ec-989b-fc68af554e3b.png)

Nginxのサーバーの状態確認
`docker container ps `

コンテナの稼働確認

`docker container stats webserver `

5．起動/停止

コンテナの停止

`sudo docker stop webserver `

コンテナの起動

`sudo docker start webserver `
Windowsアプリ開発者がDocker触ってみる 「Hello world」

用語は聞いたことはあるが、実際に触ってみたことはないDockerを触ってみることにしました。
GWの宿題の1つです。

こちらの[プログラマのためのDocker教科書](https://www.amazon.co.jp/プログラマのためのDocker教科書-インフラの基礎知識%EF%BC%86コードによる環境構築の自動化-WINGSプロジェクト阿佐志保-ebook/dp/B017UGA7NG)を読んで勉強して勉強した際のメモとして記載しています。

# Dockerのインストール

## Aure仮想マシンの Windows10で環境構築
本のChap3を参考に以下を実施しようとしましたが、途中で方針を変更して、「CoreOS」を使用して試してみました。

1.AureでWindows10のVMを作成
2.1で「Hyper-V」を有効化
3.Docker for Windowsをインストール
　[こちら](https://docs.docker.com/docker-for-windows/install/)からダウンロードし、インストール
4.「Docker for Windows」のアイコンを起動してDockerを起動
　Dockerが起動しない。VM上で動かすためには、Nested Virtualizationが必要であることに気づきました。
  ⇒方針転換。

## Aure仮想マシンのCoreOSで環境構築
Azure仮想マシンを使用して入門向けの情報を探すと、以下が良さそうだったので、少し古い記事ですがこちらを参考にして試してみることにしました。
[所要時間わずか10分で「Docker」を体験しよう](www.atmarkit.co.jp/ait/articles/1504/13/news020.html)
CoreOSはDockerがインストール済みのため、Dockerのインストール作業は不要でした。

1.Aureで「CoreOS」(Statable)VMを作成
  SSHはパスワード認証で設定
2.「Putty」を使用してCoreOSにログイン
　　パスワード入力した時に、画面上には何も表示されず、入力できないとつまずいてしまいました。
　　調べてLinuxではパスワード入力時は画面表示されないことを思い出し、ログインすることができました。
3.インストールされているDockerのバージョンを以下のコマンドで確認（ここからは本のChap3も参考に）
`docker version`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/83fcb921-df15-b016-8341-15628ac026a6.png)

※sudoをつけるとServer Versionまで表示された

`sudo docker version`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/db6fe67b-a9d3-f382-79ad-b1060a142c29.png)

# Hello world

本の内容を参考に、Dockerコンテナを作成し、コンソール上に”Hello world”を表示してみました。

`docker container run Dockerイメージ名 実行コマンド`

実行コマンドの説明
1.docker container run：コンテナを作成/実行
2.Dockerイメージ名：もとになるDokerイメージ
3.実行コマンド：コンテナ内で実行するコマンド

`sudo docker container run ubuntu:latest /bin/echo 'Hello world'`

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/1e7d71f6-4c74-4a8a-cfdf-a56248e01add.png)

上記コマンドを実行すると
1.Dockerイメージがローカルにあるかを確認
2.ローカル環境にないのでDockerリポジトリからDockerイメージをダウンロード、ダウンロード完了
3.コンテナを起動して、echoコマンドが実行される
2回目以降はローカル環境にダウンロード済みのイメージをもとにコンテナを起動

![image.png](https://qiita-image-store.s3.amazonaws.com/0/232585/0288f374-3d09-b860-87d0-77c635bfa0f7.png)
ArrayListで遊ぶ

今では使われることも少ない[ArrayList](https://msdn.microsoft.com/ja-jp/library/system.collections.arraylist(v=vs.110).aspx)。何とかして使い道が無いか考えて見ました。

ArrayListは動的にサイズを増減できる配列であり、何でもぶっこめる一件便利な奴ですが、要素に追加したものは問答無用でobjectになってしまうので、要素を取り出して使う時は元の型にキャストしないといけません。値型を入れれば当然[ボックス化](https://msdn.microsoft.com/ja-jp/library/yz2be5wk(v=vs.80).aspx)も発生します。
これらの理由から今はジェネリックで型安全の[List\<T\>](https://msdn.microsoft.com/ja-jp/library/6sh2ey19(v=vs.110).aspx)にその座を奪われています。

さて、今回はその何でもぶっこめる特性を活かし、要素の型当てクイズゲームを作って見ました。
ArrayListの要素に色んな型のオブジェクトを追加して、ランダムでその中から要素を選び、その型名が何であるか当てるという内容になっています。

```c#:ArrayListGame.cs
using System;
using System.Collections;
using System.Linq;
namespace ArrayListGame
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            //適当に色んな型のオブジェクトをぶっこむ
            var list = new ArrayList();
            list.Add("");
            list.Add(0);
            list.Add(new DateTime());
            list.Add(new Exception());

            //答えとなる型をランダムで選ぶ
            Type answerType = list[new Random().Next(0, list.Count - 1 )].GetType();

            //ランダムで選んだ型のメンバから公開メソッドの名前のみを抽出、オーバーロードの重複はまとめる。
            var methods = answerType.GetMethods().Where(x => x.IsPublic).Select(x => x.Name).Distinct().ToList();

            //その中からランダムでヒントとなるメソッド名を一つ取得
            string hintMethodName = methods[new Random().Next(0, methods.Count - 1)];

            Console.WriteLine($"問題 : このオブジェクトは「{hintMethodName}」メソッドを持っています。型名は何でしょう？");

            //ヒントを参考に答えを入力
            string answer = Console.ReadLine();

            if(answerType.Name == answer)
            {
                Console.WriteLine("正解！");
            }
            else
            {
                Console.Write($"残念！答えは「{answerType.Name}」です。");
            }

        }
    }
}
```

よしやってみよう！

問題 : このオブジェクトは「ToString」メソッドを持っています。型名は何でしょう？

**ファッ！？**


ToStringはみんな持っているからこういうのに当たったら詰む（笑）
もうちょっと工夫したら学習用プログラムとかに出来る…かも？

駄文失礼しました。
Eclipseのホバーが見にくい時

自分のSTS(Eclipseを元にしたspring bootのIDE)のテーマを黒にしたらエディタのホバー（クラスとかにマウス当てると詳細出てくるやつ）がすごく見にくいのでその改善

※今回はJavaなので各言語に置き換えてください

[環境設定]→[General]→[Color and Fonts]→[Javadoc text color]を自分が設定した色以外に。
例）自分は黒にしたので白に。

無事ホバーが見えました。
【ど忘れシリーズ】tarコマンドのzxvfのおさらい

#はじめに
技術系サイトとかよくこのコマンドを～ってやつで。

```
tar zxvf xxxxxxx.tar.gz
```

をよく見かけますよね。

おまじないの如く使っていたこの**tarコマンド**ですが、

**zxvfってなんやったっけ？**

ってことがある方向けに書きたいと思います。

#tarコマンドとは
tarコマンドは複数ファイルを１つのファイルにまとめて管理するためのコマンド。
あるいは、まとめたファイルを元の複数ファイルに展開するためのコマンド。
自分も勘違いしていたのですが、もともとtarコマンドは圧縮目的ではなかったそうです。
今回**展開するのみ**に着目したいので、纏める処理についてはまた別の機会に。

#オプションのおさらい

おまじないの如く使っていたこのオプションを見てみましょう。


| オプション        |       意味                        |どういうときに必要？|覚え方|
|:-----------------|:---------------------------------|:-----------------|:---|
| z                |gzipを通して処理する                |gzファイルを取り扱うとき| **z** ipの「z」！|
| x                |書庫の中のファイルを展開する         |書庫ファイルを展開したいとき|e **x** tract（取り出すの意味）の「x」！|
| v                |処理したファイルの一覧を詳細に表示する|書庫ファイルの展開詳細を見たいとき| **v** erbose（詳細）の「v」！|
| f                |指定した書庫ファイルを使用する        |書庫ファイルを指定するので必須| **f** ileの「f」！|

#結論：ということは？
出回っている書庫ファイルはzxvfオプションで対応できるということですね。
画面が一気にスクロールされるのが嫌な場合は、vオプションを外すといいかもしれません。

```
tar zxf xxxxxxx.tar.gz
```

参考URLにはより詳細の説明があるので、さらに深く知りたい方はどうぞー。

#参考
[【 tar 】 ファイルを書庫化・展開する（拡張子.tarなど）] (http://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230896/)
migrationのrollback

#データベースを書き換えよう

複数ファイルを rake db:migrate で作った場合その1個1個に対して生成されるため、作ったDBの個数分ロールバックする必要がある。

```
$ rake db:rollback STEP=ステップ数
```

dbを書き換えたら

```
$ rake db:migrate
```
VS Code1.23の新機能 - ワークスペース内のMarkdownの見出しジャンプ

# Visual Studio Code 1.23の新機能
## ワークスペース内のMarkdownの見出しジャンプ

https://code.visualstudio.com/updates/v1_23#_markdown-workspace-symbol-search

**ワークスペース内のシンボルへ移動**コマンド(`Ctrl+T`)で、ワークスペース内のMarkdownファイルの見出しにジャンプできるようになった。

キーワードを入力して選択肢の絞り込みもできる。

![markdown_symbol.gif](https://qiita-image-store.s3.amazonaws.com/0/181011/46d76d1f-9670-c766-830c-830af4f924e1.gif)

見出しで検索がかけられるMarkdownファイルが沢山ある場合は便利そう。
マルコフ連鎖で自分のツイートっぽい文章を生成する

# 概要

人工無能とかは、マルコフ連鎖で文章を作っているらしい。

マルコフ連鎖による文書作成の原理については、この[ブログエントリ](http://blog.sushi.money/entry/20081031/1225437515)がとても参考になった。

そして[マルコフ連鎖を使って自分らしい文章をツイートする](https://qiita.com/hitsumabushi845/items/647f8bbe8d399f76825c)というエントリと基本的に同じことをやってみた。

違いは次のとおり。

1. 自動的にツイートさせることには興味なかったので、文章を生成するだけにした。
2. 上記のエントリでは、https://github.com/o-tomox/TextGenerator という外部ライブラリを使用しているのだが、データベース処理等、マルコフ連鎖の本質とは関係ない処理が多く含まれているので、アルゴリズムは変えずに自分なりに書きなおしてみた。

# 実装

今回作ったコードはこちら↓
https://github.com/elm200/markov-text-generator
１００行ちょっとの短いコードである。

私のツイートはこちら↓
https://twitter.com/elm200

そして私のツイート情報を元にして生成された文章の一例がこちら。

```
話し合いしようとする。
ようこそニートの海外体験について私も信じている。
現代人なら何の哲学的伝統も昔は日本ならではのノウハウが要る大都市がなくなることで面倒事が起きれば、。
東大卒でもないが、ここはやはりキリスト教思想に基づく政治制度でさえ、もし本当に問題を歯に衣を着せないに兆ジンバブエドル。
日本で嫌になるだけじゃないか笑。
さすがにきちんと対策を考えるべきでしょう。
ある程度、自然エネルギーすべてに及びます。
スマホに特に問題を抱えている模様…。
原始的すぎて、思わず肩が凝る。
彼らも日本生まれ日本育ちなので、やるしかないのよ私たちはすぐわかりますけど…。
また当然。
もう世紀だ。
最近、外国人従業員が歯を食いしばって頑張っているからね。
トポロジー的に変えようとしたら、日本人受けしそうだし。
本当にベトナムの大学で中国語をやるなんて、空しい幻想だ、と。
さまよえるジェンダー研究家ソーシャルメディアの魔術師さんが安そう。
賞味期限切れって感じです。
私に郵便物でもベトナムで一番落ち着くのだろうな。
日本が衰退する気がしますのでご連絡ください。
彼女は、異次元緩和…。
```

すごく単純なアルゴリズムで作られているのに、文法的にもだいたい正しく、かついかにも私がつぶやきそうな内容になっているのは面白い。
react16 x bootstrap with material design がよさげ

- [github](https://github.com/mdbootstrap/React-Bootstrap-with-Material-Design)
- [demo](https://mdbootstrap.com/react/components/)


## 特徴

react v16対応
MIT

## どんなコンポーネントがあるか

github からcloneして

```
$ yarn install
$ yarn start
```

ただ、おそらくエントリポイントになるindex.htmlがないと
怒られるはずなので設置してあげたらひとまず動きました

```public/index.html
<!doctype html>
<html lang="en">
  <head>
    <!-- The first thing in any HTML file should be the charset -->
    <meta charset="utf-8">

    <!-- Make the page mobile compatible -->
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="icon" href="/favicon.ico" />
    <title>MDB</title>
  </head>
  <body>
    <!-- Display a message if JS has been disabled on the browser. -->
    <noscript>If you're seeing this message, that means <strong>JavaScript has been disabled on your browser</strong>, please <strong>enable JS</strong> to make this app work.</noscript>

    <!-- The app hooks into this div -->
    <div id="root"></div>
    <!-- A lot of magic happens in this file. HtmlWebpackPlugin automatically includes all assets (e.g. bundle.js, main.css) with the correct HTML tags, which is why they are missing in this HTML file. Don't add any assets here! (Check out the webpack config files in config/webpack for details) -->
  </body>
</html>
```

こんなページが立ち上がるであとはコンポーネントいじってみたりされるとよいかと思います。
私が試したのはv4.3.0です

![スクリーンショット 2018-05-06 14.18.03.png](https://qiita-image-store.s3.amazonaws.com/0/47896/8d4f8870-8188-4035-8f18-ddbca5cc116c.png)

reactのUIはmaterial-ui一択とかなのかなぁと思ってたらイケてるものもあるんですね
これ使って何がダメだったかもフィードバックできればと思います
スクリプトの存在するディレクトリーの絶対パスを取得する

# Python2〜3.3
```
import os

print os.path.dirname(os.path.abspath(__file__))
```
[元ネタ](https://qiita.com/nagamee/items/b7d1b02074293fdfdfff)

# Python 3.4 以降
```
from pathlib import Path
print(Path(__file__).resolve().parent)
```

# Ruby
```
p __dir__
```
[元ネタ](https://qiita.com/siman/items/865096c192194b4d4143)

# shell
```
#!/bin/sh

(cd `dirname $0`; pwd)
```
# Perl
```
#!/usr/bin/env perl

use strict;
use warnings;

use FindBin;
print "$FindBin::Bin\n"
```
[元ネタ](http://d.hatena.ne.jp/perlcodesample/20080422/1208964445)
XCode 9.3 (9E145) で、古いversionのreact-nativeプロジェクトのビルドが失敗する

## 起きたこと
iPhoneのosをversionあげてたので、xcode9.2でのビルドもできなくなり、xcodeも9.3にバージョンアップした、、
取り急ぎその時開発中のプロジェクト(RN0.52)は問題なかったが他のRN0.48のプロジェクトのビルドが通らなくなった。。

## 概要の箇所
※ 複数箇所あるので抜粋

`RCTLogWarn(@"Native TextInput(%@) is %zd events ahead of JS - try to make your JS faster.", self.text, eventLag);`

underlying type 'NSInteger' should not be used as format arguments; add an explicit cast to 'long' instead


## 回避策
https://github.com/facebook/react-native/issues/18638

`RCTLogWarn(@"Native TextInput(%@) is %ld events ahead of JS - try to make your JS faster.", self.text, (long)eventLag);`
エラーに出てるようにlongに直していくとビルドできるようになる。

 XCode のquick fix tool (エラーになっている部分の赤い丸ぽちを押す）でも治る

## 回避策2
もし余裕があればRNのversionあげて回避するのがいいかも。
工数かけられればですが。。

## 感想
xcodeのバージョンアップ辛い。。
SQL 学習の進め方 (身内向け)

## 目的
- データベースの作成, 削除ができるようになる。
- 作成したデータベースにアクセス可能なユーザーの作成, 削除ができるようになる。
- テーブルの作成, 削除ができるようになる。
- 作成したテーブルに対し, データの挿入, 更新, 削除, 参照ができるようになる。
   - いわゆる DML 文: INSERT, UPDATE, DELETE, SELECT

**なお, 資格の取得は目的としない。**

## 書籍
- [ORACLE MASTER Bronze SQL基礎](https://www.amazon.co.jp/dp/4756147038)
- [現場で使える MySQL](https://www.amazon.co.jp/dp/4798111139)

## 進め方
1. 上記書籍に一通り目を通す。
   - MySQL は「導入編」から「開発編」まで。
   - 「DBA 編」以降は不要。

1. [CentOS 7 チュートリアル](http://centos7-tutorial.readthedocs.io/ja/latest/) を参考に, MariaDB (MySQL 互換) を CentOS 7 にインストールする。
   - CentOS 7: LAMP セットアップ手順
      - 「パッケージインストール」から「MariaDB」まで。
      - 「Apache HTTP Server」以降は不要。

1. Oracle と MariaDB (MySQL) の文法の違いに気を付けつつ, 実際にテーブルを作成したり, データを挿入したりして, 感覚を掴む。

以上。
contextパッケージを使用して値の受け渡しを行う際のkey指定

`context`パッケージを使用して値の受け渡しを行う際のkey指定
===

`context.WithValue()`の第二引数`key`にstring型を指定した場合、
golintによって警告される。

警告内容は`should not use basic type string as key in context.WithValue`
というものである。

また、定義部分のコメント行にも以下の記載がある。

```go
// The provided key must be comparable and should not be of type
// string or any other built-in type to avoid collisions between
// packages using context. Users of WithValue should define their own
// types for keys. ...
```

上記によるとパッケージ間での衝突を避けるため、`key`に対しては独自の型を
定義するべし、とのこと。[^2]

[^2]: こちらで詳しく説明されていた。勉強になります。[Golangのcontext.Valueの使い方 | SOTA](https://deeeet.com/writing/2017/02/23/go-context-value/)

解消方法については以下のようにすればよさそう。

```go
type key int

const (
	stringKey key = iota
)
```

上記のように宣言した上で、引数には`stringKey`を指定してやれば良い。

`context`パッケージのソース内に例があった[^1]ため、そちらをメモとして
載せておく。

[^1]: [go/context.go at go1.10.2 · golang/go](https://github.com/golang/go/blob/go1.10.2/src/context/context.go#L120)

```go
// User is the type of value stored in the Contexts.
type User struct {...}

type key int

var userKey key

// NewContext returns a new Context that carries value u.
func NewContext(ctx context.Context, u *User) context.Context {
	return context.WithValue(ctx, userKey, u)
}

// FromContext returns the User value stored in ctx, if any.
func FromContext(ctx context.Context) (*User, bool) {
	u, ok := ctx.Value(userKey).(*User)
	return u, ok
}
```

#### 参考記事

- [Fix “should not use basic type string as key in context.WithValue” golint](https://stackoverflow.com/questions/40891345/fix-should-not-use-basic-type-string-as-key-in-context-withvalue-golint)
- [Go Concurrency Patterns: Context](https://blog.golang.org/context#TOC_3.2.)
AWS EC2でオートスケール時にファイルをS3へ退避させる

# OSのシャットダウン処理を追加します。
#####ここではログディレクトリの圧縮ファイルをS3へ転送します

##1.インスタンス起動時に以下のシェルを実行する
#####転送先のS3パスと退避させたいローカルディレクトリを指定して下さい
```shell:sample.sh
cat << 'EOW' >/etc/init.d/instance-lifecycle
#!/bin/bash
# chkconfig: 2345 99 1
# description: インスタンス縮退時にログをS3に退避させる

S3_PATH='' #転送先のS3パス
DIR_NAME='' #退避させたいローカルディレクトリ
TIMESTAMP=`date +"%Y%m%d%H%M%S"`
INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id/`
COMPRESS_FILE_NAME="terminate_${INSTANCE_ID}_${TIMESTAMP}.tar.gz"

case "$1" in
  start)
    touch /var/lock/subsys/instance-lifecycle
    ;;
  stop)
    cd /home/ec2-user
    tar -zcvf ${COMPRESS_FILE_NAME} ${DIR_NAME}
    aws s3 cp ${COMPRESS_FILE_NAME} ${S3_PATH}
    rm -f /var/lock/subsys/instance-lifecycle
    ;;
  *) break ;;
esac
EOW
```
##2.以下のコマンドでserviceに登録します
```
chmod 700 /etc/init.d/instance-lifecycle
chkconfig --add instance-lifecycle
chkconfig instance-lifecycle on
service instance-lifecycle start
```

#####参考
https://qiita.com/pinekta/items/a17b14e47ce3c737d85f
Ext JS Application Development Blueprints 第3章ノート

『Ext JS Application Development Blueprints』第3章の読書ノートをメモっとく。[Ext JS Application Development Blueprints 第2章ノート](https://qiita.com/takuya0301/items/667e9bc84b3cc3acd8ce)の続き。

# ノート

第3章のトピックはコード構造化・プロジェクト構造・シングルトン・継承・ミックスイン・プラグインだ。プロジェクトに含まれるディレクトリや設定ファイルなどの説明もありつつ、コードを構造化するための機能であるシングルトン・継承・ミックスイン・プラグインをサンプルコードと共に説明している。ミックスインやプラグインの存在を知らなかった人もいるかもしれないので、ここで理解を深めておくと実装の幅が広がる。

# サンプルコード

サンプルコードを Sencha Fiddle で実装してみた。

# CultivateCode

![cultivate-code.png](https://qiita-image-store.s3.amazonaws.com/0/67627/b8b3167a-91e3-e81d-62ff-6a560e1d7de2.png)

プラグインとミックスインのサンプルコードで Ext JS 5.0.1 で動作する。

https://fiddle.sencha.com/#fiddle/2g9i

このサンプルコードを Ext JS 6.2.0 で動作するように修正してみた。最近の Ext JS の書き方になるような修正も追加している。

https://fiddle.sencha.com/#fiddle/2g9j

# 参考文献

Ext JS Application Development Blueprints
さまざまなif文

#【C・C++・C♯・Java・PHP】
if(条件式１){
　　条件式１が真
} else if(条件式２){
　　条件式１が偽、条件式２が真
} else {
　　すべて偽
}

#【Ruby】
if 条件式１ then
　　条件式１が真
elsif 条件式２ then
　　条件式２が真
else
　　すべて偽
end

#【Python】
if 条件式１:
　　条件式１が真
elif 条件式２:
　　条件式１が偽、条件式２が真
else:
　　すべて偽

#【Perl】
if (条件式１) {
　　条件式１が真
}elsif (条件式２) {
　　条件式１が偽、条件式２が真
} else {
　　すべて偽
}

#【jQuery】
if(条件式１){
　　条件式１が真
} else if(条件式２){
　　条件式２が真
} else {
　　すべて偽
}

#【BASIC】
IF 条件式 THEN 真 ELSE 偽

#【VBA】
If 条件式１Then
　　条件式１が真
If 条件式２Then
　　条件式２が真
Else
　　条件式２が偽
End If
　　条件式１が真
Else
　　条件式１が偽
End If

#【COBOL】
IF 条件１THEN
　　条件１が真
ELSE IF 条件２ THEN
　　条件２が真
ELSE
　　すべて偽
END-IF
END-IF
END-IF.

#【FORTRAN】
if (条件1) then
　　条件1が真
else if (条件2) then
　　条件1が偽、条件2が真
else if (条件n) then
　　条件1から条件n-1が偽、条件nが真
else
　　すべて偽
end if

#【Kotlin】
if(条件式）
　　真
else
　　偽

#【swift】
if ( 条件式１ ) {
　　条件式１が真
} else if ( 条件式２ ) {
　　条件式１が偽、条件式２が真
} else {
　　すべて偽
}

#【Excel】
if ( 論理式 １[ 真 ], if ( 論理式２ [ 真 ],  [ 偽 ]))

#【SQL】
CASE
　　WHEN 条件式='1' THEN '真'
　　WHEN 条件式='2' THEN '真'
　　ELSE 'すべて偽'
END

#【ひまわり】
もし、{条件式}ならば、(
　　{処理}
)
違ったら、(
　　{処理}
)

#【なでしこ】
（条件式）
もし、（選択肢）ならば
　　（プログラム）
違えば
　　（プログラム）

#【シェルスクリプト】
if [ 条件１ ]; then
　　条件式１が真
elif [ 条件２ ]; then
　　条件式２が真
else
　　すべて偽
fi

#【Verilog HDL】
if (条件式１)
　　条件式１が真
else if (条件式２)
　　条件式２が真
else
　　すべて偽

#【参考サイト】
https://qiita.com/DAI788/items/6f524ccc54703d3b2964
https://www.programming-fun.net/article/article_39.html
https://ja.wikipedia.org/wiki/If%E6%96%87
http://www.nag-j.co.jp/fortran/FI_7.html
http://nadesi.com/man/index.php?%E6%9D%A1%E4%BB%B6%E5%88%86%E5%B2%90
http://www.booran.com/menu/verilog/if.html
http://tallercolibri.com/archives/128
https://www.officepro.jp/excelvba/if/index4.html
https://eng-entrance.com/linux-shellscript-if
https://qiita.com/AquaMeria/items/957d3b4f64810cdb346b
[Kaggle]House Pricesへの挑戦 Score:0.13509 #02

# はじめに
前回の記事で書いた通りPython(Scikit-Learn)を活用し、Kaggleの[「House Prices: Advanced Regression Techniques」](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)に挑戦してきました。
GWの１週間で上位10%に入ることを目標としていましたのでその結果を報告したいと思います。
※ソースコードはkaggleに、ユーザ名「yuta0001 」、kernel「HousePrice_01」として公開予定です。

# 結果発表
予測精度：RMSE 0.13509
順位：1859位/5249人中(2018/0５/05)
　　　上位35%

残念ながら目標とした上位10%にまだまだ届きませんでした。
継続して向上させたいと思うので現時点で行った内容と今後の課題を記していきたいと思います。

# House Priceチャレンジで行った内容

1. データの確認  
Trainデータは何があるのか、使えそうな変数は何かを確認するために
データ型、欠損数、統計情報、目的変数との相関係数、目的変数の分布、外れ値を確認しています。

2. データの前処理
 **データの確認** から分かった外れ値を除を除去し、目的変数との相関の高い説明変数を使用するようにします。
カテゴリ変数を扱うためにLabelEncoderを用いて数値化しています。
住宅価格への影響度が大きいと思われる部屋の合計面積TotalRFを追加しています。
欠損率の高い説明変数を除外し、欠損値を中央値で埋めています。

3. モデルの作成
ランダムフォレストのモデルとXGBoostのモデルを作成しました。
結果的にXGBoostの精度の方が高かったです。

# 今後の課題
カテゴリ変数の選別
欠損値の補完を現状の中央値一括補完から説明変数ごとの補完方法へ変更
XGBoostのハイパーパラメータの調整
欠損値の対処法の改善
目的変数を対数変換しモデル作成を行なった場合に精度が劣化したので、原因を考察。

# 終わりに
ご助言、アドバイス、ご指摘、ご意見、ご要望などコメントいただけますと大変ありがたいです。