OmniAICreator/Qiita-1.07M huggingface dataset:
windowsでiverilog その81

#概要　

windowsでiverilogやってみた。
4bitのcpu書いてみる。
構想編。

#参考にしたページ

https://qiita.com/38912Pataro/items/8b8f1669ce7317953f4c

#cpu仕様

レジスタマシン
4bit CPU（汎用レジスタが4bit 2本）
メモリーは、16語8bit
マシン語は8bit固定長
命令は、入力、出力、代入、加算、イコール、ジャンプの6種類
命令に4bit、4bitを値に

|7:4|	3:0|
|:--|:--|
|命令|	値|

レジスタは2コ、とプログラムカウンタ(4bit)
入力、出力は4bit
プログラムカウンタが15(最後の番地)を指した時、停止。


#アセンブラの説明

|	アセンブリ|	機械語|	動作|
|:--|:--|:--|
|	ADD Im	|0000bbbb|	AレジスタとImの値を加算|
|	LDA Im	|0001bbbb|	AレジスタにImの値を代入|
|	JMP Im	|0010bbbb|	Imの値をプログラムカウンタに代入|
|	LDB Im	|0011bbbb|	BレジスタにImの値を代入|
|	IFBJMP Im	|0100bbbb|	入力ポート1に入力があれば、Imの値をプログラムカウンタに代入|
|	OUT Im	|0101bbbb|	Imの値を出力|
|	IFAJMP Im	|0110bbbb|	入力ポート2に入力があれば、Imの値をプログラムカウンタに代入|
|	EQJMP Im	|0111bbbb|	AレジスタとBレジスタの値が同じであれば、Imの値をプログラムカウンタに代入|


#プログラム例

|番地|	アセンブリ|	オペコード|	オペランド|
|:--|:--|:--|:--|
|0	|OUT|	0101|	0001|
|1	|OUT|	0101|	0010|
|2	|OUT|	0101|	0100|
|3	|OUT|	0101|	1000|
|4	|IFAJMP|	0110|	0110|
|5	|JMP|	0010|	1111|
|6	|OUT|	0101|	0100|
|7	|OUT|	0101|	0010|
|8	|OUT|	0101|	0001|
|9	|IFBJMP|	0100|	0001|
|10	|ADD|	0000|	0000|
|11	|ADD|	0000|	0000|
|12	|ADD|	0000|	0000|
|13	|ADD|	0000|	0000|
|14	|ADD|	0000|	0000|



4番地ではポート2から入力があれば0110(十進数で言うと6)番地に飛びます。
ポート2からの入力がなければジャンプはしないので5番地に来て、1111(十進数で言うと15)番地にジャンプし、停止します。
9番地も4番地同様、ポート1から入力があれば0001(十進数で言うと1)番地にジャンプします。
また、入力がなければ10 ~ 15はすべてNOPなので、9番地でポート1から入力がなければそのまま15番地まで行って停止します。

以上。
JavaScriptの勉強でつまづいたこと3選

## 概要
エッセイ・ポエムです。1年間必死にJavaScriptを勉強して特に理解しづらかったことを絞りに絞って3つにまとめました

スペック

* プログラミング初心者
* 用途LPのコーディング
* フレームワークjQuery
* 独学

初心者がプログラミングを勉強するときどんな箇所に苦しむのかを~~楽しんでいただく~~記録しておくのが主な目的。

**ちなみに、各苦しみに対するインテリジェンスな解決法はサポート外です。**

* 技術書を読む（理解できなくても読み進めないといけないので辛い作業。頑張ろう！）
* 他人のコードを読む（時間をかけていい作業。謎構文が頻出するので都度調べる。）
* コードを書いてみる（最初は写経でいい。何回か書いているとインプットした知識と知識がつながり合っていく感覚を味わえるはず。）

という力技で苦しみながら覚えました。

## つまづいたこと3選

### 1. 関数？変数？？引数？定数？？？
JavaScriptの文法を勉強していたときに一番パニくっていた箇所。
初心者からみるとみんな同じような言葉に見えるんです。
僕みたいな低スペ初心者に教えるときは、図解で教えてあげてください。
独学者の人は鉛筆とノートを持って丁寧に理解しながら勉強すると覚えやすいですよ。

#### ES5とES6の書き方の違い
今のJavaScriptを初言語として学ぶのはプログラミング初心者にとってはちときつい理由。Google先生で調べたときに情報が混在しているのでとても困る。初心者は情報の取捨選択ができない。

（引数のことずっとインスウって呼んでて赤面したのは僕だけじゃないはず）

### 2. 返り値？戻り値？
>関数とは、コンピュータプログラム上で定義されるサブルーチンの一種で、数学の関数のように与えられた値（引数）を元に何らかの計算や処理を行い、結果を呼び出し元に返すもののこと。  
[関数（ファンクション）とは - IT用語辞典 e-Words](https://e-words.jp/w/%E9%96%A2%E6%95%B0.html#:~:text=%E9%96%A2%E6%95%B0%E3%81%A8%E3%81%AF%E3%80%81%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0,%E5%85%83%E3%81%AB%E8%BF%94%E3%81%99%E3%82%82%E3%81%AE%E3%81%AE%E3%81%93%E3%81%A8%E3%80%82)

返すって何？戻す？返す？（＾＾ω＾＾）？？ってパニくる。

```Javascript
    function add (x, y) {
        var result = (x + y)
        return result
    }
    add(1,2) // 3
```

なるほど、なるほど1と2を受け取って`return`で計算結果を返してるんだな。φ(｀д´)ﾒﾓﾒﾓ...

```Javascript
    function helloWolrd () {
        console.log('Hello World!')
    }
    helloWolrd() // Hello World!
                 // undefined
```

![まが夫.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974327/1e6d45f0-852c-f8cc-f30c-7cdc4d8c2c64.png)

？！？！`return`してないけど文字返ってるんじゃないの？コレ？！しかも`undefined`って何？！しかも、値何も受け取ってない？！？となるわけです。もうテンパりまくり、次に説明されることなんて頭に入ってきません。

## 3. 関数の呼び出し
初心者の頭というのはプログラムの実行順序を基本的に追いきれません。なぜなら理解に必要な知識がまだないからです。
最初は形から覚えろという言葉通り、とりあえず真似しながら書いていくと思います。

そこでパニクリ案件へと化すのが関数の呼び出し方、指定の仕方です。

```Javascript
    function helloWorld () {
        console.log('Hello world!')
    }
    helloWolrd() // Hello World!
                 // undefined
```

関数を書いたぞ・・・！唸れhelloWorld・・！`helloWorld()`！！！とカッコをつけて関数を使うのです。
そう、初心者は関数は使うときは関数名のお尻にカッコをつけるのだ。と覚えました。しかし、、、

```Javascript
    function helloWorld () {
        console.log('Hello world!')
    }
    $('#button').on('click', helloWorld())
```

ボタンをクリックしても何も起きません。。。

![クソスレ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974327/501e5dd8-69e1-9422-c077-788ed917d22f.png)

なんということでしょう。リファレンスで言われた通り関数を指定したのに何も起こらないじゃないですかー！
ボタンにクリックイベントを追加したいのでしょうが、コレでは動きませんね。
初心者はなんとか見様見真似でカッコを外すことで実行できるようになりましたが理解までは及んでいません。

## おわりに
関数はとてもパワフルで面白い機能ですが理解するのって結構難しいんですね。私もまだまだ理解できてません。一応保険をかけておくと、これはポンコツ初心者の私がわからなかったことなのでご承知おきください。
~~Googleで検索したときに出てくるSEOつよつよサイトが一番勉強の邪魔になったりする。と思ったり・・w~~

一緒に勉強頑張りましょう！
[Follow me!!](https://twitter.com/tashirimo_dev)
OOM Killerの対象外にしたい（CentOS7）

Out of Memory が発生した場合でもプロセスを落とされたくない場合、
/etc/systemd/system 等の配下にあるsystemd用ファイルに以下を設定する。

```
[Service]
～～省略～～
OOMScoreAdjust=-1000
～～省略～～
```
OOMScoreAdjust を -1000 に設定すると、対象サービスのプロセスはkill対象外になる。
（MySQLを落とされて悲惨な目にあったので設定しておきたい）
【初心者向け】Visual Studio Code へ autopep8 を導入する

autopep8 は、PEP8 コーディングスタイルに準拠した Python のコードフォーマッタです。
これを Visual Studio Code に導入することで、PythonのソースコードをPEP8に準拠したスタイルに自動成形することができるため開発環境に組み込みました。

## 導入環境
- Windows 10 64bit
- Visual Studio Code (VS Code)
- Python3.8 (※ pip へのパスが通っていることを前提とします。)
- Windows コマンドプロンプト (cmd.exe) をある程度使えることを前提とします

## 導入の流れ

1. autopep8 のインストール
2. VS Code に autopep8 を設定する
3. autopep8 の設定値を変更する

### 1. flake8 のインストール
コマンドプロンプトで次のコマンドを実行します

```
pip install autopep8
```

インストールが完了したら、次のコマンドでインストールされたことを確認できます

```
C:\>pip show autopep8
Name: autopep8
Version: 1.5.4
Summary: A tool that automatically formats Python code to conform to the PEP 8 style guide
Home-page: https://github.com/hhatto/autopep8
Author: Hideo Hattori
Author-email: hhatto.jp@gmail.com
License: Expat License
Location: c:\python\lib\site-packages
Requires: pycodestyle, toml
Required-by:
```

### 2. VS Code に autopep8 を設定する
VS Code の設定画面から`python.formatting.autopep8Path`を検索し、`Python > Formatting: Autopep8 Path`項目に`autopep8`を設定します。
![0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394435/0f3c78a1-c6d5-301a-91d8-c46b7b9892bf.png)
続けて、VS Code の設定画面から`python.formatting.provider`を検索し、`Python > Formatting: Provider`項目で`autopep8`を選択設定します。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394435/b13c7b4e-a684-ff5b-b84c-5d36c4c1082b.png)
尚、VS Code の設定は、ユーザー設定、ワークスペース設定、フォルダー設定と分けることが出来ますが、筆者はユーザー設定を選択しています。

### 3. autopep8 の設定値を変更する
PEP8 スタイルに準拠すると一行の文字数制限が79文字までとなります。
これを現在の開発環境に合わせて、文字数制限を150文字までに設定します。
VS Code の設定画面から`python.formatting.autopep8Args`を検索し、`Python > Formatting: Autopep8 Args`項目に設定を追加します。
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394435/5b0c8687-89a1-36fb-8636-e94a08ede3b4.png)
この設定により、VS Code の設定ファイル (settings.json) に次のコードが追加されます。

