OmniAICreator/Qiita-1.07M huggingface dataset:
Ubuntu 19.10にMariaDB 10.3をインストール（OS標準）

# はじめに

Ubuntu 19.10にMariaDB10.3をインストール

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07でOSはEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y mariadb-server
... 略
```

### 各種確認

```shell-session
# service mysql start
# mysql -u root -e'select version();'
+-------------------+
| version()         |
+-------------------+
| 10.3.17-MariaDB-1 |
+-------------------+

# apt show mariadb-server
Package: mariadb-server
Version: 1:10.3.17-1
Priority: optional
Section: universe/database
Source: mariadb-10.3
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 67.6 kB
Depends: mariadb-server-10.3 (>= 1:10.3.17-1)
Homepage: https://mariadb.org/
Download-Size: 12.7 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/universe amd64 Packages
Description: MariaDB database server (metapackage depending on the latest version)
```
Ubuntu 19.10にMySQL 8.0をインストール（OS標準）

# はじめに

Ubuntu 19.10にMySQL8.0をインストール

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07でOSはEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y mysql-server
... 略
```

### 各種確認

```shell-session
# service mysql start
# mysql -u root -e'select version();'
+-----------------+
| version()       |
+-----------------+
| 8.0.17-0ubuntu2 |
+-----------------+

# apt show mysql-server
Package: mysql-server
Version: 8.0.17-0ubuntu2
Priority: optional
Section: database
Source: mysql-8.0
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 109 kB
Depends: mysql-server-8.0
Homepage: http://dev.mysql.com/
Task: lamp-server
Supported: 9m
Download-Size: 9532 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/main amd64 Packages
Description: MySQL database server (metapackage depending on the latest version)
```
mac ターミナル で llコマンドを 実行 できるようにする

# 目的

- macでコマンド`$ ll`を実行できるようにする方法を知る。

# 実施概要

1. .bashrc修正
1. .bash_profile修正
1. 設定の反映

# 実施詳細

1. .bashrc修正
  1. 下記コマンドを実行して.bashrcファイルを開く。

  ```
  $ cd
  $ vim .bashrc
  ```  

  1. 下記内容を開いた.bashrcファイルに記載する。
  
  ```
  alias ll='ls -laF'
  ```

  1. 保存して閉じる。
 
1. .bash_profile修正
  1. 下記コマンドを実行して.bash_profileファイルを開く。
  
  ```
  $ vim .bash_profile
  ```

  1. 下記内容を開いた.bash_profileファイルの最終行に記載する。
  
  ```
  source ~/.bashrc
  ```

  1. 保存して閉じる。

1. 設定の反映
  1. 下記コマンドを実行して設定を反映させる。
  
  ```
  $ source .bash_profile
  ```

# まとめ

- .bashrcファイルに`alias 省略形のコマンド='実際に実行してもらうコマンド'`のように記載するとどんなコマンドでも自分の好きなようにショートカット登録することができる。
- .bashrcファイルに記載しただけだとその内容が反映されないため、`source ~/.bashrc`を記載した。.bash_profileファイルをコマンド`$ source .bash_profile`で反映させる必要がある。
Ubuntu 19.10にPython3をインストール（OS標準）

# はじめに

Ubuntu 19.10にPython3をインストール

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07でOSはEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y python3
... 略
```

### 各種確認

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

# ll /usr/bin/python*
lrwxrwxrwx. 1 root root       9 Oct  2 12:31 /usr/bin/python3 -> python3.7*
-rwxr-xr-x. 2 root root 5082224 Oct  8 16:47 /usr/bin/python3.7*
-rwxr-xr-x. 2 root root 5082224 Oct  8 16:47 /usr/bin/python3.7m*
lrwxrwxrwx. 1 root root      10 Oct  2 12:31 /usr/bin/python3m -> python3.7m*

# python3 -V
Python 3.7.5rc1

# apt show python3
Package: python3
Version: 3.7.5-1
Priority: important
Section: python
Source: python3-defaults
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Matthias Klose <doko@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 191 kB
Provides: python3-profiler
Pre-Depends: python3-minimal (= 3.7.5-1)
Depends: python3.7 (>= 3.7.5~rc1-1~), libpython3-stdlib (= 3.7.5-1)
Suggests: python3-doc (>= 3.7.5-1), python3-tk (>= 3.7.5~rc1-1~), python3-venv (>= 3.7.5-1)
Replaces: python3-minimal (<< 3.1.2-2)
Homepage: https://www.python.org/
Task: minimal, ubuntu-desktop-minimal-default-languages, ubuntu-desktop-minimal-default-languages, ubuntu-desktop-minimal-default-languages, ubuntu-desktop-minimal-default-languages, ubuntu-desktop-minimal-default-languages, ubuntu-desktop-minimal-default-languages, ubuntu-desktop-minimal-default-languages, ubuntu-desktop-default-languages, ubuntu-desktop-default-languages, ubuntu-desktop-default-languages, ubuntu-desktop-default-languages, ubuntu-desktop-default-languages, ubuntu-desktop-default-languages, ubuntu-desktop-default-languages, ubuntu-desktop-default-languages, ubuntu-core
Cnf-Extra-Commands: python
Cnf-Priority-Bonus: 5
Supported: 9m
Download-Size: 47.2 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/main amd64 Packages
Description: interactive high-level object-oriented language (default python3 version)
```
Macでbrewするためのはじめの一歩

