OmniAICreator/Qiita-1.07M huggingface dataset:
Javaのswitch文について

Javaのswitch文についてどうも上手くいかなかったので、備忘録として記録。

ケーキと個数をコマンドライン引数で渡してやると、その合計金額が表示されるというプログラムをfor文とswitch文を駆使して作る。

まずは商品の情報を変数に代入。
```Java
//商品名と価格を変数に代入
		String cake1 = "ショートケーキ";
		int cakePrice1 = 320;
		String cake2 = "モンブラン";
		int cakePrice2 = 350;
		String cake3 = "チョコレートケーキ";
		int cakePrice3 = 370;
		String cake4 = "いちごのタルト";
		int cakePrice4 = 400;
		String cake5 = "チーズケーキ";
		int cakePrice5 = 300;
```
次に入力したケーキがいくらなのかをswitch文で取り出し、それをfor文で繰り返し足していく。
```Java
String order = "";
		for(int i = 0; i < args.length; i += 2) {
			order = args[i];
			price = 0;     
			switch(order) {
				case cake1:
					price = cakePrice1 * Integer.parseInt(args[i+1]);
				    price += price;
				    break;
				case cake2:
					price = cakePrice2 * Integer.parseInt(args[i+1]);
				    price += price;
				    break;
				case cake3:
					price = cakePrice3 * Integer.parseInt(args[i+1]);
				    price += price;
				    break;
				case cake4:
					price = cakePrice4 * Integer.parseInt(args[i+1]);
				    price += price;
				    break;
				case cake5:
					price = cakePrice5 * Integer.parseInt(args[i+1]);
				    price += price;
				    break;
			}
		}
```
だが上記を実行しても`case 式は定数式でなければなりません`とエラーが出てしまう。

結果としては変数の宣言が間違っていた。
定数式でないといけないということは、変更不可にしないといけないということ。
つまり下記の通りに変数を宣言し直す。

```Java
        final String CAKE1 = "ショートケーキ";
		int cakePrice1 = 320;
		final String CAKE2 = "モンブラン";
		int cakePrice2 = 350;
		final String CAKE3 = "チョコレートケーキ";
		int cakePrice3 = 370;
		final String CAKE4 = "いちごのタルト";
		int cakePrice4 = 400;
		final String CAKE5 = "チーズケーキ";
		int cakePrice5 = 300;
```
これでエラーは解消された。
Specification of Time Synchronization over FlexRay,  No.675, AUTOSAR R21-11(92) CP

Specification of Time Synchronization over FlexRay,  No.675,2021-11

 https://www.autosar.org/fileadmin/standards/classic/21-11/AUTOSAR_SWS_TimeSyncOverFlexRay.pdf


AUTOSAR R21-11記事一覧はこちら。

AUTOSAR 21-11, 84文書読んだ。2022年6月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/9935c9e58bf82e1e63d2

AUTOSAR 21-11, 62文書読んだ。2022年5月中に半分到達予定。

https://qiita.com/kaizen_nagoya/items/648b32867635993410c8

AUTOSAR R21-11(0) 仕様ダウンロード一覧。単語帳。参考文献資料作成

https://qiita.com/kaizen_nagoya/items/9b3a1b9b8d1e8d7e288e

# 用語(terms)

|Term|Description|
|:--|:--|
|GTM |Global Time Master
|BswM |BSW Mode Manager module
|<Bus>TSyn| Bus specific Time Synchronization module
|CRC| Cyclic Redundancy Checksum
|Debounce| Time Minimum gap between two Tx messages with the same PDU
|Det |Default Error Tracer module
|FCNT| FlexRay Cycle Counter
|FR |FlexRay
|FrIf| FlexRay interface module
|FrTSyn| Time Synchronization over FlexRay module
|FUP message| Follow-Up message
|OFNS message| Offset adjustment message
|OFS message |Offset Synchronization message
|SC Sequence| Counter in Time Synchronization messages
|SGW| "Synchronized to Gateway" state of Time Synchronization
|StbM| Synchronized Time-Base Manager
|SYNC message |Time Synchronization message
|Timesync |Time Synchronization


## 英日
日本語は仮訳

T.B.D.

# 参考(reference)
[1] Requirements on Time Synchronization
AUTOSAR_RS_TimeSync
[2] Glossary, AUTOSAR_TR_Glossary
https://www.autosar.org/fileadmin/standards/foundation/21-11/AUTOSAR_TR_Glossary.pdf
[3] General Specification of Basic Software Modules
AUTOSAR_SWS_BSWGeneral
[4] General Requirements on Basic Software Modules
AUTOSAR_SRS_BSWGeneral
[5] Specification of Synchronized Time-Base Manager
AUTOSAR_SWS_SynchronizedTimeBaseManager
[6] Specification of CRC Routines
AUTOSAR_SWS_CRCLibrary
【Swift】extensionのパターン

# はじめに
私は最近、拡張の便利さに気づいて使いまくってます
パターンがいくつか合ったので適切に使えるように整理しておきます。

# パターン1
個人的に見た目が悪いから好きじゃない
でも、一番使い方が簡単な気がする

関数部分で引数を取らないならパターン2を使うべきかな

型変換可能
```swift
extension Int {
    func square() -> Int {
        return self * self
    }
}

print(5.squared()) // 25
```

# パターン2
パターン1と似てる
後ろの`()`がない分見た目はまし

型変換可能
```swift
extension Int {
    var square: Int {
        return self * self
    }
}

print(5.squared) // 25
```

# パターン3
これは見た目がいい
おそらく型変換は不可
```swift
extension Int {
    init(square: Int) {
        self.init(square * square)
    }
}

print(Int(square: 5)) // 25
```

# おわり
使いこなせたらつよつよになれそう
HTML Living Standard に記載されている仕様が、Nu Html Checker でエラーが出るので調べてみた

