OmniAICreator/Qiita-1.07M huggingface dataset:
VSCode(Visual Studio Code) 拡張機能：SFTPの設定と使用法

# sftpのインストール
拡張機能の画面で「SFTP」と検索＆インストールします


# 設定
view -> コマンドパレットからsftp.json
接続先の環境に合わせて設定します。複数の場合は{}をカンマで区切ればよいです
設定ファイルの保存先はワークスペースの.vscodeの下になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202675/41d07824-4f45-c5f1-4105-a6792a9c0602.png)


{
    "name": "****.domain",
    "host": "host名を設定",
    "protocol": "ftp",
    "port":21,//←環境に合わせてポート指定
    "username": "ユーザーID",
    "password":"パスワード",
    "remotePath": "/",
    "uploadOnSave": false
}

### uploadOnSave: 自動保存

「true」:自動的に設定したサーバーにアップロード＝上書きです


#SFTP: REMOTE EXPLORER

左メニューのsftpから
「SFTP: REMOTE EXPLORER」のアイコンから
エクスプローラーにサーバー上のファイルやフォルダーを表示できます

# 差分比較
右クリック：diff with remote でカラフルな表示で確認できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202675/482ae0c5-30e4-748a-d28b-f5f1eceeeacc.png)


# その他
IDEが便利な反面、重いのが難点でしたが、
vscodeなかなか便利なので状況・局面で使い分けるといいと思っています
AtCoder Beginner Contest 137 参戦記

# AtCoder Beginner Contest 137 参戦記

## [ABC137A - +-x](https://atcoder.jp/contests/abc137/tasks/abc137_a)

2分半で突破. 書くだけ.

```python
a, b = map(int, input().split())
print(max(a + b, a- b, a * b))
```

## [ABC137B - One Clue](https://atcoder.jp/contests/abc137/tasks/abc137_b)

4分で突破. 座標 X が右端のパターンと、左端のパターンを考えて、後は -k とか + k が突き抜けていないかを気にするだけ.

```python
k, x = map(int, input().split())
l = max(-1000000, x - k + 1)
r = min(1000000, x + k - 1)
for i in range(l, r + 1):
  print(i)
```
## [ABC137C - Green Bin](https://atcoder.jp/contests/abc137/tasks/abc137_c)

26分半もかかってしまった上に、TLE×2, WA×1. WA は一回 `//` で書いた後、`>> 1` にしようかと思いつつ、結局 `//` に戻した時に誤って `/` と書いたという凡ミス、泣く.
各文字列をアルファベティカルオーダーでソートすれば良いのは1秒で分かるので、後は2重 `for` で `==` な場合だけ `+= 1` するナイーブなコードを書いたが、PyPy でも TLE.
しょうがないので dict で各アナグラムの数を素直に数え上げて、<sub>n</sub>C<sub>2</sub> を計算して合計して回答.

```python
n = int(input())
s = [input() for _ in range(n)]
for i in range(n):
  s[i] = ''.join(sorted(s[i]))
t = {}
for i in range(n):
  if s[i] in t:
    t[s[i]] += 1
  else:
    t[s[i]] = 1
print(sum(t[k] * (t[k] -1) // 2 for k in t))
```

## [ABC137D - Summer Vacation](https://atcoder.jp/contests/abc137/tasks/abc137_d)

敗退. 見た瞬間にナップサックだ、DP だ、予習しててよかったと言いながら、EDP のときのコードを持ってきて打ち込んで WA を食らってから、入出力例を読んでナップサックじゃないことに気づく orz. その後は、思いつきで TLE だらけになるコードを書き上げて時間切れになったけど、TLE にならなかったら WA になるような気もする.

考え方としては

* M - 1 日は、A<sub>i</sub> = 1 の中で、B<sub>i</sub> が最大の日雇いアルバイトをやる.
* M - 2 日は、M -1 日のときの残りと、A<sub>i</sub> = 2 の中で、B<sub>i</sub> が最大の日雇いアルバイトをやる.
* ...

でいいはずなので、その通りにコードを組んでみたが、TLE だらけ. 毎回候補となる日雇いアルバイト全部を嘗めて最大の B<sub>i</sub> を探索しているのがまずいんだろうなあと思って、B の値の最大をキャッシュするようにしたら PyPy3 で通った. (Python3 は TLE 2個)

```python
n, m = map(int, input().split())
d1 = {}
for _ in range(n):
  a, b = map(int, input().split())
  if a in d1:
    d1[a].append(b)
  else:
    d1[a] = [b]
result = 0
d2 = {}
maxb = -1
for i in range(1, m + 1):
  if i in d1:
    for j in d1[i]:
      if j not in d2:
        d2[j] = 0
      d2[j] += 1
      if j > maxb:
        maxb = j
  else:
    if len(d2) == 0:
      continue
  result += maxb
  if d2[maxb] == 1:
    del d2[maxb]
    if len(d2) == 0:
      maxb = 0
    else:
      maxb = max(d2.keys())
  else:
    d2[maxb] -= 1
print(result)
```

過去、main 関数を作ってコードをその中に入れ呼ぶようにすると、変数がローカル変数になるため、1割～2割程度高速化していたのだが、今回は不思議なことに遅くなってしまった. 要研究. あと、Python3 では AC なのに、PyPy3 では WA になるのを初めてみた. PyPy3 の秘孔をついてしまったか.

追記: カツカツに最適化しても Python3 の TLE は一つも消えず困ったなあと思っていたが、解説で使うことになっている順序付きキューが最小のしか Python のビルトインにはなく、使えなくどうしようって感じだったけど、マイナスで突っ込んで、取り出したらマイナスして戻すという使い方をするということを知って、実装したらサクッと通った.

```python
from heapq import heappush, heappop
n, m = map(int, input().split())
jobs = {}
for _ in range(n):
  a, b = map(int, input().split())
  if a > m:
    continue
  if a in jobs:
    jobs[a].append(b)
  else:
    jobs[a] = [b]
result = 0
candidates = []
for a in range(1, m + 1):
  if a in jobs:
    for b in jobs[a]:
      heappush(candidates, -b)
  else:
    if len(candidates) == 0:
      continue
  result += -heappop(candidates)
print(result)
```
Rails チュートリアル第1章　躓いたポイント


基本ググりまくってますが、進めててうえ〜って思った箇所を抜粋します。
最初にgitの大まかな流れは勉強しといた方が良いかも。

(参考)https://qiita.com/suzutsuki0220/items/be10604e9e13126eba44


**＜目次＞**

- 1.4.3 Bitbucket
    - git push -u origin --all(リスト1.11)でエラーが出る
- 1.5.3 Herokuにデプロイする (2)
    - Heroku関連コマンドが使えない
    - ブラウザに"Hello,world!"のページが出力されない
        - 原因①：そもそもgit pushしていない
        - 原因②：heroku上に複数アプリがあるため干渉していたり、正常にデプロイ出来ていない



#1.4.3 Bitbucket
##git push -u origin --all(リスト1.11)でエラーが出る

```
$ git push -u origin --all
----

Bad owner or permissions on /home/hoge/.ssh/config
```

ググった結果、configファイルにはパーミッションというアクセス許可範囲が定められていて、AWSのデフォルトだとそれがガバガバなそう。ガードが甘すぎると怒られてしまうようです。
そこで、パーミッションの範囲をちゃんと定める命令を出します。

```
# パーミッションを限定
$ chmod 600 ~/.ssh/config
```
この後にgit push -u origin --allをかましてやると、上手く動いてくれました。


※参考にしたサイト↓
https://sekisuiseien.com/computer/11256/


#1.5.3 Herokuにデプロイする (2)

##Heroku関連コマンドが使えない
デフォだと、それまでherokuが使えていても、cloud9をログアウト・タイムアウトする度にherokuが使えなくなります。以下のエラーが出ます。

```
$heroku --version
heroku: command not found
```
herokuのversion確認だけでなく、heroku login --interactive等も同様のエラーが出ます。

このエラーの修正ですが、
まずは通常時はツリーに表示されない、いわゆる隠しファイルである.bash_profileに以下のコードを追加します。
(.bash_profileの位置はhttp://rakuda3desu.net/rails-railstutorial211-241/
を参照させて頂きました)

```
# $PATHの設定を追加
PATH=/usr/local/heroku/bin:$PATH
```

追加後、インスタンスを再起動すると・・・
(インスタンスの再起動方法はわかりづらいので、https://qiita.com/at0arumati/items/2001a7d48384231d5e01
で解説しています！)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481342/16929288-76df-9571-7b1b-4cc400645050.png)

↑このようにheroku関連のコマンドが使えるようになりました。

※参考にしたサイト↓
http://rakuda3desu.net/rails-railstutorial211-241/


##ブラウザに"Hello,world!"のページが出力されない
###・原因①：そもそもgit pushしていない
gitを理解していない初学者にありがち。(つい最近までの私。)
herokuに更新内容を送らないといけません。

手順としては、

gemfile等の編集(要はアプリ内容の変更)
↓