####LINEbotつくろうかなと思ったけど環境構築でつまづく
久しぶりに学生時代の記憶を取り戻しつつ、LINEbotを作りたいと思ったものの、
PCを変えてしまっているので環境構築からスタート。
てんやわんやしつつ、Qiitaの記事を読み漁り、環境構築に必要なものはなんぞや…
と調べていたらそれはそれはもうよく出てくる ` $brew ` の文字。
学生時代にMacBook Airに入れたな〜と思いながら教授が紹介してくれたQiitaの記事を探しました。
参考記事 : [MacにHomebrewをインストールする](https://qiita.com/_daisuke/items/d3b2477d15ed2611a058)
（とってもシンプルで一番わかりやすかった記事です。）
（大学3年生のときのわたし、いいねをちゃんと押してくれていてありがとう…）
#####環境
macOS Catalina 10.5
###1 | Command Line Toolsのインストール
どの記事を読んでいても**Command Line Toolsをインストール**って書いてる。
学生時代のPCにはXcodeが入っていたので問題なかったけれど
Xcodeがめちゃめちゃ重いことだけはわかった。新しいPCにXcodeはインストールしたくない…。
でもインストーラ見たらちゃんとCommand Line Toolsだけ入手できるようになってました。
灯台下暗しとはこういうことを言うのだと思いました。
[Apple Developers](https://idmsa.apple.com/IDMSWebAuth/signin?appIdKey=891bd3417a7776362562d2197f89480a8547b108fd934911bcbea0110d07f757&path=%2Fdownload%2Fmore%2F&rv=1)からログインしてインストールすれば第一関門突破。
###2 | やっとこさhomebrewのインストールに着手
Command Line Toolsのインストールくらいで手こずってしまって行く先不安ですが、とりあえずやってみる。
homebrewの公式サイトに行くと以下のコマンドが用意されているのでターミナルに貼り付けて実行します。

```sh
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

ガンガン回ってくれるので、止まったら`Enter`を押します。
そのままパスワードを要求されるので入力します。
参考記事にも書いていたようにインストールには少し時間がかかりました。
録画していた朝ドラを見てたら半分くらいで終わりました。

```sh
==> Installation successful!
```
インストールできた…
###3 | 本当に動くか確認する
実際にちゃんとhomebrewが動くのか確認するコマンドがあるので実行してみました。

```sh
$ brew doctor
Your system is ready to brew.
```
準備できてるみたいです。これで一安心。
これからわたしも「hogehogeをbrewして、、、」とか言えるようになるんですかね。
使い倒せるかどうかはわかりません。前進あるのみです。

####おわりに
社会人になって少し時間ができたので、少し遊んでみることにしたら
環境開発からしないといけないことを思い出して人生ゲームのふりだしに戻った気分です。
最近は便利なプラットフォームがたくさんあるので、情報収集を行いつつ、進めていこうと思います。
初めてQiitaの記事を書いてみましたがMarkdown方式に慣れておらず、かなり時間がかかりました。
ただ、アウトプットの意味も兼ねているので今後も記事を少しずつ書いていこうと思います。

初心者ですのでご指摘等ございましたらコメントしてくださると助かります。
Goodpatchのデザイン開発のワークショップに参加して

## はじめに
UI・UXデザインの有名会社[Goodpatch](https://goodpatch.com/)のデザイン開発プロセスのワークショップに参加してきました。
そのとき、学んだことや思ったことを記事にしたいと思います。

## 偉大な開発は偉大なチームから！
一番はじめに、ICEBREAKとして質問型の自己紹介をチームでしました。
この自己紹介をすることによって、相手の感情や価値観を知ることができ、チームの仲を深め、より良い開発に繋がるそうです。実際の開発でも、エンジニアとデザイナーとユーザー(ペルソナ)などのメンバーで行うそうです。そのあと、付箋に自分がポジティブになれる環境・こと、ネガティブになる環境・ことについて書き出し、なぜそうなのか理由を話すということもしました。これもまた、相手の感情やモチベーションを知るきっかけになるそうです。コミュニケーション量は偉大なチームへの第一歩出そうです。

## 対象とするユーザー像をもっと具体的にする
たとえば、20代・女性などではなく、もっと明確におしゃれが好きな20代女性などとすると、開発に携わるメンバー全体で共通認識を持つことにより、よりイメージがしやすくなるとのことでした。

## ユーザーの本当の課題が何なのかをはっきりさせる
ユーザにヒアリングを行い、実際の課題が何なのかをはっきりさせます。ユーザーにヒアリングを行う際に以下の点に、気をつけます。

* Whyを言及する。
* YES/NOで答えられる質問は避ける。
* 繰り返しの発言に注意する。(ユーザーが無意識に繰り返している言葉に注意する)

ヒアリングを行った上で、本当の問題は一体何なのかを話し合い、ユーザーにフォーカスした課題を絞ります。それから話し合い、ユーザーがどの状態にあることがゴールなのかを考えます。最後に、そうなるためのアイデアを出し合います。それをまとめて、どんな物があったらいいのかを考えます。最後にユーザーストーリーを考え、そこからユーザーにフィードバックしてもらいます。

## まずはやってみようマインドが大事
直感的に思いついたことでも、積極的に発言することが大事だそうです。
多少粗くても初めは最後までやりきる気持ちが大切だそうでです。

## 深いところからデザインしていく
表面的なデザインだけでなく、企画や設計、戦略からデザインをすることで、よりユーザーに沿ったデザイン開発ができるそうです。ユーザーの課題をしっかり考え、深いところまでデザインすることによってより使いやすいデザインが出来上がるのだと思いました。

## 組織全体で共通言語を持つ
UIのデザインは言語化して、誰が聞いても共通認識が持てるようにします。ユーザーが満足いくデザインをしっかり、言語化し伝えたり、整理する力が大切だそうです。
UbuntuでPostgresql の削除

#Ubuntu でpostgresqlの削除

Ubuntuでのpostgresqlの
削除について、まとめてみました。

#インストールしたパッケージの確認

インストールした、postgresに関する
パッケージリストを確認します。

```
$ dpkg -l | grep postgres
```
インストールしたパッケージが
表示されます。

![posgre.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354877/eeedd59e-4851-27e0-2d81-fd1c57370a2f.png)

#postgresの削除
上記のコマンドで表示された、
Postgresqlに関する各パッケージをremoveしていきます。

```
$  sudo apt remove --purge postgres
```

**apt remove だけでは設定ファイルを削除できないので、完全に削除をする場合は  --purge  オプションを追加して実行しましょう。**

対象ファイルがすべて削除できたか、
確認をします。


```
$ dpkg -l | grep postgres
```
アウトプットがなくなっているのがわかります！

以上で終了です。
無事に削除ができました
Ubuntu 19.10にNginx 1.16をインストール（OS標準）

# はじめに

Ubuntu 19.10にNginx1.16をインストール
LTS系まとめ親記事：[Nginxの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/df4a0baaaad9c932ea30)

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07でOSはEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y nginx
... 略
```

### 各種確認

```shell-session
# which nginx
/usr/sbin/nginx

# nginx -v
nginx version: nginx/1.16.1 (Ubuntu)

# apt show nginx
Package: nginx
Version: 1.16.1-0ubuntu2
Priority: optional
Section: web
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 44.0 kB
Depends: nginx-core (<< 1.16.1-0ubuntu2.1~) | nginx-full (<< 1.16.1-0ubuntu2.1~) | nginx-light (<< 1.16.1-0ubuntu2.1~) | nginx-extras (<< 1.16.1-0ubuntu2.1~), nginx-core (>= 1.16.1-0ubuntu2) | nginx-full (>= 1.16.1-0ubuntu2) | nginx-light (>= 1.16.1-0ubuntu2) | nginx-extras (>= 1.16.1-0ubuntu2)
Homepage: http://nginx.net
Supported: 9m
Download-Size: 3632 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/main amd64 Packages
Description: small, powerful, scalable web/proxy server
```
Ubuntu 19.10にOpenJDK 14をインストール（OS標準）

# はじめに

Ubuntu 19.10にOppenJDK14をインストール
LTS系まとめ親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07でEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y openjdk-14-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "14-ea" 2020-03-17
OpenJDK Runtime Environment (build 14-ea+18-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 14-ea+18-Ubuntu-1, mixed mode, sharing)

# apt show openjdk-14-jdk
Package: openjdk-14-jdk
Version: 14~18-1
Priority: optional
Section: universe/java
Source: openjdk-14
Origin: Ubuntu
Maintainer: OpenJDK Team <openjdk@lists.launchpad.net>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 55.3 kB
Provides: java-compiler, java-sdk, java10-sdk, java11-sdk, java12-sdk, java13-sdk, java2-sdk, java5-sdk, java6-sdk, java7-sdk, java8-sdk, java9-sdk
Depends: openjdk-14-jre (= 14~18-1), openjdk-14-jdk-headless (= 14~18-1), libc6 (>= 2.2.5)
Recommends: libxt-dev
Suggests: openjdk-14-demo, openjdk-14-source, visualvm
Conflicts: openjdk-11-jre-headless (<< 11~19-2)
Replaces: openjdk-11-jre-headless (<< 11~19-2)
Homepage: http://openjdk.java.net/
Download-Size: 10.6 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/universe amd64 Packages
Description: OpenJDK Development Kit (JDK)
```
学生はよくやりがちかも？　似たような処理はテンプレートできるかも！

#似たような処理を連続して書いてませんか？#

こんばんは。脳死状態で（言い訳）でプログラムをしていたら
『おい、それってよ！テンプレートできるやんか』と言われたので
同じことをしている人はおすすめです。

自分は長く読むのが嫌いなのでざっくり教えます
##何をしていたのか
```ruby:オブジェクト作ってプシュッバックしています
auto e = std::make_shared<Enemy>();
e->Init();
Objects.push_back(e);

auto p = std::make_shared<Player>();
p->Init();
Objects.push_back(p);

auto b = std::make_shared<Bullet>();
b->Init();
Objects.push_back(b);
```


うん！めちゃんこ同じことをしているね！
##テンプレートでまとめる

今回はテンプレートを使います
まず宣言

```ruby
template <class T>
```
```ruby:処理内容を書くよ！
/*その型で宣言しようね！*/
std::shared_ptr<T> CreateObject()
{
	auto object = std::make_shared<T>();
	object->Init();
	Objects.push_back(object);
	return object;
}
```


なんとなくわかるかな？名前の通りこれをテンプレとします。
ゲームでもテンプレPTと言うよね

##早速使用してみよう！

####使用前

```ruby:before
auto e = std::make_shared<Enemy>();
e->Init();
Objects.push_back(e);

auto p = std::make_shared<Player>();
p->Init();
Objects.push_back(p);

auto b = std::make_shared<Bullet>();
b->Init();
Objects.push_back(b);
```

####使用後


```ruby:after
CreateObject<Enemy>();

CreateObject<Player>();

CreateObject<Bullet>();
```


####三行で終わるんですね！可読性も上がります！

##まとめ
同じことを３回していたら　関数化、テンプレートなど！
まとめれるか一度考えてみよう！
Ubuntu 19.10にOpenJDK 13をインストール（OS標準）

# はじめに

Ubuntu 19.10にOppenJDK13をインストール
LTS系まとめ親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07でOSはEOLになる。
[Oracle Java SE Support Roadma](https://www.oracle.com/technetwork/jp/java/java-se-support-roadmap.html)よりOracleでもサポートが2020-03までなので、Ubuntu側で独自保守しない場合は2020-03がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y openjdk-13-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "13" 2019-09-17
OpenJDK Runtime Environment (build 13+33-Ubuntu-1)
OpenJDK 64-Bit Server VM (build 13+33-Ubuntu-1, mixed mode)

# apt show openjdk-13-jdk
Package: openjdk-13-jdk
Version: 13+33-1
Priority: optional
Section: universe/java
Source: openjdk-13
Origin: Ubuntu
Maintainer: OpenJDK Team <openjdk@lists.launchpad.net>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 55.3 kB
Provides: java-compiler, java-sdk, java10-sdk, java11-sdk, java12-sdk, java13-sdk, java2-sdk, java5-sdk, java6-sdk, java7-sdk, java8-sdk, java9-sdk
Depends: openjdk-13-jre (= 13+33-1), openjdk-13-jdk-headless (= 13+33-1), libc6 (>= 2.2.5)
Recommends: libxt-dev
Suggests: openjdk-13-demo, openjdk-13-source, visualvm
Conflicts: openjdk-11-jre-headless (<< 11~19-2)
Replaces: openjdk-11-jre-headless (<< 11~19-2)
Homepage: http://openjdk.java.net/
Download-Size: 10.6 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/universe amd64 Packages
Description: OpenJDK Development Kit (JDK)
```
#docker - Dockerfile + docker-compose で development / production などの環境を切り替える (まるちすてーじびるど！)

- Dockerfile の FROM AS で、てきとう名前をつけてマルチステージビルドする。作成したイメージを元に別のイメージを作成する。
- AS で名前をつけたイメージに対して docker-compose.yml で target 指定する。

って感じで実現できるっぽい。

本番と開発緩急で別の docker-compose.yml を使う感じかな。

```
FROM python:3.6 as base
RUN apt-get update && apt-get upgrade -y
RUN pip install pipenv pip
COPY Pipfile ./
# some more common configuration...

FROM base as dev
RUN pipenv install --system --skip-lock --dev
ENV FLASK_ENV development
ENV FLASK_DEBUG 1

FROM base as prod
RUN pipenv install --system --skip-lock
ENV FLASK_ENV production
Then you can build one stage or another using the --target syntax to build, or a compose file like:
```

```
# docker-compose.yml
version: '3.4'
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile
      target: prod
```

[Google Calendar - October 2019](https://calendar.google.com/calendar/r#main_7)

[Use multi-stage builds | Docker Documentation](https://docs.docker.com/develop/develop-images/multistage-build/)

# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2600








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
【初心者向け】グラレコで人物を描くコツ #グラレコ

UXセミナー以来、グラレコに興味が沸いていましたが、ついに先日、ワークショップに参加してどんなものか体験することができました。
結果、**絵や図を使って他人と意思共有をすることが仕事で一番大事だと信じて疑わない**自分にとって、非常に意義のある内容でした。

さっそく振り返りをしていきます。

イベントの公式情報を確認したい場合はこちらのURLから参照ください↓
https://connpass.com/event/148623/

# 良かったこと

今回は初心者向けということで、人物の書き方を中心にやりました。特に印象的だった２つの点について書きます。

## 人物の表情の付け方が分かった。
感情を表情から読み取るシンプルな法則があるのだそうです。代表的な感情４つ（喜び、怒り、哀しみ、驚き）を表現すると、こんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34636/d408ddba-2ead-ac65-b8fe-56596ed6e472.png)

喜びと驚きは口の形、怒りと哀しみは眉の形だけで表現できていますね。とてもシンプルです！

ちなみに、顔のパーツを補足するとこうなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34636/4ae7b00d-5574-2ee9-b10b-3accc01ee958.png)

補足する前と、受ける印象がそこまで変わってないことに気づかされます。

**顔のパーツが眉、目、口しかないのは、感情を表現するパーツがこの３つだからです**。今回のワークショップは、「**グラフィックレコーディング**」、つまり、**その場で記録していく現在進行形の行為そのもの(ING)を重視しているため、短時間で分かりやすく描く方法に焦点が置かれています**。

ちなみにワークショップのハッシュタグが #グラレコ となっていましたが、これだとほかのイベントと被ってしまい、イベントを一意に特定できないので、#INGグラレコ とか、#enjoyグラレコ などとしても良いかもしれません。

## 人物の身体の描き方がわかった。
次に、人物の描き方についてです。自分がこれまでよく描いていたのは糸人形のような人間でしたが、描き方がわかるとかなり変わりました。こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34636/24806c9e-c655-f45e-3cf9-dbdfbd57781b.png)

なんだか随分と人間らしくなったのではないでしょうか？コツは３点です。

1. 身体は四角にする
2. 手は肩から生やす
3. 絵だけで伝えようとしなくても全然OK。名前を書けば100%伝わる

講師の方いわく、**重要なのは上手く描くことより伝わるように描くこと**で、文字を加えても全然OKとのことでした。手の位置と身体の形を変えただけなのに、とても動きが付けやすくなるんですね。驚きです。

# 応用編
上記の基礎技術をふまえて、講師の方が参加者のリクエストに答えながらライブコーディングしてくれた絵がこちらです。説明書きがある物もありますが、どれが何の絵だか分かるでしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34636/37b4eab6-7913-a40c-3266-0f5e2ff1cbe3.png)