## 要約
* Nu Html Checker をオンラインで実行する [validator.w3.org/nu](https://validator.w3.org/nu) は新しい仕様のチェックに対応していない（2022/05/21現在）
* Nu Html Checker 自体は HTML Living Standard 更新に合わせてアップデートされているが、validator.w3.org/nu には反映されていない
* ローカルから 最新の Nu Html Checker を実行することで新しい仕様のチェックができる

## ことの発端
* First View で Layout Shift が発生するので対策を調べていたところ、Source タグにも width / height を設定することができるらしい (https://www.mitsue.co.jp/knowledge/blog/frontend/202105/31_1512.html)
* Source タグ内に width / height を設定したところ validator.w3.org/nu でエラー

気になったので調べてみる

## HTML Living Standard を確認する
ブラウザ独自の機能ではなく、標準化はされていることは分かりました。
Source 要素に width / height attribute が追加されたのは 2021年の2月みたいです。
* [https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-element](https://html.spec.whatwg.org/multipage/embedded-content.html#the-source-element)
* https://github.com/whatwg/html/commit/c2d1a367935ef43ee38d6ed76086277558e4ac7b


## Nu Html Checker のリポジトリを覗いてみる
* https://github.com/validator/validator
* Issue / PR で探す
    * Attribute width not allowed on element source at this point
        * https://github.com/validator/validator/issues/1161
    * feat: add support width and height of source in picture
        * https://github.com/validator/validator/pull/1365

どうやらチェックする機能はありそう

## ドキュメントに従ってローカル環境を構築する
* https://github.com/validator/validator/pkgs/container/validator

``` terminal:terminal
$ docker pull ghcr.io/validator/validator:latest
$ docker run -it --rm -p 8888:8888 ghcr.io/validator/validator:latest
```
ローカル環境にアクセス、バリデーションを実行したところ Source タグの width / height が正常にチェックされることを確認


## まとめ
* validator.w3.org/nu は HTML Living Standard に対応していないことが分かった
* HTML Living Standard のバリデーションを行うには、最新版の Validator (https://github.com/validator/validator) を準備・実行して確認する必要がある

## 小話とか
* W3C による HTML の策定が中止になってから、validator.w3.org/nu の更新が止まったのかな？
    * W3C と WHATWG の覚書[^1]を確認したけど、チェッカーに関する記述は見つけられなかった
* WHATWG の仕様書からチェッカーの項目を辿ると validator.w3.org/nu にたどり着く
    * https://html.spec.whatwg.org/multipage/introduction.html#how-to-catch-mistakes-when-writing-html:-validators-and-conformance-checkers
    * 一応今でも公式な存在っぽい

[^1]: Memorandum of Understanding Between W3C and WHATWG - https://www.w3.org/2019/04/WHATWG-W3C-MOU.html
スプラウトメソッドとスプラウトクラス

レガシーコードに向き合うために [レガシーコード改善ガイド](https://www.shoeisha.co.jp/book/detail/9784798116839) を読んでいます。
スプラウトメソッド、スプラウトクラス という用語を知らなかったので理解のために整理しました。

## レガシーシステム開発時によくある状況
テストが存在しない既存のメソッドに、新たな要件を追加する場合を考えます。
安易に考えると既存のメソッドに直接新たなコードを追加してしまいますが、以下のような問題が発生する可能性があります。

- 既存のコードをより混乱させてしまう。
- 新しく追加したコードと既存のコードの区別がない。
- テストが書けない。

私は日々の業務でこのような状況によく遭遇します。
このような場合には、スプラウトメソッドやスプラウトクラスの利用を検討します。

## スプラウトメソッド（Sprout Method）
既存のメソッドに直接新たな処理を追加するのではなく、**新しくメソッドを用意して処理を追加**します。
**既存のメソッドからは新しいメソッドを呼び出す**ようにします。
こうすることで、少なくとも新しいコードに対してはテストを書くことができます。

:seedling: スプラウト（sprout）は「発芽させる」、「新芽」を意味します。:seedling:
著者はレガシーコード内にテスト済みのコードが追加される様子を「発芽」に例えています。

### 長所
- 既存のコードと新しく追加したコードを明確に区別できる。
- 既存のコードをより混乱させてしまうことがない。
- 新しいコードはテストで保護できる。

### 短所
- 既存のコードを改善するわけでも、テストで保護するわけでもない。

## スプラウトクラス（Sprout Class）
依存関係が絡まりあった状況では、スプラウトメソッドを適用してもテストが書けない場合があります。
その場合は、スプラウトクラスの適用を検討します。
スプラウトクラスとは、**変更に必要な機能を別のクラスとして切り出し、そのクラスを元のクラスから利用する手法です。**

本書ではC++でサンプルが書かれていますが、Javaで簡単に記載してみます。

前提として、QuarterlyReportGenerator という巨大なクラスがあったとします。
このクラスはインスタンス化が難しく、スプラウトメソッドを作ってもテストを書くことが難しい状況とします。

複数行にわたって文字列を結合している `generate()` メソッドに、新たな文字列（ヘッダー）を追加する場合を考えます。

```java
/**
 * 四半期報告書を作成するクラス
 */
public class QuarterlyReportGenerator {

    public String generate() {
        String pageText;
        /**
         * 複数行にわたってpageTextに文字列を結合して返す処理。
         */
        return pageText;
    }
}
```

上記のメソッドに直接処理を追加するのではなく、ヘッダーを作成するクラスを生成し、それを利用するようにします。

```java
/**
 * 四半期報告書のヘッダーを作成するクラス
 */
public class QuarterlyReportTableHeaderGenerator {

    public String generate() {
        String header;
        /**
         * ヘッダーを生成する処理。
         */
        return header;
    }
}
```

本書では、

> インタフェースに相当するクラスを作成し、両方のクラスに継承させることで、コードの共通性を表現できます。

としているため、それにならいインタフェースを用意してみます。

```java
public interface HTMLGenerator {
    public String generate();
}
```

各クラスは次のようになります。

```java
/**
 * 四半期報告書を作成するクラス
 */
public class QuarterlyReportGenerator implements HTMLGenerator {

    @Override
    public String generate() {
        String pageText;
        /**
         * 複数行にわたってpageTextに文字列を結合して返す処理。
         * ここでQuarterlyReportTableHeaderGeneratorを利用する。
         */
        return pageText;
    }
}
```

```java
/**
 * 四半期報告書のヘッダーを作成するクラス
 */
public class QuarterlyReportTableHeaderGenerator implements HTMLGenerator {

    @Override
    public String generate() {
        String header;
        /**
         * ヘッダーを生成する処理。
         */
        return header;
    }
}
```

### 長所
- 複雑な依存関係から抜け出せる。
- コードを直接書き換える方法よりも、確信をもって変更を進められる。

### 短所
- 仕組みが複雑になる。
  - 本来一つのクラスにあるべき処理が分散してしまう。

## 最後に
- 本書では、スプラウトメソッドやスプラウトクラスを追加する際の手順、テストを書く際の具体的なプラクティスなども説明されています。詳しくは本書を参照ください。
- 本書では、これらの説明の後、ラップメソッド、ラップクラスの説明が続きます。スプラウトメソッド、スプラウトクラスが唯一の改善策ではない点に注意ください。
Alma Linux 8にPHP 8.1, PHP-FPM 8.1をインストール（Remi's RPM repository）

# はじめに

Remi's RPM repositoryを利用してAlma Linux8にPHP8.1をインストール
親記事：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考：[Remi's RPM repository](https://rpms.remirepo.net/wizard/)

## サポート

本手法で導入した場合、[PHP: Supported Versions] (https://www.php.net/supported-versions.php) / [PHP: Unsupported Branches](https://www.php.net/eol.php)より、2024-11-25がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## note

- 他のPHPモジュールを入れていた場合、下記コマンドでモジュールのリセットが必要

```shell-session
# dnf module reset php
```

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

# dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
... 略

# dnf install -y which
# dnf module install php:remi-8.1
... 略
Installing module profiles:
 php/common
Enabling module streams:
 httpd                   2.4
 nginx                   1.14
 php                     remi-8.1
... 略
```

### 各種確認

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

# php -v
PHP 8.1.6 (cli) (built: May 11 2022 01:14:18) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies

# php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

# which php-fpm
/usr/sbin/php-fpm

# /usr/sbin/php-fpm -v
PHP 8.1.6 (fpm-fcgi) (built: May 11 2022 01:14:18)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies
```
RockyLinux 8にPHP 8.1, PHP-FPM 8.1をインストール（Remi's RPM repository）

# はじめに

Remi's RPM repositoryを利用してRockyLinux8にPHP8.1をインストール
親記事：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考：[Remi's RPM repository](https://rpms.remirepo.net/wizard/)

## サポート

本手法で導入した場合、[PHP: Supported Versions] (https://www.php.net/supported-versions.php) / [PHP: Unsupported Branches](https://www.php.net/eol.php)より、2024-11-25がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## note

- 他のPHPモジュールを入れていた場合、下記コマンドでモジュールのリセットが必要

```shell-session
# dnf module reset php
```

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)

# dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
... 略

# dnf install -y which
# dnf module install php:remi-8.1
... 略
Installing module profiles:
 php/common
Enabling module streams:
 httpd                   2.4
 nginx                   1.14
 php                     remi-8.1
... 略
```

### 各種確認

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

# php -v
PHP 8.1.6 (cli) (built: May 11 2022 01:14:18) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies

# php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

# which php-fpm
/usr/sbin/php-fpm

# /usr/sbin/php-fpm -v
PHP 8.1.6 (fpm-fcgi) (built: May 11 2022 01:14:18)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies
```
truffle・hardhatのプロキシ環境での使用

## はじめに
企業などのプロキシ環境で、truffle・hardhatを利用すると、インターネットに接続できず、エラーとなりました。
なので、プロキシ環境で、truffle・hardhatを利用する方法をまとめました。
※古いバージョンを使うことになるので、一時的な回避策かと思います。



## 環境
プロキシサーバー：ユーザ認証なし
OS：Linux ubuntu20.04
node：v14.19.1


## 環境変数の設定
下記コマンドで、プロキシ関連の環境変数を設定
```
export http_proxy="http://example-proxy.com:8080"
export https_proxy="http://example-proxy.com:8080"
export -p // 確認用
```

## npmのプロキシ設定
下記コマンドで、npmのプロキシを設定
```
npm -g config set proxy http://example-proxy.com:8080
npm -g config set https-proxy http://example-proxy.com:8080
npm -g config list // 確認用
```

## gitのプロキシ設定
下記コマンドで、gitのプロキシを設定
```
git config --global http.proxy http://example-proxy.com:8080
git config --global https.proxy http://example-proxy.com:8080
git config --global -l // 確認用
```



## truffle

### v5.5.15(2022/5/21時点の最新版)はインターネットに接続できない
```
# truffle compile --list
× Fetching solc version list from solc-bin. Attempt #1
× Fetching solc version list from solc-bin. Attempt #2
× Fetching solc version list from solc-bin. Attempt #3
Error: Failed to complete request to: version URLs. Are you connected to the internet?

Error: Request failed with status code 400
・・・

Truffle v5.5.15(core: 5.5.15)
Node v14.19.1
```

### v5.2.5だとインターネットに接続できる
v5.3.3以下のtruffleだと、プロキシ環境でインターネットに接続できるそう
（ https://github.com/trufflesuite/truffle/issues/4016 ）

v5.3.3以下のtruffleで、比較的インストール数が多い5.2.5をインストール
```
# npm install -g truffle@5.2.5
```

```
# truffle version
Truffle v5.2.5 (core: 5.2.5)
Solidity v0.5.16 (solc-js)
Node v14.19.1
Web3.js v1.2.9
```
インターネットに接続できた
```
# truffle compile --list
√ Fetching solc version list from solc-bin. Attempt #1
[
 "0.8.14",
 "0.8.13",
 "0.8.12",
 "0.8.11",
 "0.8.10",
 "0.8.9",
 "0.8.8",
 "0.8.7",
 "0.8.6",
 "0.8.5"
"... and 87 more. Use `--all` to see full list."
]
```

## hardhat
### v2.9.6(2022/5/21時点の最新版)はインターネットに接続できない
```
# npx hardhat compile
Error HH502: Couldn't download compiler versios list. Please check your connection.
```

### v2.6.0だとインターネットに接続できる
hardhatのバージョンを下げると、プロキシ環境でインターネットに接続できた
比較的インストール数が多いv2.6.0をインストール
```
# npm install --save-dev hardhat@2.6.0
```

```
# npx hardhat --version
2.6.0
```

インターネットに接続できた
```
# npx hardhat compile
Downloading compiler 0.8.4
Coompiling 2 files with 0.8.4
Compilation finished successfully
```



## まとめ
truffle・hardhatを古いバージョンにすることで、プロキシ環境でネットに接続できました。
しかし、古いバージョンを使うことになるので、一時的な回避策かと思います。


## 参考
https://github.com/trufflesuite/truffle/issues/4016
Alma Linux 8にPHP 8.0, PHP-FPM 8.0をインストール（AppStream）

# はじめに

Application Stream(AppStream)を利用してAlma Linux8にPHP8.0をインストール
親記事：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考：[RHEL8のパッケージ構成 - BaseOSとApplication Stream - 赤帽エンジニアブログ]( https://rheb.hatenablog.com/entry/rhel8_baseos_and_appstream)
　　　[第4章 新機能 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.3_release_notes/new-features#enhancement_dynamic-programming-languages-web-and-database-servers)

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal](https://access.redhat.com/node/4079021)より、2023-11がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

# yum module install php:8.0
... 略
Installing module profiles:
 php/common
Enabling module streams:
 httpd                   2.4
 nginx                   1.14
 php                     8.0
... 略
```

### 各種確認

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

# php -v
PHP 8.0.13 (cli) (built: Nov 16 2021 18:07:21) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies

# php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

# which php-fpm
/usr/sbin/php-fpm

# php-fpm -v
PHP 8.0.13 (fpm-fcgi) (built: Nov 16 2021 18:07:21)
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies
```
RockyLinux 8にPHP 8.0, PHP-FPM 8.0をインストール（AppStream）

# はじめに

Application Stream(AppStream)を利用してRockyLinux8にPHP8.0をインストール
親記事：[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考：[RHEL8のパッケージ構成 - BaseOSとApplication Stream - 赤帽エンジニアブログ]( https://rheb.hatenablog.com/entry/rhel8_baseos_and_appstream)
　　　[第4章 新機能 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.3_release_notes/new-features#enhancement_dynamic-programming-languages-web-and-database-servers)

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal](https://access.redhat.com/node/4079021)より、2023-11がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)

# yum module install php:8.0
... 略
Installing module profiles:
 php/common
Enabling module streams:
 httpd                   2.4
 nginx                   1.14
 php                     8.0
... 略
```

### 各種確認

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

# php -v
PHP 8.0.13 (cli) (built: Nov 16 2021 18:07:21) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies

# php -i | grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

# which php-fpm
/usr/sbin/php-fpm

# php-fpm -v
PHP 8.0.13 (fpm-fcgi) (built: Nov 16 2021 18:07:21)
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies
```
CurrentUserを変更せずにFirebaseのユーザーを追加する

本来FirebaseのAuthenticationは各々がアカウント作成を行うのが鉄則です。
しかし、アプリによっては管理者などが代わりにアカウントを作り、
まとめて管理するといった場合を想定しています。
# 本来の登録
以下処理でFirebase Authenticationにアカウントが作成され
**FirebaseAuth.instance.currentUser**が切り替わります。
そのため、プロフィールなどのログイン情報で設定しているものが変更されてしまいます。
```Dart
final userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword(
        email: email!, password: password!,
      );
```
# 対応方法
FirebaseAppの2つ目のインスタンスを作る必要があります。アカウントを作成した後に
インスタンスを削除することで、CurrentUserが自動で反映されるのを防いでいます。
```Dart
FirebaseApp app = await Firebase.initializeApp(name: 'secondary', options: Firebase.app().options);
final userCredential = await FirebaseAuth.instanceFor(app: app)
      .createUserWithEmailAndPassword(email: email!, password: password!);

app.delete();
```
## 注意点
管理者が作成するといっても、**第三者がパスワードなどを作成するので安全ではありません。**
推奨されている方法ではないことを念頭に置いて使用してください。

参考: [creating user is changing the current user
](https://stackoverflow.com/questions/65868904/creating-user-is-changing-the-current-user)
Ruby での読み込み方法の整理

コード読んでいる時に、あれこれどっちだっけとなるのでメモ

# 前提
Ruby 3.0

# 内容
|メソッド  |パス解決  |拡張子|再読み込み
|---|---|---|---|
|load|- 絶対パスの場合は、そのパス <br> - 相対パスの場合は、LOADPATH※ を順番に探す|明記 |制限なし|
|require  |〃 |省略可  |初回のみ|
|autoload  |〃（遅延ロード）  |〃  |〃|
|require_relative|「そのファイルが置かれているディレクトリ位置」からの相対パス|〃|〃|

※ LOADPATH
`Kernel.#load` や `Kernel.#require` がファイルをロードする時に検索するディレクトリのリスト
具体的には、`$LOAD_PATH` というグローバル変数（別名は `$:`、`$-I`）

# 参考
- [Kernelモジュール](https://docs.ruby-lang.org/ja/3.0/class/Kernel.html)
- [requireとrequire_relativeとloadの違いをまとめておく](https://zenn.dev/yukito0616/articles/e2f4b2ef94535d)
- [require, require_relative, load, autoloadの違い
](https://allabout.co.jp/gm/gc/453214/)
目の前のタスク整理に役立ちそうな色々な図

※（注意）おおむねポエムです。何かピンときた図があればコメントお願いいたします！！

## 時間管理のマトリックス

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">時間管理のマトリックスを<br>ご存知でしょうか？<br><br>限られた時間を<br>自分の人生を豊かにする為に<br>どれぐらいコミットできているか？<br><br>いつの間にか<br>誰かに<br>何かに<br>時間を奪われてはいませんか？<a href="https://twitter.com/hashtag/%E6%99%82%E9%96%93%E7%AE%A1%E7%90%86%E3%81%AE%E3%83%9E%E3%83%88%E3%83%AA%E3%83%83%E3%82%AF%E3%82%B9?src=hash&amp;ref_src=twsrc%5Etfw">#時間管理のマトリックス</a><a href="https://twitter.com/hashtag/%E8%87%AA%E7%94%B1%E3%81%AA%E6%99%82%E9%96%93%E3%82%82%E8%B3%87%E7%94%A3?src=hash&amp;ref_src=twsrc%5Etfw">#自由な時間も資産</a> <a href="https://t.co/4OGqZWIe6G">pic.twitter.com/4OGqZWIe6G</a></p>&mdash; My Bit Age (@MyBitAge) <a href="https://twitter.com/MyBitAge/status/1415275591587143684?ref_src=twsrc%5Etfw">July 14, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### 難易度と期待できる効果のマトリクス

> [重要度と緊急度のマトリクスとは？ タスクの優先順位の付け方や進め方のコツを解説](https://teamhackers.io/what-is-the-importance-and-urgency-matrix/)
> また、重要度と緊急度のマトリクスの同じ領域に分類されたタスクに優先順位を付ける場合、難易度と期待できる効果でマトリクスを作ると判断がしやすくなります。
> A：難易度が低く、効果が見込めるタスク
B：難易度が高く、効果が見込めるタスク
C：難易度が低く、効果が少ないタスク
D：難易度が高く、効果が少ないタスク
上記の場合、A→B→C→Dの順に優先順位を付けます。
> やらないことを決める
振られたタスクを手当たり次第片付けるのではなく、「やらない」という判断も必要です。業務の見直しや、自分以外の誰かに頼ることも選択肢に入れておきましょう。


### 「エメットの法則」

> 先延ばしした仕事は２倍の労力が必要「エメットの法則」
> - 仕事を先延ばしにする事は片づける事より2倍の時間とエネルギーを要する。
> - 先延ばしするとますますやる気がなくなり結果的に完成度が低くなる。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">📕先延ばしした仕事は２倍の労力が必要「エメットの法則」<br><br>✅仕事を先延ばしにする事は片づける事より<br>倍の時間とエネルギーを要する。<br><br>✅先延ばしするとますますやる気がなくなり<br>結果的に完成度が低くなる。<br><br>✅最初から完璧を目指さずにすぐにやろう！<a href="https://twitter.com/hashtag/%E8%AA%AD%E6%9B%B8?src=hash&amp;ref_src=twsrc%5Etfw">#読書</a><a href="https://twitter.com/hashtag/%E8%AA%AD%E6%9B%B8%E5%A5%BD%E3%81%8D%E3%81%AA%E4%BA%BA%E3%81%A8%E7%B9%8B%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#読書好きな人と繋がりたい</a> <a href="https://t.co/xSWq0Ss9z9">pic.twitter.com/xSWq0Ss9z9</a></p>&mdash; 3分でわかるアニメ📘ゆーぽん (@jiyucho33) <a href="https://twitter.com/jiyucho33/status/1264812187140231168?ref_src=twsrc%5Etfw">May 25, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### 考える人、決める人、回す人、盛り上げる人

風土改善の本質は、少しの余裕を創出して以下のフレームワークを回すことかも

> [PDCAサイクルは古いのか？専門家に聞く中小企業のフレームワーク活用術](https://smbiz.asahi.com/article/14379076#inner_link_001_2)
> 「“考える人”“決める人”“回す人”“盛り上げる人”の４種の人材が揃うと、フレームワークが上手く回りやすいのです。まずはこの4つの役割を意識してチームの体制を整えましょう。

### エンジニアリングマネジャーの色々な見解が参考になる

[Engineering Manager Advent Calendar 2021](https://qiita.com/advent-calendar/2021/em)

# 参考

[技術コミュニティ形成を試みようとした際に参考になりそうな色々な図](https://qiita.com/seigot/items/6a6f36bf240ba1d66ba5)
[振り返りとは？| ビジネスにおける振り返り手法11選](https://kaizen-penguin.com/how-to-reflection-frameworks-3920/)
python3.6系で`get-pip.py`するとエラーが起きた際の解決策の備忘録

python3.6系で`get-pip.py`するとエラーが起きた際の解決策の備忘録

```sh
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
```

```sh
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo apt install python3.7
python3.7 get-pip.py
```

# 参考

https://qiita.com/hsawaji/items/5ec5533e95a42bbfa4b5

https://stackoverflow.com/questions/54633657/how-to-install-pip-for-python-3-7-on-ubuntu-18

https://bootstrap.pypa.io
Alma Linux 8にPerl 5.32をインストール（AppStream）

# はじめに

Application Stream(AppStream)を利用してAlma Linux 8にPerl 5.32をインストール
参考：[RHEL8のパッケージ構成 - BaseOSとApplication Stream - 赤帽エンジニアブログ]( https://rheb.hatenablog.com/entry/rhel8_baseos_and_appstream)
　　　[第4章 新機能 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.3_release_notes/new-features#enhancement_dynamic-programming-languages-web-and-database-servers)

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal](https://access.redhat.com/node/4079021)より、2025-04がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

RockyやRHELだとperl-YAMLもEnabling module streamsに含まれる
https://qiita.com/witchcraze/items/07521878148fbbeee1b4

```shell-session
# cat /etc/redhat-release
AlmaLinux release 8.6 (Sky Tiger)

# yum module install perl:5.32
... 略
Enabling module streams:
 perl                     5.32
 perl-App-cpanminus
                          1.7044
 perl-IO-Socket-SSL
                          2.066
 perl-libwww-perl         6.34
... 略
```

### 各種確認

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

# perl -V:version
version='5.32.1';
```
RockyLinux 8にPerl 5.30をインストール（AppStream）

# はじめに

Application Stream(AppStream)を利用してRockyLinux 8にPerl 5.30をインストール
参考：[RHEL8のパッケージ構成 - BaseOSとApplication Stream - 赤帽エンジニアブログ]( https://rheb.hatenablog.com/entry/rhel8_baseos_and_appstream)
　　　[第4章 新機能 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.3_release_notes/new-features#enhancement_dynamic-programming-languages-web-and-database-servers)

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal](https://access.redhat.com/node/4079021)より、2023-11がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)

# yum module install perl:5.30
... 略
```

### 各種確認

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

# perl -V:version
version='5.30.1';
```
CTFスコアサーバー構築

# 背景

プログラム研究部でのイベントで CTF (Capture The Flag) をすることになったので環境構築をすることになった。

# 目的

CTF スコアサーバーの環境構築

# 内容

## 情報収集

下記リンクで使われたのが良さそうなので使ってみる

https://qiita.com/task4233/items/09f112076eb5855eeed3

https://docs.ctfd.io/

## 構築

```shell
git clone https://github.com/CTFd/CTFd.git && cd ./CTFd

docker-compose up -d
```

## 日本語化する

日本語テーマなさそうなので
CTFd/CTFd/themes/\*.html
英文を見つけて日本語にする単純作業

## ってことで日本語テーマ作る

https://github.com/yumekiti/CTFd_JP_Theme

## 問題作成する

作成したら下記リンクのバックアップでエクスポートしてダウンロードする

http://localhost:8000/admin/config

# まとめ

CTFのスコアサーバーの環境構築と日本語化ができたので、あとは本番環境で構築し運営するだけ

# 参考

- https://qiita.com/task4233/items/09f112076eb5855eeed3
- https://docs.ctfd.io/
C++による世界システムの改革・更新について

# 初めに
C++はシステムプログラミング言語です。C言語と同等に。
故に世界の変革を加速する道具ともなるのです。

# アーダー
原初の世界は「アルゴル」で出来ているらしいです。A言語です。
A言語自体には周回性が無いのですが、実行環境がバグっていてバグを踏んだ瞬間リスタートするモノが多いらしく、期せずして無限ループのコードが多重起動しています。
これをC++へリプレースすることが一つ社会問題を解決する方式の様です。

# 発行
発行には「隣人」を使います。知っていますか？隣にいる小さな隣人たちを。
そうすることで大自然に仕組みをパブリッシュすることができるらしいです。

# 何が欲しいか
世の中には色々な能力がありますが、大体過去の人間が書いたギフトです。
狂っているA言語を落として一本化すると大体欲しいモノは揃うくらいのキャパシティがあるらしいです。
それでもあなたが望むのであればフローを書くといいと思います。流れです。
そして、クラス構造によってデストラクタが保証されていることが一番欲しい要因ですね。
Aには言語上の終端子は無いように思います。

# 終わりに
昔の人間は始まりの人なので終わりがどうなるかは知りませんでした。
なので、Aで書かれた不完全なシステムには破棄などの終わりの記述がありません。
その結果、狂ったような数のリソースリークやスタブがそこら中にあふれているのです。
その不条理に終止符を打つため、システムプログラミング言語である「C++」はいかがですか？
RockyLinux 8にPerl 5.32をインストール（AppStream）

# はじめに

Application Stream(AppStream)を利用してRockyLinux 8にPerl 5.32をインストール
参考：[RHEL8のパッケージ構成 - BaseOSとApplication Stream - 赤帽エンジニアブログ]( https://rheb.hatenablog.com/entry/rhel8_baseos_and_appstream)
　　　[第4章 新機能 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.3_release_notes/new-features#enhancement_dynamic-programming-languages-web-and-database-servers)

## サポート

本手法で導入した場合、[Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portal](https://access.redhat.com/node/4079021)より、2025-04がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

Almaだとperl-YAMLがEnabling module streamsに含まれないがRHELだと含まれる
https://qiita.com/witchcraze/items/e1743dc7fd9d2307bb28

```shell-session
# cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)

# yum module install perl:5.32
... 略
Enabling module streams:
 perl                      5.32
 perl-App-cpanminus        1.7044
 perl-IO-Socket-SSL        2.066
 perl-YAML                 1.24
 perl-libwww-perl          6.34
... 略
```

### 各種確認

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

# perl -V:version
version='5.32.1';
```
Ubuntu 22.04にOpenJDK 17をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu 22.04にOpenJDK17をインストール
親記事：[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/)より、2029-10がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## LOG

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
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"
UBUNTU_CODENAME=jammy

# apt-get update; apt install -y wget gnupg software-properties-common
# wget -O- https://apt.corretto.aws/corretto.key | apt-key add - 
# add-apt-repository 'deb https://apt.corretto.aws stable main'
# apt-get update; apt-get install -y java-17-amazon-corretto-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "17.0.3" 2022-04-19 LTS
OpenJDK Runtime Environment Corretto-17.0.3.6.1 (build 17.0.3+6-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.3.6.1 (build 17.0.3+6-LTS, mixed mode, sharing)
```
Ubuntu 22.04にOpenJDK 11をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu22.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

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
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"
UBUNTU_CODENAME=jammy

# apt update;apt install -y wget gnupg software-properties-common
# wget -O- https://apt.corretto.aws/corretto.key | apt-key add -
# add-apt-repository 'deb https://apt.corretto.aws stable main'
# apt update; apt install -y java-11-amazon-corretto-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment Corretto-11.0.15.9.1 (build 11.0.15+9-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.15.9.1 (build 11.0.15+9-LTS, mixed mode)
```
QuickSight 分析者権限の料金体系

# はじめに

株式会社オズビジョンにてエンジニア8年目のテラシマユウコ (@terra_yucco) です。
通常開発の他、オフショア開発のブリッジエンジニアや運用保守作業、企画のためのデータ出しなども担当させてもらっています。
（ここまでテンプレ）

社内の分析基盤を着々とLookerからQuickSightに置き換えていっていますが、その中で「閲覧権限もらってるけど分析権限がほしい」「プロジェクトが変わるので分析権限はもういらない」という声があり、その都度アカウントの最適化を行っていました。
ですが、月中で作業をした場合の料金体系がわかっておらず、サポートへ問い合わせたのでその結果をメモしておきます。

# 料金体系
## アカウント作成（分析権限所持者の追加）

- 追加した日時を元に、使用量を按分して請求
- 開始時に１時間単位での課金となり、月額料金をその月の総時間数（5月であれば24時間*31日＝744時間）で割った金額

## アカウント削除

- 課金終了のタイミングは月末締め
- 月末まで日割りなしで1か月分の料金が発生

# 所感

アカウント削除は月末まで引っ張っても大丈夫そうですが、消し忘れると追加で1ヶ月分かかるわけなので、追加も削除も発生したタイミングで速やかに対応するのが良さそうです。
Ubuntu 22.04にOpenJDK 8をインストール（Amazon Corretto）

# はじめに

Amazon Correttoを利用してUbuntu22.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

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
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"
UBUNTU_CODENAME=jammy

# apt update;apt install -y wget gnupg software-properties-common
# wget -O- https://apt.corretto.aws/corretto.key | apt-key add -
# add-apt-repository 'deb https://apt.corretto.aws stable main'
# apt update; apt install -y java-1.8.0-amazon-corretto-jdk

... 略
```

### 各種確認

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

# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment Corretto-8.332.08.1 (build 1.8.0_332-b08)
OpenJDK 64-Bit Server VM Corretto-8.332.08.1 (build 25.332-b08, mixed mode)
```
Pythonで地名/住所から緯度/経度を取得し地図にプロットする方法

# はじめに
Pythonプログラムで即業務に役立つサンプルプログラムとして、地名/住所から緯度/経度を取得し地図にプロットするプログラムを作成しましたので、共有します。

# 動作環境
Visual Studio Code
Python3.9.1
# 各種インストールライブラリー
geocoder 1.38.1
geopy 2.2.0
googlemaps 4.6.0
# 処理概要:
地名や住所一覧から、緯度、経度の情報を取得して、地図にプロットするプログラムです。
![処理概要.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1361368/5b3c145e-78f9-5a8f-6c8e-1ace91b5a758.jpeg)

# YouTubeでの解説：
プログラムの詳細やGoogleCloudPlatformでのAPIの取得方法などはYoutubeで詳しく解説していますので、ぜひ、ご覧ください。
<iframe width="560" height="400" src="https://www.youtube.com/embed/VPzNVUkUg4o" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

# サンプルソース
YouTubeで紹介している処理のプログラムソースです。
# geocoder利用例：
```Python:Step1_1.py
import geocoder
location = '東京タワー'
ret = geocoder.osm(location, timeout=5.0)
print(ret.latlng)
print(ret.address)
```

# geopy利用例：
```Python:Step1_2.py
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="user-id")
location = geolocator.geocode("東京タワー")
print(location.latitude, location.longitude)
print(location.address)
```

# 国土地理院のAPIを利用した例：
```Python:Step1_4.py
import requests
import urllib

makeUrl = "https://msearch.gsi.go.jp/address-search/AddressSearch?q="
s_quote = urllib.parse.quote('千葉県南房総市富浦町青木123-1')
response = requests.get(makeUrl + s_quote)
print(response.json()[0]["geometry"]["coordinates"])
```

# Google Maps Platform APIを利用した例：
別途、Google Cloud Platformに登録してAPIキーの取得が必要です。
詳細手順はYouTube動画をご覧ください。：https://youtu.be/VPzNVUkUg4o
```Python:Step1_5.py
import googlemaps
gm = googlemaps.Client(key='APIキー')
res = gm.geocode('東京タワー')
print(res[0]['geometry']['location'])
print(res)
```
# 道の駅一覧に住所から一括で緯度/経度を変換する：
```Python:Step1_5.py
import googlemaps
import pandas as pd

df = pd.read_excel('道の駅一覧.xlsx') 

gm = googlemaps.Client(key='APIキー')

for i, r in df.iterrows():
    res = gm.geocode(r['住所'])
    df.loc[i,'緯度'] = res[0]['geometry']['location']['lat']
    df.loc[i,'経度'] = res[0]['geometry']['location']['lng']
    print(i)
    print(res[0]['geometry']['location'])

df.to_excel('道の駅一覧.xlsx', index=None)
```
# 道の駅一覧から緯度/経度を元に一括で地図にプロットする:

```Python:Step2.py
import folium
import pandas as pd

df = pd.read_excel('道の駅一覧3.xlsx') 

map = folium.Map(location=[df.loc[0,'緯度'],df.loc[0,'経度']], zoom_start=10)

for i, r in df.iterrows():
    if r['済']=='済':
        folium.Marker(location=[r['緯度'], r['経度']], 
        icon=folium.Icon(icon="bell", icon_color='#ffff00', color="lightgray"),
        popup=r['地名']).add_to(map)
        
    else:
        folium.Marker(location=[r['緯度'], r['経度']], popup=r['地名']).add_to(map)

map.save("map.html")
```

# 最後に：
今後も、業務に役立ちそうなプログラムを作成して掲載していきたいと思います。
Ubuntu 22.04にOpenJDK 17をインストール（Azul Zulu Builds of OpenJDK）

# はじめに

Azul Zulu Builds of OpenJDKを利用してUbuntu22.04にOpenJDK17をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Install Azul Zulu on Debian-based Linux](https://docs.azul.com/core/zulu-openjdk/install/debian)

## サポート

無償版のサポート期間は不明だが、有償版がサポートしている期間はパッチを提供してくれるかもしれない。

## LOG

### レポジトリ登録

```shell-session
# apt update; apt install -y gnupg curl
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
# curl -O https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb
# apt install ./zulu-repo_1.0.0-3_all.deb
```

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
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"
UBUNTU_CODENAME=jammy

# apt update; apt install -y zulu17-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "17.0.3" 2022-04-19 LTS
OpenJDK Runtime Environment Zulu17.34+19-CA (build 17.0.3+7-LTS)
OpenJDK 64-Bit Server VM Zulu17.34+19-CA (build 17.0.3+7-LTS, mixed mode, sharing)
```
Ubuntu 22.04にOpenJDK 11をインストール（Azul Zulu Builds of OpenJDK）

# はじめに

Azul Zulu Builds of OpenJDKを利用してUbuntu22.04にOpenJDK11をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Install Azul Zulu on Debian-based Linux](https://docs.azul.com/core/zulu-openjdk/install/debian)

## サポート

無償版のサポート期間は不明だが、有償版がサポートしている期間はパッチを提供してくれるかもしれない。

## LOG

### レポジトリ登録

```shell-session
# apt update; apt install -y gnupg curl
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
# curl -O https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb
# apt install ./zulu-repo_1.0.0-3_all.deb
```

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
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"
UBUNTU_CODENAME=jammy

# apt update; apt install -y zulu11-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment Zulu11.56+19-CA (build 11.0.15+10-LTS)
OpenJDK 64-Bit Server VM Zulu11.56+19-CA (build 11.0.15+10-LTS, mixed mode)
```
Ubuntu 22.04にOpenJDK 8をインストール（Azul Zulu Builds of OpenJDK）

# はじめに

Azul Zulu Builds of OpenJDKを利用してUbuntu22.04にOpenJDK8をインストール
親記事：[OpenJDKの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/b179202216aab50b7090)
参考：[Install Azul Zulu on Debian-based Linux](https://docs.azul.com/core/zulu-openjdk/install/debian)

## サポート

無償版のサポート期間は不明だが、有償版がサポートしている期間はパッチを提供してくれるかもしれない。

## LOG

### レポジトリ登録

```shell-session
# apt update; apt install -y gnupg curl
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
# curl -O https://cdn.azul.com/zulu/bin/zulu-repo_1.0.0-3_all.deb
# apt install ./zulu-repo_1.0.0-3_all.deb
```

### インストール

```shell-session
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
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"
UBUNTU_CODENAME=jammy

# apt update; apt install -y zulu8-jdk
... 略
```

### 各種確認

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

# java -version
openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Zulu 8.62.0.19-CA-linux64) (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (Zulu 8.62.0.19-CA-linux64) (build 25.332-b09, mixed mode)
```
仕事をするということ


# 仕事をするということ　
## SESは辛いけど
SESは辛いっていうのもそうですがじゃあの人たちがいなくなったとして
インディアンのコミュ力も結構色々課題があると思います。

コミュっていうとディスカッションしながらと思ってしまいがちですが
なかなか最初からそれは難しいと思います。前、外資Sierの下で議論しながら
っていうやり方して見事にグダグダになった経験があります。
## アジャイル
欧米のエンジニアってハードもソフトもできる人らしいし、ビル・ゲイツなんか
設計する人間はプログラマーよりいいコード書かなきゃいけないって言ってたらしいし・・・

アジャイルっていうのも欧米のエンジニアの知的な仕事というものにかける執念とか
マナーとかコミュニケーションの取り方とか違うしなし崩しか無視、俺が偉い的な感じなので・・・
上のタガが外れたらひどいことになりがちです。

## ソリューション
ソリューションとしては
１. 下手なディスカッションはしない。
2.  必要・十分な哲学は一致する。　あんまりお互いに居なくなれぐらいの勢いで
他人を非難しない。とかそういうところからですね。リーダー役の人のいうことは聴くものとかですね。進捗の概念ぐらいはあって欲しいです。
3. わたしもそうでしたがお客さんばかり見てても何にもならない。同僚は大事するべき。
４.学ぶべき
5. 全然交流しないで、いきなりダメ出しはよくないと思います。どんなプログラムやってるんですかなど、1%くらいはコミニケーションとったほうがいいような気がします。

が考えられます。ここが上手くいかないと辛いです。
みなさんの意見も聞きたいです。
ControlP5の文字サイズを変更する

ControlP5使ってて文字サイズを変更できなくて調べても違ったのでメモ書き

# ボタンの文字サイズを変更したい
ボタンの文字が妙に小さくて困った
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554244/a32c776e-1b41-a1ea-f109-6c6e0c68ddf9.png)

```main.java
void setup() {
  ControlP5 cp = new ControlP5(this);
  cp.addButton("Reset")
    .setSize(width/5*2, height/20)
    .setPosition(width/10*3, height-height/20);
}
```

# 調べて出たもの（違ったver）
- [processingでControlP5を使っているのですがButtonを作る際にラベルの文字が小さくて読みづらいのですが大きくする方法はありますでしょうか](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10161945335)
- [control p5 - changing mouseover-color, font size, font..](https://forum.processing.org/one/topic/control-p5-changing-mouseover-color-font-size-font.html)

`.captionLabel()`はないってエラーメッセージが出たので没

# ヒントになったサイト
[How to have a different font size inside the text field than the font size of its description with ControlP5?](https://discourse.processing.org/t/how-to-have-a-different-font-size-inside-the-text-field-than-the-font-size-of-its-description-with-controlp5/28452/4)
こう書いてあった
```setFont.java
cp5.getController("input").getCaptionLabel().setFont(new ControlFont(controlFont));
```

`getCaptionLabel()`じゃね？

# 結論

```フォントサイズ変更.java
void setup() {
  float fontSize = 48;
  ControlFont font = new ControlFont(createFont("MS Gothic",fontSize));
  ControlP5 cp = new ControlP5(this);
  Button b = cp.addButton("Reset");
  b.setSize(width/5*2, height/20);
  b.setPosition(width/10*3, height-height/20);
  b.getCaptionLabel().setFont(font);
}
```
無事変更されました ~~ださい~~
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554244/72a8ed82-5a80-5bad-325f-c455e43338b8.png)
【超初心者向け】javaでcsvファイルの任意の列を出力


# はじめに
この記事は、ともに研修課題を解いている僕の同期を想定して書かれています。
超初心者向けです。

# csvファイルの中身
メールアドレスが一列目、名前が二列目。
ここでは、名前を出力することを目指します。
１つのディレクトリにjavaファイルとcsvファイル(テキストファイル）を置いてください。
~~~
ieoronw@sample.co.jp,山田
uehi3ui.wjhi221@sample.co.jp,佐藤
1995hhfhhrh@sample.co.jp,田中
~~~

# コード
クラスの外側を以下のように準備します。
クラス名はここでは Search とします。
~~~
import java.io.*;
class Search{
    public static void main(String[] args)throws IOException{
    
    //コード
    
    }
}
~~~
クラスの内側を以下のように準備します。
コマンドライン引数には*****.txtのようにファイル名のみ入力します。
~~~java:
File file = new File(args[0]);
~~~

次に、br1でcsvファイルを受け取ります。
~~~java:
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
br1 = new BufferedReader(new FileReader(file));
~~~

次に、文字列型で読み込み行と配列を準備します。
~~~java
String line;
String[] data;
~~~

csvファイルを一行ずつ処理するためのwhile文を用意します。
str_1が、csvファイルの２列目となっていますので、これを出力します。
~~~java
while ((line = br1.readLine()) != null) {
    data = line.split(",");
    //配列の１番目は0、２番目は1,,,,
    String str_0 = data[0];
    String str_1 = data[1];
    
    System.out.println(str_1);
    }
~~~

# 実行結果

~~~
山田
佐藤
田中
~~~


# Tips
qiitaのコードは右上のマークでコピーできます。インデントも揃えておいたのでそのままエディタに貼り付けてください。
ファイルが3列以上ある場合、String str_2 = data[2];などを追加してください。

# おことわり
今回は超初心者向けなので、最低限のことしか書いていません。
なので、try文は用いていません。
でも本当は、BufferedReaderを使うならtry文を使ってください。

参考
[BufferedReader、FileReaderはtryとcatchがないと駄目ですか](https://teratail.com/questions/79187)
【Unity】Geospatial API触ってみよう

## Geospatial API とは
GPSによる位置情報に加えて、カメラ映像をStreet Viewの画像データをもとに解析することで、より精度の高い位置情報の取得ができるようです。
https://developers.google.com/ar/develop/java/geospatial/developer-guide
![Android 向け地理空間デベロッパー ガイド（Kotlin_Java）  _  ARCore  _  Google Developers - Google Chrome 2022_05_21 14_44_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650145/e4a41499-78f4-9643-ae58-3894613df842.png)

## AR Core ExtensionのSampleProjectを動かす
[こちら]("https://zenn.dev/tkada/articles/04b44474149130")を参考にして動きました。
私の場合は、コードがそのままだと、アプリ起動後落ちてしまいましたが、
アプリを閉じる処理をコメントアウトすることで解決しました。
Sample Projectでは、アンカーオブジェクトを設置することができます。
アンカーオブジェクトを設置した場所から移動しても、アンカーオブジェクトは、ほぼ元の位置に復元されるようです。

Scriptは3つありました。それぞれ何をしているのでしょうか。(誰か教えてほしい)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650145/13f1182a-a2f4-347c-e0c1-6c7d3abd7e46.png)

## balloon pop projectを動かす
ballon-popというSample Projectを動かします。
#### 参考記事
https://developers.googleblog.com/2022/05/Make-the-world-your-canvas-ARCore-Geospatial-API.htmlballoon 
https://qiita.com/noritsune/items/285105f06266e3678f6c
[GitHub]("https://github.com/googlecreativelab/balloon-pop")
##### 行ったこと
- Read meに沿って設定していきます。Read ME以外の手順をメモ
- AndroidにSwitch Platformします
- APIキーをセットします
- API keyをいれてもGeospatialの欄がでない
・ AR core extensionが1.30.0だったので、1.31.0にあげてみる
・ Unityを再起動
再起動したら表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650145/0a0d2739-a775-6ace-4caf-d73bd0b22d9b.png)

- 1通り設定しましたが、エラーがでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650145/ca66900f-637a-a076-1108-b6325d563e52.png)
- [こちら]("https://www.python.jp/install/windows/install.html")を参考にPythonをInstallします。
- [こちら]("https://answers.unity.com/questions/1897212/could-not-find-a-working-python-interpreter-fireba.html")を参考に、Pathを設定したら消えました。

- .Net3用のFirebaseSDKを最初importしたせいか、複数エラー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650145/eb9ad927-0fae-3dd0-71c3-8547a8a1dc75.png)
Google.VersionHandlerが2つあったので、1つ削除しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/650145/631f7ff7-434d-700e-24c3-56d12a6215ef.png)

- gradleが6.1.1以上必要というエラーがでました。Unityを2021.2.17に上げたらbuild成功しました👼(強引)
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">balloon-upのsample project動かせた☺今日はこれだけで夜になった🌉笑<a href="https://twitter.com/hashtag/GeospatialAPI?src=hash&amp;ref_src=twsrc%5Etfw">#GeospatialAPI</a> <a href="https://t.co/on57jRgkMT">pic.twitter.com/on57jRgkMT</a></p>&mdash; ブブ (@sbubu12) <a href="https://twitter.com/sbubu12/status/1527967761519235072?ref_src=twsrc%5Etfw">May 21, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## Poket Garden Projectを動かす
https://github.com/buck-co/PocketGarden

今度^^
M1 Mac(aarch64)でIntel Mac時代から使い回しているHomeBrewでQEMUを入れてlimaするとハマる

# 要約
* [`uname -m` が `x86_64` になってる場合、HomeBrewごと入れ直さないとlimaもRancher DesktopもM1だとうまく動かない](https://github.com/lima-vm/lima/issues/543#issuecomment-1052076572)って…コト？？

# 解決

Intel Mac時代に `/usr/local/Celler` にx86_64なHomeBrewを入れてあったので、普通に `aarch64` なHomeBrewを導入するだけでうまくいった。( `/opt/homebrew/bin` に導入された)
であとは、
* qemu
* lima

のふたつをarm64版で入れ直す。(x86_64版はuninstallする)

## 落とし穴

自分の場合はIterm2を端末エミュレーターとして利用しているが、これ自体がRosetta2で動作していると `uname -m` の結果が `x86_64` になってしまう。( `arch` コマンドもエラーになり `arm64` 指定でのコマンド実行ができない。)
じゃどうするか。標準のterminal.appを使う。
→ あとは普通にHomeBrew標準の方式で入れるだけ。
Error: listen EADDRINUSE: address already in use :::3000 の対処




## 以下のエラーの対処方法について。

```shell
Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1334:16)
    at listenInCluster (node:net:1382:12)
    at Server.listen (node:net:1469:7)

```

localhost:3000 のaddress が使用済みということなので該当プロセスを終了すれば良い。

### 該当プロセスの調査
```
# nodeで稼働中のプロセスを調査
ps aux | grep node

# port3000を利用してるプロセスの調査
sudo lsof -i:3000
```

後者の`lsof -i :3000`の方が確実。
sudoを付けないとほかのユーザーやrootのプロセスが見れない。


### 該当のプロセスIDを指定してkill

```shell
kill -9 [該当のPID]
```

-9 は強制終了命令(killシグナル)を送るオプション。
デフォルトのkillコマンドでは、終了命令(HUPシグナル)を送るもので、プロセスが終了しない可能性に注意。
Gimpで選択した範囲から新しいファイルを作る方法

Gimpでセンタクツールで選択した範囲から新しいファイルを作る方法

1. 範囲を選択する
2. Ctrl+c でコピー
3. Shift+Ctrl+v (File-Create-From Clipboard) でクリップボードから作成
あとは好きに名前を付けて保存

チャンネルがどうのとかいうゴチャゴチャした回答しかGoogleの1ページ目に落ちていなかったので。
(随時更新)AI系のニュースのRSSリスト


日進月歩のAIの技術を追うために、slackのrss feed購読しておくといいのではリストのメモです。


```
ID: 3409925339191 - タイトル: Google AI Blog
URL: http://feeds.feedburner.com/blogspot/gJZg
ID: 3406711000947 - タイトル: ML-News - japanese
URL: https://www.machine-learning.news/rss?listName=japanese
ID: 3401678897442 - タイトル: MIT News - Machine learning
URL: https://news.mit.edu/topic/mitmachine-learning-rss.xml
ID: 3414292222945 - タイトル: AI News
URL: https://artificialintelligence-news.com/feed
ID: 3401659549987 - タイトル: 本文「データ分析」を検索 - はてなブックマーク
URL: https://b.hatena.ne.jp/search/text?q=%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90&mode=rss&sort=recent&users=10
ID: 3401659016947 - タイトル: 本文「機械学習」を検索 - はてなブックマーク
URL: https://b.hatena.ne.jp/search/text?q=%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92&mode=rss&sort=recent&users=10
ID: 3401640099538 - タイトル: データ分析タグが付けられた新着記事 - Qiita
URL: https://qiita.com/tags/データ分析/feed
ID: 3401638450978 - タイトル: Zennの「データ分析」のフィード
URL: https://zenn.dev/topics/データ分析/feed
ID: 3394987056134 - タイトル: Zennの「AI」のフィード
URL: https://zenn.dev/topics/ai/feed
ID: 3387032728759 - タイトル: Zennの「機械学習」のフィード
URL: https://zenn.dev/topics/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92/feed
ID: 3401631044242 - タイトル: 機械学習タグが付けられた新着記事 - Qiita
URL: https://qiita.com/tags/機械学習/feed
ID: 3401633367859 - タイトル: AIタグが付けられた新着記事 - Qiita
URL: https://qiita.com/tags/ai/feed
```