OmniAICreator/Qiita-1.07M huggingface dataset:
ワイヤレスLED OSWM43-W5W を ワイヤレス給電ユニット OSWPTS1208D で光らせる

[ワイヤレスLED](http://akizukidenshi.com/catalog/g/gM-14404/)
![ワイヤレスLED](http://akizukidenshi.com/img/goods/4/M-14405.jpg)
[ワイヤレス給電ユニット](http://akizukidenshi.com/catalog/g/gM-14405/)
![ワイヤレス給電ユニット](http://akizukidenshi.com/img/goods/C/M-14405.jpg)

ワイヤレスLEDと給電ユニットを購入したので光らせてみました。
給電ユニットはArduino uno の5Pin-Gnd につないでいます。

```
void setup() {
  //https://playground.arduino.cc/Main/TimerPWMCheatsheet/
  TCCR0B = (TCCR0B & 0b11111000) | 0x01; // 62500Hz
}

float cy=0.f;
void loop() {
  float dt = (1.f+sin(cy*PI*2.0f))*0.5f*255.f;
  analogWrite(5, int(dt)); // duty
  cy += 0.01f;
  if(cy>1.0f){
    cy -= 1.0f;
  }
  delay(10.0f*62500.0f/976.56f);
}

```

[動画](https://youtu.be/t8xMP6vtMxs)
![2019-10-12_171636.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59911/f9c9c3c2-1590-79b4-9137-f2216c1d7f4e.png)
Vue.js用語辞典【未完】

## [ディレクティブ](https://012-jp.vuejs.org/guide/directives.html)

- DOM 要素に対して何かを実行することをライブラリに伝達する、マークアップ中の特別なトークン。
- 「v-」で始まるやつ
- ディレクティブ＝指令する
- Vue.jsに仕事を振る仕組み
- 接頭辞はデフォルトで v 
    - v-bind
    - v-if
    - v-show
    - v-for
    - v-on

- 参考：[体で覚えるVue.js - ディレクティブ編 〜 JSおくのほそ道 #023](https://qiita.com/hosomichi/items/25041c1d46452de84aa6)
- 参考：[Vue.jsのv-ifとv-showの違い](https://qiita.com/Aqua_ix/items/61eac355f3c24d7676e1)
- 参考：[v-for で配列に要素をマッピングする](https://jp.vuejs.org/v2/guide/list.html)

## [メソッドハンドラ](https://v1-jp.vuejs.org/guide/events.html)
- 「クリック」や「入力」といったイベントをハンドリングする
- クリックしたらアラートを出す！、マウスオーバーしたら文字が大きくなるみたいな動きをつけたい時使おう
- 簡単な「v-on」ディレクティブを使った例

<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="html,result" data-user="yuki-azuma" data-slug-hash="pooJzQr" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="pooJzQr">
  <span>See the Pen <a href="https://codepen.io/yuki-azuma/pen/pooJzQr">
  pooJzQr</a> by アズマックス (<a href="https://codepen.io/yuki-azuma">@yuki-azuma</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

- 参考：[【Vue.js】イベントハンドリングをサンプルを作りながら理解する](https://qiita.com/b1san/items/6bc0be17cd6ed687520c)
- 参考：[イベントハンドラー／イベントリスナーについて[addEventListener]](https://noumenon-th.net/programming/2017/03/11/event/)

## [双方向データバインディング](https://jp.vuejs.org/v2/guide/forms.html)
- 双方向にデータが同期するデータバインディング
- そもそも、データバインディングとは、「データと描画を同期する仕組み」
- Aが変わったら、Bも変わり、Bが変われば、Aも変わるイメージ

![v-model.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247053/340a30be-41bc-0550-8647-23b704983ddf.gif)


## [コンポーネント](https://jp.vuejs.org/v2/guide/components.html)
- 名前付きの再利用可能な Vue インスタンス
- 必要なだけ何度でも再利用できる
- 部品ごとに使われることが多い
    - 例）
    - 画面のヘッダー部分のコンポーネント
    -    フッター部分のコンポーネント、
    -    サイドメニューのコンポーネント

- 下図は、画面のパーツ構成をVueファイルの構成に置き換えた時のイメージ図
![コンポーネントの基本_—_Vue_js.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/247053/8aa65b16-c2bb-081b-bf5e-f3b5d4d50bab.png)
- 開発規模が大きくなってきたら、コンポーネントは大活躍する
- 以下のワードもよく出てくるので、覚えておきたい
    - $emit
    - props
    - ローカルコンポーネント
    - グローバルコンポーネント
- 参考：[Vue.js「コンポーネント」入門」](https://qiita.com/kiyokiyo_kzsby/items/980c1dc45e00d2d3cbb4)
- 参考：[Vue.jsのコンポーネント入門](https://qiita.com/shosho/items/115b371736207078289c)
- 参考：[Vue.jsをシンプルに理解しよう その２](https://qiita.com/yusuke_ten/items/3c5ae79da459fb566fbd)

## その他参考
- 参考：[Vue の v-bind:class に複数の条件付き class を入れる簡単な方法（オブジェクト（ハッシュ）、配列）](https://qiita.com/regashia/items/28bf924903761f48afc3)
QA界隈のイベント

※2025年現在

**QA界隈のイベント**を纏めてみました。

まだまだありますが、メジャーなイベントを取り上げております。


①***Jasst (ソフトウェアテストのシンポジウム)***

2003年からはじまる。現在は、**東京、関西、北海道、東北、新潟、オンライン**で開催されています。

QAエンジニアだけではなく、最近は開発やインフラエンジニアもよく見かけるようになりました。
品質は、QAだけでは向上できないので、同じ意識を持つことが大事かなと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/bedde4f4-c0d3-4ce1-8eaf-4d1b21118efc.png)


https://www.jasst.jp/

②***Ques***

第三者検証会社からスタートアップ、ベンチャー企業が主催となっています。
![FireShot Capture 009 - Ques - quesqa.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/46f8fd53-f7f7-1180-c614-95f4105ccacc.png)


https://quesqa.com/

 

③***DeNA QA night***

DeNA主催しているQAイベントで、DeNA社内でテスト例や講師の方を招いたりとしています。
![FireShot Capture 011 - DeNA QA Night - connpass - dena-qa-night.connpass.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/4ff1ddc4-7af7-b9c8-7ca5-c39bf87f5c88.png)


https://dena-qa-night.connpass.com/

 

④***ヒンシツ大学***

株式会社SHIFTが主催している、通常のイベントとは違いテストの観点や設計を学ぶ場となっています。
![FireShot Capture 013 - ヒンシツ大学 - connpass - hinshitsu-univ.connpass.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/06520d7c-04b9-da0a-31d5-ec50eff87270.png)


https://hinshitsu-univ.connpass.com/

 

⑤***SeleniumConf***

毎年、開催されている「Selenium」のイベントです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/02dc5823-6c95-4c6f-91cc-a4273ea75cee.png)


https://seleniumconf.com/
 

⑥***Rakuten Commerce QA Night***

楽天コマースのQAの取り組みを紹介するイベント
![FireShot Capture 012 - [増枠]Rakuten Commerce QA Night#1 - connpass - rakuten.connpass.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/c9d24654-62d3-02d1-78a1-cb0a7c8e1d51.png)


https://rakuten.connpass.com/event/117353/
 

⑦***Mercari AQA Pop Talk***

メルカリのQAの取り組みについて共有するイベント


https://mercaridev.connpass.com/


⑧***BizReach***


BizReachのQAの取り組みについて共有するイベント

https://d-cube.connpass.com/

⑨***Autify***

テスト自動化プラットフォーム「Autify」を提供するオーティファイ株式会社が主催するイベント

<img width="1083" alt="スクリーンショット 2020-07-16 20.40.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55160/345d2086-6f7c-334b-88ff-130e2a4fe599.png">

https://autifyjapan.connpass.com/

⑩***freee***

freeeのQAの取り組みについて共有するイベント

https://freee-tech-night.connpass.com/

⑩***JaSST nano***

小さな小さな、最も発表のハードルの低いJaSST

https://jasst-nano.connpass.com/
vscodeでlaunch.jsonが作成できないときの備忘録

##vscodeでlaunch.jsonが作れない
vscodeでデバッグをしようとしたところこのようなエラーをはきました。
`unable to create 'launch.json' file inside the '.vscode' folder (cannot read property 'name' of undefined).`
tasks.jsonなどをいじっていたのですがそれでも直らず。しかし単純なことにC/C++の拡張ファイルを消して入れ直すとデバッグできるようになりました。
Mac OS10.15 Catalina 標準の zshの警告文を非表示にする（Bashの利用を続ける）

## 前置き

Mac OS10.15 Catalina の 標準 shell は Bash ではなく、zsh になりました。

アップデートしたら zsh に強制的に変更されるということはないですが、以下のような文がターミナルを起動するたびに表示されます。

![brew-install-bash-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180939/ff129c17-21cb-0be2-3253-576fe8344b04.png)
zsh に変更を促す文が毎回出てきます。~~鬱陶しいです。~~

私の環境では、 .bashrc や .bash_profile を作り込んでいるので、 zsh に移行すると色々と不具合が出ました。
今回は、zsh への移行は延期することにしました。どうやら、警告文を消す方法が、Bash のインストールでできるようですのでそちらを試してみたいと思います。



※ 今回実行した方法では、Bash3系からBash5系にバージョンが上がるので、互換性がないかもしれないです。

## Bash 最新版をインストール

Mac OS10.14 Mojave のデフォルトは、以下の通り。

最新バージョンが5系なので、古いです。

```console
$ /bin/bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
```



今回は、brew を使用して最新版をインストールします。

```console
$ brew install bash

$ /usr/local/bin/bash --version
GNU bash, バージョン 5.0.11(1)-release (x86_64-apple-darwin19.0.0)
Copyright (C) 2019 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
```



インストールが完了したら、`/etc/shells`に`/usr/local/bin/bash`を追加します。

```console
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/usr/local/bin/bash  ← これを追加

```



## 使用する shell を指定

shell の変更は、`chsh -s <使用するshellのパス>`で指定できます。

```console
$ chsh -s /usr/local/bin/bash
```



## 確認

インストール完了後、ターミナルを閉じます。
再度開くと zsh への変更を促す文も表示されることなく、Bash のバージョンも最新の5系に切り替わります。


![brew-install-bash-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180939/12bfd4a0-56d3-6ace-6802-f5aec28519cf.png)
Emacs に yaml-mode をインストールできなかった。

# 結論

- 以下のコマンドを実行してから yaml-mode をインストールする。

```shell
$ gpg --homedir ~/.emacs.d/elpa/gnupg --receive-keys 066DAFCB81E42C40

gpg: key 066DAFCB81E42C40: public key "GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1
```

# 経緯

1. [yaml-mode.el : EmacsでYAMLを編集するyaml-modeが進化していた](http://emacs.rubikitch.com/yaml-mode/) を参考に, CentOS 8 の DNF でインストールした Emacs に yaml-mode をインストールしようとした。
1. ところが, 以下のメッセージが出力されてインストール出来なかった。

```
Failed to verify signature archive-contents.sig:
No public key for 066DAFCB81E42C40 created at 2019-10-12T06:10:02+0900 using RSA
Command output:
gpg: Signature made Sat Oct 12 06:10:02 2019 JST
gpg:                using RSA key C433554766D3DDC64221BFAA066DAFCB81E42C40
gpg: Can't check signature: No public key
```

# 参考文献

- [GNU ELPA - gnu-elpa-keyring-update](http://elpa.gnu.org/packages/gnu-elpa-keyring-update.html)

どっとはらい。
Ubuntu 18.04にOpenJDK 11をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu18.04にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューションで Amazon Corretto 11 をインストールする手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/generic-linux-install.html)

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2027-09がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 11 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

# apt update;apt install -y wget java-common
# wget -O jdk11.deb https://xxxx/11.xxxx/java-11-amazon-corretto-jdk_11.xxxx.deb && dpkg --install jdk11.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.3" 2019-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)
```
Ubuntu 18.04にOpenJDK 8をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu18.04にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューション用の Amazon Corretto 8 のインストール手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/generic-linux-install.html) 

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2026-05がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 8 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

# apt update;apt install -y wget java-common
# wget -O jdk8.deb https://xxxx/8.xxxx/java-1.8.0-amazon-corretto-jdk_8.xxxx.deb && dpkg --install jdk8.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode)
```
[sketch][Arduino]ブザーの音程を、段階的に上げていくサンプル

# 動作の様子

今回の動作は音になるので、こちらをご確認頂けると良いかと思います。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LEDを光らせるだけでなく、ブザー音も出せます。<br><br>プログラムをいじれば、音の長さや音程なんかも簡単に変えられます。<br><br>こうやって、PCで組んだプログラムを、PCの外で表現できるのも、電子工作の魅力なんですね。 <a href="https://t.co/sB9xeXnKFx">pic.twitter.com/sB9xeXnKFx</a></p>&mdash; りお@Goに弄ばれる30代新人エンジニア (@riotam4) <a href="https://twitter.com/riotam4/status/1182927559278743552?ref_src=twsrc%5Etfw">October 12, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# コード

```c++
#define SPK_PIN 9

void setup() {
  pinMode(SPK_PIN, OUTPUT);

}

void loop() {

  int i;
  for (i = 0; i < 256; i++) {
    tone(SPK_PIN, i*10, 50);
    delay(20);
  }
}
```
Ubuntu 16.04にOpenJDK 11をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu16.04にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューションで Amazon Corretto 11 をインストールする手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/generic-linux-install.html)

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2027-09がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 11 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

# apt update;apt install -y wget java-common
# wget -O jdk11.deb https://xxxx/11.xxxx/java-11-amazon-corretto-jdk_11.xxxx.deb && dpkg --install jdk11.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.3" 2019-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)
```
React Hooks + router + TypeScript + Firebaseでログイン認証画面

# React16.8のHooksについて
ReactはClassよりFunctionComponentのほうがコード少なくて好きやけどstateが使えなかったが、
いつのまにか使えるようになってたのでログイン画面を置き換えてみたらスッキリした

#できあがり

```App.tsx
import React, { useState, useEffect } from 'react';
import {
  BrowserRouter, Route, Switch, Redirect,
} from 'react-router-dom';
import { LinearProgress } from '@material-ui/core';
import SignIn from './pages/signin';
import SignUp from './pages/signup';
import Dashboard from './pages/dashboard';
import firebase from './components/firebase';
import './App.css';

type FirebaseUser = firebase.User|null

const App:React.FC = () => {
  const [authUser, setAuthUser] = useState<FirebaseUser>(null);
  useEffect(() => {
    firebase.auth().onAuthStateChanged((user) => {
      setAuthUser(user);
    });
  });
  return (
    <BrowserRouter>
      <div className="App">
        <Switch>
          <Route exact path="/signin" render={() => <SignIn authUser={(user:FirebaseUser) => setAuthUser(user)} />} />
          <Route exact path="/signup" component={SignUp} />
          <Route exact path="/" component={authUser ? Dashboard : LinearProgress} />
          <Route render={() => <Redirect to="/signin" />} />
        </Switch>
      </div>
    </BrowserRouter>
  );
};
```

# useState
`this.state`,`setState`の置き換え。

認証済みなら更新された`authUser`を元にログイン認証先に遷移できるようになる。

# useEffect
 `componentDidMount`,`componentDidUpdate`,`componentWillUnmount `の置き換え。
ここで`firebase.auth().onAuthStateChanged()`を呼び出し`authUser`が更新される。
Ubuntu 16.04にOpenJDK 8をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu16.04にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューション用の Amazon Corretto 8 のインストール手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/generic-linux-install.html) 

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2026-05がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 8 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

# apt update;apt install -y wget java-common
# wget -O jdk8.deb https://xxxx/8.xxxx/java-1.8.0-amazon-corretto-jdk_8.xxxx.deb && dpkg --install jdk8.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode)
```
プログラミング教育用にmermaidを使ってシーケンス図を作成してみる

## はじめに
どうも！生産技術部のエンジニアです。プログラミングの教育を実施するにあたって、プロジェクトの概要が図でわかればいいなと思い、mermaidを使ってシーケンス図を作成しました。mermaidを使うと以下の様な図がmarkdownで簡単に作成出来ます。作成したマークダウンと、VSCodeの便利な拡張機能について紹介します。

gitlabプロジェクトのREADME.mdに追加しましたので、よければご覧下さい。
作成したプロジェクト「[lsg1050-controller-sample][link-lsg1050]」
<img width="622" alt="スクリーンショット 2019-10-12 15.46.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451049/8ccdd8eb-e011-356d-fea7-0947229bbdca.png">

[link-lsg1050]:https://gitlab.com/iyama_yuki/lsg1050-controller-sample

## 作成したマークダウン

**-->**などを使って書くと自動的にシーケンス図を生成してくれます。便利。

```markdown
```mermaid
sequenceDiagram;

participant A as ユーザーアプリ
participant B as usbser.sys
participant C as LSG 1050ファームウェア

A->>B:ポートのOpenリクエスト
  alt ポートのOpenに成功
    B -->> A:ハンドル生成(hCom)
  else ポートのOpenに失敗
    B -->> A:INVALID_HANDLE_VALUE
  end

A->>B:通信の初期設定
  alt 設定に成功
    B -->> A:０
  else 設定に失敗
    B -->> A:０以外
  end

A->>B:コマンド送信リクエスト
B->> C:LSG 1050にコマンド送信
  alt 通信に成功
   C -->> B:成功
   B -->> A: ０    
  else 通信に失敗
    C -->> B: エラー
    B -->> A: ０以外
  end

A->>B:ハンドルのクローズ
```
## VSCodeの拡張機能
[Markdown Preview Mermaid Support][link-mermaid]を使う事で、VSCodeのプレビュー画面にシーケンス図を表示出来るため、編集もスムーズに行えます。
<img width="1552" alt="スクリーンショット 2019-10-12 16.29.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451049/28513e00-0bfb-fb24-7af5-4d1725d6b507.png">

[link-mermaid]:https://marketplace.visualstudio.com/items?itemName=bierner.markdown-mermaid
## 最後に
普段、シーケンス図とか書かないのでよくわかりませんが、図で理解してもらうためには便利なツールでしたので、今後もしっかり勉強して利用していきたいです。

## ご参考
* [mermaidを使ってMarkdownでシーケンス図を作成](https://qiita.com/poro1985/items/b23bad93bf721a195f15)
（もしもに備えて）Android StudioのKeymapの保存方法

先日、PCを再起動したら何故かAndroid StudioのKeymap（ショートカットの設定）が消えてしまいました。:sob:

そういったもしもの時に備えて、Android StudioのKeymapを保存する方法を記載したいと思います。（復元する方法も。）

# 前提
自作のKeymapを `MyKeymap` として作成済み。
<img width="274" alt="スクリーンショット 2019-10-12 15.43.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/6a7e68dd-d4c0-fb4d-ea1e-608d8ad2e283.png">

# 保存方法
至って簡単。

`File > Export Settings...` を選択。
<img width="327" alt="スクリーンショット_2019-10-12_15_43_57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/eb946be0-e173-b71c-4772-b5389ca64cb3.png">


どの設定をExportするかどうかの選択画面になるので、 `Key maps` `Key maps (schemes)` をチェック。
<img width="512" alt="スクリーンショット_2019-10-12_15_44_38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/367093d0-f43b-7e8d-5283-a64a804ca383.png">

`OK` を押すと、 `settings.zip` としてExportされます。

# 保存されたzipを確認
中身は↓のような感じになっていて、作成した `MyKeymap` も中に入っています。
<img width="375" alt="スクリーンショット 2019-10-12 15.45.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/397c0296-f1db-28ae-419a-927bfaa170ae.png">

# 復元方法
`File > Import Settings...` を選択。
<img width="286" alt="スクリーンショット_2019-10-12_16_40_54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/def89a8c-a37d-9632-820d-c32cd7fc9632.png">

Exportした `settings.zip` を選択します。

どの設定をImportするか聞かれるので、 `Key maps` `Key maps (schemes)` を選択します。
<img width="502" alt="スクリーンショット 2019-10-12 15.46.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/995/c1b4a109-e9f6-1af6-c94a-e88e8da71f23.png">

あとはAndroid Studioを再起動するかどうかを聞かれるので、再起動させると設定を復元可能です。
Hyper-vを使ってubuntuの仮想環境を構築する

#初めに
私はパソコンに詳しくないのですが友人にパソコンが強すぎる人がいます。その彼に私のパソコンをwindows10とelementary osのデュアルブートをしてもらったのです。数か月くらいは問題なく使えていたのですが、ある日aptのパッケージ管理コマンドがロックされており、調べたところロックをしているファイルを消去すればよいと書かれていたのでとりあえず削除してみました。その後再起動の通知が来ましたので再起動をしたところ、osの起動画面でkernel panicを起こしまして、あまりパソコンに詳しくない私が直せるはずもなく、なくなくパソコンを初期化するにいたり、今度は仮想環境でlinuxを楽しもうと思ったのが今回のhyper-vでの仮想化に至った経緯です。
##hyper-vの設定の前に
hyper-vを使用する前にしなければならないことがいくつかあります。まずは、これはパソコンによるのですが、biosでvirtualizationが有効でない場合があります。これを有効にしなければhyper-vは使えません。再起動してf2を連打しbiosを開き、security欄からvirtualizationをenabledにしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510676/336c7085-92ed-6fa9-36e7-04c0e9f08104.png)

その後はwindowsのスタートボタンを右クリックして「アプリと機能」欄を開き、「プログラムと機能」欄を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510676/21b67462-4b4e-92fd-f11b-b84981257827.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510676/f38bfd48-6bcc-5f6e-44b8-9aeb8a04cebc.png)

その後windowsの機能の有効化または無効化を開き、hyper-vのチェック欄にすべてチェックを付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510676/66b00993-d419-384e-47bb-44dc9503bafb.png)
そうすると再起動を要求されるので、再起動します。再起動の後はhyper-vマネージャーが有効化されていますので、hyper-vを起動します。
##hyper-vの設定
hyper-vの設定はこちらをみるとわかりやすいと思います。割愛させていただきます。
https://qiita.com/hideki0145/items/844f003b6f6647cab081
##仮想環境のネットワーク設定
晴れてhyper-vにubuntuをインストールしてときに困るのがネットワークの接続だと思います。hyper-vではデフォルトで既存のネットワークというものを使っていると思うのですが、これではインターネットへの接続がうまくいきませんでした。ですので、
https://qiita.com/kit/items/56916c4285f353e89ea0#1%E5%A4%96%E9%83%A8%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E7%AE%A1%E7%90%86%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF%E3%81%AE%E5%85%B1%E6%9C%89%E3%82%92%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B
この記事での外部ネットワーク接続を行います。そうするとネットワークがつながるはずです。
##linux-vm-toolsの作成
インストールをした段階だとubuntuの画面が小さいと思います。ですのでこれを全画面にします。詳細は以下の記事が分かりやすいです。
https://qiita.com/fararrow/items/0bdc72ac4f80b4cb35c0
ここで注意が必要なのはこのコマンド
```> Set-VM -VMName 'Ubuntu_1804' -EnhancedSessionTransportType HvSocket
```
これはwindows1803以降でのみ使えるコマンドですのでご留意ください。
また、linux-vm-toolsでxrdpが出てくる場面があると思いますが、普通にしようとしても入れません。どうやらubuntu側のバグのようです。解決方法は先ほどの記事またはこちらをご覧ください。
https://www.youtube.com/watch?v=oPHqoLbNTP8&t=792s
##終わりに
ここまでくればubuntu仮想環境が構築できていると思います。お疲れさまでした。
Ubuntu 14.04にOpenJDK 11をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu14.04にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューションで Amazon Corretto 11 をインストールする手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/generic-linux-install.html)

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2027-09がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 11 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.6 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.6 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

# apt update;apt install -y wget java-common
# wget -O jdk11.deb https://xxxx/11.xxxx/java-11-amazon-corretto-jdk_11.xxxx.deb && dpkg --install jdk11.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.3" 2019-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)
```
ターミナルでファイル名を一括変換する(例: 全てのアンダーバーを削除)

# 環境
- Mac
- iTerm

# 準備
```
brew install rename
```

# 実行
変換したいファイルがあるディレクトリまで cd コマンドだったりで行って、

```
// これは自分が実行したコマンド 
// 「_」のついているファイルの 「_」を消す
find . -depth -name "_"| rename -s "_" ""

// これだけでもOK
rename -s "_" ""

// ちょっと解説
rename -s "変換前の文字" "変換後の文字"
```


おしまい
Ubuntu 14.04にOpenJDK 8をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu14.04にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューション用の Amazon Corretto 8 のインストール手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/generic-linux-install.html) 

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2026-05がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 8 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="14.04.6 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.6 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

# apt update;apt install -y wget java-common
# wget -O jdk8.deb https://xxxx/8.xxxx/java-1.8.0-amazon-corretto-jdk_8.xxxx.deb && dpkg --install jdk8.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode)
```
【Ruby】=と==、&と&&、|と||の違い

RubySilverの勉強でつまづいたのでメモします。

#=と==の違い

・**=が左辺に代入**
・**==が同じ**
です。

```example.html.slim
- dinner = @dinner.vegetables? ? "食べたくない" : "食べる"
= dinner
```

```example.rb
def hoge
  return false if @dinner.vegetables == "きゅうり"
  return false if @dinner.vegetables == "レタス"
  return false if @dinner.vegetables == "なす"

  true
end
```

#&と&&の違い

・**&が積集合（共通する要素を取り出す）**
・**&&がtrue/falseを返す（全部true(存在する)ならtrue出力）**
です。

```ruby
a = [1, 2, 3]
b = [2, 3, 4]

# 共通する要素を出力
a & b
=> [2, 3]

# 最後に評価されたb(true)を出力
a && b
=> [1, 2, 3]

# aが偽のためnil（右辺を見ない）
a = nil

a && b
=> nil
```

#|と||の違い

**・|が和集合**
**・||がtrue/falseを返す（true（存在する）の時点でtrue出力）**
です。

```ruby
a = [1, 2, 3]
b = [2, 3, 4]

# いずれかに含まれる要素を出力
a | b
=> [1, 2, 3, 4]

# 最初に評価されたa(true)を出力
a || b
=> [1, 2, 3]

# aが偽のためbを出力（右辺まで見る）
a = nil

a || b
=> [2, 3, 4]
```
【Swift】 WKWebViewで表示したtitleを対応するタブボタンに表示させる。

[こちらの記事](https://qiita.com/ydzum1123/items/e164e2c647433c982140)で書いている、オリジナルタブブラウザアプリの、追加機能です。
タブブラウザでは、タブボタンにそのタブで開いているWebページのtitleが表示されるのが一般的だと思いますが、自作アプリでそれを実現する方法を確認しました。

####開発環境
端末:MacBook Pro/MacOS 10.14.5(Mojave)
Xcode:10.2.1
Swift:5

####やったこと(ポイント)
①WKWebViewで開いたWebページのtitle(titleタグの情報)を、タブボタンに表示する。

####実装
#####画面イメージ

開いているWebページに対応するtitleがタブボタンに表示されています。
アプリ自体のUIデザインがどうかしちゃってるのは見逃して下さい。。

|google|
|:-:|
|<img width="400" alt="Simulator Screen Shot - iPad Air 2 - 2019-10-12 at 16.24.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126315/402dacda-5834-8c5a-ab7b-b49c807dabb8.png">|

|yahoo!japan|
|:-:|
|<img width="400" alt="Simulator Screen Shot - iPad Air 2 - 2019-10-12 at 16.24.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126315/3de697dd-3f9d-b836-6e2b-e3dcbdd0f7d0.png">|

|bing|
|:-:|
|<img width="400" alt="Simulator Screen Shot - iPad Air 2 - 2019-10-12 at 16.24.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126315/b2619722-2253-17ff-a129-b9a9dbe7acfd.png">|

#####ソースコード

要点だけ。

[webView(_:didFinish:)](https://developer.apple.com/documentation/webkit/wknavigationdelegate/1455629-webview)を追加し、ページ読み込み完了時の処理を記述します。

```swift:ViewController.swift

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        let targetTag = webView.tag - 10000
        let targetBtn = view.viewWithTag(targetTag) as! UIButton
        let title = webView.title
        targetBtn.setTitle(title, for: .normal)
    }

```

自分がどれくらい独特な書き方しちゃってるか自覚がないですが、Webページ(WKWebView)とタブボタン(UIButton)の紐付けを、tagの値を使って制御しているので上記コードのような書き方になっています。

以上です。
Debian 10にOpenJDK 11をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してDebian10にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューションで Amazon Corretto 11 をインストールする手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/generic-linux-install.html)

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2027-09がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 11 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-11-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update;apt install -y wget java-common
# wget -O jdk11.deb https://xxxx/11.xxxx/java-11-amazon-corretto-jdk_11.xxxx.deb && dpkg --install jdk11.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.3" 2019-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)
```
【MouseGestureL】 マウスだけで Google 検索する

:mouse_three_button: 
[MouseGestureL](https://hp.vector.co.jp/authors/VA018351/mglahk.html) で好みのジェスチャに下記のスクリプトを割り当てましょう。選択中の文字列で Google 検索できるようになり圧倒的な速度を手にすることができます。検索の仕事が多い方にぜひ。

括弧や句読点などの検索ノイズを除去しているので文字列選択はある程度適当でも問題ありません。

```autohotkey
Clipboard =
Sleep, 50
Send, ^c
ClipWait, 0.1
myURL = http://www.google.co.jp/search?q=
searchText := RegExReplace(Clipboard, "[（）「」【】『』［］〈〉《》〔〕｛｝”]", "+") ; 全角括弧類
searchText := RegExReplace(searchText, "[・，、。．：；―～─]", "+") ; 全角句読点類
searchText := RegExReplace(searchText, "[""\(\)\{\}\[\]<>\#]", "+") ; 半角括弧類
searchText := RegExReplace(searchText, "[&,\.:;/-]", "+") ; 半角句読点類
searchText := RegExReplace(searchText, "[ 　]|[\t\n]", "+") ; 全角半角空白・制御文字（タブと改行）
Run, %myURL%%searchText%
Return
```
vueで定数定義をいい感じにするtips

# 概要
定数多くなったら別ファイルにまとめたいし画面でもいい感じに使いたい。
ggってもスパッと解決できなかったので記事にします。

# 本題

```vue:定義側
const Config = Object.freeze({
  HOGE: [ { name: "hoge" }] // ここに全部定義していく、切り分け粒度はおまかせ
})


export default Config
```

```vue:使う側
import Config from "~/consts/index"

data() {
  return {
    Config: Config
  }
}
```

こんな感じで定義しました。
もっといい方法があればぜひ教えて下さい。
Debian 10にOpenJDK 8をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してDebian10にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューション用の Amazon Corretto 8 のインストール手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/generic-linux-install.html) 

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2026-05がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 8 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update;apt install -y wget java-common
# wget -O jdk8.deb https://xxxx/8.xxxx/java-1.8.0-amazon-corretto-jdk_8.xxxx.deb && dpkg --install jdk8.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode)
```
ユークリッドの互除法による最大公約数の求め方

## 概要
ユークリッドの互除法とは、２つの自然数の最大公約数(Gratest Common Divisor)を求める手法の一つです。一方をもう一方で割って剰余を求め、その剰余を使ってさらに除算を繰り返すことで、最終的に剰余が0になった時点で最大公約数を見つけることができます。最古のアルゴリズムとしても知られ、紀元前300年頃に編纂されたユークリッドの『原論』にその記述があります。

![Euclidean_algorithm_252_105_animation_flipped.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122091/3fd9d5c4-4a33-1023-0364-1e9229b867d4.gif)

## 実装例

```python
def gcd(a, b):
    # 大きい方を被除数、小さい方を除数とする
    dividend = max(a, b)
    divider = min(a, b)

    if divider == 0:
        return dividend

    # 最大公約数を見つけるまで繰り返す
    while dividend % divider != 0:
        # 除算を行い、その除数を次回の被除数、剰余を次回の除数として処理を繰り返す
        r = dividend % divider
        dividend = divider
        divider = r
    
    # 一方がもう一方を割り切れた時点で、その除数を最大公約数とみなせる
    return divider
```

### 注意点
厳密には被除数と除数の大小関係は関係ない（被除数の方が小さい場合、被除数がそのまま剰余となり、次回の処理で除数と入れ替わる）のですが、本記事では直感的にわかりやすくするため最初の除算で大きい方を小さい方で割るようにしています。

## 参考
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_1_B
https://ja.wikipedia.org/wiki/ユークリッドの互除法
LaTexでjsarticleをうまく設定できない時に読む記事

# はじめに
atomでLatexでレポート作ろうと思った時に，documentclassにjsaticleを指定しようとした時にエラー出たのでその対処方法を載せます．

# 環境
<ul>
<li>macOS Mojave version 10.14.6</li>
<li>atom</li>
<li>macTex</li>
</ul>
# 対処方法

```:エラー文
latexmk: Failure in some part of making files
Class jsaticle: You are running upLaTex
```

と書かれて他のでupLatexのなんか認識してないのかなーと

```Tex
\documentclass[a4j]{jsarticle}
```

を

```Tex
\documentclass[a4j,uplatex]{jsarticle}
```

にする．uplatex入れるとエラーが消えました！！(a4jはお好みで)
uplatex使ってたのが原因だったみたい
Debian 9にOpenJDK 11をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してDebian9にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューションで Amazon Corretto 11 をインストールする手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/generic-linux-install.html)

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2027-09がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 11 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/downloads-list.html)より適切なファイルを確認。

```shell-session
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update;apt install -y wget java-common
# wget -O jdk11.deb https://xxxx/11.xxxx/java-11-amazon-corretto-jdk_11.xxxx.deb && dpkg --install jdk11.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "11.0.3" 2019-04-16 LTS
OpenJDK Runtime Environment Corretto-11.0.3.7.1 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.3.7.1 (build 11.0.3+7-LTS, mixed mode)
```
たった2行のGoでファイルサーバを立てる


## ※2019/10/13追記

1行で書くことも可能なようですが、拡張性がなくなるので2行としています。
間違っていたら教えていただけると幸いです。

# 本題

`net/http`パッケージの`http.FileServer`を使う。

```go:main.go
package main

import "net/http"

func main() {
	http.Handle("/", http.FileServer(http.Dir("./img")))
	http.ListenAndServe("localhost:8080", nil)
}
```

以下のディレクトリ構造で実行した。

```terminal:ディレクトリ構造
 .
 ├── img
 │   └── rabbit.jpg
 └── main.go
 ```

実行結果
![01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359782/6308d72d-28ca-73d8-c306-1eda626858a3.gif)


## ディレクトリ構造が複雑な場合

- ディレクトリ構造が複雑な場合
- URLのPATHを変えたい場合

などは`http.StripPrefix`で対応できる。

```go:main.go
package main

import "net/http"

func main() {
	http.Handle("/resources/", http.StripPrefix("/resources", http.FileServer(http.Dir("./files/hoge/fuga/img"))))
	http.ListenAndServe("localhost:8080", nil)
}
```


```terminal:ディレクトリ構造
.
├── files
│   └── hoge
│       └── fuga
│           └── img
│               └── rabbit.jpg
└── main.go
```
実行結果
![02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359782/61cd3240-42db-30a1-a5ed-38ec9999aab1.gif)
Clear Linux のインストール

性能が良いと噂[^1]のIntel製の[Clear Linux](https://clearlinux.org/) をインストールしました。 UbuntuとかDebianはインストール手順の記事が多くありますが、 Clear Linuxについては日本語の記事はあまり無いみたいなので記録を残しておきます。 この手順は[公式の解説ドキュメント](https://clearlinux.org/documentation/clear-linux/get-started#get-started) に従ったものです。
[^1]: 例えば、8-Way Linux Distribution Benchmarks On The Intel Core i9 9900K - One Distro Wins 67% Of The Time (<http://www.phoronix.com/scan.php?page=article&item=intel-9900k-distros&num=1>) を参照


[20200412 更新]
Thinkpad T495 (Ryzen 3700U)にもClear Linuxを入れました。ダウンロードページが変わって、live imageをインストールできるようになっていました。[ダウンロードページ](https://clearlinux.org/downloads)のClear Linux* OS Desktopのところから.isoファイルをダウンロードします。以下の1.と同様にRufusを使ってUSBメモリにOSイメージを焼いて、インストールします。
# 0. 動作環境

上述の通りClear Linuxはインテル製のLinuxディストリビューションですが、 AMDのCPUでも問題なく動作します。 自分の環境は、CPU: Ryzen5 1600, GPU: Radeon RX 460, Memory: 16GB RAM, HDD: 1GBです。
# 1. USBドライブの作成（Windowsの場合）

[imageリポジトリ](https://download.clearlinux.org/image/)から OSイメージをダウンロードしてきて、ブータブルUSBドライブを作成します。 Installer image(clear-[version]-installer.img.xz)をダウンロード。 次に使うので、その下にあるclear-[version]-installer.img.xz-SHA512SUMSもダウンロードしておきます。

このダウンロードしてきたOSイメージが壊れていないか確認しましょう、 ということでコマンドプロンプトでコマンド

```
CertUtil -hashfile ./clear-[version]-installer.img.xz sha512
```

を実行し、実行結果で出てきた文字列がさっきダウンロードした-SHA512SUMSの内容とあっているか確認。

ダウンロードした.xzファイルを展開するために、 [7-zip] (http://www.7-zip.org/)をダウンロード、インストール。 .xzファイルを右クリックすると7-zipを選べるようになっているので、 「ここに展開」を選択すると.imgファイルがフォルダ内に展開されます。

[Rufus](http://rufus.akeo.ie/)でOSイメージをUSBに焼きます。 USBメモリをPCに挿し、Rufusを起動し、「選択」ボタンから展開した.imgファイルを選び、 スタートをクリックします。USBメモリは最低8GB必要です。 UbuntuとDebianは4GBあれば十分だった気がするので少し大きいですね。

ここまで終わったら次はインストールです。 公式のドキュメントには With a bootable Clear Linux OS drive, you can Multi-boot Clear Linux OS with other operating systems なんていう魅力的なことが書いてあって、その手順も説明されていますが、 今回は空のHDDにClear Linux単体をインストールします。
# 2. HDDにClear Linuxをインストールする

USBドライブを作成できたので、ハードディスクにインストールします。 USBドライブをPCに挿したままPCを起動し、 デフォルトのOSが起動する前にF11ブートメニューからUSBを選択。 しばらくして青い画面が出現します。
![clearlinux_install_installer1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512884/46ce0d36-1392-fabe-4a90-90250eb3d0c0.jpeg)
![clearlinux_install_installer2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512884/755d2767-9642-d860-b464-c46620b2d9c3.jpeg)
TimezoneはAsia/Tokyo、Keyboardはjp106に設定。 Configure Mediaのところでインストール先のドライブを選択し、 auto partitionでパーティション分割。 TeremetryをDisabledにしてインストール。
Condfigure Mediaで選択したハードディスクのデータが全部消えますよ、 という警告文が出てくるのでOKするとインストールが開始します。 インストールが終了したら再起動して、 F11ブートメニューからインストール先のハードディスクを選択するとClear Linuxが起動します。
Macから毎朝メール(gmail)を送信しよう

## ご挨拶
こんにちは。台風大丈夫でしょうか。2019/10/12
毎朝、天気などの情報がメールで配信されるといいなと思いまして、
まずはメールを毎朝配信する仕組みを作ってみました。
メールサーバとか、よくわからないのでGoogleさんを使います。


## 全体像

- msmtpをbrewでインストール
- 設定ファイルの作成
- 送信するメールのテキストファイルの作成
- cronを仕込む

---
### msmtpをbrewでインストール

```
$ brew install msmtp
```
### 設定ファイルの作成

```
$ vi ~/.msmtprc
```
設定ファイルの中身は以下の通り

```
host smtp.gmail.com
port 587 
user sample@gmail.com  <- ここは自分のアカウントにして下さい
password hogehoge
from sample@gmail.com　<- ここは自分のアカウントにして下さい
tls on
tls_starttls on
tls_certcheck off
auth on
logfile ~/.msmtp.log
```

パスワード情報入ってますので、権限を設定します。

```
$ chmod 600 ~/.msmtprc
```
---
あと、googleアカウント側の設定から **[安全性の低いアプリの許可] をオン** にして下さい。

---

### 送信するメールのテキストファイルの作成

```
$ vi ~/mailsample.txt
```
テキストファイルの中身は以下の通り

```
From: sample@gmail.com
To: tosample@gmail.com <- ここは送りたいメール宛先にして下さい
Subject: test
　　　　　　　　　　　<- ここ1行あけて下さい
Hello,
This is test email.
Thanks,
```

### cronを仕込む

毎朝7時15分にメールを送る設定にします。

```
$ crontab -e
```
vi開くので以下を保存します。

```
15 7 * * * bash -l -c 'cat /Users/testuser/mailsample.txt | msmtp -t'
```

それでは、7時15分を楽しみに待ちましょう。
Thanks,
Nuxt.js + Expressでローカルサーバ構築

# 今回のゴール
- ローカルに擬似的なサーバ（スタブ）を用意して特定のリクエストで(以下イメージではPOST)レスポンスが返ってくるようにします。

![ゴール２.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303093/bcd26ad3-d101-dfad-c197-fb967bbc9cdc.gif)


# ローカルサーバを使いたい局面
- フロントとバックエンドでチームが別れて開発されているような現場でバックエンド側の実装ができていないときに<font color="Salmon">フロント側からリクエストを飛ばしてデータが返却されるようなスタブが欲しい！！</font>そんなとき。

# expressの導入
- `create-nuxt-app`で最初から入れることもできます
<img width="899" alt="スクリーンショット 2019-10-12 15.12.23.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303093/0a174009-ba47-392f-57b6-445549f5b234.jpeg">

# 既存のアプリケーションにexpressを導入したい場合

```
npm install express --save
```

# サーバ用のファイルをプロジェクトフォルダ直下へ作成
- まずは必要なフォルダ・ファイルの作成をします。
- プロジェクトフォルダ直下へapiフォルダを作ってその中に`server.js`を作成、続いて`mock`フォルダをserver.jsと同じ階層に作成し`profile`フォルダを作ります（profileフォルダ内に実際にレスポンスとして返すjsonを格納します）

```
//プロジェクトフォルダ直下にて
$ mkdir api
$ cd api
$ touch server.js
$ mkdir mocks
$ cd mocks
$ mkdir profile
$ cd profile
$ touch test.json
```
# 完成した階層

```
プロジェクトフォルダ
┗api
  ┗server.js//サーバの設定を書くファイル
  ┗mocks
    ┗profile
      ┗test.json//実際に返して欲しいデータを定義するファイル
  
```

- ちょっとわかりにくいので画像も

<img width="285" alt="スクリーンショット 2019-10-12 15.32.33.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303093/75e03130-faa6-3328-4f5d-87972ef88f7f.jpeg">

# server.jsを編集

- 以下のように記述

```javascript:server.js
const express = require('express')
const app = express()

app.post('/test', (req, res) => res.json(require('./mocks/profile/test.json')))
//あとは欲しいだけ上記の1行とjsonファイルを追加するだけ

app.listen(8080, () => console.log('API Mock Server is running'))
```

- expressをappとして用意し、`8080`ポートをlistenしています。
- `app.post(リクエスト,(req, res) => res.(require(返却して欲しいデータを記述したjson)))`とすることで最初のゴールのようなレスポンスが返却されます。
- <font color="Salmon">あとは欲しいだけ上記の1行とjsonファイルを追加するだけ</font>

# jsonサンプル
- 内容はなんでもいいのですがゴールの動画で食わしたjsonは以下です。

```json:test.json
[
  {
    "header": "テスト テスト",
    "test1": "test",
    "test2": "テスと",
    "test3": "1",
    "items": []
  }
]

```

# package.jsonに起動コマンドを追加する

```json:package.json
"scripts": {
  //省略
  "mock:api": "node api/server.js"//追加
}
```

- これで`npm run mock:api`でローカルサーバが起動できます。

# 起動とcurlでPOST
- 起動

```
npm run mock:api

```
- POST(別のターミナルを開いて)

```
curl -XPOST http://localhost:8080/test
```

- これでゴールのようなレスポンスが返ってきているはずです

# 所感

- nuxt.jsのフロントに特化した開発担当になった場合は使えるかな、と。以上です。
Debian 9にOpenJDK 8をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してDebian9にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Debian ベースおよび RPM ベースの Linux ディストリビューション用の Amazon Corretto 8 のインストール手順 - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/generic-linux-install.html) 

## サポート

本手法で導入した場合、[よくある質問 - Amazon Corretto | AWS](https://aws.amazon.com/jp/corretto/faqs/)より、2026-05がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

[Amazon Corretto 8 のダウンロード - Amazon Corretto](https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-8-ug/downloads-list.html)より適切なファイルを確認。
リンク先のファイルが古いときは[英語版ページ](https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html)を参照。

```shell-session
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

# apt update;apt install -y wget java-common
# wget -O jdk8.deb https://xxxx/8.xxxx/java-1.8.0-amazon-corretto-jdk_8.xxxx.deb && dpkg --install jdk8.deb
... 略
```

### 各種確認

```shell-session
# which java
/usr/bin/java

# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment Corretto-8.222.10.1 (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM Corretto-8.222.10.1 (build 25.222-b10, mixed mode)
```
[React/TypeScript] Hooksで特定の要素が見える位置までスクロールする

## 環境
- React v16.9
- TypeScript v3.5.3

## やりたかったこと
次のようなメッセージ画面に遷移した時、最新のメッセージの位置までスクロールした状態で表示したかった。

![メッセージアプリ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131942/834630b4-81e3-1ea3-6adb-00c3b88787b9.png)

## 事前準備
- 親コンポーネント `ChatList` が子コンポーネント `ChatMessage` の配列を持つ。
  - ※簡略化のためクラス名などを省略している。

```tsx:ChatList.tsx
import React from 'react';

import { ChatRoom } from '../../interfaces/chats';
import ChatMessage from './ChatMessage';

interface Props {
  room: ChatRoom;
}

const ChatList: React.FC<Props> = ({ room }) => {
  return (
    <div>
      <div>
        {room.chats.map(chat => (
          <ChatMessage key={chat.id} chat={chat} />
        ))}
      </div>
    </div>
  );
};

export default ChatList;
```

```tsx:ChatMessage.tsx
import React from 'react';

import { Chat } from '../../interfaces/chats';

interface Props {
  chat: Chat;
}

const ChatMessage: React.FC<Props> = ({ chat }) => {
  return (
    <div>
      {!chat.fromMe && (
        <div>
          <img src={chat.photo} alt="User" />
        </div>
      )}
      <div>{chat.body}</div>
    </div>
  );
};

export default ChatMessage;
```

## 子コンポーネントから親コンポーネントに ref を渡す
- 子コンポーネントのPropsに `setRef` を追加する
- `useRef` を用いて要素への参照を取得する
  - 参考: [フックAPIリファレンス - useRef](https://ja.reactjs.org/docs/hooks-reference.html#useref)
- `useEffect` を用いて `ref` が更新されたタイミングで `setRef` を通して親コンポーネントに `ref` を渡す

```tsx:ChatMessage.tsx
import React, { useEffect, useRef } from 'react';

import { Chat } from '../../interfaces/chats';

interface Props {
  chat: Chat;
  setRef: (chat: Chat, ref: React.RefObject<HTMLDivElement>) => void;
}

const ChatMessage: React.FC<Props> = ({ chat, setRef }) => {
  const ref = useRef<HTMLDivElement>(null);

  useEffect(() => {
    setRef(chat, ref);
  }, [setRef, chat, ref]);

  return (
    <div ref={ref}>
      {!chat.fromMe && (
        <div>
          <img src={chat.photo} alt="User" />
        </div>
      )}
      <div>{chat.body}</div>
    </div>
  );
};

export default ChatMessage;
```

## 親コンポーネントで最後の要素の位置までスクロールする
- 子コンポーネントから ref を受け取ってスクロールするための関数 `setLastMessageElement` を定義
  - 最後の要素だった場合、 `scrollIntoView` を用いてその要素が見える位置までスクロールする
- `setLastMessageElement` を子コンポーネントに props として渡す

```tsx:ChatList.tsx
import React from 'react';

import { ChatRoom } from '../../interfaces/chats';
import ChatMessage from './ChatMessage';

interface Props {
  room: ChatRoom;
}

const ChatList: React.FC<Props> = ({ room }) => {
  const setLastMessageElement = (chat: Chat, ref: React.RefObject<HTMLDivElement>) => {
    const lastChat = room.chats[room.chats.length - 1];
    if (chat.id === lastChat.id) {
      ref && ref.current && ref.current.scrollIntoView();
    }
  };

  return (
    <div>
      <div>
        {room.chats.map(chat => (
          <ChatMessage key={chat.id} chat={chat} setRef={setLastMessageElement} />
        ))}
      </div>
    </div>
  );
};

export default ChatList;
```

## まとめ
- 後で気付いたんだけど、ユーザーが新しいメッセージを送った時に chats が更新されるから useEffect が実行されて、自動で最新のメッセージの位置までスクロールしてくれることが分かった。これは便利。
新たなプログラミング言語を学ぶということ

年にひとつ新しい言語に挑戦しよう！

とは昔の会社の先輩に言われたことだが、これはまさしくその通りと思う。

新たな言語を学ぶ＝扱える言語が増える、ということだけでなく、
モダンな言語仕様に触れることで自分のスキルの幅が広がる。

スクリプト言語、手続き型、関数型、（他まだあるかな？）など満遍なく学んでいきたい。

While(1){
    Keep_learning(); /* Enjoy programming! */
}