正解はこちら。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34636/a37346d5-5ee1-a6df-8103-2a8059341042.png)

これ全部で、講師の方がだいたい15分くらいで描いてたと思います。ひとつ描くたびに、参加者からは共感の歓声が上がりました。このような感じで終始遊び心のある進行をしていただき、とても楽しくワークショップを終えることができました。主催の皆さま、ありがとうございました。

# 次はこんなことをしてみようと思ったこと
今回のワークショップは参加者同士で5,6人のグループを作り、共通のお題で描いた絵を互いに見せ合うというやり方が多かったです。これには理由があって、**他の人との違い、感じ方の違いを楽しんでゆくと、絵はどんどん上達する**からなのだそうです。

絵に限らず、**違いを楽しむ姿勢は大事**だと自分は思うので、この考え方を取り入れていこうと思いました。たとえば、古典ばかり読むのではなく、新書も読んでみるとか、正反対の意見の本を読んで、違いを比較検討してみるなどです。

# まとめ
とっても発見の多いワークショップでした！初心者向けのワークショップとはいえ、内容が濃かったと感じました。次があればまた参加してみたいと思います！
webインスペクタが正常に動作しない時に確認する点

# 前提
iPhone実機でのwebページのデバックでwebインスペクタを使用しようとした際、起動はするが項目どれをみても真っ白だったので調べた内容のまとめです。
## 確認項目
### 1つ目はiOSのバージョンが最新かどうか
こちらについてはiPhoneを使っている人ならわかると思いますし、解説記事も多いと思うので割愛。
### 2つ目はsafariのバージョンが最新かどうか
こちらについては少しわかりにくかったです。
safariのバージョンを確認したところ最新なのか最新じゃないのかひと目ではわかりませんでした。(~~chromeは最新バージョンです、と表示があるのでsafariは少し不親切ですね~~)
![スクリーンショット 2019-10-19 0.03.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259727/1c8ba358-72b5-eaa9-f087-f5ed0ba1f851.png)

