OmniAICreator/Qiita-1.07M huggingface dataset:
Python＆機械学習 勉強メモ：環境準備

#はじめに
昨今流行りのPythonと機械学習に興味を持ち、勉強開始。
備忘録としてここに記す。

#参考教材
Udemy みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習
https://www.udemy.com/course/learning-ai/

#インストールしたもの
- Pycharm
    - Python統合開発環境
    - Cとは違って、Pythonはインデントでブロックが解釈されるため、自動整形機能を持ったエディタは必須と思った
- Anaconda3
    - 様々なライブラリと共にPythonをインストールできるパッケージ
    - インストールはしたけど、コマンドプロンプトから"python"とか打っても起動できない。Anaconda3が具体的に何者かのか、よくわかっていない。

#つまづいたところ
numpyのインストールでつまづいた。Pycharmでボタンをポチポチ押せばインストールできるはずなのに、SSLがどーのこーのと言われた。
![cap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571638/12a7eecc-ae9a-34e8-2dcd-a378eb9e3a18.jpeg)
このインストールできない現象は、Pycharmで"New Project"する際の"Project interpritor"の選択で"Existing interpriter"を選択し、Anaconda3直下のpython.exeを参照するように設定すると解消した。ここらへんのカラクリもよくわかっていない。
![cap2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571638/43339038-8ce2-7bd5-de04-6fe6ec2a13b0.jpeg)

#学び
数学的な問題親和性が高いことがよくわかった。
例えば

```python

x = np.arange(0, 10, 0.1)
y = 2*x + 1
```

上記だけでyが、配列xの各要素を変換した配列になる。"="が写像を表している？Cの頭でいたら混乱しそう。
よそ様のgithubリポジトリを初めて使ってみたら、最高の開発者体験ができた話（vue + githubActions + github-pages)

# 対象読者
vuecliやnuxtなど、静的サイトを生成するツールで静的サイトを**ローカルでビルド**し、githubにプッシュすることでgithub pagesでホスティングしている人すべて
# やること
github actionsを利用して、ローカルでのビルド時間を0秒にする
# 背景
コロナの影響で時間ができたため、サークルを企業に紹介する静的サイトを作成しようと思い、github pagesをテスト環境にしてメンバーからのフィードバックを得るということをしていました。使用していたのはvuecliだったので、開発中は

```
npm run serve
```
このコマンドでホットリローディングしながら常時localhost:8080にアクセスしてコーディングしていました。
サークルメンバーも同様にコロナの影響で暇しているので、フィードバックはとても早く「これってこんな感じがいい？」と実際にコードを書きながら確認することが多くありましたが、ここに若干めんどうなところがありました。
github-pagesに公開する際は、

```
npm run build
```
してからリモートに上げることでgithub-pagesの内容を更新していました。ところがこのコマンドを叩くには一旦`Ctrl + C `でタスクキルする必要があり、ビルド後再度`npm run serve`を打たなくてはいけませんでした。これは非常に面倒です。
#解決策
調べたところ、github actionsという、github上での様々なイベントをトリガーにlinux,Windows,Macのインスタンス（コンテナの方があっているのでしょうか）を無料で利用でき、そのうえで自由に仕事をさせることができることを知りました。これを設定しておけば、以下のように改善することができます。

```before.sh
npm run serve # hot reloading
Ctrl + C
npm run build # 一分ほどTwitterを見に行く
# ビルド結果をgithub-pagesにプッシュ => 公開
npm run serve
```

```after.sh
npm run serve # hot reloading
# ソースコードをgithubにプッシュ => github上でビルド => 公開
```
gitの操作はGithub Desktopを利用しているため、最初にホットリローディングを開始すれば、開発中途切れさせる必要はありませんでした。ビルドとサーブの開始でTwitterを見に行く必要はもうありません。
# github actionsに先駆者がいた。
本題です。
もともとはこの部分を「よし！僕がいっちょ作って公開してQiitaにアウトプットしたら大ヒットや！」と考えいろいろ調べていたところ、同じ考えをした（しかも後続にやさしい）先駆者がいました。
https://github.com/peaceiris/actions-gh-pages
Qiitaで日本語記事も書いてくださっています（神）
https://qiita.com/peaceiris/items/d401f2e5724fdcb0759d

github actionsには、再利用可能にパッケージ化されたワークフローが公開されており、この作者peaceiris様も公開してくださっていました。
このアクションはビルドされた静的コンテンツを入れたディレクトリのパスを渡すだけで、あとはgithub pagesに公開してくれるものです。
>え？ビルド結果を特定のディレクトリに入れて公開するだけなら簡単そう

と僕と同じように思う方も多いと思いますが、github actionsで生成されたものはActionsの終了と同時にすべて破棄されてしまいます。また、リモートにコミットして反映させる手法も確かに取れますが、この作業が非常にだるく、このコミットによってループにならないようにしたり、そもそも権限を付与してあげないといけなかったりと、とにかくめんどう！その点、このワークフローはビルド結果のディレクトリと指定されたトークンやシークレットを渡すだけで公開してくれるため、神がかっているのです。

それぞれの方法については作者様のgithubリポジトリに紹介されているので、ご参照ください。私も今回は
https://github.com/marketplace/actions/github-pages-action#%EF%B8%8F-vue-and-nuxt
こちらをコピペして、`npm run generate`を`npm run build`に書き換えた程度でした。（package.jsonに定義したビルドコマンドに合わせただけ）
細かいことも、ここで下手に説明するより上記URLから参照したほうがよろしいかと思いますので省きます。
# 詰まったところ
github pagesの設定をもともとmaster ブランチのdocsディレクトリに設定していたため、ビルド結果が反映されず、あれ？となりました。設定ページでgh-pagesブランチに設定しなおしたところちゃんと反映されましたので、`導入前からgithub-pagesを利用していたが、なぜかビルド結果が反映されない`というかたは参考になるかもしれません。
# 最後に
nodejsやaxiosといった大手のOSSを利用することはあれど、個人開発のリポジトリを利用するというのは初めてで、最初は「動くのかなあ」とか「動かなかったらデバッグめんどくさそうだ...」と消極的でした。しかし利用し始めてみるとドキュメントも充実していて使いやすく、また、原因不明な不具合なども発生しませんでした。いいプロジェクトに出会えたから、という理由も大きいとは思いますが、githubでよそ様の作ったものを取り入れてみようかなとも思ったというお話でした。
macOS Safari 13.1での令和元年分の確定申告(延長)