```json:settings.json
{
    "python.formatting.autopep8Args": [
        "--max-line-length",
        "150"
    ]
}
```

### 4. 完了
以上で、Python コードのエディタ上でコンテキストメニューから`ドキュメントのフォーマット`を選択するとソースコードがPEP8に準拠するよう自動成形されます。

## 参考にしたサイト
- [[python PEP8] VSCodeでautopep8とflake8を適用する](http://trelab.info/visual-studio-code/python-vscode%E3%81%A7autopep8%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B)
- [VScodeでautopep8が勝手に改行するのを見逃してほしい](https://qiita.com/ideodora/items/09e9e7577ef672bb8014)
GetとPostの違い

# はじめに
Httpリクエストを投げる中で、GetとPostをどう使い分けるべきかわからなかったため、調べた結果を記述する。

## Get
GETは、URLの後ろに送りたいデータを付与して送る。「URL?パラメータ名=値」という形式。
例えば、YahooでQiitaを調べた時以下のURLが発行される。
> https://search.yahoo.co.jp/search?p=Qiita&fr=top_ga1_sa&ei=UTF-8&ts=658&aq=-1&oq=&at=&ai=20baa92a-0278-41fa-8ed7-fbd427033d64

このとき、「p」「fr」「ei」等がパラメータ名、「Qiita」「op_ga1_sa」「UTF-8」等が値としてリクエストが投げられている。

Getは**データを取得したい時**、**データベースの書き換えが必要ない場合**に用いる。

## Post
Postは、HTTPリクエスト内のメッセージボディにデータを含めて送る。
URLなどの見た目では送信データはわからないため、**秘匿情報をURLに表示したくない場合**に用いる
また、ブラウザによってURLに使用できる文字数が決まっているため、**大量のデータを送信したい場合**に用いる

# まとめ
データを取得したい場合はGet、データを変更したい場合はPostを用いる。
DBViewerをプラグインしているEclipseからMySQLに接続

eclipseでWebアプリケーション作成を目指して
本をトレースしているなかMySQLの接続をしようとして
接続ができなかったの健忘録です。

```TestMySQL.java

Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/dbName";
String user = "username";
String password = "password";
Connection conn = DriverManager.getConnection(url.user,password);

```

前後を割愛していますが、
これで、まずこういうエラーが出ました。


```error.message

Loading class 'com.mysql.jdbc.Driver' This is deprecated.
The new driver class is 'com.mysql.cj.jdbc.Driver'

```
なのでドライバーの名前をcom.mysql.cj.jdbc.Driverに変更しました

```TestMySQL2.java

Class.forName("com.mysql.cj.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/dbName";
String user = "username";
String password = "password";
Connection conn = DriverManager.getConnection(url.user,password);

```

ところがこれでもエラーが出ました。
タイムゾーンがうんたら・・・という内容でした。
（ログを取るの忘れました…）

ググってみるとこちらのサイトにある
タイムゾーンの設定の記述でうまく接続できました。

参考：https://kurukuruz.hatenablog.jp/entry/2018/04/28/200000 


```TestMySQL3.java

Class.forName("com.mysql.cj.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/dbName?characterEncodeing=UTF-8&serverTimezone=JST";String user="pcklog";String password="p!cklog";
Connection conn = riverManager.getConnection(url.user,password);

```

補足：
MySQL Server5.7のほうにmy.iniを作成して
タイムゾーンの設定をするのは上手く動きませんでした。
Node-REDのnode-red-contrib-castがGoogle-TTSの仕様変更で動作しなくなった件

# 経緯  
[Andoroid端末上でNodo.jsアプリを実行してみた](https://qiita.com/father_further/items/fbe3dd9113ad815db8ae)で作成した`google homeに喋らせるシステム`が昨年末頃から動作しなくなり、時間ができたので調査してみた。  

# 事象
Node-REDの`node-red-contrib-cast`を使用し、POSTされたテキストをリビングのGoogolehome miniに喋らせる処理を作成している（「XXX.XXX.XXX.XXX」は本来Googlehome miniのIPアドレス）。この`node-red-contrib-cast`が昨年末から`Not able to get media file via google-tts:get token key failed from google`といったエラーを出し、処理が異常終了していた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619970/c10d6642-67ce-2a70-dab5-b5479945c3ad.png)
  
# 原因
ネットで調べてみると、どうも`google-tts-api`の仕様変更が原因とのこと。`google-tts-api`をアップデートすると治るといった事例もあったが、改善されず。
苦労して英文のページを読み進めていくと、GitHubの[Error in TTS #123](https://github.com/Hypnos3/node-red-contrib-cast/issues/123)に最新の`node-red-contrib-cast`では事象が改善されているとの記述が。

# 対処  
`node-red-contrib-cast`を`0.2.17`にアップデートすれば改善されるらしい。さて、Node-REDのノードのアップデートはどうやってやるのか・・・

調べた結果、Node-RED右上のハンバーガーメニューから、「パレットの管理」＞「現在のノード」を開き、`node-red-contrib-cast`を検索すると右側に「0.2.17へ更新」のボタンが。
※参考画像は別のノードのもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619970/a5146b05-df30-1d3b-7709-6e3173ee9779.png)
ノード更新後、Node-REDを再起動すると無事Googlehome miniが喋るようになった。
【C#】Task

##Task
単に「仕事」を意味する動作を指す。

##同期型メソッドと非同期型メソッド
まず、同期型メソッドは１から順にTaskを実行するメソッド。
それに対して、非同期型は順序問わず、Taskを実行するメソッドを言う。

####★非同期型メソッドのキーワード
**async修飾子**
　メソッド内でawait演算子を利用するための修飾子。

```C#:sample.cs
private async void Click_Action(object sender, RoutedEventArgs e)
{
    // 処理を記述   
}
    
```

**await演算子**
async修飾子が付いているメソッド内で1以上記述できる。
逆を言えばasync修飾子内に1つ以上のawait演算子が必要となる。

```C#:Sample.cs
private async void Click_Action(object sender, RoutedEventArgs e)
{
    this.botton.IsEnabled = flase;
    await MouseActionMethod(); // 何かしらの処理を呼び出し
    this.botton.IsEnabled = true;
}
```
リモートデスクトップ接続時に IC カードリーダーを読み取れない


　業務にて、Windows10 に IC カードを読み込ませるタスクを実施する機会があった(電子入札資格の更新関係)。Windows10 に IC カードリーダーを読み込ませて手続きを行うが、現在テレワーク体制のため、
>IC カードリーダーを繋いだ Windows10 Pro に対してリモート端末から RDP 接続する

という手段を取ってみた。
　すると、IC カード読み取りの段階で以下のようなエラーが出てきた。

![figure10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1001161/0f3e1955-ad61-f56b-9659-1fd2067a866c.png)

たまたま出社するタイミングがあったので、Windows10 を直に触った場合には、エラーが出ずに問題なく手続きできた。

調べてみたところ、以下のような記事が。。
こちらはマイナンバーカードの読み取りでエラー内容も違っていたのだが、どうやら RDP 接続だとカードの読み取りができないぽい。。

[参考]
https://ameblo.jp/datezou/entry-12443891324.html

上の記事によると、vnc カードの読み込みができるらしいので、Windows10 に UltraVNC をインストールし、VNC 接続にてリモートから作業開始。そしたら問題なくカードを読み取り、手続きできた。

RDP だと、カードリーダーは読み取れない、というのが現実っぽい。
ESP32をAlexa Gadgets Toolkitデバイスする（成功体験談）

# はじめに
Leafony ESP32 Wi-Fi Kit（ESP32互換機）をAlexa Gadgets Toolkitデバイスにしようと、結局2ヶ月くらい苦戦しました。最終的にalexaとのペアリングを確認できたので、成功体験談として書き残します。
Alexa Gadgets Toolkitデバイスにする上で個人的に詰まってしまったポイントについて書き残しておきたいと思います。
また、手順は下記の記事どおりです。
[ESP32をAlexa Gadgets Toolkitデバイスにしよう](https://qiita.com/poruruba/items/e4559e18cb90cd0a3b81)

# つまった部分
## プロトコルバッファのコンパイル
3.9系の[nanopbをダウンロード](https://jpa.kapsi.fi/nanopb/download/)して、上記のQiitaの手順通り実行ファイルを実行してみました。
説明だとwindows版のnanopbですが、私はmac版のnanopbをダウンロードして**mac catalina**で実行ファイルを下記のコマンドで実行して試しました。

```
sh ./compile_nanos.sh
```

何故か、これがうまくいきませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212276/0933d7ac-fa8d-c349-d118-7b669fd5c41e.png)
エラーを調べても解決せず、nanopbをlinux版にダウンロードし直して、linuxでやり直しました。
linuxが入ったPCが手元がなかったので、**Raspberry Pi 4**で試してみました。
しかし、.pb.cや.pb.hといったファイルは生成されませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212276/d94dde82-b441-9498-9428-a7a51d262616.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212276/1d548cf0-36b7-98dd-1f20-8b48833d19f5.png)

思案に暮れていたところ、先ほどの記事にもどり@porurubaさんに質問したところ、**「「nanopb-0.3.9.6-linux-x86.tar.gz」のprotoc.binはIntel系CPUでの実行形式」**ということを教えていただき、Raspberrry Piではコンパイルできないことがわかりました。

結局のところ、素直に手順通りwindows PCで実行ファイルを実行することで、**.pb.cや.pb.hといった拡張子がつくファイルが大量に生成**されました。

## ESP32のBLEのMacAddressを調べる
また上記記事で記載している[ESP32に書き込むプログラム](https://github.com/minwinmin/ESP32-AlexaGadgetToolKit/blob/master/src/main.cpp)では、ESP32のBLEのMacAddressをプログラム中に書き込む必要があります。こちらの調べ方は、下記を参考にしました。
[ESP32-WROOM-32 チップ・メモリ・MACアドレス情報取得方法](https://www.mgo-tec.com/blog-entry-chip-info-esp-wroom-32-esp32.html)


# ペアリング成功
Alexa echo dotにペアリングしてみるとrpi4と設定した値が表示されました。ペアリング成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212276/e3ab033b-dac3-7c4a-40ae-6eb5426b6b5d.png)

# おわりに
実行ファイルの実行する環境で悶々と苦戦していました。
最終的には、なんとかペアリングできました。
@porurubaさん、質問に丁寧に解説してくださりありがとうございました。
xdebug version 3になって動かなくなった

# はじめに

新年になったので、開発環境のDockerをビルドし直したら、xdebugでのステップ実行ができなくなった。
調べてみると、xdebugのVersion3になって設定項目名が変更されてしまったため、以前の設定が無効になってしまったのが原因でした。


# TL;DR

以下の設定で動きました。
ちなみにデバッガ(IDE=phpstorm, vscode)の方の待受ポートは9003に合わせる必要があります。

```ini
xdebug.log=/tmp/xdebug.log
xdebug.mode=develop, debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003

zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
```

# v2時代の設定

たぶん、こんな設定がインターネットで検索するとでてくると思います。こちらはversion2までの設定になります。

```ini
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_port=9003
xdebug.remote_host="host.docker.internal"
xdebug.remote_connect_back = 0
xdebug.remote_log=/tmp/xdebug.log

zend_extension=xdebug.so
```

# xdebugのバージョン確認方法

`php -v`とすると` with Xdebug v3.0.2`という風に表示されます。

```terminal
root@57b67435355c:/# php -v
Cannot load Xdebug - it was already loaded
PHP 7.2.33 (cli) (built: Sep 10 2020 15:18:34) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Xdebug v3.0.2, Copyright (c) 2002-2021, by Derick Rethans

```

# 動作確認(phpstorm)

phpstormを使っているので、xdebugの動作確認になります。
以下の画像中の矢印で示しているデバッグポートですが、もともと`9000, 90003`と書いてありましたが、③の検証を実行したところ、`9003`にするように指示があったので変更しています。

![2021-01-07_10h40_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/657ba568-2d9d-d30c-148a-2cda438fcb16.png)

画像の中では、`xdebug.mode`がdebugじゃないと警告がでていますが、[公式ドキュメント](https://xdebug.org/docs/all_settings#mode)には、以下のように複数設定が有効なようです。実際、ステップ実行は実現できました。


![2021-01-07_10h44_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133291/4b11c785-99ce-10b6-e92a-781616790768.png)

# 参考文献

* https://xdebug.org/

公式サイト一択じゃないかな。。。。
エクセルメモ: 行列番号が表示されないときは

エクセルでA,B,C,……1,2,3,……　が表示されていないので再表示したい場合
グーグルさんで
エクセル 行列番号 表示されない
でググるとファイル＞オプション＞詳細設定に次のシートで作業する時の表示設定に
行列番号を表示する。
で出来ました……
【thymeleaf】An error happened during template parsingが出たときに考えること

初学者です。
初心者にありがちな、
書く→修正→バグ→修正→バグ・・・
のスパンの短いこと。少しでも短くしたい。

そのためには同じ様なエラーが出たときの対処をテンプレ化できればと思います。

###環境
windows10
spring boot 2.4.0
thymeleaf 3.0.11

###エラーメッセージ

```
There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: "class path resource [templates/テンプレ名]")
```

とにかくこのエラーが起こる。ホンマによく起こる

###どこを修正したら起こるのか
1. コントローラー
2. html

コントローラーのビューに渡すオブジェクトの名前や格納している中身を変更するとビューでの受け取りに失敗する。

thmlを修正した場合、thymeleafの書き方が間違っていることが多かった。特に
`th:text="${customer"`
のように最後の`}`が抜けていることが結構起きます。

別に下記忘れていたということではなく、エディターの補完機能で、`{}`のどちらかを消すと両方消されてしまうという便利のようで不便な機能で、`` 意図せず消えてしまっていることがあるということです。`` 


###HTMLのビューの問題なら検索する
ページに表示されたエラーを全部読むのは大変です

```
ショートカット
Ctrl + F
// 「line」で検索
```

そうするとHTMLファイルの何行目にエラーが発生しているか探せます。


他にも適切な対処方があるとは思いますが、初心者の自分にはこれでほぼ解決できるエラーです。

* コントローラーのオブジェクトの確認
* lineで検索
* HTMLの｛｝を確認する
【Salesforce】apex:inputField＋slds-inputで日付項目を表示したらはみ出る

# 動作確認

apex:inputField＋slds-inputで日付項目を表示したら・・・

![スクリーンショット 2021-01-07 101956.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492812/7a0ce371-a7fa-5262-afa1-8b2f11dc8b71.jpeg)

・・・はみ出とるやないか！

```HTML:test

<apex:inputField value="{!日付項目}" styleClass="slds-input"/>

```

```CSS:test

.slds-input{
    background-color: #fff;
    border: 1px solid #dddbda;
    border-radius: .25rem;
    /* ここがうまくやってくれないようです */
    width: 100%;
    transition: border .1s linear,background-color .1s linear;
    display: inline-block;
    padding: 0 1rem 0 .75rem;
    line-height: 1.875rem;
    min-height: calc(1.875rem + 2px);
}

```


# 解決策

![スクリーンショット 2021-01-07 102007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492812/8152fddd-0692-8fe7-92f9-fe2da8b01c89.jpeg)

```HTML:test

<apex:inputField value="{!日付項目}" styleClass="slds-input-autoWidth"/>

```

```CSS:test

.slds-input-autoWidth {
    background-color: #fff;
    border: 1px solid #dddbda;
    border-radius: .25rem;
    /* !importantしないと反映されない */
    width: auto !important;
    transition: border .1s linear,background-color .1s linear;
    display: inline-block;
    padding: 0 1rem 0 .75rem;
    line-height: 1.875rem;
    min-height: calc(1.875rem + 2px);
}

```

# 参考リンク

[Lightning Design System Input](https://spring-20.lightningdesignsystem.com/components/input/)
【Salesforce】apex:inputFieldをtype="date"にしたら[YYYYYYMMDD]が入力できるので[YYYYMMDD]にしたい

# 動作確認

![スクリーンショット 2021-01-26 091942.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492812/a7c6f325-9466-78e2-e8af-ace788ccc4ba.jpeg)

↓

![スクリーンショット 2021-01-26 092023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/492812/ae388e36-2f9f-2349-8477-03e242a4764e.jpeg)

※画像だとわかりにくですが、YYYYを入力したらMM、DDとフォーカスが移動します

# 実現方法

```HTML:test.page

<apex:inputField value="{!日付項目}" styleClass="slds-input" showDatePicker="false" type="date"/>

↓

<apex:inputField value="{!日付項目}" styleClass="slds-input" showDatePicker="false" type="date" html-max="9999-12-31"/>

```

# 参考リンク

[apex:inputField](https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_compref_inputField.htm)

[input[type=date]で指定できる日付の上限](https://unarist.hatenablog.com/entry/2015/05/26/123000)
特定のポートを使用するプロセスをkillするPowerShellコマンド

## 本旨

### ワンライナー

```powershell
Get-Process -Id (Get-NetTCPConnection -LocalPort PORT).OwningProcess | Stop-Process
```
※PORTを開放したいポート番号で置き換える

### スクリプト

```powershell
killport PORT
```
といったコマンドで実行するpowershellスクリプト

```powershell
function Stop-ProcessByLocalPort ([parameter(mandatory)][uint16]$port) {
    $conn = Get-NetTCPConnection -LocalPort $port 2>$null
    if($conn.OwningProcess -lt 1){
        Write-Output "ポート $port は使用されていません。"
        return;
    }
    $proc = Get-Process -Id $conn.OwningProcess
    Write-Output "$($proc.ProcessName)を停止しますか？"
    $allow = Read-Host "Y/N"
    if($allow -eq "y"){
        Stop-Process $proc
    }
    Else {
        Write-Output "操作がキャンセルされました。"
    }
}

Set-Alias killport Stop-ProcessByLocalPort
```
好みですが、こちらではkillするプロセス名で確認をとるように。
※より良い書き方があれば教えてください。

## スクリプトについて補足

### 作成したスクリプトをpowershellで使えるようにする

PowerShellのスクリプトを実行したことがないのであれば、事前に管理者権限のPowerShellで、

```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
```
等のコマンドで実行ポリシーを変更してスクリプトを実行できるようにする。

その上で、上記のスクリプトを`killport.ps1`として保存した場合は、powershellでその`killport.ps1`を実行すれば良い。

ただ、使用する度に`killport.ps1`を実行するのでは不便なので、powershell起動時に読み込まれる環境設定用のスクリプト(PowerShellのプロファイル)に直接スクリプトを記載するか、読み込み用の処理を記載するのが便利。

### (おまけ)PowerShellのプロファイルを編集する

プロファイルを使用したことがない場合はファイルが存在しないので作成する必要がある。

powershellが起動時に自動で読み込むスクリプトのパスは$profileで取得できるので、

```powershell
New-Item $profile -force -type file
```
でファイルを作成して、

```powershell
explorer (Split-Path $profile -Parent)
```
でプロファイルの親フォルダを開いてお好みのエディタで編集することができる。
sourcetreeでリポジトリを初期化できなかった話


# 初めに
開発会社でGitを使っているなら、おそら導入しているであろう**SorceTree**。

今回は、そんな**SourceTree**を使っている中で起きた事象を書いていく。

# 事象

いつものようにgithubからclone用のURLをコピーしてきてSourceTreeで

```
新規->URLからclone
```

を選択してURLを貼り付けてクローンを実行。

リポジトリを初期化するために、

```
リポジトリ -> Git flow / Hg flow -> リポジトリを初期化
```

を選択。

## エラー発生

特に何もいじらず、OKを押下したところエラーが発生。

![スクリーンショット 2021-01-07 9.39.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343721/56be8d9c-3bca-a405-ff55-ff5ff538b930.png)


masterは存在しないとな。。。

よくわからん。
ということで早速Google先生に相談。

すると以下の記事を発見
https://www.publickey1.jp/blog/20/githubmainmastermain.html

```
GitHubは、これから新規に作成されるリポジトリのデフォルトブランチ名が「main」になると発表しました。これまでデフォルトブランチ名は「master」でした。
```

なになに、masterからmainに変更されたとな。

## 解決

ということは
![スクリーンショット 2021-01-07 9.45.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343721/1d4fdc74-151f-f4a6-1a19-83dd5fd73850.png)

赤枠部分をmasterからmainに変更すればいいってことだな

早速変更してみる

![スクリーンショット 2021-01-07 9.46.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343721/96e4d74c-3819-daae-3942-05d8cf1bd632.png)

これでOKを押下してみると
![スクリーンショット 2021-01-07 9.47.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343721/3a3ca735-9c07-d642-49f0-4ca3fbb4e4db.png)

developブランチが作成されました🤗

# 最後に

今回、Git flow / Hg flow -> リポジトリを初期化
でProductionブランチにmasterが入っていたことに起因する事象を解決しました。

productionブランチにデフォルトでmasterではなくmainが入力されることを願うばかりです。
【Unity】UIBuilderでInlineStyle設定を削除する方法

UI Toolkitを使う上でUIBuilderの存在は欠かせません。

手書きでUXMLを書いても良いですが、UIBuilderの方が何倍も早くそして正確です。オペミスの心配もありません。

UI要素を追加し、その要素に対してIDまたはclassを設定します。
その後USSで装飾をするわけですが、間違えて**Inlined Styles**を設定してしまう時があります。

**Inlined Stylesが優先**されるため、その後USSをいくら書き換えても反映しません。とてもハマります。

そのUXMLの中身を確認してInlineStyleを**手作業で削除**するわけです。

```xml:Sample.uxml
<ui:UXML xmlns:ui="UnityEngine.UIElements" engine="UnityEngine.UIElements" editor-extension-mode="False">
    <Style src="Common.uss" />
    <ui:VisualElement class="bg" style="height: 100%; width: 100%;" />
</ui:UXML>
```
上記のサンプルコードの中でInlined Stylesは`style="height: 100%; width: 100%;"`です。


ただし、本記事のタイトルの通り**UIBuilder上でも出来た**のでその共有となります。

## コンテキストメニューから「Unset」または「UnsetAll」

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328771/aa0fb066-27ee-e7a4-80dd-71cf82cc28fc.png" width=450 />
UIBuilder上でInlined Stylesは上の画像の通り`マーク`が付き`太字`で記述されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328771/a3036609-cb73-8d83-559f-c523a19611cf.png" width=240 />

右クリックでコンテキストメニューを出すと

- Unset・・・・指定したStyleを削除
- UnsetAll・・・全Styleを削除

このどちらかが選ぶだけです。



以上です。
プログラミングとは？

###そもそもプログラミングとは何か？
コンピューターが実行する処理の手順をまとめたデータをプログラムと呼ぶ

プログラミング言語とは？
普段私たちが話している言葉はコンピューターは理解できない。
コンピューターがわかる言葉をプログラミング言語という。
プログラミング言語で書かれたテキストやファイルをソースコードと呼ぶ

##プログラミング言語の種類
Ruby
java
php
Python

などがある。

プログラムを実行するにはターミナルにコマンドを打ち込んで実行する。

##ここからプログラミング言語Rubyについて記述していきます。

##irb
irbコマンドはターミナルから直接Rubyのプログラムを動かすことのできる機能（Interactive Ruby の略）
エディタでコードを記述してターミナルを実行するのではなく直接ターミナルで実行できる。

####ターミナル画面
```
#irbを起動
% irb
```

```
irb(main):001:0> "Welcome! Ruby" #このように打ち込む
=>"Welcome! Ruby" #このように出力
```

今日は以上です。
DropboxPaper × Markdownでメモする

# 本記事の目標
Markdownで記録する仕組みをつくる。
用途の想定：メモ、議事録、読書ログ、ミーティング用資料

# 経緯
* 基本的にはPCでライティング、閲覧はPC&スマホ両方で。
* 既知のクラウドシステムを使用（これ以上ごちゃごちゃと増やしたくない）
* 特定のサービスに依存しない汎用的な形式に統一（EvernoteやOffice依存、Apple依存から卒業したい。）
* Markdownでライティングする習慣をつけたい。

→ DropboxPaperに決定。

# 参考
[「使ってみたら想像以上によかった！Dropbox社員が教える新「Paper」の効果的な使い方」](https://navi.dropbox.jp/dropbox-paper)
→中の人が使ってみた系の記事はなんだかんだいつも一番参考になります！

# dropboxpaper使ってみた所感
## グッドなところ
* Markdownでライティングできる。
* 公式のスマホアプリがある。
* 目次を自動作成してくれる（これ一番でかい！）
* 非エンジニア系にも優しい導線（Markdown覚えなくても書けてしまう…笑）
* markdownファイルへのエクスポートが簡単（変換ツール不要）
* プレゼンテーション機能（記録はWordで、プレゼンはPowerPointでという二重作業から解放されるの嬉しい）

## イマイチなところ
* 取り扱えるヘッダーがh2まで（せめてもう一段階欲しい…）
* スマホアプリでは目次機能が見えない（視認性悪くなるから無理かな…）
* エクスポート先でのカレンダー日時表記が世界標準時間（日本時間-9時間）になってる。出力先でも使いたい場合、このズレに気をつけて都度処理しとかないと日付が１日ずれて場合によってはパニック起こす

# 今後の活用法
目次の自動作成機能が個人的にはHitしたので、
一つのファイルにゴリゴリ追記していくスタイルのドキュメント作成には使っていこうかなと思います。
技術メモとか、議事録作成とか、読書メモとか。
今までEvernoteやらAppleメモアプリで書き溜めてた勉強ノートも全部Markdownに変換して、引越ししたい。。
【初心者向け】Visual Studio Code へ flake8 を導入する

flake8 は、次の Lint[^1] を含んだラッパーツールです。

- PyFlakes
- pycodestyle
- Ned Batchelder’s McCabe script

これを Visual Studio Code に導入することで、PythonのコードがPEP8に準拠したスタイルになっているか検証することができるため開発環境に組み込みました。

## 導入環境
- Windows 10 64bit
- Visual Studio Code (VS Code)
- Python3.8 (※ pip へのパスが通っていることを前提とします。)
- Windows コマンドプロンプト (cmd.exe) をある程度使えることを前提とします

## 導入の流れ

1. flake8 のインストール
2. VS Code 既定の Lint である pylint を無効化する
3. VS Code に flake8 を設定する
4. flake8 の設定値を変更する

### 1. flake8 のインストール
コマンドプロンプトで次のコマンドを実行します

```
pip install flake8
```

インストールが完了したら、次のコマンドでインストールされたことを確認できます

```
C:\>pip show flake8
Name: flake8
Version: 3.8.4
Summary: the modular source code checker: pep8 pyflakes and co
Home-page: https://gitlab.com/pycqa/flake8
Author: Tarek Ziade
Author-email: tarek@ziade.org
License: MIT
Location: c:\python\lib\site-packages
Requires: pycodestyle, mccabe, pyflakes
Required-by:
```

### 2. VS Code 既定の Lint である pylint を無効化する
VS Code の設定画面から`python.linting.pylintEnabled`を検索し、`Python > Linting: PyLint Enabled`項目を無効にします。
![0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394435/30cc2ad6-8b45-cae8-72d5-9cf2482f357f.png)

尚、VS Code の設定は、ユーザー設定、ワークスペース設定、フォルダー設定と分けることが出来ますが、筆者はユーザー設定を選択しています。

### 3. VS Code に flake8 を設定する
VS Code の設定画面から`python.linting.flake8Enabled`を検索し、`Python > Linting: Flake8 Enabled`項目を有効にします。
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394435/5d48a3a6-7b51-7c4b-533a-5d86292c4311.png)

### 4. flake8 の設定値を変更する
PEP8 スタイルに準拠すると一行の文字数制限が79文字までとなります。
これを現在の開発環境に合わせて、文字数制限を150文字までに設定します。
VS Code の設定画面から`python.linting.flake8Args`を検索し、`Python > Linting: Flake8 Args`項目に設定を追加します。
![3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394435/279e6eaf-08ce-5a3f-297b-bdf67b670e2f.png)

この設定により、VS Code の設定ファイル (settings.json) に次のコードが追加されます。

```json:settings.json
{
    "python.linting.flake8Args": [
        "--max-line-length",
        "150"
    ]
}
```

### 5. 完了
以上で、Python ソースファイル保存時にコードがPEP8に準拠しているか検証されます。

## 参考にしたサイト
- [flake8](https://pypi.org/project/flake8/)

[^1]: Lint (Linter ともいう) とはソースコードの内容を分析し問題点を指摘してくれる静的解析ツールです。
manimの作法 その13

#概要

manimの作法、調べてみた。
VMobject、使ってみた。

#サンプルコード


```
from manimlib.imports import *

class test(GraphScene):
	CONFIG = {
		"x_labeled_nums": [],
		"y_labeled_nums": [],
		"x_axis_label": "Temperature",
		"y_axis_label": "Pressure",
		"graph_origin": 2.5 * DOWN + 2 * LEFT,
		"corner_square_width": 4,
		"example_point_coords": (2, 5),
	}
	def construct(self):
		self.setup_axes()
		self.draw_arrow()
		self.add_example_coordinates()
		self.wander_continuously()
	def draw_arrow(self):
		square = Square(side_length = self.corner_square_width, stroke_color = WHITE, stroke_width = 0, )
		square.to_corner(UP + LEFT, buff = 0)
		arrow = Arrow(square.get_right(), self.coords_to_point(*self.example_point_coords))
		self.play(ShowCreation(arrow))
	def add_example_coordinates(self):
		dot = Dot(self.coords_to_point(*self.example_point_coords))
		dot.set_color(YELLOW)
		tex = TexMobject("(25^\\circ\\text{C}, 101 \\text{ kPa})")
		tex.next_to(dot, UP + RIGHT, buff = SMALL_BUFF)
		self.play(ShowCreation(dot))
		self.play(Write(tex))
		self.wait()
		self.play(FadeOut(tex))
	def wander_continuously(self):
		path = VMobject().set_points_smoothly([ORIGIN, 2 * UP + RIGHT, 2 * DOWN + RIGHT, 5 * RIGHT, 4 * RIGHT + UP, 3 * RIGHT + 2 * DOWN, DOWN + LEFT, 2 * RIGHT])
		point = self.coords_to_point(*self.example_point_coords)
		path.shift(point)
		path.set_color(GREEN)
		self.play(ShowCreation(path, run_time = 10, rate_func = linear))
		self.wait()





```


#生成した動画

https://www.youtube.com/watch?v=sbNJTUT4G2c

以上。
manimの作法 その12

#概要

manimの作法、調べてみた。
RubiksCube、使ってみた。

#サンプルコード

```
from manimlib.imports import *

class RubiksCube(VGroup):
	CONFIG = {
		"colors": [
			"#FFD500",  # Yellow
			"#C41E3A",  # Orange
			"#009E60",  # Green
			"#FF5800",  # Red
			"#0051BA",  # Blue
			"#FFFFFF"   # White
		],
	}
	def __init__(self, **kwargs):
		digest_config(self, kwargs)
		vectors = [OUT, RIGHT, UP, LEFT, DOWN, IN]
		faces = [self.create_face(color, vector) for color, vector in zip(self.colors, vectors)]
		VGroup.__init__(self, *it.chain(*faces), **kwargs)
		self.set_shade_in_3d(True)
	def create_face(self, color, vector):
		squares = VGroup(*[self.create_square(color) for x in range(9)])
		squares.arrange_in_grid(3, 3, buff = 0)
		squares.set_width(2)
		squares.move_to(OUT, OUT)
		squares.apply_matrix(z_to_vector(vector))
		return squares
	def create_square(self, color):
		square = Square(stroke_width = 3, stroke_color = BLACK, fill_color = color, fill_opacity = 1, side_length = 1, )
		square.flip()
		return square
	def get_face(self, vect):
		self.sort(lambda p: np.dot(p, vect))
		return self[-(12 + 9):]

class test(SpecialThreeDScene):
	def construct(self):
		cube = RubiksCube()
		cube.set_fill(opacity = 0.8)
		cube.set_stroke(width = 1)
		axes = self.get_axes()
		self.add(axes, cube)
		self.move_camera(phi = 70 * DEGREES, theta = -140 * DEGREES, )
		self.begin_ambient_camera_rotation(rate = 0.02)
		self.wait(2)
		self.play(Rotate(cube, TAU / 4, RIGHT, run_time = 3))
		self.wait(2)
		self.play(Rotate(cube, TAU / 4, UP, run_time = 3))
		self.wait(2)
		self.play(Rotate(cube, -TAU / 3, np.ones(3), run_time = 3))
		self.wait(2)



```

#生成した動画

https://www.youtube.com/watch?v=hjaVvJ49_nk

以上。
ECRのuntaggedイメージ削除

備忘録です。
ご指摘等ありましたら教えていただけると幸いです。

最近現場で、新システムのインフラにECSの導入→コード化をしています。
latest運用にしており、untaggedイメージが増産されていました。
なのでサイクルを決めて削除するように変更しました。

下記コードは、
・ 1日のサイクルでuntaggedを削除
・ 1つだけイメージを残す


```terraform:ecr.tf
# 作成済みECR
data "aws_ecr_repository" "app" {
  name = local.service_name
}

# untaggedイメージの削除
resource "aws_ecr_lifecycle_policy" "app" {
  repository = data.aws_ecr_repository.app.name

  policy = <<EOF
{
    "rules": [
        {
            "rulePriority": 1,
            "description": "Expire images older than 1 days",
            "selection": {
                "tagStatus": "untagged",
                "countType": "sinceImagePushed",
                "countUnit": "days",
                "countNumber": 1
            },
            "action": {
                "type": "expire"
            }
        }
    ]
}
EOF
}
```

# 参考文献
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecr_lifecycle_policy
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/lifecycle_policy_examples.html
【メモ】Pythonでピボットテーブルをやってみた

* 製造業出身のデータサイエンティストがお送りする記事
* 今回は自分のメモとして記事に残しておきます。

##はじめに
製造現場では、膨大なデータをExcelで分析する際にピボットテーブルを頻繁に使います。データを探索的に集計したいときに便利だからです。
Jupyter Notebookでもピボットテーブルってできないのかな？と思って調べていたら[pivottablejs](https://pivottable.js.org/examples/)というライブラリーを使用したらできるということが分かりました。

##ピボットテーブルの実装
```php
import pivottablejs
import seaborn as sns
sns.set_style('whitegrid')

#データセットの読み込み
df=sns.load_dataset('tips')

pivottablejs.pivot_ui(df)
```

![スクリーンショット 2021-01-06 14.41.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743453/69191257-d15a-ba4a-d58a-f4ec293a0665.png)

集計とかはドラック&ドロップでできます。
Excelと同じような感じでできますので、非常に便利です。

![スクリーンショット 2021-01-06 14.43.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/743453/8eeb7876-3ad7-b4f4-cc71-e8013acd3cfa.png)
優良HPによくあるヘッダーのテンプレート

###優良な企業のHPによくみられるヘッダーのテンプレート
今回ご紹介するテンプレの内容、特徴。

+ ヘッダーがposition:fixed；で固定されている。
+ 企業様の名前やロゴ、ナビメニューが両端に表示されている。
+ ナビメニューに触れた時アクションが起こる。

主にこのような特徴があると思います。思い当たる節はございませんか？
上記のような構成のコードを紹介いたします。

```
HTML
<header>
<img src="images/dualslogo.png" alt="logo" class="dualslogo">
<ul>
<li>HOME</li>
<li>WORKS</li>
<li>ABOUT</li>
<li>CONTACT</li>
</ul>
</header>
CSS
header {
  position: fixed;
  width: 100%;
  display: flex;
  justify-content: space-between;
}
ul {
  display: flex;
  list-style: none;
}

li {
  color: white;
  transition: all 0.3s;
  cursor: pointer;
　//padding,marginなどの調節
}

li:hover {
  色が変わったりすると良いかもしれません。
  }
```
＊個人的な意見ですが全体的にパステルカラーを使うと綺麗に見えます。
Rust のトレイトを実装する際に、列挙されてないメソッドも定義する

クラスベースの言語から来た身としては、変に悩んでしまったのでメモとして残しておきます。

# やりたいこと：Java での実装例

タイトルだけでは何がしたいのかさっぱりわからないと思うので、実現したいことを Java で書くと以下のような感じです：

```java
import java.util.*;

interface Service {
    int ID = 123;
    void displayId();
}

class Module implements Service {
    public void displayId() {
        System.out.println(getId());
    }
    
    private int getId() {
        return this.ID;
    }
}

public class Main {
    public static void main(String[] args) {
        Module module = new Module();
        module.displayId();
    }
}
```

要は、

- インタフェース（Rust ではトレイト）で public なメソッドを1つ列挙しておきたい
- 実装クラス（Rust では impl）の中で、 private なメソッドを定義して利用したい

の2点です。

# Rust で実現：失敗例

これを Rust で実現しようとこのように書くとコンパイルエラーが出て怒られます：

```rust
trait Service {
    fn display(&self);
}

struct Module {
    id: u64,
}

impl Service for Module {
    fn display(&self) {
        print!("{}", get_id());
    }

    fn get_id(&self) -> u64 {
        self.id
    }
}

fn main() {
    let module = Module{
        id: 12,
    };
    module.display();
}
```

※[Rust Playground 上での実装例](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=38680dcb1db0e8180bb0d63a762f46f0)

エラーメッセージは、`error[E0407]: method get_id is not a member of trait Service` と `error[E0425]: cannot find function get_id in this scope` というものです。 **`get_id` というメソッドは `Service` トレイトで列挙していないので、書けないよ** と怒られてしまいます。

# Rust で実現：成功例

ということで、以下のようにするとコンパイラに怒られずに済みます：

```rust
trait Service {
    fn display(&self);
}

struct Module {
    id: u64,
}

impl Service for Module {
    fn display(&self) {
        print!("{}", self.get_id());
    }
}

impl Module {
    fn get_id(&self) -> u64 {
        self.id
    }
}

fn main() {
    let module = Module{
        id: 12,
    };
    module.display();
}
```

※[Rust Playground での実装例](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=edec98be630656c4f9c69ea3ab68733b)

直したのは、 **`Service` トレイトの実装 `Module` をトレイトの実装部分（ `impl Service for Module` の箇所）と Module 独自のメソッドを定義する部分（ `impl Module` の箇所）に分けて書く**、という点です。

こうすれば、最初に Java の例で挙げたのと同じ動作が実現できます。

# 謝辞

この問題の解決にあたっては、[rust-jp.rs](https://rust-jp.rs/) の 日本語コミュニティ（Slack）の方々にお世話になりました。初心者の私の質問に迅速に丁寧にご回答いただき、非常に助かりました。
ghコマンドを思考停止で使う

# 前置き
- 最初は自分用に作ってますが、どんどん編集してみんなも使えるようにしていきます

# ghコマンド
https://cli.github.com

# 使い方
## プルリクエスト（PR）を作る〜ブラウザで見る
- 前提として、PRを出すためのブランチをpush済みであるとする
- 作るとき、見るときは基本wオプションを使うことで、結果的に楽できる
- wオプションで開くブラウザは、$BROWSER環境変数で決められるらしいが、うまく見つからない
- 
```sh
$ gh pr create -w
```
【vsnotes】vscodeのメモ用プラグインvsnotesの設定メモ

# 個人的な設定のメモです。

## vsnotesとは
vscodeエディタ上のコマンドで、サクッとメモファイルを作成できる便利なプラグインです。
便利な割には使っている人は割と少ないかも？

## 参考記事
https://blog.chick-p.work/vsnote-template/

## 
下記の設定で「任意のタイトル」＋「作成日時」が作成されるようになります。

### 「settings.json」を出して変更する手順
1. Shift + Ctr(Command) + P でコマンドパレットを開き、「setting」と入力します。
2. 「Preferences: Open User Settings」と補完されるので、Enter キーで確定します。
3. 設定右上の「{}」マークをクリックし、setting.json を開きます。次の内容を追記して、保存します。

```json:settings.json
{
    "vsnotes.noteTitleConvertSpaces": " ",
    "vsnotes.defaultNoteTitle": "{title} {dt}.{ext}",
    "vsnotes.tokens": [
        {
            "type": "datetime",
            "token": "{dt}",
            "format": "mm_YYYY-MM-DD",
            "description": "Insert formatted datetime."
        },
        {
            "type": "title",
            "token": "{title}",
            "description": "Insert note title from input box.",
            "format": "Untitled"
        },
        {
            "type": "extension",
            "token": "{ext}",
            "description": "Insert file vsnotes.",
            "format": "txt"
        }
    ],
    
}
```

## 補足
ちなみに、{ext}の部分をmdからtxtに変更すると、txtの拡張子のメモ帳が作成されるようになります。
コンフリクトしたのでrebaseしたい

### git rebase


過去にタイムスリップして、コンフリクトを過去改変し、A案B案を決めて未来に進める

前提：作業ブランチ(bigFix)にいる
①作業ブランチからgit checkout masterでマスターに戻る
②git pull で他人の変更を持ってくる
③git checkout bugFix(作業ブランチ) で作業ブランチに戻る
④git rebase masterで過去にタイムスリップする
⑤git statusを見るとboth modifiedになってるファイルがあるので変更する。なければ⑧
⑥変更ファイルを変更する
⑦git rebase --continueをする
⑧git push -f

https://backlog.com/ja/git-tutorial/stepup/13/
NodeListからArrayにシャッフルしつつ変換

フルコードは以下。
[NodeListからArrayにシャッフルしつつ変換するJavaScriptプログラム - sun610.web.fc2.com](https://sun610.web.fc2.com/program/c0002.html)

ポイントは

- `Math.floor(Math.random() * childr_.length)` でランダムインデックスを取得している
- `iArray` に使用済みインデックスを格納し、同じインデックスを2回以上使用しないようにしている
【JavaScript】文字列に半角空白と全角空白が含まれるか判別する

文字列に半角空白と全角空白が含まれるか判別する方法をまとめました。(JavaScript)

こちらを参考にしました。[Stack Overflow](https://stackoverflow.com/questions/17616624/detect-if-string-contains-any-spaces)

# 修正前
```javascript
// 半角空白があるか
function hasSpaces(str) {
  if (str.indexOf(' ') !== -1) {
    return true
  } else {
    return false
  }
}

// 全角空白があるか
function hasZenkakuSpaces(str) {
  if (str.indexOf('　') !== -1) {
    return true
  } else {
    return false
  }
}

// 適当な文字列(この例では2つスペースがある)
const input = 'There is something';

// いくつスペースがあるか格納
let howManySpaces = 0;

for (let i=0; i<input.length; i++) {

  // 半角空白または全角空白があったときの処理
  if (hasSpaces(input[i]) === true || hasZenkakuSpaces(input[i]) === true) {
    howManySpaces++;
  }
}

console.log('スペースの数: ' + howManySpaces);

```

# 修正後
コメントで指摘していただいたので、修正しました。ありがとうございました。

```javascript
// 半角空白があるか
function hasSpaces(str) {
  return str.includes(' ')
}

// 全角空白があるか
function hasZenkakuSpaces(str) {
  return str.includes('　')
}

// 適当な文字列(この例では2つスペースがある)
const input = 'There is something';

// いくつスペースがあるか格納
let howManySpaces = 0;

for (let i = 0; i < input.length; i++) {

  // 半角空白または全角空白があったときの処理
  if (hasSpaces(input[i]) || hasZenkakuSpaces(input[i])) {
    howManySpaces++;
  }
}

console.log(howManySpaces);
```
AutoCAD 2021/2022 .NET WizardsをVisual Studio 2019環境にインストールする場合のトラブルについて

# はじめに

- ```AutoCAD 2021/2022 .NET API```は```.NET Framework 4.8```上で動作します。
- この環境構築のため、```Visual Studio 2019```にインストールしようとしたところうまく動作しなかったのでその対処方法です。

# 具体的な現象

- インストールが正常終了しても、下記が表示されない。
    ![新規プロジェクト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426989/11cbe0fd-7d8c-c095-a0bd-3e59bef3cb57.png)

# 結論から言うと

- すでに対処方法がWeb公開されていました。

    [AUTODESK KNOWLEDGE NETWORK](https://knowledge.autodesk.com/ja/support/autocad/troubleshooting/caas/simplecontent/content/autocad-api-EF-BC-9Avisual-studio-2019--E3-81-AB-net-wizard--E3-81-8C-E8-AA-8D-E8-AD-98-E3-8.html)
- 要は、インストールしても出てこない場合は、インストーラーを展開し中のファイルをプロジェクトのテンプレートとして保存してね、だそうです。

# まとめ

- 私はこのページを見つけ出すまでに私は結構な時間を費やしました。
  ググるときのキーワードが思いつかなかっただけですが
  ```AutoCAD 2021 NET Wizards インストールできない```
  たったこれだけのキーワードが思いつかないとは・・・とほほ。

- それと、.NET APIのWizardsインストーラー、管理者権限で起動したコマンドプロンプトから、
  
  ```powershell
  msiexec -i AutoCADNetWizards.msi
  ```
  
  とコマンドを入力してインストールしないとうまく動作しません。
  管理者権限の必要なフォルダーに書き込む以上しょうがないとは思いますが、これをやっても上記書き込みができないってどんな現象なんでしょうか。
未確定ですが、どうやらOneDriveを使っている状況だと発生する？ようです。。。

とりあえず、今回はこれでうまく動作したので良かったよかった、ですみました。

# 2021/06/26追記

AutoCAD 2022用でも同様の現象でしたので追記しました。
OneDriveを使っている環境だとおかしくなる・・・っぽいです。
CI/CDパイプラインとDocker

Dockerを使ったCI/CDパイプラインを学習したときのメモです。

# CI/CDとは
![CI/CDのプロセス](https://thinkit.co.jp/sites/default/files/article_node/bft_container_ojisan_07_09.jpg)

> 画像引用：ThikIT「DevOps、CI/CDパイプラインでもコンテナは大活躍!」

継続的インテグレーション、継続的デリバリー（デプロイ）するためのプロセスを仕組み化。CIツールの代表的なものに以下がある。

- Jenkins
- Travis CI
- circleci
- Git Hub Actions

# CI/CDとGitコマンド
TravisCI+Docker+Heroku+Railsを使った例。TravisCIの流れとGitコマンドのみ記載。

ワークディレクトリに以下YAMLファイルを格納。

```yaml
sudo: required

services: docker

before_install:
  - docker-compose up --build -d
  - docker login -u "$HEROKU_USERNAME" -p "$HEROKU_API_KEY" registry.heroku.com 

script:
  - docker-compose exec --env 'RAILS_ENV=test' web rails db:create
  - docker-compose exec --env 'RAILS_ENV=test' web rails db:migrate
  - docker-compose exec --env 'RAILS_ENV=test' web rails test

deploy:
  provider: script
  script:
    docker build -t registry.heroku.com/$HEROKU_APP_NAME/web -f Dockerfile.prod .;
    docker push registry.heroku.com/$HEROKU_APP_NAME/web;
    heroku run --app $HEROKU_APP_NAME rails db:migrate;
  on:
    branch: master
```
権限の設定、Dockerを使う、コンテナを起動、DB準備、テスト実行、デプロイ実行（gitブランチがmasterの場合のみ）が順番に記述されている。

### featureブランチを作成
```bash
$ git checkout -b feature
```

### 変更したファイルをGitのステージングに上げる
```bash
$ git add .
```

### 変更をコミットする
```bash
$ git commit -m '<commit message>'
```

### featureブランチにpush
```bash
$ git push origin feature
```
TravisCIのbuildが走り、テストコードが実行される。

### GitHubでプルリクエストを作成・Merge

GitでMasterブランチに反映されることで、TravisCIのbuildが走り、アプリがデプロイされる。
【Rails】deviseを使ったサインアップ機能　wrong number of arguments (given 0, expected 1)というエラー

# エラー詳細
deviseを導入して、サインアップを実行したところ、このような内容のエラーが吐かれた。

```log
ArgumentError (wrong number of arguments (given 0, expected 1)):
wrong number of arguments (given 0, expected 1)
```

#解決法

```user.rb
has_secure_password
```
を消す。
has_secure_passwordとは、パスワードをDBに保存する時に、暗号化して保存してくれるrailsの機能のこと。deviseを使う場合は不要なので、コメントアウトしておきましょう。

# 参考にした記事
https://qiita.com/kents1002/items/4079e3d05d322febe00e
https://qiita.com/shumpeism/items/4d8946ade2dbdccab31c
初心者がLaravelでアプリをつくるまで

プログラミングスクールに通い始めて２ヶ月、、
あと１ヶ月で予定の３ヶ月を終えてしまうけど、全然ポートフォリオに使う予定のアプリが完成しない、、
とりあえず、全然連絡の取れなかったメンターの方を変更していただいてようやく方向性が定まってきた。

とりあえず、つくってみるアプリは前々から少し考えていた、アンケートを投稿できるモノにした。
あまり難しそうなものを考えると心が折れそうなので、、

内容としては、登録してくれたユーザが誰でもアンケートを投稿できて、他のユーザに回答してもらえて回答の集計を取れるようなものにしようかと、、
最初はとりあえず型だけつくって、後から時間があれば色々な機能を搭載していければいいかなってくらいです。

まず言われた通り、基本設計とテーブル定義を調べながらやってみたけど、やり方が全然わからないのでとりあえずシートに書いてみました。


機能一覧↓
![018496678e2a5cd8a337d937404349fd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1008402/f1eedd82-d70f-8498-5a2a-229dd938ab03.png)

画面設計↓
![08422cc56b25641aa748709dade904c9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1008402/b7482ca5-e15c-463f-ec66-3293b597e9ec.png)

![a1aeef6548ca6759de2f7c4f4f2dc235.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1008402/0a226639-0568-bbd8-9df2-110a658db5e8.png)

![b184dce9016d9ccd1124620aa0e10e4a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1008402/599eb00f-8c92-09a1-b47e-ae21cd059e93.png)

url一覧↓
![9f3a7cb6144517f2a1ea8bdd927e4c30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1008402/864e642a-68e7-82e5-b74a-e08514926dd2.png)


きっと間違いと足りない部分が多すぎると思うので、明日のメンタリング教えてもらおう、、

コードをこれから書いていくのですが、何から書き始めていいかさっぱりなのでスクールのカリキュラムを真似しながら１つずつ書いて行きます、、

頭の中では、このページのこの部分を押すとここに飛んで、あのボタンを押すとこうなってと、イメージはあるのですが、、
それを、紙にペンで書いていいなら今日中に終わるのに、コードでそれを表現するには初心者の自分からすれば莫大な時間がかかりそうです、、

Qiita書いてて気が付くともう朝方なので、また明日からがんばります！
Quantum particle computers

What is a quantum computer? A computer who can think in quantum states. Superimposing states is a very common thing. Think of a carbon copy or trace paper, two drawings can be lined on top of the other (0 and ones). Entanglement also plays a part of quantum computers. There is a word that I do not like “Quantum computer supremacy” reading so much about the Holocaust the word supremacy makes my hairs stand up. I like the word alone quantum “how much”, or better particle computers. Why? Quantum computers run on photons and other particles. Physicists lead the pack at creating the technology that makes quantum computers. In the old times silicon chips overtook the market. The question I ask is which particle works best? Photons, Bosons or Fermions? 
What about a multi-particle computer like a dual-core computer? Some computers use photons to carry single computations “quantum computers capable of carrying out a single specific type of calculation—boson sampling. “According to the Airports Council International (ACI) World Airport Traffic Report, there are currently 17,678 commercial airports in the world,” 700 airliners and 40,000 commercial planes. What if we need to make a flight schedule for all of these variables? It would take a very long time, but quantum computers can make these calculations in a snap. The other question about computing with particles is temperature. All current quantum computers work under very low temperatures but what about high temperatures.


![Screenshot_2021-01-06 Plasma (physics) - Wikipedia(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/950107/86f74dec-0df8-9355-1f02-46a3399116b8.png)



Table is from Wikipedia.

Works Cited
Kunz, Matthew W., et al. “Pegasus: A New Hybrid-Kinetic Particle-in-Cell Code for Astrophysical Plasma Dynamics.” Journal of Computational Physics, Academic Press, 4 Dec. 2013, www.sciencedirect.com/science/article/pii/S0021999113007973.
“Plasma (Physics).” Wikipedia, Wikimedia Foundation, 31 Dec. 2020, en.wikipedia.org/wiki/Plasma_(physics).
Yirka, Bob. “Chinese Photonic Quantum Computer Demonstrates Quantum Supremacy.” Phys.org, Phys.org, 4 Dec. 2020, phys.org/news/2020-12-chinese-photonic-quantum-supremacy.html.
<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.
GCP Compute Engine の Ubuntu 20.04.1 LTS でディスク拡張

## 前提
- ドキュメントにある様に万が一に備え作業前にはスナップショットを取った。
- パーティションはVM作成時からなにも変更していない。
- コマンドの実行は[こちら](https://cloud.google.com/compute/docs/disks/add-persistent-disk?hl=ja&_ga=2.221038104.-1846960220.1605578869#resize_partitions)を参照。

## 作業
1. Compute Engine > ディスク
1. 拡張対象のディスクを選択
1. 右上の「編集」
1. プロパティ > サイズ の値を変更し「保存」
1. SSHで接続し下記コマンドを実行
    1. sudo apt -y install cloud-guest-utils
    1. sudo growpart /dev/sda 1
    1. sudo resize2fs /dev/sda 1
        - busyやらなんやらでエラーが出て解消せず。
        - ext4だからこれで良いと思われるが、調査して他コマンドを実行しても解決せず。
        - どこかでAmazonEC2の場合どこかの設定ファイルでresize2fsを実行しており再起動で解決するとあったので再起動した。
1. 再起動の結果、使用できる容量が増えていた。
これだけは覚えておきたい【kubectl】コマンド

【[公式ドキュメント](https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/)】

#マニフェストとリソースの作成/削除/更新(create/delete/apply)
`.yaml`をマニフェストファイル。

リソースの作成は<b><font color="OrangeRed">kubectl create</font></b>コマンドを利用する。

```terminal:
$ kubectl create -f ●●●.yaml
```
すでにリソースが存在する場合はエラーが発生する。

リソースの削除は<b><font color="OrangeRed">kubectl delete</font></b>コマンドを利用する。

```terminal
$ kubectl delete -f ●●●.yaml
```
リソースの即時強制削除は、`--grace-period 0 --force`を利用する。

リソースの更新は、<b><font color="OrangeRed">kubectl apply</font></b>コマンドを利用する。
またリソースが存在しない場合にはリソースの新規作成も行うため、利便性が高い。

```terminal
$ kubectl apply -f ●●●.yaml
```

理由が無い場合には<b><font color="OrangeRed">リソースの作成時もkubectl apply</font></b>コマンドを利用する。


#リソースの情報取得(get)
リソースの一覧情報を取得するには『<b><font color="OrangeRed">kubectl get</font></b>』で確認可能
getコマンドは引数に『<b><font color="OrangeRed">リソースの種類</font></b>』『<b><font color="OrangeRed">リソース名</font></b>(オプション)』をつける

```terminal:Podの一覧取得
$ kubectl get pods
```

```terminal:特定のPodの情報だけ取得
$ kubectl get pods <pod_name>
```

『<b><font color="OrangeRed">-o</font></b>』オプションで『<b>YAML,JSON,Custom Columns,JSON Path,Go Template</b>』など色々な形式で出力することが可能。

```terminal:Podの一覧を取得(詳細output)
$ kubectl get pods -o wide
```


```terminal:YAML形式でPodnリストを取得
$ kubectl get pods -o yaml
```

```terminal:YAML形式で特定のPodを取得
$ kubectl get pods -o yaml <pod_name>
```

Nodeなども取得可能

```terminal:ノードの一覧を取得
$ kubectl get nodes
```

全リソースも取得可能

```terminal:全てのリソースを取得
$ kubectl get all
```

# リソースの詳細情報の取得(describe)
リソースの詳細情報を知るためには『<b><font color="OrangeRed">kubectl describe</font></b>』コマンドを実行する。
このコマンドにPodを指定すると、ボリュームのセットアップやイメージの取得状況などが取得できる。

```termianl:Podの詳細情報を取得
$ kubectl describe pods <pod_name>
```

Nodeを指定した場合には、リソースの使用状況や空き状況、起動しているPodのリソース使用率が取得できる。

```terminal:ノードの詳細情報を取得
$ kubectl describe node <node_name>
```


#Podのログ確認(logs)
Pod内のコンテナのログは『<b><font color="OrangeRed">kubectl logs</font></b>』で出力可能
複数のコンテナをが配置されている場合には、1つのコンテンのログのみを出力することが可能

```terminal:コンテナのログを出力
$ kubectl logs <pod_name>
```

```terminal:特定のコンテナのログを出力
$ kubectl logs <pod_name> =c <container_name>
```

```terminal:更新分を表示し続けながら出力
$ kubectl logs -f <pod_name>
```

```termianl:最新1時間以内、100件取得、タイムスタンプを表示してログを出力
$ kubectl logs --since=1h --tail=100 --timestamps=true <pod_name>
```

#topでリソースの使用量の確認(top)
リソースの使用量は『<b><font color="OrangeRed">kuectl top</font></b>』で確認することができる。
ノードとPod単位で使用量を確認する。

```terminal:ノードのリソース使用量を確認
$ kubectl top node
```

```terminal:ポッドのリソース使用量を確認
$ kubectl top pod
```

KubernetesがPodのために確保したリソースを確認することも可能

```terminal:Podに確保されたリソースを確認
$ kubectl describe pod <pod_name>
```

Pod内に複数のコンテナが配置されている場合は『<b><font color="OrangeRed">-- containers</font></b>』オプションを使って
コンテナごとの使用量を確認することも可能

```terminal:コンテナごとのリソース使用量を確認
$ kubectl top pod --containers 
```
Material-UI 事始め

## Material UI

reactをインストールした状態からスタート。
app.jsをいじります。
まずはボタンを表示してみよう。

```
import Button from '@material-ui/core/Button';

function App() {
  return (
    <Button variant="contained" color="primary">
      Hello World
    </Button>
  );
}
export default App;
```
以下の様にも書き換えられる

```
import Button from '@material-ui/core/Button';
const App = () => {
  return(
    <Button variant="contained" color="secondary">
      Hello World
    </Button>
  )
}
export default App;
```

#### 参考にしたい記事
* [Material-UIのスタイルの定義](https://qiita.com/h-yoshikawa/items/efa33101b0a02cba7759)
* [JavaScript ES6の分割代入について](https://qiita.com/uto-usui/items/a9d17447fe81c17c41fa)