macのapp storeに行きましたがmacの不慣れな僕はここにないのなら最新なんだろうと思っていましたが...「さらに見る」を押すと出てきました！
![スクリーンショット 2019-10-19 0.06.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259727/29af0d35-9ae4-9661-8006-b6c09a05a029.png)
無事アップデートすることができ、webインスペクタも表示することができました。
![スクリーンショット 2019-10-19 0.07.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259727/1bbedc3a-1e5b-5873-0949-fe105d4be7a1.png)
![スクリーンショット 2019-10-19 0.11.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259727/ce892d95-1c1e-076a-9da0-0e45395b5ac3.png)
## まとめ
今回色々調べていた際macOSのバージョンを上げるということをしている方も見えましたが、自分は他と干渉したりするのが嫌で上げたくなかったので上記の2点で解決できてよかったです。
また今回はsafariのバージョンの上げ方など初歩的な内容も入ってしまいましたが、僕と同じようなmac初心者の方に参考になれば幸いです。
###### キーワード
safari iOS webインスペクタ 表示されない できない
Ubuntu 19.10にOpenJDK 11をインストール（OS標準）

# はじめに

Ubuntu 19.10にOppenJDK11をインストール
LTS系まとめ親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07がEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y openjdk-11-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "11.0.5-ea" 2019-10-15
OpenJDK Runtime Environment (build 11.0.5-ea+10-post-Ubuntu-0ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.5-ea+10-post-Ubuntu-0ubuntu1, mixed mode, sharing)

# apt show openjdk-11-jdk
Package: openjdk-11-jdk
Version: 11.0.5+10-0ubuntu1
Priority: optional
Section: java
Source: openjdk-lts
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: OpenJDK Team <openjdk@lists.launchpad.net>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 2315 kB
Provides: java-compiler, java-sdk, java10-sdk, java11-sdk, java2-sdk, java5-sdk, java6-sdk, java7-sdk, java8-sdk, java9-sdk
Depends: openjdk-11-jre (= 11.0.5+10-0ubuntu1), openjdk-11-jdk-headless (= 11.0.5+10-0ubuntu1), libc6 (>= 2.2.5)
Recommends: libxt-dev
Suggests: openjdk-11-demo, openjdk-11-source, visualvm
Conflicts: openjdk-11-jre-headless (<< 11~19-2)
Replaces: openjdk-11-jre-headless (<< 11~19-2)
Homepage: http://openjdk.java.net/
Supported: 9m
Download-Size: 2190 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/main amd64 Packages
Description: OpenJDK Development Kit (JDK)
```
DHCPにresolv.confを書き換えて欲しくない

DHCPクライアントが勝手にresolv.confを書き換えて困っている人に捧ぐ。

# 環境
- OS: raspbian buster lite
- DHCPクライアント: dhcpcd

未実証だが、dhclientでの対応方法も載せておいた。それぞれのクライアントとそれに適用可能な方法は次の通り。

|client|適用可能な方法|
|:-:|:--|
|dhcpcd|<a href="#方法1-一番おすすめdhcpcd">1</a>, <a href="#方法2-dhcpcd">2</a>, <a href="#方法3-dhcpcd">3</a>, <a href="#方法4">4</a>|
|dhclient|<a href="#方法4">4</a>, <a href="#方法5-dhclient">5</a>, <a href="#方法6-dhclient">6</a>|

# 方法1 一番おすすめ(dhcpcd)

DHCPクライアントがDNS関連の情報を取得しないように設定する。

/etc/dhcpcd.confに以下を追記。

```conf:/etc/dhcpcd.conf
nooption domain_name_servers, domain_name, domain_search
```

他にも指定可能なオプションが色々。詳しくは、`dhcpcd -V`で一覧をチェック。

参考サイト

- [dhcpcd.conf(5)](https://www.daemon-systems.org/man/dhcpcd.conf.5.html)

# 方法2 (dhcpcd)

DHCPクライアントがresolvconfにDNS関連の情報を渡さないようにする。/usr/lib/dhcpcd/dhcpcd-hooks/20-resolv.confというフックを起動しないようにしているらしい。

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

```conf:/etc/dhcpcd.conf
nohook resolv.conf
```

他のフックの起動も抑制できる。`ls /usr/lib/dhcpcd/dhcpcd-hooks`で一覧をチェック。

参考サイト

- [dhcpcd - ArchLinux](https://wiki.archlinux.org/index.php/dhcpcd#/etc/resolv.conf)
- [dhcpcd.conf(5)](https://www.daemon-systems.org/man/dhcpcd.conf.5.html)

# 方法3 (dhcpcd)

そもそもDHCPを使わずにstaticに設定してしまう。

/etc/dhcpcd.confに設定を追加する。

```conf:/etc/dhcpcd.conf
interface eth0
static domain_name_servers=8.8.8.8
```

# 方法4

resolv.confファイルのパーミッションを上げて、DHCPクライアントが触れないようにする。

```shell
chattr +i /etc/resolv.conf
```

参考サイト

- [Obtain IP from DHCP sever but set DNS servers statically on Debian](https://unix.stackexchange.com/questions/346967/obtain-ip-from-dhcp-sever-but-set-dns-servers-statically-on-debian)

# 方法5 (dhclient)

DNS関連情報をDHCPサーバーにリクエストしないように設定する。

/etc/dhcp/dhclient.confの以下の項目を書き換える。

```conf:/etc/dhcp/dhclient.conf
request subnet-mask, broadcast-address, time-offset, routers,
    domain-name, domain-name-servers, domain-search, host-name,
    dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
    netbios-name-servers, netbios-scope, interface-mtu,
    rfc3442-classless-static-routes, ntp-servers;