```
 git commit -a -m "Update Gemfile for Heroku"
```
↓

 ```
 git push heroku master
```

これで私はいけました。

###・原因②：heroku上に複数アプリがあるため干渉していたり、正常にデプロイ出来ていない
私はこのパターンでした。デプロイの命令自体は上手くいくのですが、ブラウザ上で表示すると、「Heroku | Welcome to your new app!」となってしまい、Hello,world!が表示される雰囲気はありませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481342/27ba7566-3f45-73b6-fb11-bc1e5eea3349.png)
(このような画面が表示されます)

この場合は、Heroku上に既存のアプリを一度全て削除することで解決しました。

```
# アプリの削除(確認無し)
heroku apps:destroy --app アプリ名 --confirm アプリ名
```

これで　$heroku createからやり直しましょう。

※参考にしたサイト↓
http://slowquery.hatenablog.com/entry/2014/04/06/112330

以上になります。

progateやドットインストールばかり学習していた私には障壁の多いRailsチュートリアルですが、躓きながらも確実に成長していきたいです。
各章終わる度に記事書いて行きたいと思います。
ラズベリーパイで製作する家電操作リモコン

#1　モチベーション

家電ごとに用意されたリモコンを操作管理する必要があり、時にリモコンを紛失することもあり、リモコンが見つかるまで家電の操作ができないということもあった。

また、家電メーカーがリモコンに実装した機能のみしか使用できず、定刻になれば家電をONまたはOFFにするといったような便利と思われる機能をユーザーが追加することはできなかった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/fc90bb05-93a2-86c2-d419-5e22f2ad0b5d.png)



#2 解決方法
家電ごとにバラバラであったリモコンを専用デバイス(共通リモコン)に集約させ、専用デバイスはラズベリーパイにより制御する。

またラズベリーパイ上にApacheによるhttpサーバーを立ち上げ、スマートフォン上のブラウザよりラズベリーパイを制御することにした。

ラズベリーパイにより家電を制御するので、定刻になったら家電を起動、または停止することも可能になった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150223/d9893e20-78b3-634c-07a3-b21e07be2b56.png)


#3 使用したデバイス

・Raspberry Pi(任意のversionで問題ない)
・共通リモコンADRSIR   [ラズベリーパイ専用学習リモコン](http://bit-trade-one.co.jp/product/module/adrsir/)
・ADRSIR[リモコンデータの取得方法](https://yoshitaku-jp.hatenablog.com/entry/2018/03/04/293/)
GoogleSpreadSheetでさくっとwebAPIを作成する方法

#背景
先日、業務でWebAPIを受け取りたいけど、サーバを造るのもあれだし、とにかくすぐ確認したい！という状況になったので色々調べてところ「GoogleSpreadSheet」で一瞬で作れるということがわかったので、まとめます。

#手順
①まずはGoogleSpreadSheetを開き、ツール→スクリプトエディタを開きます。
<img width="1032" alt="無題のスプレッドシート_-_Google_スプレッドシート.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234640/9022e606-f87b-bef9-cf4e-7c7374aac1d5.png">
⬇️
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234640/204cd4cc-5a7b-9c98-14e7-b4525d13667b.png)

②apiから送られてくるデータを受け取る記述をします。
※関数名は変えないでください。
※便宜上jsとしてますが実際はGoogle Apps Scriptです。

スプレッドシードのIDを確認する方法
URL：
https://docs.google.com/spreadsheets/d/hwearewarweareraweraweaweawerawerawe/
edit#gid=
d/と/editの間の「hwearewarweareraweraweaweawerawerawe」がスプレッドシートIDになります。


```googlespreadsheet.js
function doPost(e) {
  var id = 'aweraertaewtat';//ここにはスプレッドシートのIDを記入
  var ss = SpreadsheetApp.openById(id);
  var sheet = ss.getSheetByName("シート1");
  sheet.appendRow([decodeURIComponent(e.postData.contents)]);
}
```

③apiの作成
タブの「公開」→ウェブアプリケーションとして導入を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234640/c758e80f-6457-060a-8c06-f5a1fd18d866.png)

ポップアップが出てくるので、下記のように記載し、導入をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234640/4db02f1f-20fe-bd16-26c3-ddbf750d27b2.png)

URLが出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234640/d035ec02-a9b6-efc1-79b3-ca4030de5d81.png)

#最後に
作成されたURLをwebhookの宛先URLに指定することで、送信されるデータを確認することができます！
以上です。
AtCoder Beginner Contest 137 復習

#A問題
整数A,Bにおける、A+B, A-B, A*Bの最大値を返す関数max3を作る。

    #include<bits/stdc++.h>
    using namespace std;
    
    int max3(int *a,int *b){
        int c=max({*a+*b,*a-*b,(*a)*(*b)});
        return c;
    }
    
    int main(){
        int a,b,ans;
        cin >> a >> b;
        ans=max3(&a,&b);
        cout << ans;
        return 0;
    }
#B問題
黒石のx座標を出力する関数blackを作る。

数直線上に2000001個の石が置かれています。
これらの石の座標は−1000000,−999999,−999998,…,999999,1000000−1000000,−999999,−999998,…,999999,1000000です。
これらの石のうち、ある連続するK個の石が黒で塗られており、それ以外の石は白で塗られています。
また座標Xにある石は黒で塗られていることが分かっています。黒で塗られている石が置かれている可能性のある座標をすべて小さい順に出力してください。

    #include<bits/stdc++.h>
    using namespace std;
    
    int black(int a,int b){
        for (int i=b-(a-1); i<=b+(a-1); i++) cout << i << " ";
        return 0;
    }
    
    int main(){
        int K,X,ans;
        cin >> K >> X;
        ans = black(K,X);
        return 0;
    }
Qiita始めてみた：個人ノート0

### 自己紹介、初めた動機