[e-Taxの推奨環境に「Safari 13.1」を追加しました。（令和2年4月28日）](https://www.e-tax.nta.go.jp/topics/topics_mac_020428.htm)
だそうです。とりあえず今の環境最新ではUser-Agentの偽装不要になった模様。

新型コロナ感染症対応にて
[確定申告期限の柔軟な取扱いについて（4月17日（金）以降も申告が可能です）（PDF/116KB）（令和2年4月6日）](https://www.nta.go.jp/taxes/shiraberu/kansensho/pdf/0020004-021_01.pdf)
だそうです。

# TL;DR

~~macOS 10.15.4+Safari 13.1以降の利用でe-Tax申請する場合は、サポート外環境なので[User-Agentを偽装](https://qiita.com/hkato/items/155b740aa3b58abb0dc7#対応)しての申請が必要。~~(2020/4/28に対応済みなので、3/24-4/27に最新環境で手続きしようとした話)


# 対象者

macOS利用者で確定申告をしようと思ってたけど、

- [申告所得税、贈与税及び個人事業者の消費税の申告・納付期限が令和2年4月16日（木）まで延長されました](https://www.nta.go.jp/taxes/shiraberu/shinkoku/kansensho/kigenencho.htm)(国税庁)

という事になっていたので、忙しかったり、のんびりしててたり、コロナの外出自粛要請で行けなくなったり、など、で後回しにしてたけど、2020/3/24の[Safariのアップデート](https://support.apple.com/ja-jp/HT211104)を適用しちゃってこれから実施する人。

## 個人的経緯

今年は住宅を購入し確定申告が必要だったが、下記の記事を読んで、macOS + iPhone + マイナンバーカードでできるのかなぁと思って仮に`.data`ファイルを作って進めてたのですが、

- [所得税の確定申告を電子申請（e-Tax）で行う方法（Mac & iPhone）](https://qiita.com/convolm/items/b09c2a0cdc8521fbe49d)

結局、上記の方法の要点は

- 最後の署名と送信の連携がmacOS-iPhoneではできない
- PCとスマフォの`.data`ファイルに互換性がないのでmacで作成しiPhoneでの送信は不可
- iPhoneのみですべてを完結させた場合はできる

結局、macOSで最後まで行うにはカードリーダーが必要なこと(令和元年度の仕様、来年アップデートされますかね？)とのことなので、印刷して税務署にでも行こうと思ったけど、コロナの影響で税務署に行くのをやめようと思いmacOSでも使えるICカードリーダー[ACR1251CL-NTTCom](https://www.ntt.com/business/services/application/authentication/jpki.html)を発注し届いたので作業再開。と思ったらデータが読めない…

# 問題

## e-Taxの対応バージョン
確定申告書等作成コーナー > ご利用ガイド > [推奨環境](https://www.keisan.nta.go.jp/kyoutu/ky/st/guide/recommend)

> OSがMac OS 10.13（High Sierra）・Mac OS 10.14（Mojave）・Mac OS 10.15（Catalina）の場合におけるブラウザの推奨環境は、Safari 13.0のみが対象となります。

## Safariのリリース

[Safari 13.1](https://support.apple.com/ja-jp/HT211104)

> 2020 年 3 月 24 日リリース

ここで、アップデートしたら非推奨のブラウザになる。

# 現象・原因

どうも、`User-Agent:`をチェックしている様で

- `新規開始`など大変のページでは と非推奨環境だけどそのまま進められる
- 作業再開のため`保存データを利用して作成`だとチェックに引っかかり**データの読み込みができない**

メッセージが何を言ってるのかわからなかった。非推奨のブラウザって言ってくれるか、`13.*`でチェックしてくれればよいのに…(しばらく悩んだ)
<img width="627" alt="スクリーンショット 2020-03-29 13.42.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132537/77f1fd78-7400-b7e4-a4da-d163358bb935.png">

# 対応

[User-Agentを変更で](https://www.google.com/search?q=safari+user-agent+%E5%A4%89%E6%9B%B4)`Version/13.1` -> `Version/13.0`に偽装。
とりあえずこれで`.data`ファイルを読み込めてe-Tax申請までとりあえずできました。
AtCoder ABC160 E - Red and Green Apples

https://atcoder.jp/contests/abc160/tasks/abc160_e

# 題意
- a個の赤いリンゴがあり美味しさは$p_{1}, p_{2},...,p_{a}$である
- b個の緑のリンゴがあり美味しさは$q_{1}, q_{2},...,q_{a}$である
- c個の無色リンゴがあり美味しさは$r_{1}, r_{2},...,r_{a}$である
- 赤いリンゴx, 緑のリンゴyを食べたい。
- 無色のリンゴは赤いリンゴの代わりに食べても良い。
- おいしさの最大値を求めよ

# こう考えた
まず、無色のリンゴを考えないとき、各リンゴを降順に並べておいしい順に、x個の赤いリンゴとy個の緑のリンゴを食べたときのおいしさに他ならない。
これで選ばれたリストに対して無色のリンゴを加え、降順に並べて、$x+y$個のリンゴを選んだ時のおいしさが答えとなる。

これでうまくいくことを以下の図に示す。例えば、入力は以下とする。

```
x=3, y=2
p = [100, 30, 20, 5, 4, 3, 2, 1]
q = [50, 10, 9, 5, 2]
r = [1000, 100, 5, 2]
```

ここで、$x=3, y=2$より、上のように$[100, 50, 30, 20, 10]$が選ばれることは想像にたやすい。次に、無色のリンゴをここに入れることを考える。

まず、1000は明らかに大きいので、左端に挿入される。この際、右端の10は食べないことになるので、この1000は赤として挿入する。次に100も100と50の間(1000と100の間でも良い)に挿入する。この場合、20は食べないことになるので、この100は青として入れる。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/30938/13261b1f-7e6d-5308-ca88-5e50147c7673.png" width=50%>

このように着色すれば、赤と青の総量は変わらない。

少し考え方を変えると、挿入した際に色を変えなくとも、$[無1000, 緑100, 無100, 赤50, 緑30]$となり、それぞれ、赤と緑が1色ずつ足りないので、適当な順番で塗り分けても良い。
上記を整理して考えると、赤と緑を決まった個数入れた後に、無色を入れてソートしておいしい順に選べばよい。
色は、もともと選んでいてx+y個の固定色の代わりに入ったk個のリンゴをx+y個になるように塗り分ければよい。


#コード
```Python
x, y, a, b, c = map(int,input().split())
datp = sorted(list(map(int, input().split())), reverse=True)
datq = sorted(list(map(int, input().split())), reverse=True)
datr = list(map(int, input().split()))
dat = sorted(datp[:x] + datq[:y] + datr, reverse=True)
print(sum(dat[:x+y]))
```
https://atcoder.jp/contests/abc160/submissions/11335895
Pythonでファイル操作

## 初めに
Pythonでのファイル操作時に使う関数たち




## ファイル一覧取得

```python:python
import os
os.listdir('../') # 引数に文字列でPATHを渡す
```


## ファイル、フォルダの存在確認
```python:python
os.path.exists('../test.csv') # ファイル、フォルダの存在確認
os.path.isfile('../test.csv') # 対象がファイルかどうかの確認
os.path.isdir('../test') # 対象がフォルダかどうかの確認
```


## ファイル、フォルダをrename

```python:python
os.rename('../test.csv', '../test2.csv') # 引数は元のファイルPATH、変更後のファイルPATHの順
```



## フォルダを作る

```python:python
os.makedirs('../test') # 指定のPATHにフォルダを作る (すでにフォルダが存在している場合エラー)
```



## コピー

#### ファイルをコピー

```python:python
import shutil
shutil.copy2('../test.csv', '../test/test.csv') # 引数はコピー元、コピー先の順
```


#### フォルダをコピー

```python:python
shutil.copytree('../test/', '../test2/') # 引数はコピー元フォルダ、コピー先フォルダの順
```


## 移動

#### ファイルを移動

```python:python
shutil.move('../test.csv', '../test/test.csv') # 引数はコピー元フォルダ、コピー先の順
```
#### フォルダを移動

```python:python
shutil.copytree('../test/', '../test2/') # 引数はコピー元フォルダ、コピー先フォルダの順
shutil.rmtree('../test/')
```

## 削除

#### ファイルを削除

```python:python
os.remove('../test/test.csv')
```

#### フォルダを削除

```python:python
shutil.rmtree('../test/')
```

##読み込み

```python:python

f = open('test.txt','r')

for row in f:
	print row.strip()

f.close()

# 又は

with open('test.txt','r') as f:
    for row in f:
        print row.strip()  # withを使用する場合はclose()が必要ない
```


##書込み

```python:python
f = open('test.txt','w')

f.write('hoge\n')

f.close()
```
MysqlでThe server quit without updating PID file エラーについて

## `The server quit without updating PID file`エラー
`mysql server start`をすると以下のようなエラーが発生
これはmysqlのバージョンを変えたりする時に発生するエラー。つまり別のバージョンのmysqlが動いているので、そちらの実行を止める必要があるということ。

```
ERROR! The server quit without updating PID file (/usr/local/var/mysql/user-no-MacBook-Air.local.pid).
```

現在実行中のプロセスを止める必要がある

```
ps aux | grep mysql  #MySQL関連のプロセス確認
```
以下のように表示されるので、実行されているプロセスを止める。

```
user           #これが(31827)PID→#  31827   0.3  0.2  4901664  12920   ??  S    日09PM  22:37.06 /usr/local/Cellar/mysql/8.0.19/bin/mysqld --basedir=/usr/local/Cellar/mysql/8.0.19 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/8.0.19/lib/plugin --log-error=user --pid-file=/usr/local/var/mysql/user.pid
user              31691   0.0  0.0  4271692    672   ??  S    日09PM   0:00.03 /bin/sh /usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/user.pid
user               3205   0.0  0.0  4277256    812 s001  S+    2:49PM   0:00.00 grep mysql
```

プロセスの所有権がユーザ名ではない場合は以下を実行して強制的に止める

```
kill -9 <PID>
```

これで所有権をとめてから実行する

```
 mysql.server start
```

こちらが大変参考になりました。
[MySQLエラー解決法（Mac編）](https://qiita.com/ryouzi/items/7ace711d51ce291702bf)
こちらも参考
[pidのエラー解決](https://qiita.com/kazu_wsx/items/bb787e9e4e919da03705)

ちなみにPIDはProsess ID　の略

##追記
PIDのプロセスを削除した後

```terminal
$mysql.server start
```
を実行しても、既にサーバーは起動しているよというメッセージがでてくる。

```
$2020-06-04T05:42:53.6NZ mysqld_safe A mysqld process already exists
```
もう一度pidのプロセスを`ps aux | grep mysql`で確認すると、
別のプロセスが勝手に起動している！！
なんで？？

##### 解決方法
macにはlaunchctlという仕組みがあり，plist定義を作っておくと，自動でデーモンを起動してくれる．これにmysqlが定義されていたらしい（汗）
以下のコマンドでlaunchctlの管理から除外できる．

```terminal
$brew services stop mysql
```
参考
https://qiita.com/Komei22/items/31a3db6d5b803ef5082b
練習記録【JavaScript】初歩の初歩：console.logで確認

必要なものは、VScodeとchrome。

```index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>JabaScript practice</title>
  </head>
  <body>

    <script src=js/main.js> //JabaScriptは別ファイルで保存
//ファイルを作成していなくても、js/main.jsにカーソル合わせてctlクリックで新しいファイルが作れるよ。
    </script>
      
   </body>

 </html>
```

```main.js
'use strict'; //エラーチェックを厳格にできる

console.log("hello")
console.log('hello world from main.js'); //'',""どちらでも良い

//文章内に'が入るときは以下二つの方法
console.log("it's me!")
console.log('it\'s me') //バックスラッシュ\はその次の文字を無効化してくれる
```

<h2>console.log確認方法</h2>
chromeに移り、index.htmlをドラッグ。
ctl + shift + I　で”デベロッパーツール”を表示。
consoleタブをクリック→画面更新すると以下のような表示になります！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598453/df5e42e2-478a-fea7-8473-29c09490b35e.png)


ちなみに画面設定はここで変更できます。私は左から二つ目にしてます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598453/96f4262e-ad06-27c4-c1b5-5b8e3dca382c.png)

以上です！
LaTeXでpng画像が表示されないとき


## 発生した問題

LaTeXで，png画像を取り込もうとしたとき
画像の空間（スペース）は空いているものの，画像自体が表示されませんでした．

## 解決法

[https://paper.hatenadiary.jp/entry/2016/10/17/020513](こちらのサイト)を参考にさせていただきました．

具体的には

```tex
\usepackage[dvipdfmx]{graphicx}
\usepackage[dvipdfmx]{color}
```
を追加しました．

## なぜうまくいった？

TeXの生成では

1. TeXファイルを書く
2. DVIファイルと呼ばれる　人間には読めない「レイアウトを含めた文書」をコンパイルして生成する（DVIビューワを用いることで見ることができる）
    3. graphicxを用いて，画像を取り込む（このときに，その後で用いるドライバがdvipdfmxのため，指定する）
3. dvipdfmxで，DVIファイルをPDFへ変換する

という流れを取ります．（初心者などで合ってない可能性大です＞＜）

このとき，colorのドライバを指定していない，かつ読み込んでいないため，うまくPDFに取り込めなかったと考えられます．

## そもそも

どうやらPNGやJPEGは，LaTeXで利用すると画質が落ちるみたいですね･･･
eps形式に変換してから使用しようと思います･･･！
RMD, 通常目次とサイドバー目次を両方掲載できるか調査中

普通は両方掲載できないので、片方は自分で生成する。

TOC抽出まではうまくいくが、RMD上でうまく実行できるようにするのが難しい。


Step1
RMDをまずmarkdownに変換する。こちらでは通常の目次を生成するようにする。
得られたmarkdownから通常の目次を抽出する。

Step2
RMDに通常目次を埋め込む
Step1～2はRMDのチャンク内で実行することとする。

Step3
サイドバー目次を生成する設定でRMDをコンパイルする。


```text
res <- getTOC_str("o.Rmd")
> cat(res)
  - [はじめに](#はじめに)
      - [aa](#aa)
      - [漢字 P@\_/](#漢字-p_)
  - [R Markdown](#r-markdown)
  - [Including Plots](#including-plots)> 
```

``` R
writeMD_withoutChunk <- function(rmd_path, out_path){
    # number_sections=TRUEは, html_documentでないと使えない。
    #----
    fmt <- github_document(html_preview=F, toc=T)  
    fmt$knitr$opts_chunk$include=F
    rmarkdown::render(rmd_path, fmt, out_path)
}


getTOC_str <- function(rmd_path){
    tmp_path <- tempfile(fileext = ".md")
    writeMD_withoutChunk(rmd_path, tmp_path)
    
    lines <- readLines(tmp_path, encoding="UTF-8")
    #-------
    blank_flags     <- (lines=="")
    blank_positions <- which(blank_flags)
    at_blank1 <- blank_positions[1]
    at_blank2 <- blank_positions[2]

    rng <- seq(at_blank1+1, at_blank2-1)
    toc_lines <- lines[rng]
    toc_str   <- stringr::str_c(toc_lines, collapse="\n")
    return(toc_str)
}

```
本当にBUMP OF CHICKENが昔から変わらないかword2vecで調べてみた

**発端**
mecabとword2vecの勉強してたときに歌詞を解析してみたら面白そうと思ったので調べてみた。

**何故BUMP OF CHICKENについて調べるのか**
インタビュー等で昔から同じことばかり歌っていると答えていたりするので、本当にそうなのか確認してみようと思った。

**調査方法**
[word2vecの導入記事](https://qiita.com/kenta1984/items/93b64768494f971edf86)を~~丸パクリ~~参考にして、コサイン類似度を求め、各曲の類似度を求めた

**歌詞の収集**
歌詞を手入力するのが面倒なので、[裏技](https://newsba-nk.com/lyricscopy)でコピペして歌詞を収集した

また、BUMPには[オーイエアハーン](http://kazudorei.hatenablog.com/entry/2015/01/19/120215)と呼ばれる呪文?があるが今回はこちらは考慮しないものとしてます

選曲は筆者の独断と偏見で以下の曲としている

- ガラスのブルース
- K
- 天体観測
- 車輪の唄
- 才悩人応援歌
- いか
- 宇宙飛行士への手紙
- ray
- Butterfly
- 新世界
- 流れ星の正体

こういう作業を自動化できれば、勉強が捗りそうだ...

**結果**
値が1に近いものほど類似度が高いことになります。

|  | ガラスのブルース | K | 天体観測 | 車輪の唄 | 才悩人応援歌 | いか | 宇宙飛行士への手紙 | ray | Butterfly | 新世界 | 流れ星の正体 |
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| ガラスのブルース | 1 | 0.84541| 0.858023| 0.836621| 0.795154| 0.737943| 0.873139| 0.851502| 0.860159| 0.864065|0.869405|
|K| -| 1| 0.862597| 0.851521| 0.789107| 0.67672| 0.871507| 0.809932| 0.852617| 0.876622|0.885764|
|天体観測|-|-| 1|0.878975 |0.878975 | 0.670639| 0.891976|0.880697 |0.882241 |0.894482 |0.914874|
|車輪の唄|-|-|-|1|0.83053| 0.647024| 0.862762|0.83085|0.850564|0.872001|0.893903|
|才悩人応援歌|-|-|-|-|1|<font color="blue">0.625754</font>|0.896517|0.840825|0.867586|0.826822|0.876386|
|いか|-|-|-|-|-|1|0.699905|0.658228|0.68191|0.657326|0.694159|
|宇宙飛行士への手紙|-|-|-|-|-|-|1|0.933604|0.926521|0.901072|<font color="crimson">0.93485</font>|
|ray|-|-|-|-|-|-|-|1|0.915938|0.900616|0.907601|
|Butterfly|-|-|-|-|-|-|-|-|1|0.881321|0.931756|
|新世界|-|-|-|-|-|-|-|-|-|1|0.921659|


いかは類似度低いですね
DependencyNeverSatisfiedやし勝手に消えるやろなぁ...

```
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
               4     pc1       test.sh    user PD       0:00      1 pc1
               5     pc1       test3.sh   user PD       0:00      1 (Dependency)
               6     pc2       test2.sh   user PD       0:00      1 (DependencyNeverSatisfied)
```

終わらへんやんけ彡(ﾟ)(ﾟ)!

#本編
個人利用の場合にはあまり出番はないかもしれませんが、Slurmというジョブスケジューラがあります。
要するにいい感じにCPUやGPUを割り当ててくれるものです。

インストール方法等は他の記事にお任せするとして、実際に使用する場面になると、「これ終わったらこれしたいみたいな」ことがあります。

そんな時に使うのは、sbatchの`--dependency`オプションです。

```
#!/bin/bash

jid1=$(sbatch --gres=gpu:1 --parsable test1.sh)
jid2=$(sbatch --gres=gpu:1 --dependency=afterok:$jid1 test2.sh)
```

こんな感じに書くことでtest1.shを終わった後にtest2.shが行われる訳です(bashファイルにひとまとめに書く場合は`--parsable`も必要なので注意!)。

だたし、`test1.sh`がjobがscancelやエラーで異常終了すると、上記のように`DependencyNeverSatisfied`というステータスになる訳ですね。

そして、それが終らないわけですね(もしかしたら長いこと放置してたら終わるかもしれないですが)。

こんな時使うならこちら!!!

```
--kill-on-invalid-dep=yes
```

このオプションはdependency元が正しく終了しなかった場合に勝手にkillしてくれるものですね。
CircleCIにサインアップ(Sign up) - 新規ユーザ登録

---
こちらの記事の内容が古くなったため、[【2023年版】CircleCIにサインアップ(Sign up)](https://qiita.com/mfunaki/items/14080547b352be9d265c) としてバージョンアップしました。バージョンアップ版をぜひご覧ください。

---
# はじめに
GitHubのアカウントを作成したら、その流れでCircleCIのアカウントも作成してしまうのが良い習慣かと思い、記事にまとめてみました(GitHub Actionsもありますが)。

ちなみにGitHubのアカウント作成に関しては、こちらにまとめておきました。
- [GitHubにサインアップ(Sign up) - 新規ユーザ登録](https://qiita.com/mfunaki/items/e01762475967d4e05a1f) 

# 実際の手順
## 1. ブラウザでCircleCIのサイトにアクセス。
お好みのウェブブラウザを使って、https://circleci.com/ja/ にアクセスします。幸いにもCircleCIには(GitHubとは違って)日本語のサイトが用意されています。
<img width="799" alt="circleci-top.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/a8180b2c-5270-7fb9-8b30-13d5f55ded9d.png">

アカウントの作成(サインアップ)は、(ちょっと分かりにくいのですが)「無料でビルドを開始する」をクリックします。

## 2. 登録情報の入力 - GitHubアカウントとの連携
「無料でビルドを開始する」をクリックすると、ユーザー登録画面が表示されるので、「GitHubでログイン」をクリックします。(必要に応じてGitHubにログインした後で)Authorize CircleCI画面が表示されるので、Authorize circleciボタンをクリックします。
<img width="442" alt="circleci-authorize.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/ce4e6208-66c7-61d0-330d-097babab4866.png">
次にSelect an organization(組織の選択)画面が表示されるので、特に会社の仕事でも、個人でもGitHubを使用している場合など、CircleCIを利用したい適切な組織を選択します。
<img width="489" alt="circleci-org.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/0b0633f6-bb14-93b6-a39b-21d8c2784ffa.png">
これでGitHubアカウントと連携されました。下の画面では新規作成したGitHubアカウントのため、リポジトリが表示されていませんが、GitHubアカウントにリポジトリが設定されていれば、ここでリポジトリの一覧が表示されます。
<img width="917" alt="circleci-projects.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/e088c763-e361-971b-9cd0-3c2ff68d1378.png">

# おわりに
あとは、GitHub上のリポジトリに何らかの変更がPushされると、ビルドプロセスやテストプロセスが走るように設定していきますが、詳細は稿を改める事にします。
漢字をカナに変換する

##mecabを使って、カナ変換し結果をつなげて一つの文字列にして出力する

```
import MeCab

def mecab_list(text):
    tagger = MeCab.Tagger("-Ochasen")
    tagger.parse('')
    node = tagger.parseToNode(text)
    word_class = []
    while node:
        word = node.surface
        wclass = node.feature.split(',')
        if wclass[0] != u'BOS/EOS':
            if wclass[6] == None:
                word_class.append((wclass[7]))
            else:
                word_class.append((wclass[7]))
        node = node.next
    mojiretsu=''.join(word_class) 
    return mojiretsu
```

#参考
[Python 、Mecab、GoogleTranslitrateAPIで漢字→カタカナ→ひらがな→漢字変換をする。](https://qiita.com/Hirai0827/items/917d324f3f4d2b7d3134)
[PythonでMeCabの出力をリスト化するモジュール(mecab-python)](https://qiita.com/menon/items/2b5ad487a98882289567)
MySQLが起動できない エラー備忘ログ　その２

#エラー
スタート（起動できない）

```
Starting MySQL
./usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザーMBP.err: Permission denied
rm: /usr/local/var/mysql/ユーザーMBP.pid: Permission denied
2020-03-29T03:04:45.6NZ mysqld_safe Fatal error: Can't remove the pid file:
/usr/local/var/mysql/ユーザーMBP.pid.
Please remove the file manually and start /usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe again;
mysqld daemon not started
/usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe: line 144: /usr/local/var/mysql/ユーザーMBP.err: Permission denied
 ERROR! The server quit without updating PID file (/usr/local/var/mysql/ユーザーMBP.pid).
```

##Permission denied ってどゆう意味
簡単に言いますと、「ファイルへのアクセス権限がない」とのこと。

参考
https://qiita.com/takuyanin/items/18590600d077df707923

##権限を確認する
```
＊mysqlの該当ファイルまで移動
 % cd /usr/local/var/mysql
＊ファイルのアクセス権限をみてみる
 % ls -l      
-rw-r-----    1　mysql  wheel      2948  3 29 14:14 ユーザーMBP.err
-rw-r-----    1　mysql  wheel         5  3 29 14:14 ユーザーMBP.pid
```

こんな感じで確認できました。
権限のところが、mysqlとなってます。これがいいのかよくわかりませんが、、、
この辺りの権限を変えてみました。

##権限を変えてみる
ユーザー権限に変更

```
 % sudo chown -R $USER /usr/local/
```

確認

```
 % ls -l       

-rw-r-----    1 ユーザー wheel      2948  3 29 14:14 ユーザーMBP.err
-rw-r-----    1 ユーザー wheel         5  3 29 14:14 ユーザーMBP.pid
```

##起動確認 (mysql.server start)
```
 % mysql.server start  
Starting MySQL
.... SUCCESS! 
```
うまく行きました...

##MySQLのステータスを確認する。(mysql.server status)

```
mysql.server status
 ERROR! Multiple MySQL running but PID file could not be found (754 857 )
```
複数起動していますが、PIDファイル(754 857)というのがないですよーーって事で
現在実行されているmysqlのアクティブなプロセスのIDを確認！

```
 %  ps ax | grep mysql
 754 s004  S      0:00.03 /bin/sh /usr/local/Cellar/mysql/8.0.19/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/MacBook-Pro.pid
  857 s004  S      0:03.55 /usr/local/Cellar/mysql/8.0.19/bin/mysqld --basedir=/usr/local/Cellar/mysql/8.0.19 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/8.0.19/lib/plugin --log-error=MacBook-Pro.err --pid-file=/usr/local/var/mysql/MacBook-Pro.pid
 1088 s004  S+     0:00.01 grep mysql
```

###実行されているプロセスを遮断する。kill ××

```
kill 754
kill 857
```
##再びMySQLを起動させる。(mysql.server start)

```
Starting MySQL
.... SUCCESS! 

% mysql.server status
 SUCCESS! MySQL running (1242)
```

これで全てうまくいくことができました。

##番外編(Operation not permitted)

```
% sudo chown -R $USER /usr/local
```
を実行したときに、

```
chown: /usr/local: Operation not permitted
```
このように表示される場合があります。

###Operation not permittedとは...
OS X 10.11 El Capitanより追加されたセキュリティ機能、SIP（System Integrity Protection）によって以下の領域がガードされているそうです。
- /bin
- /sbin
- /System

***この配下では，rootユーザでも書き込みできません。***

##解決策
参考
https://qiita.com/iwaseasahi/items/9d2e29b02df5cce7285d

##最後に
皆様の参考になれば幸いです。
macOS Catalinaでwine

macにwineをインストールしてみたのでメモしてみました。
#実行環境
PC: MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)
OS: Darwin 19.3.0 (macOS Catalina 10.15.3 (19D76))
wine: wine-5.5 (githubからそのままcloneしました。)
＊インストールした時点でのstableなバージョンは公式サイト（winehq.org）では5.0でした。

公式サイトでwineのインストールに必要なもののバージョン
bison: bison (GNU Bison) 3.5
XQuartz: XQuartz 2.7.11 (xorg-server 1.18.4) 
flex: flex 2.5.35 Apple(flex-32)
pkgconfig: 0.29.2
mingw-w64: 7.0.0_2

#インストール方法（2020-03-29時点）
##githubからwineをclone 
ターミナルで下のコマンドを実行してください。
`git clone https://github.com/wine-mirror/wine.git
cd wine`
ディレクトリの移動はもちろんcloneが終わってからです。
##configureファイルを実行
ディレクトリを移動せずにターミナルで、下のコマンドを実行してください。
`./configure --enable-win64`
不備がなければ、エラーは何も吐かれません。
##makeコマンドの実行
ディレクトリを移動せずに、
`make`
と入力するとビルドされます。configureファイルでエラーが何もなければ、問題なくビルドされます。私の環境だと、少し時間がかかったので気長に待ってください。パス通しなど各自でお願いします。

#注意事項
公式サイトでは必要なものがxquartz, bison, flex, mingw-w64, pkgconfigになっていました。入っていない方は各自で入れてください。公式サイトではHomebrewを使って補えるとありました。
>The following would cover basic requirements;
`brew cask install xquartz
brew install bison flex mingw-w64 pkgconfig`
>https://wiki.winehq.org/MacOS/Building

公式サイトのMac用のインストールガイドに従ってconfigureファイルを実行する時に以下のエラーが吐かれます。

>Cannot build a 32-bit program, you need to install 32-bit development libraries.
>./configureの実行結果

macOSがCatalinaになってから32-bitsプログラムはつかえないため（少なくとも私はまだ知りません...）wine64を入れましょう。また、Homebrewでcaskをつかてwine-stableをインストールすると
>zsh: bad CPU type in executable: ./wine
>./wine の実行結果

とエラーが吐かれます。同じように、32bitのプログラムになるので、ソースからビルドするか、オプションを与えてください。公式サイトにも
>As homebrew no longer provides universal dylibs anything outside of XQuartz provided files and the basic build dependencies would need to be built from source
>https://wiki.winehq.org/MacOS/Building

とあるのでソースから、ビルドしたほうがいいと思います。

#参考
https://wiki.winehq.org/MacOS/Building
https://wiki.winehq.org/Building_Wine

#追記 (2020-04-03 更新)
インストールするプログラムによってはうまく動かないみたいです。notepad++を試しに入れてみたら問題なく動きましたが、MT5をインストールさせようとしたら、実行時にエラーを吐いていました。アップデートで改善されるか、改善策を見つけた場合更新します。
Tableau：複数のチャートを1シート内で表示する『パネルチャート』の作り方

今回は、複数の項目を一瞥するのに便利な<b>『パネルチャート 』</b>を取り上げます。(スモールマルチプルとも言うそうです)

可視化する内容は、国別自殺率推移をみてみたいと思います。

#データ準備
可視化イメージが決まったら、データの構想を練ります。必要なカラムは、

- 国　
- 年度
- 自殺率

です。
データセットは
Kaggle『Suicide Rates Overview 1985 to 2016』を使用します。
(https://www.kaggle.com/russellyates88/suicide-rates-overview-1985-to-2016)

#パネルチャートを作る前に
パネルチャート を作る前に、Kaggleのデータを使って普通にチャートを作ってみます。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548159/d1b7b6cc-0521-3807-26d9-4a829002181e.jpeg)
圧倒的見辛さ。トレンドもロクに分からずほぼ平らです。
縦横逆にしても、同様に見辛いです。ぐっちゃりしてます。
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548159/bb81974a-9f41-8769-edcb-b0e7b0afa1a3.jpeg)
#ラインチャートを見易くする
縦一列、横一列でチャートを並べていましたがこれを行列の組み合わせで、表のようなものを作ってみます。

完成形はこんな感じ。
![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548159/075d0e66-4012-06bd-f890-9e9de167d3b8.jpeg)
チャートの表になっており、縦横共にサイズが余裕があるのでトレンドがみやすいです。

ここでは16コのチャートがありますが、それぞれシートを作っているわけではなく１つのシートで全て表現しています。

何回も同じ作業を繰り返す必要がなく、便利なチャートです。

#パネルチャートを作る
パネルチャートは次の2ステップで作成することができます。
##１、２つの計算フィールドを作成
まず２つの計算フィールドを作成します。

```
行に挿入
(index()-1)%(round(sqrt(size())))
列に挿入
int( (index()-1)/(round(sqrt(size()))))
```

本質的な箇所ではないので、ザッくり説明すると、

- size()：あるディメンションのレコード数を返す
- sqrt()：平方根を返す
- round()：指定された桁数に数値を丸める(今回では整数にする)
- index()：1から増加していく表計算関数

ここでは「自殺率が高い16の国」をフィルターで絞るので、レコード数は16。

その平方根は4。

index()-1は０、１、２、・・・・１５。

それを%により除した余りを出しているので、０・１・２・３が弾き出されます。

②についても同じ原理で、

int()：()の中身をゼロに最も近い整数に直す

なので、０・１・２・３が弾き出されます。
これで４×４で割り当てる仕組みは完成です。
##２、シートに配置し表計算を調節
計算フィールドを作成したら後は配置＆表計算を指定して完成です。
![4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548159/de6e626d-f5c6-d75e-b1f5-b054132d0397.jpeg)
今回は指定するディメンションはcountryですので、先ほど作成した表計算は２つとも「country」を指定します。

マークカードに指定するディメンションをあらかじめ入れる事を忘れないようにして下さい。
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548159/7f77ef27-426c-6ec3-80f5-9571c9bf5756.jpeg)
こんな感じで完成です。

後は色々イジってVizに仕上げたら完成です。↓こんな感じ。
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548159/b2f36d53-6159-f7f7-1774-c807646a8a45.jpeg)
日本入ってますね。お隣韓国が上昇傾向になっていたり、旧ソビエト圏の国がかなりランクインしていたり。

個人的には、旅行しててすごくよかったバルト三国が全部入っていてショックだったりします。

てな訳で、複数のチャートを1発で表示するパネルチャートでした。

作成したものはこちら(https://public.tableau.com/profile/.14716601#!/vizhome/TheSuiciedRateintheworld/suiciderates)
自己紹介/ポートフォリオ（スライドVer.）

#mahbou3の仕事
- インフラSE
- 某社DCに10年ほど勤務
- システムの設計・構築・運用・LCMを担当

---
#mahbou3のプライベート
- 一児の父
- 育休中
- 地方在住
- 通信制大学の学生
 - ITコミュニケーション専攻
 - もうすぐ卒業

---
#mahbou3のスキル（１：テクニカル系）
- OSSを使ってシステム構築・運用の自動化(CI)
 - Ansible 
 - Serverspec
 - GitLab
- システムの監視
 - Zabbix
 - Systemwalker
- ちょっとしたコーディング
 - Perl
 - PHP
 - Python
 - Java

---
#mahbou3のスキル（２：ビジネス系）
- プロジェクトマネジメント
 - 20名ほどのチームのプロジェクトリーダーを5年程度担当
 - 情報処理技術者「プロジェクトマネージャー」2016年度春期合格

---
#mahbou3のアウトプット（随時更新）
- Qiita
 - [Vagrant+AnsibleでWindows8.1上にCentOS7.3をサクッと建てる](https://qiita.com/masahiro12/items/1c21bc8b9445b9108e34)
- GitHub
 - [Create CentOS 7.3 by Vagrant](https://github.com/mahbou3/centos73_vagrant)

---
#mahbou3の目指すところ
- 地方在住でフルリモートでも結果を残すSE
- 自分の手で社会の役に立つサービスを作ってみたい！
 - …フロントエンドの経験がないことが課題
- 今後、せっせとコードを書いて
 - 簡単なサービスを1つ、2020年中にローンチします。
 - 上記「簡単なサービス」を誰でも作れるコードをGitHubにアップします。
- リモート可のお仕事ください！！

---
#mahbou3のSNS
- Twitter
 - https://twitter.com/mahbou_3
 - ![IMG_7068.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61033/6dc04df7-95af-b038-a401-d5685fb47c9a.png)
- YouTube
 - https://www.youtube.com/channel/UCHAqJ4N8F3ijNhDgxbOshkA/

---
#ご清聴ありがとうございました。
###┏○))ﾍﾟｺ
【悲報】Xcode 11.4 でナビゲーションバーのタイトルの色が黒に固定される（修正済み）

それはXcodeをアップデートした直後のことでした・・・
俺氏「ん？！ナビゲーションタイトルの文字が黒にしかならんやんけ😱」
<img width="854" alt="スクリーンショット 2020-03-29 2.11.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542129/9308bd56-897e-3dd4-df1e-02411ba4fbe8.png">


4/16追記：
####**【朗報】XCode 11.4.1 のアップデートで修正されました！やったね🍺**

#発生条件
- storyboardでnavigation controllerのBar Tintを変更している場合

上記場合に、Title Colorを変更しても、タイトルの色は黒固定になっちゃいます。

Bar Tintをデフォルトにしとけばタイトルカラーを変更できます。
<img width="854" alt="スクリーンショット 2020-03-29 2.10.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542129/71bfdc4d-714f-94ec-4e0f-7ba73254dbff.png">

デフォルトカラー以外では変更できないから超不便😰

#解決法
1. 多分Xcode11.4のバグ、アップデートを待ちましょう←
2. Xcode11.3.1にダウングレードする（多分これがいい（小並感））
3. [おーばーふろーで無理やり変更してる人もいた](https://stackoverflow.com/questions/60848786/xcode-11-4-navigations-title-color-gone-black-from-storyboard)

#　
　**それではみなさん楽しいバグライフを!😘**
Error: Error fetching Firestore indexes

# はじめに
`firebase init`で`Which Firebase CLI features do you want to set up for this folder?`の質問（DBの選択）に対してFirestoreとしたところ表題のようなエラーがでた。その原因と解決方法を記す。

# 原因
Firestoreが用意されていないため。

# 解決方法
Firestoreが用意する。具体的な方法は[こちら](https://firebase.google.com/docs/firestore/quickstart?hl=ja)を参考。
MarkdownファイルをConfluenceに移行

これまで，mkdocsを使ってMarkdownをビルドしてHerokuにCIでPushしていました．書いてからビルドしてブラウザから開くのが面倒だったのでConfluenceに移行しました．

移行ツールをGitHubで探したらアップロードまで行ってくれるツールがありました．

[RittmanMead/md_to_conf: Markdown to Confluence import](https://github.com/RittmanMead/md_to_conf)

使い方はマニュアル通りです．複数ファイルのアップロードはシェル芸でやりました．スペースが含まれるとBashのforが別の要素として認識するので，特殊変数 `IFS` を改行だけにしておきます．並列で実行すると早くアップロードできると思います． `-g`でアップロード後にブラウザでConfluenceを勝手に開かないようになります．

```bash:upload.bash
#!/bin/bash -xe

export CONFLUENCE_ORGNAME='xxxx'
export CONFLUENCE_USERNAME='mail@example.com'
export CONFLUENCE_API_KEY='XXXXX'
export IFS="
"
for f in `find . -type f | grep \.md`
do 
  echo python ../md_to_conf/md2conf.py -g `printf %q "$f"` DOCS | bash
done
```

```bash:実行結果
2020-03-29 14:26:13,194 - INFO - main [614] - Markdown file:	./Linux/シェルの実装.md
2020-03-29 14:26:13,194 - INFO - main [615] - Space Key:	DOCS
2020-03-29 14:26:13,195 - INFO - main [621] - Title:		シェルの実装
2020-03-29 14:26:13,207 - INFO - main [644] - Checking if Atlas page exists...
2020-03-29 14:26:13,207 - INFO - get_page [294] - 	Retrieving page information: シェルの実装
2020-03-29 14:26:13,631 - INFO - create_page [405] - Creating page...
2020-03-29 14:26:14,979 - INFO - create_page [441] - Page created in docs with ID: 165830.
2020-03-29 14:26:14,980 - INFO - create_page [442] - URL: https://xxxx.atlassian.net/wiki/spaces/DOCS/pages/165830
2020-03-29 14:26:14,983 - INFO - main [666] - Markdown Converter completed successfully.
```

Webからもアップロードが出来ていることが確認できます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/e205a66d-ed19-8085-0968-6026a4432558.png)

世界的に使われているツールは，サードパーティ製ツールがあるので快適です．
Swift MkMapViewで地図アプリ作成してみた（20）- 受信精度の悪いGPSデータを間引く

#記事一覧
[Swift MkMapViewで地図アプリ作成してみた（記事一覧）](https://qiita.com/rain_00_00_09/items/3151b3faf2303fe78312)

#受信精度の悪いGPSデータを間引く
###GPSの受信鮮度

あまり該当するケースは存在しないが、GPS鮮度がtimeInterval秒過ぎていた場合、読み捨てる。

```swift:
    if timeInterval <= Int(abs(locations.last!.timestamp.timeIntervalSinceNow)) {
        return
    }
```

###水平誤差
水平誤差がaccuracyメートルを越えた場合、読み捨てる。

```swift:
    if accuracy < Int(locations.last!.horizontalAccuracy) {
        return
    }
```

###緯度経度が無効
水平誤差が負の値の場合、緯度経度が無効なので読み捨てる。

```swift:
    if 0 > locations.last!.horizontalAccuracy {
        return
    }
```
情報処理安全確保支援士試験　受験・合格体験記

情報処理試験に合格するために目指すところは、学んだ知識とスキルを実務や日常業務と私生活の中で、「即座に」「正確に」アウトプットするためだと考えています:slight_smile:

そのため、合格したらいずれ忘れ去られてしまう詰め込んだ知識というよりも、忘れずに脳に残り続けるスキル（読み・書き・論理思考=国語力）が重要なのだと感じています。

また、会社的に取得が奨励されていると「試験に合格するため」のポイントも必要なので、テクニックの部分についても得た知見を次の資格学習（合格）のために備忘録として書き残しておきます。サプリメントの様に即効性ないと思います。ですが！血肉になる文章として書き残します。

- 問題文の内容を**図や文字として書き出す**ことで、イメージを湧かせ易くする
 - 次の発想が頭に浮かび、問題文と設問文の間を何度も行ったり来たりする往復運動が減りました

- 基本知識は**「正確」かつ「完璧」**に理解する
 - 例：MACアドレスとIPアドレスの「違い」を人に説明できるか？
 - 技術の一つ一つを**「曖昧な丸暗記」**にならないように注意する
 - 基本的な事項は「必ず正解する」様に意識する
 - 難しいことよりも「基本」を積み上げる

- 頭が働かない状態で無理して参考書を開くより、集中できる時間だけ勉強する

- 学習の積み上げと記憶の定着を継続できていると、意外と仕事が忙しい時期に諦めずに頑張って受験したので合格することが出来ました。

- 午後は問題文に書いてある情報を基に一つの答えを導く
 - 回答表現の違いはあっても出題者の意図は一つだと思っています

- 答えは論理的に正しいか検証する
 - つっこみ所があれば他に答えがあるはずと考える

- **単語解答、選択問題**は全部正解する
 - 一回の試験でこれらの設問の配点を合計するとそこそこの点数になり、短時間で回答する事で、30文字や40文字などの文字数の多い回答に時間をかけることができます。

- 設問と通じて同じ答えになる設問はない
 - 焦って回答していた時は「（１）内部メールサーバ、（４）内部メールサーバ」などの様に同じ解答を同じ設問の中で書いていました。これだと両方とも正解にはなることは決してありません。

- 午前Ⅰの情報セキュリティも解いてみる
 - 合格するために効果があったか分かりませんが、頭の訓練のつもりで午前Iにも挑戦しました。

- 午後はアプリケーション分野の設問は自分の専門外なので捨てました。

- これらの注意点を試験時間中に思い出せた時は、心に余裕があった（落ち着いていた）ので合格できたのではないかと思っています（2つの高度試験の経験では）。

- この分野の先生を師範として勝手に仰ぎました:grinning:
 - [わく⭐︎すた](http://wakuwakustudyworld.co.jp/blog/)
 - [SE娘の剣](http://sc.seeeko.com/)
 - [テキスト](https://www.amazon.co.jp/%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E6%95%99%E7%A7%91%E6%9B%B8-%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E5%AE%89%E5%85%A8%E7%A2%BA%E4%BF%9D%E6%94%AF%E6%8F%B4%E5%A3%AB-2020%E5%B9%B4%E7%89%88-%E4%B8%8A%E5%8E%9F-%E5%AD%9D%E4%B9%8B/dp/4798163848/ref=pd_sbs_14_t_0/358-9740918-2553966?_encoding=UTF8&pd_rd_i=4798163848&pd_rd_r=09fc12a6-ea0f-4c27-a9b7-dabf8aa9ce6c&pd_rd_w=i4srk&pd_rd_wg=N3kqo&pf_rd_p=ca22fd73-0f1e-4b39-9917-c84a20b3f3a8&pf_rd_r=80SGMME0RR8R51Q7KPFK&psc=1&refRID=80SGMME0RR8R51Q7KPFK)

資格を取っても**自慢**にはなりませんが、高度試験の合格するために勉強した努力は仕事をする上での基礎体力や**自信**になっていると感じています。それから支援士登録する事で年次のe-learningと3年に1回のリモート講習を利用でき、継続した学びができます。リモート講習についてはグループ討議が中心で積極的に参加することで、ビジネス視点とITスキル視点の気付きが得られます:grinning:
Qiitaの記事をWordPressに移行する

# はじめに
[Qiitaの記事をGitHubに移行する](https://qiita.com/mima_ita/items/ec33706c20f11a95516a)で色々やってみましたが、タグの問題が残るので、WordPressに移行するスクリプトを書いてみました。

私の記事は以下のように移行されます。
http://needtec.sakura.ne.jp/wod07672/category/qiita%e3%81%8b%e3%82%89%e3%81%ae%e7%a7%bb%e8%a1%8c/

# 環境
サーバー側
WordPress 5.3.2

クライアント側
Windows10
Python 3.7.4

# 事前準備
WordPressのプラグインとして以下を利用します。
・[WP Githuber MD – WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md/)
・[Application Passwords](https://ja.wordpress.org/plugins/application-passwords/)

WP Githuber MDはマークダウンのエディタ機能をWordPressに追加します。
Application PasswordsはREST APIを使用するために使用します。
REST APIを使うための準備は[WordPressで画像付きの記事を自動で投稿する](https://qiita.com/mima_ita/items/968f22f54c3febd5360f)を参考にしてください。

また、[Qiitaの記事をGitHubに移行する](https://qiita.com/mima_ita/items/ec33706c20f11a95516a)で紹介した方法でQiitaのアクセストークンを取得してください。

# 使用方法
(1)以下のリポジトリからスクリプトを取得する
https://github.com/mima3/qiita_exporter

(2)下記の形式でスクリプトを実行する。

```
python qiita_to_wp.py qiitaのユーザ名 qiitaのAPIキー WORDPRESSのURLex.https://needtec.sakura.ne.jp/wod07672 WORDPRESSのユーザ名 WORDPRESSのApplicationPassword カテゴリの名前
```

(3)しばらくすると処理が完了するのでWordPressの管理画面から記事を公開していく。

なお以下のような表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47856/a016f101-159d-23ae-0f49-c975b4dd3d1b.png)



# 結果
## GitHubへの移行にくらべていいところ
・タグが使える
・自分が管理できるサイトへの移植になるので小回りが利きそう
・Twitterの埋め込みも表示されている。

## 課題
・コメントの移行（今回未対応だが、おそらく出来そう。）
　→ただし1000記事を超えるユーザの場合、QiitaAPIの上限を超えそうなので、DBかなんかに保存しておいて、後で残りを取り直す仕組みが必要になると思われる。
・エラー処理。（時間がかかる処理のくせにエラー処理していないのでやり直しが辛い）
・記事内のリンクが効かない。
　→GitHubやQiitaは文中の「# タイトル」に対してリンクが張れたがWordPressは無理そう。
・１万文字こえるきじがみずらい。
　→Qiitaと違って目次がない
・画像の表示がみずらい箇所がある。
　→縦横比の関係で縮小されて表示されてしまうものがあって見づらくなるものがある。
AWS アカウントについて

# はじめに

AWSを始めるに当たって、アカウントをまず作成します。
下記のリンクからアカウントを作成することができます。
https://aws.amazon.com/jp/

1. AWSアカウントを作ったらまずやること
   - 作業用のIAMユーザーを作成する
   - Cloud Trailを設定する
   - 料金アラートを設定する
 

# RootユーザとIAMユーザー
## Rootユーザー
- 全てのAWSサービスを使用できる
- アカウントの設定変更、サポートプランの変更などはルートユーザのみ変更可
- 通常の作業にルートユーザを用いてはならない（※)

Rootアカウントの情報のパスワードが漏洩したり、試行錯誤によってパスワードが解析されてしまうのを防ぐために、MFA（Mutli-Factor Auhentication。多要素認証）という仕組みを備えている。
簡単に言うと、ログインするときにパスワードに加えて、もう一つ認証することで、二段階認証しないとサインインできないようにする仕組みになります。


IAMの設定を開き、ダッシュボードのルートアカウントのMFAを有効化を開き設定する。
デバイスタイプにはいくつかあるのですが、仮想MFAデバイスを選択した場合、設定後にQRコードが表示されるので、端末（iphone、Android)にGoogle認証システムアプリをインストールし、そのQRコードを読み取る。
読み取り後、認証コードが表示されるので、その認証コードを認証コード１、２の欄に入力する。
サインアウトして、ルートアカウントで再びログインすると、パスワード入力後に、認証コードを聞かれるようになる。認証コードはGoogle認証システムアプリのコードを入力することでログインができる。

## IAMユーザ
- 割り当てられたIAMポリシーで許可されたAWSサービスを使用できる
- 利用者ごとに払い出し、通常の作業はこのIAMユーザで行う
RHEL8 の各パッケージのサポート期限

以下を参照。 [CentOS8 は2021年末までのサポート](https://blog.centos.org/2020/12/future-is-centos-stream/)となっているので注意。

https://access.redhat.com/support/policy/updates/rhel8-app-streams-life-cycle

例えば、 PHP7.2, 7.3 の場合は、それぞれ 2021年5月、2021年11月までとなっており、 [CentOS7 の PHP5.4.16](https://qiita.com/nanasess/items/029d96cf6360be867ac8) よりサポート期限が短かいことに注意.

**2020年11月11日追記**
PHP7.4は長期サポート対象となったようで、 2029年5月までサポートされる予定
rpy2導入時に発生した問題点

## はじめに
> 本記事は以前別サイトで作成し公開していた記事を移行した記事となります

本記事では以下を前提とします。

- R for Windowsがインストールされていること

※インストールされていない場合は[こちら](https://cran.r-project.org/bin/windows/base/)からダウンロードしインストールします

動作確認環境は以下となります。

- OS
 - Windows10
- 言語
 - Python3.6.8  

## 発生した問題と解決方法
### pipでrpy2をインストールできない
#### 解決方法
Wheelパッケージを使ってインストールする
#### 手順
1. [こちら](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2)から自分の環境にあったrpy2のwhlファイルをダウンロードする
2. コマンドプロンプトでwhlファイルを格納した場所に移動する
3. pipでinstallする

```code
pip install (whlファイル名)
```
> 以下メッセージが出力された場合はwhlファイルが誤っている。ファイル名は合っているか？導入する環境以外のwhlファイルを使っていないか？などを確認する。
> rpy2XXX.whl is not a supported wheel on this platform.

### Pythonでimportした際に「RuntimeError: R_HOME not defined.」が出力された
#### 原因
環境変数が設定されていない
#### 解決方法
Windowsのシステム環境変数にRのインストールフォルダを設定する

|変数名|変数値|
|:--|:--|
|R_HOME|C:\Program Files\R\R-3.5.2|
#### 注意点

- Rをインストールした場所、インストールしたRのバージョンにより適ほど変更してください
- 環境変数を変更する際にコマンドプロンプトを起動していた場合は、コマンドプロンプトの再起動が必要になります

### Pythonでimportした際に「RuntimeError: R_USER not defined.」が出力された
#### 原因
環境変数が設定されていない
#### 解決方法
Windowsのシステム環境変数にRの実行ユーザを設定する

|変数名|変数値|
|:--|:--|
|R_USER|(Rの実行ユーザ名)|

#### 注意点
- 環境変数を変更する際にコマンドプロンプトを起動していた場合は、コマンドプロンプトの再起動が必要になります

### Pythonでimportした際に「ModuleNotFoundError: No module named 'tzlocal'」が出力された
#### 原因
pythonモジュールtzlocalが不足している
#### 解決方法
pipでtzlocalをインストールする
#### 手順
1. pipでtzlocalをインストールする

```code
pip install tzlocal
```

以上
SwiftのArrayとList(Realm)の比較と変換方法

# はじめに
メモアプリに複数のタグを紐付ける機能を実装していた際に、
SwiftのArrayとListという型がそれぞれ別の役割であることに気づかなかったので、
それぞれの役割と変換方法について簡潔にまとめようと思います！

# 環境
- xcode 11.3.1
- swift 5.1.3

# ArrayとListの違い
ArrayもListも複数要素を扱うという点では共通ですが
ArrayはSwiftで配列として使われる型です。
Listは「RealmSwift」というRealmを扱うためのライブラリで扱える型です。

# List型とArray型を使い分ける
今回はViewControllerで `List<Tag>`を扱おうとしたところ、
「Listとなんて型は定義されていないよ！」
と怒られたので、 `Array<Tag>`に変更しました。

そうしたら今度は、Model→Realmに変換できず `nil`になって、
保存されないという事象が発生しました！ 
**nilになってもエラーにはならずただDBに値が入らないので要注意**

なので、
ロジックは `Array<Tag>`にキャスト
データ格納時は `List<Tag>`に変換するという実装で対応しました。

イメージ図
![ListとArrayの変換.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583780/c953a075-0053-48d1-303d-de2fa61341af.jpeg)

# Array＜＝＞Listの変換方法
## Array→List
ArrayからListに変換するときは、Modelで `List<Object>`を指定しておき、
`append(objectsIn:)`を使えば `List`としてRealmに入れることできました。

```swift:Model

import Foundation
import RealmSwift

class Memo: RObject {
    @objc dynamic var title : String = ""
    @objc dynamic var content : String = ""
    @objc dynamic var createdDate : Date = NSDate() as Date
    @objc dynamic var updatedDate : Date = NSDate() as Date
    
    var tags = List<Tag>() // ここをList型にする
}

class Tag: Object {
    @objc dynamic var tagName = ""
    
    var memos: LinkingObjects<Memo> {
        return LinkingObjects(fromType: Memo.self, property: "tags")
    }
}

```
```swift:ViewController

import UIKit
import RealmSwift


class MemoTableViewController: UITableViewController {
    // 一部抜粋
            let memoModel = Memo()
            let realm = try! Realm()
            try! realm.write {
                memoModel.title = memo
                memoModel.content = memo
                memoModel.tags.removeAll()
                memoModel.tags.append(objectsIn: tags) // Listに追加                
    // 一部省略
            }
}

```
## List→Array
ListをArrayに変化するときは `Array()`で変換してあげれば大丈夫です！
また、 `Array型`に入れるときは `append(contentsOf:)`を用いるようです。

```swift:ListToArray
let testList = List<Tag>() //List型
var testArray = Array<Any>() // Array型

testArray.append(contentsOf: Array(testList)) // Array()でListを変換
```

# まとめ
　今回はListとArrayを変換しましたが、
RealmSwiftをimportし、使い回すという方法もありかもしれないです。

　Javaだと、配列もListも存在するので、Swiftも似た感じかと思い
ListがRealmSwiftの型ということに気づくのに時間かかってしまったので、
javaからSwift入る人は注意してください^^;

　ArrayでRealmに入れようとするとnilが入り、処理が落ちずに
保存に失敗するのも注意ポイントでした！

＊実装ベースで気づいたことをまとめたので、もし間違いや指摘がある場合は
確認・修正するのでコメントでお知らせくださいmm
Vuetifyスクラッチインストール時にiconを使いたい

# 概要

vue-cliなどを使わず、スクラッチインスールした場合、iconがない。

## app.ts

[Vuetify アイコン](https://vuetifyjs.com/ja/customization/icons/)を参考に設定する。

以下具体例。


```app.ts
import Vue from "vue";
import Vuetify from "vuetify";
import '@mdi/font/css/materialdesignicons.css' // Ensure you are using css-loader
import "vuetify/dist/vuetify.min.css";
import App from "./components/Main.vue";
import router from './router'

Vue.use(Vuetify);
new Vuetify({
  icons: {
    iconfont: 'mdi',
  }
});
new Vue({
  router: router,
  render: h => h(App),
  vuetify: new Vuetify()
}).$mount('#app')

```
新世代Javaプログラミングガイドの紹介（Java 10編）

##Java 10以降の知識の整理に
2020/3/13「新世代Javaプログラミングガイド」という本が[発売されました](https://www.amazon.co.jp/dp/B085RBT3LH)
この本は4部で構成されていて

* 第1部 Java 10
* 第2部 Java 11
* 第3部 Java 12
* 第4部 Java 言語拡張 プロジェクト「Amber」

となっています。
先日Java 14がリリースされたばかりなので最新のJavaのバージョンまで対応していなさそうですが、訳者がJava 13やJava 14についての追記や訳注をつけておりJava10からの変更点や新機能などについてわかりやすく整理されておりJavaに関わる仕事をしている人にはぜひ読んでほしい本だと感じました。
今回は上記4部のうちの「第1部 Java 10」の部分について感想などを述べたいと思います。
（内容についてはあまり深く解説いたしませんので、興味を持たれたら本を読むことをお勧めいたします）

##Java10 での変更点
Java 10については以下の4つについて書かれています。

* ローカル変数の型推論
* AppCDS アプリケーション・クラスデータ共有
* ガベージコレクタの最適化
* その他の改良点

###ローカル変数の型推論
Javaで変数の型宣言で var が使えるようになったことはわりと多くのJavaユーザが知っている思いまが、書籍ではどのような場合にvarが使えるのか、どのような場合は使えないのかについて詳しく書かれています。
また、コードチェックという簡単なクイズ形式の確認問題がついています。自分の理解度を確かめるのに役立つと思います。
ただ、時々ひっかけというか直接本題とは関係ない問題もでたりしますが、その場合は解説に「この問題は、〇〇とは直接関係ありません」などのように補足されています。
そして最後にvarを使うことで（型を明示的に記述しないために）変数名のつけ方がより重要になるという意見にまで言及されています。

###AppCDS アプリケーション・クラスデータ共有
アプリケーション・クラスデータ共有はJavaアプリの起動パフォーマンの向上やメモリ使用量の削減などに役立つ便利な機能ですが、日本語でのまとまった情報が少ないと思います。
書籍では実際にコマンドを実行してアプリケーション共有アーカイブファイルを作成するサンプルがあり実際に試してみることができます。

###ガベージコレクタの最適化
Java 9でデフォルトとなったG1 GCについて簡単に解説した上で、Java 9までは単一スレッドを使って実行されていたフルGCがJava 10では並列フルGCが提供されたことについて書かれています。
また、G1 GCのログの読み方なども解説されており内部の動作について理解が深まるでしょう

###その他の改良点
その他の改良点では以下の項目について説明されています

* JDKのソースを単一リポジトリへ統合
* スレッドローカル・ハンドシェイク
* ネイティブヘッダー生成ツールの削除
* 追加のUnicode言語タグ拡張
* 代替メモリデバイスでのヒープ割り当て
* Javaで書かれた実験的なJITコンパイラ
* ルート証明書
* 時間に基づくリリースのバージョン付け

開発者が直接使えない機能が多く、どの項目も簡単に触れられているだけですがGraalの話が出たり（もうご存じの方も多いと思いますが）Javaのバージョン付けについて解説されています。

以上、新世代Javaプログラミングガイドの紹介（Java 10編）でした。
【yarn】yarn add firebase-tools後にcommand not found: firebaseで実行できない

# はじめに
`yarn add firebase-tools`でfirebase用CLIをインストールしたが、コマンドを実行してみると以下のようにコマンドが見つからないエラーになった。その原因と解決方法を下記する。

```
# firebase login
zsh: command not found: firebase
```

# 原因
`yarn add firebase-tools`でインストールするとプロジェクトのローカル環境のみにインストールする。

```
/path/to/project/node_modules/.bin/firebase
```

# 解決方法
## グローバル環境にインストールし直す

そのプロジェクト以外でも使う予定がある場合は、以下のコマンドを実行することで、`firebase login`を使うことができるようになる。

```
# yarn global add firebase-tools
```

## ローカル環境で使う

そのプロジェクト以外で使う予定がない場合は、以下のコマンドを実行することで、インストールしたプロジェクト直下で`yarn firebase login`のようにすることでを使うことができるようになる。


# おわりに
個人的にはCLIは共通して使うので前者の方を採用しました！
Chainer の機械学習入門チュートリアル覚書

###きっかけ

* 大学院で画像解析、pythonやR使ってプログラミング、機械学習や統計について勉強といった具合に、いいとこ取りしてきた自分にとって、今まで学んできたことを体系的におさらいするには良いと思ったため。
* てか普通に忘却のかなたに連れ去られている事項も多いから、効率的に学び直せるものはないかと思ったら、下記の記事を見つけ、こりゃいいと思った。謝謝。
* https://qiita.com/DogFortune/items/221c182bc872025a57e7


###大事だと思ったことメモ
####基礎

```python:fundemental.py
# 型の確認
type()
#計算式使うときは、演算子の前後に空白入れようね。
1 + 1
#この空白は Python のコーディング規約である PEP8 でも推奨されています。

# 一方、商（整数部分）を返すような除算演算子として、 // 記号が用意されています。 / 記号を 2 回、間を空けずに繰り返します。計算結果として商を返す除算のことを、 切り捨て除算 (floor division) と呼びます。

## 累積代入文を使う場合
count = 0
count += 1
count

## Format構文
name1 = 'Chainer'
name2 = 'チュートリアル'

'{} {}へようこそ'.format(name1, name2)

#複合データ型
リスト (list)
タプル (tuple)
辞書 (dictionary)

#リスト

#リストから一度に複数の要素を取り出す操作であるスライス (slice) 

#リストへの値の追加があります。 リスト型には append() というメソッドが定義されており、これを用いてリストの末尾に新しい値を追加することができます。
array.append(2.5)

#タプル
#特徴
##タプル (tuple) はリストと同様に複数の要素をまとめた型ですが、リストとは異なる点として、定義した後に中の要素を変更できないという性質を持ちます。

#辞書型(Dict型)
##連想配列。キーと要素で構成される。
#他の人が定義した辞書に、どのようなキーが存在するのかを調べたいときがあります。 辞書には、そのような場合に使える便利なメソッドがいくつか存在します。
keys(): キーのリストを取得。dict_keys というリストと性質が似た型が返る
values(): 値のリストを取得。dict_values というリストと性質が似た型が返る
items(): 各要素の (key, value) のタプルが並んだリストを取得。dict_items というリストと性質が似た型が返る

#制御構文
## For文で使えるenumerate()関数
リストをイテラブルオブジェクトとして指定した場合、要素番号を取得できませんが、状況によっては要素番号を使用したいことがあります。そのような場合は、enumerate() という組み込み関数を使います。 これにイテラブルオブジェクトを渡すと、(要素番号, 要素) というタプルを 1 つずつ返すイテラブルオブジェクトになります。

#関数
# 関数 double() の定義
def double(x):
    print(2 * x)

#複数の引数を使う場合
# 関数の定義
def add(a, b):
    print(a + b)

#グローバル変数とスコープについて
a = 1

def change():
    global a  # a をグローバル変数である宣言
    a = 2       # グローバル変数への代入

# 関数の実行
change()

# 結果の確認 <- a の値が上書きされている
a

#上の例からもわかるように、global a という行を change() 関数内で a という変数を使用する前に追加すると、その行以降は a という変数への代入も関数の外側で定義されたグローバル変数の a に対して行われます。

#Classと継承について
最高にわかりやすいので、以下を参照
"https://tutorials.chainer.org/ja/src/02_Basics_of_Python_ja.html#%E3%82%AF%E3%83%A9%E3%82%B9"

```

```python:useful.py
for i in range(3):
    print('{}さん'.format(names[i]))

#zip()関数
names = ['Python', 'Chainer']
versions = ['3.7', '5.3.0']
suffixes = ['!!', '!!', '?']

for name, version, suffix in zip(names, versions, suffixes):
    print('{} {} {}'.format(name, version, suffix))
#もっとも長さの短い列の回数が反映されるため、suffixの'?'は使用されていない。

#While文のあまり使ったことない書き方（whileは無限に続けさせておいて、その中にif文を書いてbreakで終了させるやり方。）
count = 0

while True:
    print(count)
    count += 1
    
    if count == 3:
        break

#Whilie文で not を使ったループのやり方。
count = 0

while not count == 3:
    print(count)
    count += 1



```



#### pythonの強み
1. データ解析や機械学習によく使われている
2. Web アプリケーションの開発などでもよく使われている
3. 初学者がはじめやすい言語

####




###感想
自分が勉強してたのは5,6年前だけど、過去の黎明期に比べて、格段に内容が整理されていてクッソわかりやすい。こりゃいい。特にクラスの説明。クッソわかりやすい。今回の学習内容とは関係ないが、今までで１番の課題であった、論理的思考と感情的思考が頭の中で調和する瞬間があった。
Label Smoothing

## Label Smoothing とは
深層学習において過学習防ぐ手法. その名前の通り、極端なクラスの割り当てをソフトなものに変換して過学習を抑えようという手法.


本来の正解データ$y$に、各クラス$k$に対して何らかの値を持つ関数$u(k)$を加える.
$y_{ls}=y(1-w)+wu(k)$
$w$ : 重み
この$y_{ls}$を正解データとして学習させる.

$u(k)$ に $\frac{1}{k}$ が使われることが多い.
vscodeのRemote Developmentで仮想環境にsshする

# 環境
* デバイス:Mac 
* 仮想環境:Vagrant Ubuntu
* エディタ:vscode

# プラグイン
* Remote Development

# 背景
* vagrantでは共有フォルダが利用できるが、vscodeでササっと開発がしたかったため、リモートにsshできるプラグインを採用。

# 設定方法
1.Remote Developmentをインストール
vscodeのExtensionsのアイコンで検索し、インストールしてください。

2.ssh先の設定を確認
vagrantを起動するディレクトリで

```Apache 
$ vagrant ssh-config
```
こんな感じで表示される

```Apache 
  Host "ホスト名"
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/{USERNAME}/vagrant/ubuntu64_18/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
```

3..sshに設定を出力させた結果を記述

```Apache
$ vagrant ssh-config >> ~/.ssh/config
```

4.vscodeで接続してみる
画面左下に表示される```><```をクリックするorコマンドパレットで```Remote-SSH: Connect to Host```
接続先のホスト名を選択し、接続が完了する。
5分もあればできるので、、、楽なのでオススメです( ´_ゝ`)
AtCoder Beginner Contest 160の復習, E問まで(Python)

競プロ初心者の復習用記事です。

ここで書く解は解説や他の人の提出を見ながら書いたものです。自分が実際に提出したものとは限りません。

# A - Coffee
与えられた文字列の3文字目と4文字目が同じ、5文字目と6文字目が同じであるかを判定する問題です。

そのまま実装したのが以下のコードです。これでOK。

```python
s = input()
if s[2] == s[3] and s[4] == s[5]:
  print('Yes')
else: print('No')
```

# B - Golden Coins
与えられた金額`n`を両替して、500円玉一枚につき1000, 5円玉一枚について5と換算すると最大値はいくつでしょう？という問題です。

500円玉の枚数は`n//500`、5円玉の枚数は`n%500//5`で求まります。

以下のように実装しました。

```python
n = int(input())
print(n//500*1000 + n%500//5*5)
```

# C - Traveling Salesman around Lake
湖の周りに存在する家の位置を与えられて、最短経路で全ての家を回る距離を考える問題です。

湖の北端の位置を0として、そこから時計回りに二周分、家の位置を配列に格納しました。1周目のどれかの家をスタート地点にして、全ての家を回るまでの距離を計算して最大値を求めました。

```python
K, N = map(int, input().split())
A = list(map(int, input().split()))
A += [a+K for a in A]
minD = 1e6
for n in range(N):
  minD = min(minD, A[n+N-1] - A[n])
print(minD)
```

解説では書き方が異なりました。湖は一部を除いてほとんど一周します。通らない一部とは、最も距離の遠い家の間です。

ちょっと書き換えました。このほうがきれいですね。

```python
K, N = map(int, input().split())
A = list(map(int, input().split()))
A.append(A[0]+K)
maxD = 0
for n in range(N+1):
  maxD = max(maxD, A[n+1] - A[n])
print(K-maxD)
```
追記:pythonは`li[-1]`みたいにマイナスのインデックスを取れるので、配列を増やす必要もないですね。

# D - Line++

与えられたグラフから最短経路長の分布を出す問題です。

pythonでグラフ理論を扱うことのできる`networkx`というライブラリがあります。グラフの作成から各パラメータを取得することができるとても便利なライブラリです。これで分布を計算してみましょう。

```python
import networkx as nx

N, X, Y = map(int, input().split())
X -= 1
Y -= 1
out = [0] * N

G = nx.Graph()
G.add_nodes_from(list(range(N)))
G.add_edges_from([(i, i+1) for i in range(N-1)] + [(X, Y)])
for i in range(N-1):
  for j in range(i+1, N):
    out[nx.shortest_path_length(G, i, j)] += 1
for i in range(1, N):
  print(out[i])
```
まあatcoderではこのライブラリ使えないんですけど。

グラフの探索についてまるで勉強できていないので諦めて次の問題に行きました。

解説を見ました。この問題では実は難しい探索が全くいらないようです。A地点からB地点まで行くための距離は`B-A`(そのまま1個ずつ進んだ場合)、もしくは`abs(A-X) + 1 + abs(B-Y)`(X-Yのショートカットを通る場合)の二択しかありません。この二つのうち短いほうが最短経路。

というわけで、上記のコードから最短経路探索の方法だけ書き換えたのが以下のコードです。

```python
N, X, Y = map(int, input().split())
X -= 1
Y -= 1
out = [0] * N
for i in range(N-1):
  for j in range(i+1, N):
    out[min(j-i, abs(i-X)+1+abs(j-Y))] += 1
for i in range(1, N):
  print(out[i])
```
これで通りました。



# E - Red and Green Apples
美味しさ$p_i$を持つ赤いリンゴと美味しさ$q_i$を持つ緑のリンゴ、美味しさ$r_i$を持つ無色のリンゴが与えられます。赤いリンゴをX個、緑のリンゴをY個食べるときの最大のおいしさを求める問題です。無色のリンゴをどう扱うかがカギ。

赤いリンゴから美味しい順にX個、緑のリンゴから美味しい順にY個取ります。あとはX+Y個のリンゴから美味しくないものを順次無色のリンゴに置き換えていくだけ。

```python
X, Y, A, B, C = map(int, input().split())
P = list(map(int, input().split()))
Q = list(map(int, input().split()))
R = list(map(int, input().split()))
P.sort()
Q.sort()
R.sort()

out = P[-X:] + Q[-Y:]

out.sort()
for i in range(min(C, X+Y)):
  if R[-i-1] > out[i]:
    out[i] = R[-i-1]
  else:
    break
print(sum(out))
```

これで計算時間に余裕をもって解けました。

この記事はここまでとします。