```

この中から、domain-name、domain-name-servers、domain-searchを消す。

参考サイト

- [Obtain IP from DHCP sever but set DNS servers statically on Debian](https://unix.stackexchange.com/questions/346967/obtain-ip-from-dhcp-sever-but-set-dns-servers-statically-on-debian)

# 方法6 (dhclient)

DHCPで取得したDNS情報を上書きする。

/etc/dhcp/dhclient.confに設定を追加する。

```conf:/etc/dhcp/dhclient.conf
supersede domain-name-servers 8.8.8.8
```

domain-name-servers以外のオプションの情報も上書きできる。

参考サイト

- [Ignore DNS from DHCP server in Ubuntu](https://unix.stackexchange.com/questions/136117/ignore-dns-from-dhcp-server-in-ubuntu)

# まとめ

結局、存在すると面倒な情報は取得しないのが一番。
Ubuntu 19.10にOpenJDK 8(1.8)をインストール（OS標準）

# はじめに

Ubuntu 19.10にOppenJDK8(1.8)をインストール
LTS系まとめ親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07がEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y openjdk-8-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "1.8.0_232-ea"
OpenJDK Runtime Environment (build 1.8.0_232-ea-8u232-b09-0ubuntu1-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)

# apt show openjdk-8-jdk
Package: openjdk-8-jdk
Version: 8u232-b09-0ubuntu1
Priority: optional
Section: universe/java
Source: openjdk-8
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: OpenJDK Team <openjdk@lists.launchpad.net>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1721 kB
Provides: java-compiler, java-sdk, java2-sdk, java5-sdk, java6-sdk, java7-sdk, java8-sdk
Depends: openjdk-8-jre (= 8u232-b09-0ubuntu1), openjdk-8-jdk-headless (= 8u232-b09-0ubuntu1), libc6 (>= 2.2.5)
Recommends: libxt-dev
Suggests: openjdk-8-demo, openjdk-8-source, visualvm
Homepage: http://openjdk.java.net/
Download-Size: 1609 kB
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/universe amd64 Packages
Description: OpenJDK Development Kit (JDK)
```
サーバサイド(node.js)でhtmlとcssを使って画像を生成する

## 概要

サーバサイドで表やら装飾やらが入り組んだ画像を作りたい際にHTMLとCSSを使ってなんとかやれないものか調べたメモ書き
PuppeteerというCUIオンリーでもブラウザを操作できるNode.js製のライブラリが良さげ

ローカルにサーバーを用意
↓
html+cssファイルを設置
↓
Puppeteerを用いてブラウザで設置したhtmlへアクセス
↓
スクショ取得

というのが大体の流れ


## ローカルサーバー側

今回はXAMPPを使ってパパっと設置

```index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootswatch/4.3.1/sandstone/bootstrap.min.css">
    <style>
    .box{
        padding: 0.5em 1em;
        margin: 1em 0;
        background: #f4f4f4;
        border-left: solid 6px #5bb1b7;
        width: 500px;
    }
    .box p {
        margin: 0; 
        padding: 0;
    }
    </style>
</head>
<body>
    <div class="container">
        <div class="box target">
            <table class="table table-bordered">
                <tr>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                </tr>
                <tr>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                </tr>
                <tr>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                </tr>
                <tr>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                    <td>ほげほげ</td>
                </tr>
            </table>
        </div>
    </div>
</body>
</html>
```

## node.js側

事前準備として、Puppeteerをインストール

```
npm i puppeteer
```

以下JSファイルを作成

```html_to_image.js
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  // 倍率とか設定する
  await page.setViewport({width: 1920, height: 1080, deviceScaleFactor: 2})
  await page.goto('http://localhost/');
  // 対象のエレメントを指定
  let elm = await page.$('.target');
  await elm.screenshot({path: 'html_to_image.png'});
  await browser.close();
})();
```


### 実行

``` 
node html_to_image.js
```


### 結果

![html_to_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77136/4e5fd3f4-06f7-af52-0cd3-f5a7a1ccc213.png)

これだけでhtmlの特定エレメントを画像化することができた


## メモ

- ブラウザで閲覧するのとほぼ同じなのでbootswatchのCDNも普通に使えた
- box-shadowとかflexboxとか使えるhtml/cssはやっぱり自由度高くて強力
- 小さい要素だと画質が荒くなるので倍率高めで一旦作って後で調整するのもアリかも
- ユーザー投稿型のサービスとかだとブラウザ側でcanvasに描画→画像化したものをアップロードという手も考えたけどフォントとかが環境依存になるしライセンスとかバリデーションとか考慮すると面倒くさそう
- ブラウザ経由してるので処理はそれなりに重い。単純に作れる画像ならこれじゃなくGDとかこねくり回すか、実行頻度が高い場合はジョブキューとかで非同期にやった方が良い気がする



もっと良い方法あったらコメ欄で教えていただけると幸いです！
Ubuntu 19.10にPHP, PHP-FPM 7.3をインストール（OS標準）

# はじめに

Ubuntu 19.10にPHP, PHP-FPMをインストール
LTS系まとめ：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)

## サポート