- プログラミング言語の始まりは、学校でMATLABを習う
- それから、誰かからPython言語は無料らしいという事と、書きやすく・汎用らしいというのを聞きつけPythonをAnaconda Navigatorベースで独学で学びだす
- Matlab、Pythonを学ぶ傍ら、c++言語の実行速度が早い？というのをあちこちで聞き、いずれc++の基本的な文法を学ばなければと思っていた
- 「[AtCoder](https://atcoder.jp/)」をやりだして、c++を習いだしたので
c++のコードをマークダウンで書きたいなと思ったが、AnacondaのJupyterではc++コードを書き出す方法がよく分からず、調べているとc++に対応したQiitaのマークダウンの存在に気づく
- Qiitaにはc++のコミュニティもあり、皆さんのコメントを見ながらやる方がJupyterで黙々と自問自答するより良さそうだと思う

### **結果、「Qiitaでやってみるか」という結論に**


なのでQiitaでは基本的に

1. 黙々とc++のコードを書いて投稿しながら
2. コミュニティを覗いて知見を広げる
3. c++言語の知識を増やす為の調べ物を纏めてみる、そこから学んでみる

というスタイルになると思います
Vim ビジュアルモード・矩形選択

# Vim ビジュアルモード・矩形選択

カーソル上のテキストが開始位置になります

- v:文字単位
- V:行単位
- Ctrl+v：矩形選択

# 使い方
例えば選択した3行の先頭に「#」を挿入する場合はこんな感じです

```
<Ctrl+v>^jjjI#<space><Esc>
```
３行削除

```
Vjjd
```
初心者がGitの勉強会をやってみた話

# 概要

筆者はロボット系の研究室に所属する修士課程学生で、研究室内でGitを使う文化がないことに危機感を覚えていました。

そこで所属する研究室のメンバーを集め、自分主催のGit勉強会を開催した話です。

制作したスライドも公開してます。

# 前書き

## 筆者のレベル

プログラミング始めて4年くらいの修士課程学生。

プログラミングなどはすべて独学。Gitはサマーインターンで1か月使ったのをきっかけに使い始めた。

## 所属研究室の状況

### 研究テーマが個人別

* 一人一つテーマを与えられるため、同じコードを同時に複数人で編集するといったようなことは全くない

* 同系統の研究テーマにおいては、過去に先輩が使用したコードをUSBメモリなどで引き継いでいる

### 分野が機械系

* 情報系に比較してコンピュータやプログラミングに関する知識が乏しい人が多い（僕は自分で勉強している）
    * バージョン管理はファイルをコピーし日付を振るなどして行うという最悪な状況で、質問されたときに対処のしようがないことがしばしば。

### 使用している技術

* 組み込みPCのプログラミングをC言語で行うことがほとんど
* ROS(Robot Operating System)を使用する研究テーマが増えてきており、github上のパッケージを使用することも多いが、そもそもほとんどのメンバーがgit cloneやforkを知らない

## Gitを普及させるにあたって考えたこと

### 個人開発にフォーカスした内容から入る

テーマの特徴に合わせ、ローカルでGitを十分扱えるようにできればと考えた。

(Gitの参考書では、初めから共同開発の話をしているものが多かった気がする）

### VSCodeでGitを使いたい

自分がインターンで経験したGitの使い方がこれだったから。

Source Treeで解説しているものも多いが、Linuxでは使えないので当研究室では不向き（ROSを使用する人が多いため）。

## 勉強会の構成

合計2回を予定し、

* 第1回　gitの使い方・ローカルリポジトリ（8/5に実施。）
* 第2回　リモートリポジトリ（これからやる予定。スライド作成中。）

という具合に内容を分けた。

# 第1回

* スライドは[こちら](https://speakerdeck.com/riku929hr/gitmian-qiang-hui)

<script async class="speakerdeck-embed" data-id="148acc2341f7405c8244da1313366c6a" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

* 参加者：研究室の希望者12人
* PC持参のハンズオン
* 時間：2時間半くらい

### 留意したこと

* なるべく簡潔にGitとは何かが分かるようにした（つもり）
* resetやamendなど、よく使うけど参考書に出てきにくいところも押さえた

### 感想

自分も初心者なので、自分が教えることによって自分自身の勉強にもなった。

参加者からは「勉強になった」という声をもらえたのでよかった。

わかりにくかったところとかが知りたいんだが、遠慮してるのかなかなか言ってもらえない…

# 今後

2回目を計画しているので近いうちにやりたい（スライド類準備中）。

初投稿なのでちょっと緊張してます(;・∀・)
Swift:「__NSCFNumber」をStringにする際の対処方法

#はじめに
jsonをパースする際`__NSCFNumber`を`String`にキャストする際に躓いたため、備忘録を含め記録として残したいと思います。

以下のようにしていただければ解決できるかと存じます。

```swift:solved
let hoge = String(describing: fuga)
```

今回参考にした記事です。
より詳細に記載がりますので、よろしければご参照ください。
https://stackoverflow.com/questions/48847788/swift-4-could-not-cast-value-of-type-nscfnumber-to-nsstring

ご参考になれば幸いです。
音声データを周波数に分解して描画する 

###はじめに
FFT（高速フーリエ変換）を使って、音声データを周波数に分解し、リアルタイムにグラフにプロットする。
音声データを周波数に分解して解析することで、楽器の音色の特性を見たい。（例えば弦楽器と管楽器では同じ音程でも音色から受ける印象は全く異なるなど。）

FFTについて詳細は以下参照。
https://ja.wikipedia.org/wiki/%E9%AB%98%E9%80%9F%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B

入力形式はwavファイルとしています。
以下のサンプルとして、入力しているのはバイオリンソロの曲です。

###実行結果
以下に実行時の断面の画像を記載します。
Mac環境だと少し再描画時にゴミが残ってしまっている。（Ubuntuでは問題はなかった。）
画像上段：音声データをそのままプロットしたもの（縦軸は振幅、横軸は時間）
画像下段：音声データをFFTした結果（縦軸は振幅、横軸は周波数）

画像からバイオリンの1つの音程にも複数の周波数（倍音）が混ざっていることがわかります。
この周波数の分布がそれぞれの楽器特有の音色を構成していると推測されます。
<img width="1144" alt="FFT.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402891/4a7360a9-3a5e-74da-adc9-d71019680a32.png">

複数のライブラリを使用しています。
詳細はソースコードを参照ください。

###ソースコード
いろいろ雑なところがあるので、後日リファクタリングします。

```
# coding: UTF-8
import wave
import pyaudio
from numpy import *
from scipy import fft, zeros, arange
from PyQt4 import QtGui
import pyqtgraph as pg

def printWaveInfo(wf):
	print("チャンネル数: " + str(wf.getnchannels()))
	print("サンプル幅: " + str(wf.getsampwidth()))
	print("サンプリング周波数: " + str(wf.getframerate()))
	print("フレーム数: " + str(wf.getnframes()))
	print("パラメータ: " + str(wf.getparams()))
	print("長さ（秒）: " + str(float(wf.getnframes()) / wf.getframerate()))

class ButtonBox(QtGui.QWidget) :
	def __init__(self, parent = None):
		QtGui.QWidget.__init__(self, parent = parent)

if __name__=="__main__":

	wf = wave.open("Partita2.wav", "rb")
	printWaveInfo(wf)
	buffer = wf.readframes(wf.getnframes())
	print(len(buffer))
	data = frombuffer(buffer, dtype="int16")
	wf = wave.open("Partita2.wav", "rb")
	p = pyaudio.PyAudio()
	stream = p.open(
		format = p.get_format_from_width(wf.getsampwidth()) ,
		channels = wf.getnchannels () ,
		rate = wf.getframerate () ,
		output = True
	)

	app = QtGui.QApplication([])
	app.quitOnLastWindowClosed()

	w = QtGui.QWidget()		#top level wodgit
	w.resize(850, 700)
	layout = QtGui.QGridLayout()
	w.setLayout(layout)
	w.setWindowTitle("Spectrum Analyzer")

	pw = pg.PlotWidget()
	pw2 = pg.PlotWidget()
	pw.getPlotItem()
	pw.setYRange(-12000, 12000)
	pw.setXRange(0, 440)
	pw2.getPlotItem()
	pw2.setYRange(0,6000)
	pw2.setXRange(0, 1024, padding = 0)
	fs = wf.getframerate()

	#グラフ描画設定
	pw2Axis = pw2.getAxis("bottom")
	pw2Axis.setLabel("Frequency [Hz]")
	pw2Axis.setScale(fs / 1024)
	hz_interval = 500
	newXAxis = (arange(int(fs / 2 / hz_interval)) + 1) * hz_interval
	oriXAxis = newXAxis / (fs / 2. / (1024 + 1))
	pw2Axis.setTicks([zip(oriXAxis, newXAxis)])

	layout.addWidget(pw, 0, 1)
	layout.addWidget(pw2, 1, 1)
	w.show()

	num = wf.getnframes()
	x = arange(0, num, 2)
	chunk = wf.getframerate() / 12
	d = wf.readframes(chunk)
	data2 = data[::2]
	signal_scale = 1. / 500
	signal = zeros(chunk, dtype = float)

	for i in range(0, num, chunk) :
		pw.plot(x[0:chunk], data2[i: i + chunk], clear = True)     #波形
		signal = data2[i: i+chunk]	 #フーリエ変換
		fftspec = fft(signal)
		pw2.plot(abs(fftspec[0: chunk / 2] * signal_scale), clear = True)  #スペクトル
		stream.write(d)
		QtGui.QApplication.processEvents()
		d = wf.readframes(chunk)

	app.exec_()

```
C++ Builder 10.2 Tokyo > coding / debug > BookarmkではなくBreakpointを使って変更対象を管理する

```txt:動作環境
RAD Studio 10.2 Tokyo Update 3 
Windows 10 v1903 
```

### Bookarmk

Ctrl+1などでコードの途中にBookarmkを追加できる。
これまではそれを使っていた。
一つの欠点として、Bookarmkしたときに一覧から辿れないこと。

- [RAD Studio 10.3.1の新しい生産性向上ツール：Bookmarks](https://community.idera.com/developer-tools/b/blog/posts/new-productivity-tooling-in-rad-studio-10-3-1-bookmarks-ja)

> この原因の一つはブックマークのリストがなかったことであり、ブックマークがどこにあるのか、そしてどれが設定されているのかを知ることが容易ではなく、また、キーボードでアクセスできるのは9〜10か所だけでした。

そもそもBookarmkの一覧がないようだ。
Rioにはあるかもしれないが、Tokyoにはない。

### Breakpointでの管理

ふと思いついたのが「BookmarkではなくBreakpoint」での管理。
自分が変更をしたい対象コードを検索で見つけ、Breakpointに登録していく。

利点: **Bookarmkには一覧表示がある。**

実際にやってみたが、自分のやりたいことができた。

### debug

Breakpointに登録したものは、そのままdebugに使える。

### 短所

この方法の短所は、他のBreakpointと混在すること。

変更対象のBreakpointと、デバッグ用のBreakpointを一緒に扱いたい場合には向かないだろう。
【Kotlin:Androidアプリ】EditTextに数字を入力すると、リアルタイムで計算結果を画面に表示させる方法

## はじめに
EditTextに入力した数字がリアルタイムで他の値と計算されて画面に表示するにはどうすればいいか分からなかったので、調べたことをまとめました。

## 事前説明
今回は買い物処理を例に、支払い金額がすでに画面に表示されていて、預かり金額を入力するとおつりが自動的に表示されるようにします。

```kotlin:activity_purchase.xml

<EditText      //支払い金額がすでに表示されているEditTextのID
      android:id="@+id/editTextPurchaseTotal"/>
<EditText      //これから預かり金額を入力するEditTextのID
      android:id="@+id/editTextPurchaseMoney"/>
<EditText      //自動でおつり金額を計算し表示させるEditTextのID
      android:id="@+id/editTextPurchaseChange"/>
```

```kotlin:PurchaseActivity.kt
var intPurchaseTotal: Int = 0   //支払い金額
var intPurchaseMoney: Int = 0   //預かり金額
var intPurchaseChange: Int = 0  //おつり
```

## テキストがリアルタイムで変更されるようにする

EditTextに文字を入力した時にリアルタイムに変更を行うには「addTextChangedListener」と「TextWatcher」を使用します。

```kotlin:PurchaseActivity.kt

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_purchase)

        editTextPurchaseMoney.addTextChangedListener(object : TextWatcher{
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            //文字入力の前に行う処理を書く場所
            }
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            //文字入力の最中に行う処理を書く場所
            }
            override fun afterTextChanged(s: Editable?) {
            //文字入力の後に行う処理を書く場所
            }
        })
    }
```

上記画面の
「s: CharSequence?」は現在入力されている文字列を、
「s: Editable?」は編集後の文字列を表しています。

次に、「afterTextChanged」内に「おつり金額」の計算処理を書きます。
sは文字列のため、入力した数字を「.toString().toInt()」でInt型に変換します。

```kotlin:PurchaseActivity.kt

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_purchase)

        editTextPurchaseMoney.addTextChangedListener(object : TextWatcher{
            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            
            }
            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
            
            }
            override fun afterTextChanged(s: Editable?) {
            //入力値をInt型に変換し、おつりの計算をした後に「editTextPurchaseChange」に計算結果を表示させる。
            editTextPurchaseChange.setText((s.toString().toInt() - intPurchaseTotal).toString())
            }
        })
    }
```

これで「editTextPurchaseMoney」に金額を入力すると「editTextPurchaseChange」におつりが表示されます。

## おわりに
今回はおつりの計算結果を表示させるのにEditTextを使用していますが、TextViewでも同様に表示することができます。（本来はそっちの方がいいかも）
また、支払い金額を事前に表示しておいたり、入力を数字に限定する必要があるのですが、今回それらの手順は省略しています。
PHPの標準入力を処理する

#はじめに
こんにちは。
最近はpaizaのスキルチェック問題にはまっています。

今回はスキルチェックで使用する標準入出力用のクラスを作成したので、
まとめとして共有します！

```paiza.php

class Input
{
    private $input;
    
    //一行
    public function one_input()
    {
        $in = trim(fgets(STDIN));
        $input = explode(" ",str_replace(array("\r\n","\r","\n"), '', $in));
        return $input;
    }
    
    //複数行
    public function multi_input()
    {
        while($in = trim(fgets(STDIN))){
            $input[] = explode(" ",str_replace(array("\r\n","\r","\n"),'', $in));
        }
        return $input;
    }
    
    //出力
    public function output($output)
    {
        echo $output . PHP_EOL;
    }
}


```
AWS インスタンスの再起動方法

amazonの解説が専門用語だらけでわかりにくいので解説。

以下のページにそって説明していきます。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-reboot.html

太字「コンソールを使用してインスタンスを再起動するには」の部分。

#1.Amazon EC2 コンソールを開きます。

なにそれって話ですが、以下のページです。
https://us-east-2.console.aws.amazon.com/ec2/v2/home?region=us-east-2#Home:

開けなければ、EC2ダッシュボードというページを探して下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481342/820a7e30-8b0a-069c-bc0c-469b5a7ce1bd.png)

#2.ナビゲーションペインで、[インスタンス] を選択します。

ナビゲーションペインって何。説明する気無いのか？

これだそうです。↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481342/bf132193-c304-5fa7-8645-c23b1ab75049.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481342/8b554564-113d-b0c6-a437-820001d64cb0.png)

(現在存在するインスタンスがこんな感じの画面で表示されます。)


#3.インスタンスを選び、[Actions]、[Instance State]、[Reboot] の順に選択します。

上の画像の、赤い四角枠内の、「アクション」→「インスタンスの状態」→「再起動」を選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481342/82bd15e5-04bc-9621-baab-5a3a072997b2.png)


以上で再起動が出来ます。
DOMとは何か？

#DOMとは何か？
DOM(Document Object Model)とはHTMLドキュメントの構造を記述するものです。
##JavaScriptがすること
この仕組みを利用して、Javascriptはページを再読み込みすることなく、動的にHTMLドキュメントを書き換えることができます。

#DOMの操作方法-取得
##idから取得する
```javascript:sample.js
const elements = document.getElementById('sampleId');
```
```html:sample.html
<div id="sampleId">hogehoge</div>
```
##Tagから取得する
```javascript:sample.js
const elements = document.getElementsByTagName('li');
```
```html:sample.html
<li>hogehoge</li>
```
##Nameから取得する
```javascript:sample.js
const elements = document.getElementsByName('sampleName');
```
```html:sample.html
<input name="sampleName">
```
##Classから取得する
```javascript:sample.js
const elements = document.getElementsByClassName('sampleClass');
```
```html:sample.html
<p class="sampleClass">hogehoge</p>
```
##DOMの操作方法-ノードの生成
```javascript:sample.js
const li = document.createElement('li');
const text = document.createTextNode('追加文字列');
```
##DOMの操作方法-ノードの削除
```javascript:sample.js
const parentElement = document.getElementById('lists');
const elements = parentElement.getElementsByTagName('li');
const removeIndex = elements.length - 1;
parentElement.removeChild(elements[removeIndex]);
```
#参考資料
[DOM の紹介 - Web API | MDN](https://developer.mozilla.org/ja/docs/Web/API/Document_Object_Model/Introduction)
Pandas

```python:DataFrameの作成
df = pd.DataFrame({'C1':[1, 2, 3],
                   'C2':[4, 5, 6], 
                   'C3':[7, 8, 9]},
                   index = [A, B, C])
```

```python:ユニークな値の数を確認
df.unique()
```

```python:欠損値の確認
df.isnull().sum()
```

```python:行名・列名を確認
df.index
df.columns
```

### データの選択と抽出

```python:基本的な選択
df.loc['A']
df.loc[:, 'C1']
df.loc['A', ['C1', 'C3']]

df.iloc[1]
```
### 条件による選択
```
df > 0  #ブール型
df[df > 0] #Falseの部分がNaNで返ってくる
df['C1'] > 0
df[df['C1'] > 0]
df[(df['C1'] > 0) & (df['C1] < 1)]
```
### データの追加と削除
```python:
df['New Column'] = df['C1'] * df['C2']
df.drop(columns=['C1']) #「inplace=True」にすると元のデータを書き換える
```
### 欠損値の処理
```python:削除
df.dropna()
df['C1'].dropna()

df.isnull()
df[df['C2'].isnull() == False] #C2が欠損していないところだけを取り出す

df.dropna(thresh=3) #欠損値の数を指定
df.dropna(thresh=3、axis=1) #列に適用

```
```python:置換
df['C2'].fillna(df['C2'].mean())
df.fillna(df.mean())
```
```python:カテゴリカルなデータ
df['C1'].value_counts() #それぞれのカテゴリの数を返す
df['C1'] = df['C1'].fillna(df['C1'].mode()[0])

round(df['C1'].value_counts / len(df), 2)

df.groupby('C1').sum() #カテゴリごとに合計
df.groupby('C1').mean()
df.groupby('C1').max()
```
### DataFrameの結合
```
pd.concat([df_1, ds_2])
pd.concat([df_1, ds_2], axis=1, sort=True)
Google Cloud認定試験　Professional Data Engineerに合格しました

# プロフェッショナルデータエンジニアに合格しました

2019の4月、5月とGCPの資格を取得し、本業に一番近そうなDataEngineerも受けてみようとの思いから、2019/6に受験をし、見事に合格しました！
スペック、勉強方法などを共有致します

## 本人スペック
サーバサイドエンジニア(BigData)
AWS歴 3年
GCP歴 2年
Hadoop,Kafke,PrestoなどBigData周りのOSS経験あり
[Associate Cloud Engineer](https://cloud.google.com/certification/cloud-engineer?hl=ja) 2019/4　取得
[Professional Cloud Architect](https://cloud.google.com/certification/cloud-architect?hl=ja) 2019/5　取得

## 試験概要
制限時間：120分
試験問題：50問

## 勉強方法
[公式ページ](https://cloud.google.com/certification/data-engineer?hl=ja)を読み[出題範囲](https://cloud.google.com/certification/guides/data-engineer-2/?hl=ja)の確認
(こんな内容の問題が出るんだな〜程度の認識)

[模擬試験](https://cloud.google.com/certification/practice-exam/data-engineer?hl=ja)を受験し、どの部分が弱いのかを把握
(私の場合は模擬試験を受けた際は65%の正解率)

[スケーラブルデータサイエンス データエンジニアのための実践Google Cloud Platform](https://www.amazon.co.jp/%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%96%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9-%E3%83%87%E3%83%BC%E3%82%BF%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E5%AE%9F%E8%B7%B5Google-Platform-Valliappa-Lakshmanan/dp/4798158836/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr=)を読破
(dataflow触ったことない人にはこの本のチュートリアルがとにかくオススメ！)

QuickLab [Data Engineering quest.](https://google.qwiklabs.com/quests/25?utm_source=gcp&utm_medium=site&utm_campaign=certification)を受講
(自分の触ったこと無いサービスを中心に)

[ケーススタディのサンプル](https://cloud.google.com/certification/guides/data-engineer/?hl=ja)を読み、どうやってGCPに移行するか自分なりに考える。その際に触ってないサービスについては深堀りして調べる。

## 受験所感
上記の勉強の後に受験をしてなんとか合格することが出来ました！
今回私の場合は、仕事の範囲にあった試験なので、もともと持っていた知識で答えられた部分が多かったのかなと思います。
GCPというよりも、BigData領域に対して詳しい人だと受かりやすいかなーという印象でした。
時間配分でいうと1時間半かけて、全部の問題を答え、残り30分で見直しという配分でした。ただ、当日熱を出してしまい、発熱の中での受験だったので体調が良ければもう少し早めに終われたかもしれません・・・
また、受験日ですが、結構空いているところがすくなく、1ヶ月後の試験しか空いてないとかあるので、受験をする人はなるべく早く会場をおさえたほうがよいと思います

## 合格してよかったところ
GoogleCloudNextで認定者ラウンジに入れます！！！

サンフランシスコのGoogleCloudNextではこんなダウンジャケットを貰うことが出来、keynote会場では認定者用の席が用意されていました。
![Image from iOS (18).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80769/bca640d8-4d60-e18d-b551-622a816ebfd5.jpeg)


東京のGoogleCloudNextではバックパックを貰うことが出来ました。
![Image from iOS (19).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80769/ed570937-dcbc-6742-9b1a-fcc5741bac6a.jpeg)

また、合格後には認定シールと、認定記念品としてバックやパーカーなどから好きなものを選ぶことが出来ます。
私はパーカーを選びました(175cmでmen'sのMサイズがぴったりでした)


今年始めてGCPの資格を取りましたが、AWSの資格などもこれで興味が湧いてきたので、次はAWSの[BigData](https://aws.amazon.com/jp/certification/certified-big-data-specialty/)あたりに挑戦したいと思っています！！
Formik + TypeScriptでフォームを実装してみる

# Formikとは
* Reactのフォーム実装は複雑になりがちなので、それをシンプルに実装できるようにしたライブラリ。

## Formikを使わない実装と使った実装で比較
* 入力された値を`alert()`で表示するフォームを実装
* 言語はTypeScript

### 純粋なReactのみで実装したフォームの実装コード
```typescript

const PureForm: React.FC = () => {
    const [value, setValue] = useState<PostValues>({ text: "" });

    const handleSubmit = (event: React.FormEvent<HTMLFormElement>): void => {
        alert(value.text + "が入力されました！");
        event.preventDefault();
    };
    const handleChange = (event: React.ChangeEvent<HTMLInputElement>): void => {
        setValue({ text: event.target.value });
    };

    return (
        <form onSubmit={e => handleSubmit(e)}>
            <input type="text" name="text" onChange={e => handleChange(e)} />
            <button type="submit">送信</button>
        </form>
    );
};
```
### Formikを使ったフォームの実装コード
```typescript

const FormikForm: React.FC = () => {
    return (
        <Formik
            initialValues={{ text: "" }}
            onSubmit={(values: PostValues, actions: FormikActions<PostValues>) => {
                actions.resetForm();
                alert(values.text + "が入力されました！");
            }}
            render={() => (
                <Form>
                    <Field type="text" name="text" />
                    <button type="submit">送信</button>
                </Form>
            )}
        />
    );
};
```
* まず、コンポーネント内で明示的にフォームのstateを管理する必要が無くなるのが大きい。
* TypeScriptで実装しようとすると`event`の型を定義してあげる必要があり、`React.FormEvent<T>`や`React.ChangeEvent<T>`といったような普段あまり意識しないような型を定義してあげる必要がある。
    * 公式チュートリアル(JavaScriptで書かれている)で勉強しているときに型が分からず見事にハマった。 ~~any型で回避~~
* `render()`の中で使っている[Form](https://jaredpalmer.com/formik/docs/api/form)と[Field]
(https://jaredpalmer.com/formik/docs/api/field)タグはFormikで用意されているもの。

## Formikを使ってみた所感
* Reactのフォームのクセが上手くラップされていて使い勝手が良かった。
* ライブラリを用いずバリデーションをかけようとするとかなり大変そうだったが、[Yup](https://github.com/jquense/yup)と組み合わせる事でシンプルにバリデーションを実装できるのがありがたかった。（今回のコードではバリデーションは未実装。）
* 学習コストはそれほど高くないように感じたのでフォームの実装で苦労している場合は導入してみると良いかなと感じた。

## 参考
* Formikの[公式ドキュメント](https://jaredpalmer.com/formik/docs/overview)
【Java】forEachメソッド




```java
public class Array {

	public static void main(String[] args) {
			
		List<Employee> list = new ArrayList<Employee>();
		list.add(new Employee("tanaka", 25));
		list.add(new Employee("yamada", 28));
		list.add(new Employee("suzuki", 20));

		list.forEach( s -> System.out.println(s.getName() + ":" + s.getAge()));
     }
}
```

繰り返す実行処理が一つの場合このように一行で書けるが、複数ある場合は｛｝で実行処理を囲う

```java
		list.forEach( s -> {
			System.out.println(s.getName());
			System.out.println(s.getAge());
		});
```



ラムダ式を使わない書き方は以下のようになる

```java
		list.forEach(new Consumer<Employee>() {
			@Override
			public void accept(Employee e) {
				System.out.println(e.getName() + " : " + e.getAge());
			}
		});
```
今更Raspberry Pi 2の設定

4が発表されたという事で、長い間眠っていたRaspberry Pi 2（以下ラズパイ）を久々に起動してみる、余っていたmicroSDで最初からやり直しだ。

基本リモートで接続して使うのでRaspbian BusterのLiteをインストールすることにした。

### ダウンロードとセットアップ

下記のコマンドでフォーマットしてアンマウント

```shell
diskutil list

/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *4.0 GB     disk2
   1:                        EFI EFI                     209.7 MB   disk2s1
   2:       Microsoft Basic Data RPI                     3.8 GB     disk2s2

diskutil eraseDisk MS-DOS RPI disk2

sudo diskutil unmountDisk /dev/disk2

```

[こちら](https://www.raspberrypi.org/downloads/raspbian/)からRaspbianをダウンロードし、イメージをインストール


```shell
sudo dd bs=1m if=/Users/mathahal/Downloads/2019-07-10-raspbian-buster-lite.img of=/dev/disk2 conv=sync

2096+0 records in
2096+0 records out
2197815296 bytes transferred in 1982.917096 secs (1108375 bytes/sec)

sudo diskutil eject /dev/disk2
```

  
**Lite又は新しいバージョン（前はできた）だとssh接続が最初からできないので、ラズパイに直接機器を繋いで設定しないとダメみたい。前はフルのRaspbianだったからインストール後すぐにssh接続できたのに、今回は何度やっても弾かれたので少しハマった。**
そんなわけでMicroSD、HDMI、LANケーブルとキーボードをラズパイに挿して電源を入れる。

### Wi-Fiを使えるようにする

2は有線しか使えないのでUSBにアダプタを挿して無線で使えるようにする

```
wpa_passphrase ssid password
```

/etc/wpa_supplicant/wpa_supplicant.confに以下を追記

```shell
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP
network={
        ssid="ssid"
        psk=password
}       
```
/etc/network/interfacesに以下を追記

```shell
auto lo
iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
```
rebootするとWi-Fiが使えるようになる

### SSH公開鍵認証の設定

毎回パスワードを入れるのはめんどくさいので公開鍵認証で接続できるようにする

```shell
ssh-keygen -t rsa
ssh-copy-id pi@raspberrypi.local
```

id_rsaを別名に変更する

```shell
mv id_rsa rp_rsa
```

.ssh/configに以下を追記

```shell
Host rp
HostName raspberrypi.local
User pi
IdentityFile ~/.ssh/rp_rsa
```

### 諸々アップデート

```shell
sudo rpi-update
sudo apt-get upgrade
sudo apt-get dist-upgrade
```
【Nuxt】generateするとfont-familyのクオーテーションが消えてバグる対処法について

## Nuxtを静的化するとfont-familyがバグる

### 記述したコード

```base.css
body {
  font-family: "Crimson Pro", "Noto Serif JP", sans-serif;
}
```
### generateする

```
$ yarn generate
```

### generate後のコード

```dist/index.html
<style>
body {
  font-family:#dc143c Pro,"Noto Serif JP",sans-serif;
}
```

クオテーションが外れた事でCrimsonがカラーコード #dc143cに変換されてしまっています・・・。

<img width="406" alt="スクリーンショット 2019-08-12 14.25.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239038/494eeef7-333b-8dcd-583f-f216a249c001.png">


## 解決方法

nuxtのバグではなく、スタイルシートを圧縮してくれるcssnanoが不要なクオテーションと判断して削除していたようです。

* [minifyFontValues-cssnano](https://cssnano.co/optimisations/minifyfontvalues/)

nuxt.configに下記のオプションを無効にするよう設定してあげましょう。

```nuxt.config
  build: {
    postcss: {
      plugins: {
        cssnano: {
          preset: ['default', {minifyFontValues: {removeQuotes: false}}]
        }
      }
    }
```


## Thanks
教えていただいたふくいさん、ありがとうございました！
https://twitter.com/var_fukui/status/1159926704908820480
KDD2019 論文メモ


[まとめページへのリンク](https://qiita.com/kotaaaa/items/4f144d660d504cc091cf)

論文は，[予稿集](https://www.kdd.org/kdd2019/proceedings)のタイトル検索で！
KDD2019にて，個人的に，面白かった発表のリストです．
専門はNLP， Data-miningなので， そのあたの分野が中心です．


##MSURU: Large Scale E-commerce Image Classification with Weakly Supervised Search Data

- ユーザーの検索ログを教師あり学習のラベルに使って，教師ラベル作成の自動化に関する研究
- 教師ラベル作成は，非常にコストの掛かる作業なので，そこを自動化したい．
- もちろん，ログには，ノイズも多く含まれているので，その意味で"Weakly Supervised"というタイトルらしい
- データ: facebook marketplace


##dEFEND: Explainable Fake News Detection

- チュートリアル（fake news）と，ポスターで発表されたファイクニュース検出に関する研究．
- データ: politifact, GossipCop
- 入力: ニュース記事， ユーザーのコメント
- 出力: フェイクかどうか（2値）
- 貢献: ニュース記事， ユーザーのコメントそれぞれからのエンコーダから得られる情報に注意機構を入れて（attention）説明可能なフェイクニュース検出モデルを構築

## Interpretable and Steerable Sequence Learning via Prototypes

- 解釈可能で扱いやすい，時系列学習モデルの提案
- モデルの解釈性向上のため，事例ベース推論（過去の類似した事例を利用して問題解決をする）の機構をsequence encoderの後に追加．
- 過去の事例との類似度を計算する．事例は，追加，修正，削除して，逐次更新， 繰り返しモデルはfine-tuning される．
 - “food is good” は典型的な，ポジティブ極性を表す事例
- 複数のsequencialなデータ（テキストの感情分類，自動車の故障予測,タンパク質の配列分類）で実験
- 精度は シンプルなlstmのモデルより，5~10ポイント下がるらしい（精度より，解釈性の向上を目的とした研究）
Linuxのaptコマンドがfailedする

#概要
bitdefender製のセキュリティソフトがapt upgrade, installを妨害して、upgradeが出来ないという問題がある。

#環境
PC-OS : Windows10
仮想OS : Kali, Ubuntu
仮想化マシン : VirtualBox, WSL
セキュリティソフト : スーパーセキュリティ

#起きる問題
セキュリティソフト、スーバーセキュリティがウィルスを検知して、apt upgrade, install時、下記のようなエラーが出て失敗する。
すんなり実行できるときもある。おそらく一部のパッケージがダメなのだろう。

`E: Failed to fetch http://ftp.jaist.ac.jp/pub/Linux/kali/pool/non-free/w/wce/wce_1.42-beta-0kali3_all.deb  403  Blocked by Bitdefender [IP: XXX.XX.X.XXX XX]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
root@kali`

#以前述べた解決策
以前の記事で述べたのは、とりあえずアンインストールすれば治るということであった。
こういう開発で手順通りにやっているのに、エラーを起こすのは半分くらいの割合でセキュリティソフトのせいな気がする。
この場合、フォーラムに質問してもなかなか解答は得られない（質問者がセキュリティソフトについて書かないことが原因でもある）

#より厳密な解決策
私はスーパーセキュリティを使っているので、スーパーセキュリティの手順を説明します。
カスペルスキーなどの場合は適宜読みかえてください。
"オンラインからの攻撃防御"の"設定"内にある"web攻撃からの保護"をOFFにするだけ。
アップデートが完了した後は戻しておきましょう。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473297/3364cb41-8fc5-ffb6-d894-8864d6c20d4d.png)
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473297/a5f9e42c-2f8e-ca6a-2af8-3fb4e2240e5e.png)

#まとめ
よく考えてみればダウンロード時、アドレス先でエラーを起こしていて、セキュリティソフトをアンインストールすれば治るのだから原因はこれしかなかった。。。外部アプリをインストールしている方は慎重に行ってください。一時的にセキュリティをOFFにするのでウィルスが入る可能性もあります。責任はとれません。

やっぱりノートンがおすすめです（私の大学の生協のパソコンがカスペルスキーなので…将来のプログラマ泣かせですね）
bitdefender様が出来るだけはやくこれを修正していただけることを願います。

次回からはkaliで「ハッキング・ラボのつくりかた」という書籍について書こうと思います。詰まったところとか。
【未経験者向け】Dapp開発(実装編)のおすすめの学習方法

## 始めに
Dapp(decentralized application＝分散型アプリケーション)を開発するにあたり、開発環境の整備(Ganache, Metamask, Solidity, Truffleなど)が完了したら、実装に当たってDappがどうやって動いているのかを理解する必要がある。
公式ドキュメントなどの体系的なインプットと合わせて、具体的なアプリケーションを動かし、コードリーディングをすると理解が深まる。

全くのDapp未経験の人でも、効率的な独学方法を共有したい。
**実装に当たって、どのドキュメントをどの順番で進めていくといいかを記載する。**
※ あくまで私自身の経験をベースである。

Dappの構成要素の全体理解については下記に記載。
　− [DAppsを支える技術達(どんな構成で成り立っているのか)を確認](https://qiita.com/taishinagasaki/items/f9a4166d051089d9a444#dapps%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93%E9%81%94%E3%81%A9%E3%82%93%E3%81%AA%E6%A7%8B%E6%88%90%E3%81%A7%E6%88%90%E3%82%8A%E7%AB%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D)

## おすすめの学び方

*①一番シンプルな(複雑なロジックなどを省いた)プログラムを動かしてみる。
②処理内容が①よりも複雑化したプログラムを動かしてみる。
③一番シンプルなプログラムに対して、好きな機能拡張を行い、プログラムを動かしてみる。*

---

**①一番シンプルな(複雑なロジックなどを省いた)プログラムを動かしてみる。**
イメージとしては「Hello World」メッセージの出力レベルのプログラムである。
プログラムにフォーカスした理解というよりは、プログラムとそれが動くために必要な周辺ツールの関係性を理解して全体感をつかめるとゴールである。

- 参照ページ
    - [rantan/meti-hackathon](https://github.com/rantan/meti-hackathon)
- 学べること。
    - リポジトリから対象プロジェクトを取得ができる。
    - truffleフレームワークを使ってcompile
    - 開発環境のテストネットワーク(Ganache)へのdeploy
    - deployしたcontractの呼び出し
    - テストネットワークのブロックチェーンへのデータの書き込み
    - ブロックチェーン上の処理によって発生するコストの支払い(Ether)
    - Ether支払い時のMetamaskの呼び出し

---

**②処理内容が①よりも複雑化したプログラムを動かしてみる。**
単なる「Hello World」メッセージ出力ではなくて、データの受け渡しなどができるレベルのプログラムである。
プログラムにフォーカスしてプログラムの言語ルールを捉えにいく。

- 参照ページ
    - [ETHEREUM PET SHOP -- YOUR FIRST DAPP](https://www.trufflesuite.com/tutorials/pet-shop#ethereum-pet-shop)
- 学べること。
    -  よりプログラムに特化した解説があるので、
    -  スマートコントラクト(Solidity)の記法
    -  compileやdeployなどの細かい手順
    -  truffleフレームワークで作ったプロジェクトのディレクトリ構成
    -  フロントエンドからスマートコントラクトとMetamaskの呼び出し
-  テストネットワーク(Ropsten)へメッセージだけを書き込みと呼び出しができるアプリをheroku上へ公開した。
    -  [Blockchain Demo](https://simple-dapps.herokuapp.com/)
    -  【注意】一回目のアクセスでビルドをしてくれるので、タイムアウト後にもう一度アクセスしてください。
        -  [リポジトリ：simple-dapps-seconds](https://github.com/taishinagasaki/simple-dapps-seconds)

---

**③一番シンプルなプログラムに対して、好きな機能拡張を行い、プログラムを動かしてみる。**

- 参照ページ
    - [Cryptozombies](https://cryptozombies.io/jp/)
- 学べること。
    - Ethereum上で動かすアプリケーションのソースコードレベルでの全体像理解。
        - いきなりCryptozombiesから始めると難易度が高いが、①と②を通して基本的な仕組みがわかっていれば中身がスッと入ってくる。
    - ①と②では扱わなかった細かいトピックに触れることが多い。より具体例と合わせて説明されており、実践向けになっている。
        - よりセキュアなコントラクトの実装
        - コストを下げる効率的なソースコード
        - 外部コントラクトの呼び出し
        - ソースコードの権限管理(原則ブロックチェーン上にdeployされたら変更ができない)
        - デバッグの仕方...ここは別でググる必要があるかな
-  テストネットワーク(Ropsten)上でERC721トークンライブラリを使って一意の識別子をアカウント(address)間で交換ができるアプリをheroku上へ公開した。
    -  [Blockchain Token Transfer Demo](https://simple-dapps-transfer-token.herokuapp.com/)
    -  【注意】一回目のアクセスでビルドをしてくれるので、タイムアウト後にもう一度アクセスしてください。
        -  [リポジトリ：simple-dapps-transfertoken](https://github.com/taishinagasaki/simple-dapps-transfertoken)


## 最後に
学習方法は人それぞれですが、個人的には具体と抽象の行き来が効率を上げてくれる。

- 特に体系的なドキュメントがない場合、情報収集→仮説→検証→確証のサイクルを小さく、早く、多く回すことが大事。
- また、どんな順番で何から学ぶと効率がいいか(各レクチャとの位置づけと、順番)がとても大事。

今回は特に後者の方で、キャッチアップが遅くなった印象があったので他の誰かの役にたてばと思い残しておく。
 
---

今後はデバッグ方法についても共有したい。検証の場面で役立ち、学習スピードを高めてくれる。知らないと逆に問題発見ができずにスタックしまいがちになってしまう。

読んでいただきありがとうございました。
[Python] リスト内の要素から改行を消す

#環境

macOS Mojave
python 3.7.2

#コード例
```python
data = list(map(lambda x : x.replace("\n",""),["A\n","B\n"]))
print(data)
```
```:実行結果
['A', 'B']
```

リスト内の改行を消す機会が多かったので、投稿してみました。
deviseを使わずflashメッセージを実装する方法

##1,やりたいこと

ログイン成功時やメッセージを投稿した際に、ページ上部にフラッシュメッセージを表示できるようにしたいと思います。

<img width="1096" alt="スクリーンショット 2019-08-12 10.27.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398610/8594d78e-5c39-d975-2a6c-a8091eacccec.png">

#2,flashとは?

ある動作が実行された時、**画面にその動作が成功したか失敗したかを知らせてくれる機能**です。

Railsにおけるflashは**ハッシュオブジェクト**として設定されています。

#3,まずはviewを作成

flashメッセージを表示するために、まずはviewを作成しましょう。

flashメッセージのコードを記述する際は、**部分テンプレート**を利用することが望ましいです。

```haml

.notification
  - flash.each do |key, value|
    = content_tag :div, value, class: key
```
今回はhtmlではなくhamlで記述してみました。

flashはハッシュ型のオブジェクトなので、keyとvalueをそれぞれ出力させる必要があります。

keyは2種類存在し、実行が成功したときは**notice**で失敗したときは**alert**が入ります。

class名にkeyを代入することで、成功時と失敗時のフラッシュメッセージを作成することができます。

コードを記述したら、application.html.hamlにrenderで導入しましょう。

``` haml
%body
    = render 'layouts/notifications'
    = yield

```

##4,コントローラを実装する

viewが完成したら、次はコントローラを実装します。

グループが作成されたとき、「グループを作成しました」とメッセージが表示されるように設定します。

```ruby

@group = Group.new(group_params)
    
    if @group.save
      redirect_to group_messages_path(@group), notice: "グループを作成しました"

```
noticeに"グループを作成しました"という文字列が代入されているので、@groupがsaveされて、リダイレクトしたときにメッセージが表示されるようになります。

<img width="1096" alt="スクリーンショット 2019-08-12 10.27.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398610/e7fae292-e38a-6b97-0cbd-f9d9601d67cf.png">

こんな感じで。

##5,フラッシュメッセージを日本語表記に設定する

フラッシュメッセージはデフォルトで英語表記になっています。

日本語でメッセージが表示されるように設定しましょう。

```haml:config/application.rb
class Application < Rails::Application
    config.i18n.default_locale = :ja 
end
```

以上の記述でメッセージが日本語表記になります。

##6,noticeとalertで別々のスタイルを適用しよう

動作が成功したときと、失敗したときでメッセージのスタイルが異なる方が分かりやすいでしょう。

なので、flashのスタイルも編集します。

```sass:stylesheets/_flash.scss
.notification {
  .notice {
    background-color: $light_blue;
    color: $white;
    text-align: center;
  }

  .alert {
    background-color: $alert_orange;
    color: $white;
    text-align: center;
  }
}
```
成功したときのクラス名はnotice、失敗したときのクラス名はalertなので、この記述でスタイルが適用されます。

##*補足:deviseを使えばより簡単にフラッシュメッセージを実装できる。

ユーザーの新規登録、ログイン・ログアウト時に限りdeviseのgem
を使えば簡単いフラッシュメッセージを実装することができます。

以下の記事を参考に

[deviseを利用したフラッシュメッセージの表示方法](https://qiita.com/mikan3rd/items/ca783769c959a16cc999)
【Java】自作クラスの要素を持つArrayListをソートする


まず自作クラス

```java
public class Employee {
	
	private String name;
    private int age;
    
    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
```

listに要素を入れソートしてみる


```java
public class Array {

	public static void main(String[] args) {
			
		List<Employee> list = new ArrayList<Employee>();
		list.add(new Employee("tanaka", 25));
		list.add(new Employee("yamada", 28));
		list.add(new Employee("suzuki", 20));
			
		Comparator<Employee> compare = Comparator.comparing(Employee::getAge);
		list.sort(compare);
			
		for (Employee e : list) {
			System.out.println(e.getName() + " : " + e.getAge());
		}
	}
}

```
出力結果は下記のようになる

suzuki : 20
tanaka : 25
yamada : 28


昇順の場合、Comparator.comparing()の第二引数は省略可能
降順の場合は第二引数にComparator.reverseOrder()を指定する必要がある

```java
Comparator<Employee> compare = Comparator.comparing(Employee::getAge,Comparator.reverseOrder());
```
ORCAからSuperColliderの音を鳴らす（OSCを使って）

#ORCAでの設定とプログラム

##OSCの送信先ポートを指定
送り先のポートを指定できるようにするために、ORCAのコンソールを開きます。コマンドキーとピリオド(.) を同時に押すか、Orcaメニューから「Inspect」を選びます。Consoleに以下をタイプします。57120は、SuperColliderのデフォルトのポート番号です


terminal.io.osc.select(57120)


ORCA のOSCメニューにSuperCollider(57120)が追加されるので、それを選択しておきます。

##OSCを出力する
ORCAでOSCを出力するプログラムを書きます。OSCアドレスパターンpに続く値が出力されます。


```
// in ORCA
/*

.D4..R6
..=p41.

*/



#SuperCollider側のコード

##OSCを受け取る
SuperCollider側では、OSCdefを使ってOSCメッセージを受信します。ここでの例ではアドレスパターンがpのメッセージを受け取ります。

(
// orca_OSC-test
OSCdef(\orca_osc, {|msg|

	// 受け取ったメッセージをポストする
	msg.postln;

}, \p);
);

受け取ったメッセージを使って音を出す

// 音源を定義
SynthDef(\test,{
	arg amp=0.5, freq;
	
	var env, sound;

	env=EnvGen.ar(Env.perc,doneAction:2);

	sound=SinOsc.ar((freq+1)*100);

	Out.ar(0,sound * env)
}).add;


// OSCメッセージを受け取り音を出す
(
// orca_OSC-test
OSCdef(\orca_osc, {|msg|

	s.sendMsg("/s_new", \test, s.nextNodeID, 0, 1,\freq, (msg[2]+1)*100);


}, \p);
);
```
【Nuxt】外部ライブラリを使用してwindow is not definedになった時の対処法

サーバーサイドレンダリングをしているとwindowでエラーになるので
公式では下記の書き方をして対処するよう書いてあります。

```
if (process.client) {
  require('external_library')
}
```
* [window または document が undefined - Nuxt.js](https://ja.nuxtjs.org/faq/window-document-undefined/)

でも、外部ライブラリの中のコードでwindowとかdocumentが書いてあるときは
どう対応したらいいんだ・・・と悩んだので対処法を書いていきます。

## 外部ライブラリのコードでエラーになった時の対処法

下記のようにすればSSRに対応していないライブラリでも導入することが出来ます。

### no-ssrコンポーネントを使う

サーバーサイドレンダリングの対象からコンポーネントを除外できます

```index.vue
<template>
  <no-ssr placeholder="Loading...">
    <vue-previewer :images="imgs" :options="{}" />
  </no-ssr>
</template>
```
* [API: no-ssr コンポーネント - Nuxt.js](https://ja.nuxtjs.org/api/components-no-ssr/#-lt-no-ssr-gt-%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88)

### pluginsを作成してグローバルコンポーネントに設定する

```plugins/vue-image-previewer.js
import Vue from 'vue';
import VuePreviewer from 'vue-image-previewer';

Vue.component('vue-previewer', VuePreviewer)
```

ライブラリのexampleでは `Vue.use(VuePreviewer)` のように書いてあっても
`Vue.component` の書き方に直してください。

これでvueファイルでcomponentsを定義しなくてもグローバルで使えるようになります。
第一引数に定義したコンポーネント名（今回ならvue-previewer）で記述してください。

### プラグインのbuidオプションでssr: falseにする

```nuxt.config
  plugins: [
    // Nuxt.js 2.4 以降、ssr:falseではなくmode: 'client'になる
    { src: '~/plugins/vue-image-previewer.js', ssr: false }
  ]
```

次に、nuxt.configで作成したpluginsをclientでのみ実行するよう設定してあげます。

* [API: build プロパティ - Nuxt.js](https://ja.nuxtjs.org/api/configuration-build/#ssr)

以上で外部ライブラリを使う事ができたと思います。

## 参考
今回使ったライブラリ。画像のプレビューが簡単にできます。
* [vue-image-previewer - npm](https://www.npmjs.com/package/vue-image-previewer)
【小ネタ】スイッチロール画面のURLをブックマークすると複数アカウントのログインがはかどる件

#ごあいさつ
　皆さんこんにちは。
　AWSで複数アカウントを所有している場合、ログイン用アカウントからスイッチすること、ありませんか？
　例えば普段は開発用アカウントで作業をして、リリース時には本番用アカウントにスイッチする、など。

　ですが、アカウント数が増えれば増えるほど、この作業が面倒になります。
　スイッチのキャッシュは5つしかありませんし、それ以上となるといちいち入力するのも面倒です。

　今回は、スイッチロールの設定方法と、簡単なスイッチの仕方について書いていきます。

#スイッチロール（アシュームロール）

　スイッチロールとは、ログインユーザーが他の権限を使って作業したい場合に、IAMロールを利用して権限を変更することを指します。
　例えば、Aユーザーでログインし、Bロールにスイッチするとき、下の図のようなやり方でスイッチします。

![SnapCrab_AWS マネジメントコンソール - Google Chrome_2019-8-12_12-46-10_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66713/ab4d64c2-0f74-8b79-758c-16a06187a219.png)
　ここをクリックして、
![SnapCrab_NoName_2019-8-12_12-46-23_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66713/b4f9d49e-3624-f930-b8de-d10c4e60e5c0.png)
　この画面に遷移したとき、

>　アカウント：遷移先アカウントID（12桁）
　 ロール：利用ロール名

　表示名は適当でよく、何も入れなくても自動で入ります。
　こうすることで、Aユーザーが持つ権限からBロールが持つ権限に完全に切り替わって作業が可能になります。

#スイッチ用ロールの設定

　では、ここで、Bロール（スイッチ先の権限）の作り方です。
　![SnapCrab_NoName_2019-8-12_12-51-56_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66713/0c57e543-3d66-ffc7-faa5-9e3b37035a19.png)
　必要なのは、ロールを作成するときに「別のAWSアカウント」からのアクセスを許可することです。
　この時、ログインと同じアカウントIDを指定すると、「ログイン時は閲覧のみ→昇格して開発権限」ということも実現可能ですし、「ログイン→Aシステム用、Bシステム用」と同じユーザーで違うシステム用の権限にスイッチすることも可能です。

　また、ログイン時にMFA有効化にしておき、さらにログインユーザーのpolicyにだけIPアドレス制限をかけておくと、ログイン管理ができます。
　その上でスイッチ先にはIP制限なしにしておけば、API発行元がAWSサービスであるためにIPアドレス制限が邪魔をして作業が完了しない、ということが防げます。

　ということで、ロールを作成し、ポリシーをアタッチしますが、中身は必要なものをアタッチしてください。
　注意すべきは**「スイッチ先のアカウントでロールを作成する」**ということです。

#スイッチ用ポリシーの作成

　ここでは、スイッチするユーザーが、スイッチできるための権限を設定します。
　単純に下記のポリシーをアタッチすればよいです。

```json:sts_role
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::[スイッチ先アカウントID]:role/[スイッチ先ロール名]"
        }
    ]
}
```
これをスイッチさせたいユーザーにアタッチすることで、スイッチロールが可能になります。

#でもスイッチは面倒
　さて、比較的簡単にスイッチロールの設定は可能なのですが、これらが増えてきたときにスイッチの設定をいちいちやるのは大変ですね。
　アカウントID入れて、ロール名入れて。
　ロール名何だっけ？　このIDは何のシステムのIDだっけ？

　それを防止するために、スイッチロールにはURLが割り当ててあります。

`https://signin.aws.amazon.com/switchrole?roleName=[RoleName]&account=[AccountID]`

　[RoleName]にスイッチ先ロール名、[AccountID]にスイッチ先アカウントIDを入れれば、スイッチ設定画面にIDとロール名が入った状態でページが開きます。
　後はスイッチボタンを押すだけです。

　これをブックマークする、もしくはhtmlでリンク集を作るなどすれば、非常に便利ではないでしょうか。
![SnapCrab_NoName_2019-8-12_13-42-46_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66713/373f3152-ae14-41d2-128b-9b8278109c9d.png)

　一つ注意点は、このURLを実行するのは、スイッチできるユーザーでログインした後である必要がある、ということです。
　スイッチ権限がないと、エラーが出てしまうので注意してください。

　では、楽しいAWSライフを！
Windowsログインパスワードを忘れた場合

# 方法1
・ログイン画面の電源マークをクリック⇒Shiftキーを押しながら再起動
・トラブルシューティング⇒詳細オプション⇒コマンドプロンプト
・ログインしたいユーザーの新しいパスワードを作成する

```.bat
net user <ユーザー名> <新しいパスワード>
```
これができない場合は、Administratorを有効にする

```.bat
net user administrator /active:yes
```
コマンドプロンプトを終了する

```.bat
exit
```
ログイン画面へ⇒新しく設定したパスワードでログイン or Administratorでログイン
・Administratorでログインした場合
ファイル名を指定して実行（Windowsキー＋R） cmd
コマンドプロンプトが立ち上がる

```.bat
net user
```
普段使用しているユーザー名をコピー

```.bat
net user <ユーザー名をペースト> <新しいパスワード>
```
・Administratorをサインアウト⇒ユーザーでログイン

# 方法2
・Windowsインストールを用意する
 付属のインストールディスクor別PCでインストールメディアを作成
・インストールメディア作成方法
【用意するもの】
Windows PC、USBメモリ（8GB以上）
【やり方】
[Windows10ダウンロードリンク](https://www.microsoft.com/ja-jp/software-download/windows10)
※復元するPCがWindows7でも10でも大丈夫です。
ツールを今すぐダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462058/92c03b92-f863-357e-31fb-bf54891b4c36.png)
同意する⇒別のPCのインストールメディアを作成する⇒このPCにおすすめ～の☑外す アーキテクチャを選択
⇒USBフラッシュドライブを選ぶ⇒認識されているUSBメモリを選択
※USBのフォーマットが行われるため、予めUSBメモリ内のデータはどこかにコピーしておきましょう
インストールに時間がかかります。
[このサイトの方のほうがわかりやすいかも](https://www.atmarkit.co.jp/ait/articles/1508/06/news034.html)
・インストール完了後、パスワードを忘れたPCのBIOSに入る
  USBメモリで起動
・Windowsセットアップ画面が出たらShift + F10
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462058/f1bdcf92-b222-914c-6a11-e96bdc922b78.png)
・ここでコマンドプロンプトが起動するのでコマンドを打つ

```.bat
d:
cd \windows\system32
ren utilman.exe utilman.org
copy cmd.exe Utilman.exe
exit
rem ren utilman.exe utilman.bak.exe
rem utilman.exeというファイルをutilman.bak.exeという名前に変更するコマンドです。要するにバックアップです。
rem copy cmd.exe utilman.exe“と入力し、「Enter」キーを押します。
rem cmd.exeというファイルをutilman.exeという名前で複製するコマンドです。
```
・\windows\system32にうまく入れない場合
メインで使用しているディスクのドライブがDドライブではない可能性があるため、割り当てられたアルファベットを調べます。

```.bat
diskpart
list volume
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462058/f491c0d9-9b1a-39e2-13e7-afcc244fd750.png)
・右上の×をクリック、Windowsセットアップを×、再起動をかける
・コンピュータの簡単操作アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462058/dfb5a084-db13-1569-eaa6-be50920a486d.png)
コマンドプロンプトが立ち上がる

```.bat
net user ＜ユーザー名＞ ＜新しいパスワード＞
```

・ログイン完了後

```.bat
del utilman.exe
ren utilman.org utilman.exe
rem 複製したものを削除するコマンド
```
## 参考にしたサイト
[トラブルシュート～コマンド入力](https://www.atmarkit.co.jp/ait/articles/1312/06/news055.html)
[インストールメディア作成](https://www.atmarkit.co.jp/ait/articles/1508/06/news034.html)
[diskpartコマンドから割り当てられたボリューム名を確認するコマンド](https://paso-kake.com/it/command/4925/)