[EoanErmine/ReleaseNotes - Ubuntu Wiki](https://wiki.ubuntu.com/EoanErmine/ReleaseNotes)より、2020-07がEOLになる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
NAME="Ubuntu"
VERSION="19.10 (Eoan Ermine)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 19.10"
VERSION_ID="19.10"
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=eoan
UBUNTU_CODENAME=eoan

# apt update; apt install -y php-fpm
... 略
```

### 各種確認

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

# php -v
PHP 7.3.8-1 (cli) (built: Aug  7 2019 09:50:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.8-1, Copyright (c) 1999-2018, by Zend Technologies

# which php-fpm7.3
/usr/sbin/php-fpm7.3

# php-fpm7.3 -v
PHP 7.3.8-1 (fpm-fcgi) (built: Aug  7 2019 09:50:45)
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.8, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.8-1, Copyright (c) 1999-2018, by Zend Technologies

# apt show php
Package: php
Version: 2:7.3+69ubuntu2
Priority: optional
Section: php
Source: php-defaults (69ubuntu2)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <team+pkg-php@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 13.3 kB
Depends: php7.3
Supported: 9m
Download-Size: 2800 B
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/main amd64 Packages
Description: server-side, HTML-embedded scripting language (default)

# apt show php-fpm
Package: php-fpm
Version: 2:7.3+69ubuntu2
Priority: optional
Section: universe/php
Source: php-defaults (69ubuntu2)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <team+pkg-php@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 13.3 kB
Depends: php7.3-fpm
Download-Size: 2884 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu eoan/universe amd64 Packages
Description: server-side, HTML-embedded scripting language (FPM-CGI binary) (default)
```
Android Studioショートカットのカスタマイズ

# 手順
**`Clean Project`に、`Command + Shift + K`を割り当ててみる。**
（Xcodeと同じショートカットにしたかったため）

まずはPreferences＞Keymapを選択。

サーチバー右のFind Shortcutアイコンより、既に同じコマンドが設定されているかどうかを確かめる。
（`Command + Shift + K`にはPushが割り当てられていた→外す必要あり）
<img width="903" alt="スクリーンショット 2020-02-09 17.19.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/5423ab97-2074-6a0c-6d50-80a642890d30.png">

その項目を右クリック、Removeを選択。
<img width="568" alt="スクリーンショット 2020-02-09 17.21.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/fbe8a40a-17a5-1d0e-8fdd-a2ad73f66145.png">

サーチバーからClean Projectを探して右クリック、Add Keyboard Shortcutを選択。
<img width="594" alt="スクリーンショット 2019-10-18 23.35.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/fab4d8b5-048d-3411-ffde-4ca3ff608879.png">

ダイアログが出てくるので、そこで`Command + Shift + K`をタイプ。
<img width="524" alt="スクリーンショット 2020-02-09 17.23.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/8c876118-39ff-39cf-f359-4a0863abaa9f.png">

最後にPreferencesダイアログのOKボタンを押して、割り当て完了です:tada:

# よく使うカスタムショートカット（随時追加予定）
## Clean Project
`Command + Shift + K`

## 左右のタブ移動
`Command + Alt + →`で右のタブに移動
`Command + Alt + ←`で左のタブに移動
<img width="481" alt="スクリーンショット 2019-10-18 16.10.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/112818/a698e183-3baf-bf32-36b6-21f87bb3d644.png">

# 参考
[Android Studioで、左右のタブ移動のショートカットを変更する - Qiita](https://qiita.com/papipupeo/items/13a9427cfbadd678c680)
想像を絶するQA Access ロット名

https://www.moug.net/faq/viewtopic.php?t=78705
2020年問題
投稿日時: 19/10/15 17:21:10
投稿者: rag

日付の下五桁を使ってロット名を作り昇順で並べていました。
例：2019/10/15なら、91015となります。
このため、2020年以降0で始まるロットになると、昇順が崩れてしまいます。
 
幸いなことに、ロットは文字列型にしており字数制限もしていませんでしたので、ロット番号を生成するときにAを頭につけるなどして昇順を維持することは出来ます。
しかし、実際の製品のロットにはAがついているわけではなく、もちろん見栄えもよろしくありません。
 
また、データベースのフィールドは増やしたくありません。
 
このような状況で、改善策はあるでしょうか。

---

回答 	
投稿日時: 19/10/15 19:25:54
投稿者: よろずや

SELECT Q.ロット FROM (
SELECT IIF(LEFT(ロット,1)>RIGHT(FORMAT(DATE,"YYYY"),1),"1","2") AS D, ロット
 FROM テーブル) AS Q
ORDER BY Q.D, Q.ロット;
 
ってな感じかな。
	
投稿日時: 19/10/18 16:32:05
投稿者: rag

回答ありがとうございました。
申し訳ありません。
当方の情報不足、あるいは実力不足で、説明がいきたら無かったため、すこし違った結果がえられるソースを作っていただいたようです。
 
ご解答を吟味して勉強しなおして、また質問させていただくかもしれません。
ともあれ、ありがとうございました。

---


##すべてにおいて謎が多い
###1.日付の五桁2019/10/21なら91021で名前を付けることがあり得ない
いったいなぜ日付の下五桁という発想が出てくるのか。
日付の下五桁を使うくらいならシリアル値を使えばよいわけで、なぜこんな発想に至るのかがまるでわからない。


###2.このため、2020年以降0で始まるロットになると、昇順が崩れてしまいます。
これも全く理解しがたい。9の次が0になることを知らない。知っていてこういうのを組むのは知らないのと同じなので、知らないんだよ。
自分がまずとんでもない無知だということに気づかないといけない。
さらに、もしあとから製品を日付順に追加しているなら、ID列さえあれば解決する。しかし「フィールドを追加したくない」と言っているので、その解決方法を使いたくないのだろう。

###3.ロットは文字列型にしており字数制限もしていませんでしたので、ロット番号を生成するときにAを頭につけるなどして昇順を維持することは出来ます。

幸いも何も文字列型以外とれない。 2020/1/1 は101になってしまう。固定長の文字列型ならわかるのだが。。。

##謎は多いが結論としては
その五桁を今のうちにシリアル値にする。2010年が存在しない前提なら次のような関数が使える。

```vb
Function FiveDegitdate(str5 As String)
Dim reg As New RegExp
Dim DT As Date
reg.Global = True
reg.IgnoreCase = False
reg.Multiline = False
reg.Pattern = "[0-4]"
If reg.test(Left(str5, 1)) = True Then str5 = CStr("202" & str5) Else str5 = CStr("201" & str5)
DT = CDate(Format(str5, "0000\/00\/00"))
FiveDegitdate = CLng(DateSerial(Year(DT), Month(DT), Day(DT)))
End Function
```

これをどう使うかとか、金をいくらもらってもこれ以上教える気にならない。仮にこのAccessのデータベースが本当に存在するなら、高い確率でまだ地雷が埋まっているとしか思えないからだ。
そもそもロットが下五桁、それで製品名になるのは、単品か小品数で1日に作る量が限られており、在庫があまりない、という場面だ。おそらく2018年から2020年のスパン程度だろう。という前提で作成された関数である。
また、VBScript regexpに参照設定が必要。
Windows Server逆引きメモ

## Administratorのパスワードを忘れた場合の対処

Windowsのインストールメディアからブートし、[Windowsセットアップ]→[コンピューターを修復する]
[オプションの選択]画面で、[トラブルシューティング]→[コマンドプロンプト]
以下のコマンドで、Utilman.exe を cmd.exe に置き換える。

```console
X:Souerces>d:
D:cd Windows\System32
D:Windows\System32>rename Utilman.exe Utilman.exe.bk
D:Windows\System32>copy cmd.exe Utilman.exe
```

"net user Administrator 新しいパスワード" でパスワードを更新。
ブートCDからコマンドプロンプトを起動し、Utilman.exe をもとに戻す。

```console
X:Souerces>d:
D:cd Windows\System32
D:Windows\System32>del utilman.exe
D:Windows\System32>rename  Utilman.exe.bk Utilman.exe
```

### 参考
* [WindowsServer2012R2 のパスワードを忘れてログオンできなくなったときの対応 - 3流プログラマのメモ書き](https://3ryupg.hatenablog.com/entry/2018/03/25/200000)
Qiita始めました

# はじめに
自己紹介します。
<b>楽しいルンルン</b>と申します。年齢は20代前半です。<b>無職</b>です。
Qiitaについて何も分かっていませんが楽しくルンルンやれたら良いな♪
と思いこの名前にしました。
![Qiitaicon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/516155/a691d8f5-41b1-59af-0f58-a341171c2fa4.png)

# 何故Qiitaをはじめたのか
三日坊主で娯楽ですらゲーム以外に続いた試しが無いので、
学習した事を少しでも投稿してアウトプットする事で、
知識として定着させるためです。

# 終わりに
頼むから今度こそ継続してくれ自分。
がんばれがんばれ
VBA で Zip ファイルを作成する

# VBA で Zip ファイルを作成する

VBA から Zip ファイルを作成する記事を検索すると「きぬあさ」さんのページが出てきます。

ZIP形式で圧縮・解凍を行うVBAマクロ
https://www.ka-net.org/blog/?p=7605

しかし、この方法はマイクロソフト非推奨というところがネック。
ということで、PowerShell を用いた方法でやってみました。

PowerShell 5.0
.Net Framework 4.5 以降 
Windows 10　なら大丈夫なはず。

```vb
Sub Main()

    Dim col As Collection
    
    Set col = New Collection
    
    col.Add "e:\README.md"
    
    CompressArchive col, "E:\aaa.zip"


End Sub
'--------------------------------------------------------------
' Zip 圧縮処理
'--------------------------------------------------------------
Private Sub CompressArchive(col As Collection, strDest As String)

    Dim strCommand As String
    Dim strPath  As String
    Dim v As Variant
    Dim First As Boolean
   
    'コマンド
    strCommand = "Compress-Archive"

    strCommand = strCommand & " -Path"

    First = True
    For Each v In col
   
        If First Then
            strPath = """" & v & """"
            First = False
        Else
            strPath = strPath & ",""" & v & """"
        End If
    Next

    strCommand = strCommand & " " & strPath
   
    strCommand = strCommand & " -DestinationPath"
    strCommand = strCommand & " """ & strDest & """"

    strCommand = strCommand & " -Force"
   
   
    'PowerShell を実行する
    ExecPowerShell strCommand

End Sub

'--------------------------------------------------------------
' PowerShell 実行
'--------------------------------------------------------------
Private Sub ExecPowerShell(strCommand As String)
   
    Dim strTemp As String
    Dim strFile As String
    Dim strBuf As String
   
    With CreateObject("Scripting.FileSystemObject")
   
        strTemp = .GetSpecialFolder(2).Path
        strFile = .BuildPath(strTemp, .GetTempName & ".ps1")
    
        'テキスト出力
        With .CreateTextFile(strFile, True)
            .Write strCommand
            .Close
        End With
       
        strBuf = "powershell"
        strBuf = strBuf & " -ExecutionPolicy"
        strBuf = strBuf & " RemoteSigned"
        strBuf = strBuf & " -File"
        strBuf = strBuf & " """ & strFile & """"
    
        With CreateObject("WScript.Shell")
            Call .Run(strBuf, 0, True)
        End With
    
        .DeleteFile strFile
    
    End With

End Sub
```

展開は、Expand-Archive コマンド　を使えばいいのでやってみてください。

書いた後に気がついたけど記事的には「VBAからPowerShellを使う」だったかもしれないなコレ。
いよいよ僕もangular（with ng-zorro）に入門する【環境構築編】

今日から僕もフロントエンドエンジニアです。

# angularのプロジェクト作成

```bash
$ git clone ほげほげ
$ cd ほげほげ/

または

$ mkdir angular-example
$ cd angular-example/
```

リモートから引っ張ってきたものであったり新規作成したディレクトリで、まっさらな状態を想定して書いてます。

https://angular.io/guide/setup-local
によるとnodeのバージョンは `10.9.0 or later` とのこと。（2019/10/18 現在）

```bash
$ node -v
v10.16.1
```

ヨシ！

```bash
$ npx @angular/cli new app --directory=. --style=styl --skipGit=true --routing=true --commit=false
```

https://angular.io/cli/new
newコマンドのオプション

styleはstylusにしたけど、ナウいっぽい以外の選定理由がない。

初期化時点で `@angular/cli` もパッケージに含まれているため、以降でngコマンドを利用するときは `npx ng ほげほげ` でローカルにインストールされたcliを使う。

# ng-zorroの導入

```bash
$ npx ng add ng-zorro-antd
? Add icon assets [ Detail: https://ng.ant.design/components/icon/en ] No
? Set up custom theme file [ Detail: https://ng.ant.design/docs/customize-theme/en ] No
? Choose your locale code: ja_JP
? Choose template to create project: blank
```

# 動作確認

```bash
$ npx ng serve --open
```

今回はここまで！解散！
【jQuery】ブレイクポイントを設定してPC/SP画像を切り替える

##開始タグ
SP/PCで画像を使い分けたいけれど、それぞれソースを書くのはなんだかな・・・な時に使えるメモ。

##方法
```javascript:
	$(window).on("load", function() {
		//----- PC/SP画像置換----- //

		// 置換の対象とするclass属性。
		var $elem = $(".image_switch");
		// 置換の対象とするsrc属性の文字列。
		var sp = "_sp";
		var pc = "_pc";
		// ウィンドウサイズがreplaceWidth以上、もしくは未満の場合に処理が発生する。
		var replaceWidth = breakpoint;

		$elem.each(function() {
			var $this = $(this);

			function imageSwitch() {
				var windowWidth = parseInt($(window).width());

				if (windowWidth > replaceWidth) {
					$this.attr("src", $this.attr("src").replace(sp, pc));
				} else if (windowWidth <= replaceWidth) {
					$this.attr("src", $this.attr("src").replace(pc, sp));
				}
			}
			imageSwitch();

			// 動的なリサイズは操作後0秒経ってから処理を実行する。
			var resizeTimer;
			$(window).on("load resize", function() {
				clearTimeout(resizeTimer);
				resizeTimer = setTimeout(function() {
					imageSwitch();
				}, 0);
			});
		});
	});
```
`.image_switch`を画像に与えてあげると、ブレイクポイントで判断して画像名の`_pc``_sp`を置き換えてくれることで切り替えすることができます。

##閉じタグ
これ見つけた当時「これー！」って声が出た覚えがあります。笑
CASActionオブジェクトの使い方


[SAS Viya](https://www.sas.com/ja_jp/software/viya.html)はAIプラットフォームです。PythonやJava、Rなどの言語を通して利用できます。そのSAS Viyaの中で使われているのがCASTableというテーブルオブジェクトです（CASはCloud Analytic Servicesの略です）。今回はそんなCASTableを抽象的に操作できるCASActionオブジェクトを紹介します。

## ライブラリを読み込みます

swatがSAS Viyaを扱うためのライブラリになります。そして、サーバに接続します。

```py
import swat
conn = swat.CAS('server-name.mycompany.com', 5570, 'username', 'password')
```

## Fetchを取得

Fetchを使ってテーブル操作用オブジェクトを取得します。これがCASActionを継承して作られています。

```py
fa = conn.Fetch()
type(fa)
# swat.cas.actions.table.Fetch
type(fa).__bases__
# (swat.cas.actions.CASAction,)
```

## データを5件取得

例えばデータを5件取得する場合は次のようにしています。

```py
fa(table=dict(name='data.iris', caslib='casuser'), to=5)
```

**§ Fetch**


| sepal_length | sepal_width | petal_length | petal_width | species |
|--------------|-------------|--------------|-------------|----------|
| 0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |

ソート条件を追加します。sortbyを指定します。

```py
fa(table=dict(name='data.iris', caslib='casuser'), to=5,
              sortby=['sepal_length', 'sepal_width'])
```

**§ Fetch**

| sepal_length | sepal_width | petal_length | petal_width | species |
|--------------|-------------|--------------|-------------|----------|
| 0 | 4.3 | 3.0 | 1.1 | 0.1 | setosa |
| 1 | 4.4 | 2.9 | 1.4 | 0.2 | setosa |
| 2 | 4.4 | 3.0 | 1.3 | 0.2 | setosa |
| 3 | 4.4 | 3.2 | 1.3 | 0.2 | setosa |
| 4 | 4.5 | 2.3 | 1.3 | 0.3 | setosa |

## 条件を指定する

条件は取得時に指定する他、set_paramsを使うこともできます。

```py
fa.set_params('table', dict(name='data.iris', caslib='casuser'),
              'to', 5)
```

そうすると条件が残ります。

```py
fa
?.table.Fetch(table=dict(caslib='casuser', name='data.iris'), to=5)
fa()
```

**§ Fetch**

| sepal_length | sepal_width | petal_length | petal_width | species |
|--------------|-------------|--------------|-------------|----------|
| 0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa |

set_paramsは他にも渡し方が複数あります。

```py
fa.set_params(('table', dict(name='data.iris', caslib='casuser')),
              ('to', 5))
```

と

```py
fa.set_params({'table': dict(name='data.iris', caslib='casuser'),
               'to': 5})
```

と

```py
fa.set_params(table=dict(name='data.iris', caslib='casuser'),
              to=5)
```

は同じです。

## まとめ

CASTableを直接操作することもできますが。CASActionを使ってテーブル自体を引数としてプログラマブルに操作もできます。好みによりますが、使い方を覚えておいて損はないでしょう。

[SAS for Developers | SAS](https://developer.sas.com/home.html)
Railsでメソッドの定義箇所を 探す裏技

# こんなケースがあった

あるインスタンスメソッドに関して、
自分が考えうる定義箇所を全部見てまわり、
grep検索もかけたけど、どうしても定義箇所が見つからない。
ほんと、どこにあるのよ。w

# 普段のメソッド箇所の見つけ方

例えば、
`@user.hoge` と書かれていたら、
`User` モデルに `hoge` メソッドが定義されてるんだろうな。
つまり、`app/models/user.rb` に `hoge` メソッドの内容が書かれているはずだ。
もし書かれていなかった場合は継承元に書かれているかも。
もしくは、ヘルパーがincludeされていれば、そのヘルパーに定義されているはずだ。
（注意点としては、ヘルパーがincludeされている可能性は、継承元にもあるということ。）
それでも見つからない場合は、 

```
$ git grep hoge
```

という感じでgrep検索する。
それでも見つからない場合は・・・さぁどうしよう！

# 裏技みたいなやり方があった

まずはRailsコンソールを立ち上げて、コンソール上から

```
> @user.method(:hoge).source_location
```

日本語訳すると、Userモデルのインスタンスが持ってるインスタンスメソッドのうち、`hoge` というメソッドの情報を取得して、そのメソッドのソースの在り処を取得するよ、って感じです。

# 最後に

やり方はわかったし、これは便利だ。
ただこれは、初中級者にはあまり教えたくない機能でもあります。
というのも、
これを多用しだすと、全体の構造が把握しづらくなります。
ですので、極力自分でどこに何が書いてあるかを把握するようにして、
最終手段としてこの方法を使うことをオススメします。
（同じ理由で、ジャンプ機能と呼ばれているものも同様です。便利ですけどね！）

## 補足
RailsというよりはRubyのメソッドなので、Railsでなくても使えます。
最近のバージョンであれば。
py.exeのインストール先どこ？

# なにこれ 
 備忘録
 python 3.8 がきたしAnacondaやめて 素のインストールでバージョン複数持ってみる
 py.exeを使うらしいよ
 ところでpy.exeってどこあんの？というかpythonを手軽に叩くのにPATH通さなくていいってマ？
 > 結論：マ

>追記：今更思ったけど別にユーザー環境変数追加されたところでどうのこうのって話よね。
とはいえ単に変数追加してるだけかなんて中身見ないとわからないのでやっぱいるわ

# やりたいこと
+ python 3.8 install (64 bit)
+ python 3.7 install (64 bit)
+ py.exeどこあんの（どっかで`C:\Windows\py.exe`だってみた)
+ ついでにpython.exeのデフォルトインストール先もみてみる(Python.exeに関してはPath通すかどうかオプションで聞かれる)
  - py.exe for all users > `C:\Windows` Path追加なし（もともと通ってるとこだす）
  - py.exe for user > `C:\Users\%USERNAME%\AppDate\Local\Programs\Python\Launcher` Path追加なし
  - python.exe for all users > `C:\Program Files\Python` P
  - python.exe for user > `C:\Users\%USERNAME%\AppDate\Local\Programs\Python`

# かくにーん
## python 3.8 64 bit版で適当にインストールを繰り返す
+ All for users と add to path を抜いてインストール

    環境変数変えたくないでござる～ってことでこの2つを抜いてみた。 
    結果：**py.exe用にユーザー環境変数が追加された**

    **? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?**

    > どうやら py.exeのオプションにあるall for usersオプションを付けないと、
    `C:\Users\%USERNAME%\AppData\Local\Programs\Python\Launcher\`に保存される。
    そんでそこまでのpathをユーザー環境変数に突っ込む。
  
+ All for users だけ戻してみる

    今更タウンでここに来て一つ気付いた。all for users オプション2つない？　ある。
    py.exeとpython.exeのoptionで2つ聞かれてた。適当にインストールしちゃうから見逃すんだぞ。
    ということでpy.exeの方のall for usersのみチェックを入れ直す。

    **`C\Windows`に保存された**
    ここは既存のPATHが通ってるから追加する必要ないんだね。頭いい！（僕の頭が悪い）

+ ところでpython.exeくんはどこへ？
 
    - all for usersの場合は`C:\Users\%USERNAME%\AppDate\Local\Programs\Python`
    - for user の場合は`C:\Program Files\Python`
    
    https://bugs.python.org/issue1284316 こんな記事見っけた　なるほど（読めない）


とりあえずPATH通さずに使ってよう。Python参照するソフトで不具合ないか確認してみたい。