OmniAICreator/Qiita-1.07M huggingface dataset:
Assertion failed: (thread_id_key != 0x7777), function find_thread_id_key, file ../src/coroutine.cc, line 134. make: *** [dev] Abort trap: 6 というエラー

## エラー内容
```
Assertion failed: (thread_id_key != 0x7777), function find_thread_id_key, file ../src/coroutine.cc, line 134.
make: *** [dev] Abort trap: 6
```

### 環境
node `16.3.0`
npm `7.15.1`

## 原因
Dart Sassの `fibers` というパッケージが、nodeの16ではまだダメらしい

参考 https://snow-cat.net/?p=1000

## 解決方法
nodeのバージョンを16未満にする
Windowsでローカルタイムゾーンの夏時間設定の確認方法

# Windowsでローカルタイムゾーンの夏時間設定の確認方法

「夏時間に合わせて自動調整する」がオンになっているか否かを確認したい場合、
.NET Frameworkが提供するRegistryKeyクラス（Microsoft.Win32名前空間）を利用し、
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
```
のキー[DynamicDaylightTimeDisabled]の値を参照します。

Registry.GetValue メソッド
このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

キーと値を変えてやれば、これ以外にもレジストの値を取得することが可能です。
(型は、呼び出すレジストリの値の型に合わせてやる必要があります。)

```C#:GetRegistryKey.cs
using System;
using Microsoft.Win32;

namespace GetRegistryKey
{
    class Program
    {
        static void Main(string[] args)
		{
			// 操作するレジストリ・キーの名前
			string rKeyName = @"SYSTEM\CurrentControlSet\Control\TimeZoneInformation";
			// 取得処理を行う対象となるレジストリの値の名前
			string rGetValueName = "DynamicDaylightTimeDisabled";

			// レジストリの取得
			try
			{
				// レジストリ・キーのパスを指定してレジストリを開く
				RegistryKey rKey = Registry.LocalMachine.OpenSubKey(rKeyName);

				// レジストリの値を取得
				Int32 location = (Int32)rKey.GetValue(rGetValueName);

				// 開いたレジストリを閉じる
				rKey.Close();

				// コンソールに取得したレジストリの値を表示
				Console.WriteLine("夏時間に合わせて自動的に調整しない：" +　location);
				Console.ReadLine();
			}
			catch (NullReferenceException)
			{
				// レジストリ・キーまたは値が存在しない
				Console.WriteLine("レジストリ［" + rKeyName	+ "］の［" + rGetValueName + "］がありません！");
			}
		}
	}
```
Databricksにてノートブックスコープでpipによりライブラリをサイレントインストールする方法

## 概要
Databricksにてノートブックスコープでpipによりライブラリをサイレントインストールするには、%pipマジックコマンド実行時に`-q`という引数を設定すればよいようです。


Databricksのドキュメントによると、%pipはpipコマンドと同等の旨の記載があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/89f0a6bc-42a0-4bdb-5e13-df61b0060aa6.png)
引用元：[Notebook スコープの Python ライブラリ-Azure Databricks - Workspace | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/databricks/libraries/notebooks-python-libraries#manage-libraries-with-pip-commands)

pipのドキュメントによると、`-q`、あるいは、`--quiet`の引数を設定することで、サイレントインストールが実施されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c94c7e5b-2259-4ee8-fd23-a3c876759166.png)
引用元：[pip - pip documentation v21.1.2 (pypa.io)](https://pip.pypa.io/en/stable/cli/pip/)

`-q`、あるいは、`--quiet`の引数をしない場合、下記のような表示となってしまうため、ノートブックが長くなってしまう欠点があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5e9103a2-6af1-78e8-6721-2334fe2629c9.png)


## 実行方法
### 1. 下記のコードを実行

```python
%pip install pycaret -q
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d23dc634-149a-9785-fcb4-829b0d625d90.png)
【Next.js】Reactでスクロールを検知する

## コード

```javascript:scroll.jsx
import React, {useState, useEffect} from 'react'

const Scroll = () => {
  const [scrollY, setScrollY] = useState(0)

  const handleScroll = () => {
    setScrollY(window.scrollY)
  }

  useEffect(()=> {
    window.addEventListener('scroll', handleScroll )
  }, [])

  return (
    <>
      { scrollY }
    </>
  )
}

export default Scroll

```


## 解説

```javascript
    window.addEventListener('scroll', handleScroll )
```

ここでイベントリッスンさせて、

```javascript
  const handleScroll = () => {
    setScrollY(window.scrollY)
  }
```

関数`handleScroll`を呼び出すだけ。
HTML ラジオボタンを実装する

# 目的

- HTMLにてラジオボタンを実装する方法をまとめる

# 方法

- 下記のように記載することでラジオボタンを実装する事ができる。

    ```html
    <input type="radio" name="1" value="true">テストテスト true
    <br>
    <input type="radio" name="1" value="false">テストテスト false
    ```

- input要素にてtypeを`radio`にすることで作成することができる。

    ![Document.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/738f479a-c092-f062-4e13-105615148e29.png)
dbコンテナだけが立ち上がらないdocker-compose build

laravel　+ dockerでやっていたプロジェクト。

最近dockerをリフレッシュしてコンテナが消えたので環境構築をし直す機会がありました。

いつもどおりgitリポジトリから
git clone リポジトリURL
docker-compose build
docker-compose up
とコマンドを入れていく

…


データベースコンテナだけが起動に失敗している。
エラーログを見ると

```

MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user zac_db | Remove MYSQL_USER="root" and use one of the following to control the root user password:

```

というエラーが出ていた。

以前と同じやり方なのになんで？

英語力低いのでちょっと何言ってるのかわからないですね状態なので、取り敢えずgoogle翻訳にかけてみる

```
mysql_user = "root"、mysql_user、およびmysql_passwordは、通常のユーザーを構成するためのものであり、rootユーザーには使用できません。 mysql_user = "root"を削除し、次のいずれかを使用してrootユーザーのパスワードを制御します。

```

???

はい？

取り敢えずrootという名前がだめらしい？



#結論

rootを消してみた。

docker-compose.ymlのrootを

```docker-compose.yml

  # db
  db:
    image: mysql:5.7.33
    container_name: database
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravel
      MYSQL_USER: root
      MYSQL_PASSWORD: root
      TZ: 'Asia/Tokyo'

```

以下に変更。rootをroot2に変更

```docker-compose.yml

  # db
  db:
    image: mysql:5.7.33
    container_name: database
    environment:
      MYSQL_ROOT_PASSWORD: root2
      MYSQL_DATABASE: laravel
      MYSQL_USER: root2
      MYSQL_PASSWORD: root2
      TZ: 'Asia/Tokyo'

```

…

通った。
database起動！

よくわからないが最近の仕様変更でrootを使用できなくなったらしい。root以外にすれば大丈夫そう。

なんでやねん
（セキュリティー的な問題？）

調べたら同じような症状で躓いている人が多そう。MySQLのDockerイメージが更新されたことが原因らしい
[Tableau] 計算フィールドで怒られないために集計・非集計を理解する

# はじめに

カユいところに手を届かせるためのスーパー機能、計算フィールド。
ちゃちゃっと使いこなせればかっこいい！ とは思いつつ、ちょっとでも込み入ったことをしようとすると、すぐに怒られてしまうのでついつい敬遠してしまいます。

なので、今回は計算フィールドさんに

`集計および非集計の引数を混在させることはできません`

と怒られないために、この辺りのルールを整理したいと思います。

（こんな式を書けば、手っ取り早くこのこの怒られ方をします）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/b7488471-d644-880d-3fdd-5a13cba8f59b.png)

これは、非集計と集計の違いを理解すれば、怒られるのを回避できます。

# 非集計と集計

非集計はレコード1つ1つそのもので、複数の値をまとめたりしてないものを指します。

なので、`[売上]`のように書いた**非集計の値は、全レコードに存在する売上の値全てを指します**

売買履歴レコードが10個あったら、それぞれ10個の売上の値すべてをまとめて指してるわけです。

<br />

一方で、集計は文字通り、複数のレコードの値をなんらかの方法で1つにまとめることを指します。

10個の売買履歴レコードがあったときに、その売上の合計として1つの値を出す、とかですね。

SUM（）とかAVG（）とかMAX()とかが集計関数に当たります。

なので、`SUM([売上])`のような**集計の値は、集計結果のたった1つの値を指します**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/3d351ef1-b9fb-47ac-9ea5-665f5ffa82f0.png)



# で、なにがTableauを怒らせるのか

集計と非集計の計算を混在させて怒られる理由として、しばしば

> 「1つ1つの売上（非集計）と、全体の売上合計（集計）を足す、という計算が意味を成さないから」

という説明を見かけますが、これが個人的には混乱を招きました。

例えば、1つ1つの売上が全体の平均からどれくらい高いか、とかの計算はしたくなるなじゃん、と思うわけです。
実際、そういう計算をしようとしてるから計算フィールドに書いて怒られてるわけですから。

では、自分的に納得のいく怒られる理由は何かというと、

**集計と非集計とで、Tableauがやる計算のモードが違うから**

…なんかもやっとした言い方になってしまいましたので、もっとちゃんと説明します。

## 非集計と非集計の計算

前述の通り、非集計はレコードに書いてある値そのものです。
なので、非集計と非集計の計算というのは、1つ1つのレコードに対して個別にやるわけです。

例えば10個の売買履歴レコードがあったとして、利益を求めるために

`[売上] - [原価]`

とすると、これは10個のレコード1つ1つにこの計算を適用することになります。

なので、**非集計と非集計の計算は、レコードの個数だけ計算を繰り返するイメージ**になります


## 集計と集計の計算

次に、集計は複数のレコードの値を1つにまとめた値です。

`SUM([売上]) - SUM([原価])`

とすると、まずSUM([売上])最初に10個のレコードの売上を合算して、原価を合算して、最後にその合算した数値を引き算します。

なので、**集計と集計の計算は、すでに全レコード分の値が1つにまとまっている数値について、1回だけ計算するイメージ**です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/6143cfeb-243d-cfcf-0ded-782f36110aa8.png)

## Tableauさんが起こる理由

つまり、集計と非集計の混在した式を書かれると、Tableauさん的には1行1行計算して欲しいのか、まとめて1個だけ計算して欲しいのかの区別がつかないわけです。

ずいぶん長い解説になってしまいましたが、どちらのモードで計算するのかわからなくて、怒ってくるわけです。

# でも、混在させたいんだ！ というときに

とはいえ、前述の通り`「1つ1つの売上（非集計）が全体の平均（集計）からどれくらい高いか」`のように、集計と非集計とを混在させたいタイミングがあるわけです。

## 集計→非集計に変換する

「1つ1つの売上（非集計）が全体の平均（集計）からどれくらい高いか」` というケースのように、集計を非集計に変換したいときに使うのがLOD表現です。

(以前書いたまとめ↓)

https://qiita.com/Horino_Yohei/items/8bb7023a20c94b6410df

<br />

LOD表現は、異なるLOD（詳細レベル）の計算を混在させるための関数ですが、今回のケースでいうと、**集計を非集計にする**効果があります。
FIXEDやEXCLUDを使って上位のLODで表現を使うと、最小のLODであるレコード単位の計算に、上位のLODである全体の集計を持ってこれる、というわけです。

集計した1つの値を各レコードにコピーして配布する、というイメージなのですが、伝わりますでしょうかね？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/23e687cc-b552-e2f7-31b1-e2341bc36a2f.png)

なので、↓のようにすれば`「1つ1つの売上（非集計）が全体の平均（集計）からどれくらい高いか」`が集計と非集計を混在させることなく実現できるわけです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1513463/aa435512-20a6-fef7-ad04-f3e91cc15fc9.png)

## 非集計　→ 集計に変換する

一方で、非集計を集計に変換したいケースもまれにありますが、これは集計しちゃえばいいわけですから簡単です。

SUM（）とかを使っちゃうと値が変わってしまうので、非集計の時の値をそのまま使うには、MAX（）とかを使うことが多いですね。

# まとめ

計算フィールドで出てくるエラーって、基本的にそれ以上の情報がないので、遭遇すると思わず「ぐぬぬっ」と身構えてしまいます。

が、Tableauさんも意地悪を言っているわけではないので、1つ1つの仕様をちゃんと理解することで回避することができます。

他にも怒られるケースがあるので、そのうちまたまとめたいと思います、
埋め草 16進の文字'0'～'f'を剰余(%)を使って数値に変換する

#芒種
予想通り前回記事投稿から何もありませんでした。
「PMがPTA広報の部長になった訳だが」は取材(?)の為休載して埋め草記事でお茶を濁します。
今のところ紹介出来る持ちネタが4つあります。

+ 16進の文字'0'～'f'を数値に変換する
+ C++でJavaのsynchronized()を再現したい症候群
+ if～elseのネストを解決するJavaクラス
+ 生産性を上げる3種の神器 正規表現、RDBMS、スクリプト言語

アセンブラ/C/C++/Javaと辿ってきたのがモロバレですね。最近流行の言語は履修してません。

## 16進の文字'0'～'f'を数値に変換する
自分のアイデアでは無いので先に出典を紹介します。記憶が怪しいのですが「 [ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか](https://www.amazon.co.jp/%E3%83%8F%E3%83%83%E3%82%AB%E3%83%BC%E3%81%AE%E3%81%9F%E3%81%AE%E3%81%97%E3%81%BF%E2%80%95%E6%9C%AC%E7%89%A9%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AF%E3%81%84%E3%81%8B%E3%81%AB%E3%81%97%E3%81%A6%E5%95%8F%E9%A1%8C%E3%82%92%E8%A7%A3%E3%81%8F%E3%81%8B-%E3%82%B8%E3%83%A5%E3%83%8B%E3%82%A2-%E3%83%98%E3%83%B3%E3%83%AA%E3%83%BC%E3%83%BBS-%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AC%E3%83%B3/dp/4434046683) 」で読んだ気がします。

### 問題
16進数を表す文字('0'～'9', 'a'～'f')の文字コードが与えられた時、対応する16進数値(0～f)に変換する。

C/C++言語風の表現をすると以下のコードの内部実装を考えよ、上記以外の文字はバリデーションチェックで弾かれ入力されない為エラーチェックは不要、純粋な処理だけ考えなさい。
スマート(?)な実装ほど良しとします。尚、想定するスマートな実装は1行です。
というものです。

```
int f(char c) {
    // ここを考える。charからintへの型変換とか詳細は無視してOK
}
```

社内の同僚に問題を出してみた所、if文で文字判定して返値を求めるとか、
；で区切った後エディタ上で改行しなければ見た目は1行とか、

```
int f(char c) {
    return atoi(c);
}
```

等の回答が得られました。
atoi()の内部実装を問う設問なのでその回答は豪快過ぎます。笑

### スマートな解
剰余演算(%)を使います。

```
int f(char c) {
    return  c % ('a' - 10) % '0';
}
```

これを見た時は目から鱗でした。
特定の条件を満たす時、自然数列上の任意個の、任意の区間を、自然数列にマッピング出来るという事です。
ちなみにこの問題における特定の条件とは 
「出力値最大な'f'の返値 16 は、 入力値最小の'0'(=48)より小さい」
「'a'-10 (=97 -10 =87) は'9'(=57)より大きい」です。
'A'と大文字にしてしまうと'A'-10(=65 -10 = 55)は'9'(=57)より小さくなるので成立しなくなります。


## 次回予告
最近中学生の息子が買ったNintendo Switchの「はじめてゲームプログラミング」に親の私の方がドハマりして時間溶かしてます。

広報部運営が何もないと時間が取れてゲーム作成が捗るのですが、この記事本来の目的であるPTAのプロマネに関するネタが発生する事も期待しつつ、次回更新は少暑の頃を予定しています。
windowsでiverilog その105

#概要　

windowsでiverilogやってみた。
avrのcpu書いてみた。
乗算mulの実装。

#考え方

オペコードを一致させる。
２つのレジスタのデータを取り出し、乗算し、レジスタ０に入れる。

#アセンブラを書く。

```
ldi r16, 0x09
ldi r17, 0x02
mul r16, r17
mov r31, r0

```

#rom化する。

```
rom[0] <= 16'hE009; // ldi r16, 0x09
rom[1] <= 16'hE012; // ldi r17, 0x02
rom[2] <= 16'h9F01; // mul r16, r17
rom[3] <= 16'h2DF0; // mov r31, r0

```

#mulを書く

```
	parameter CMD_MUL  = 16'b100111xxxxxxxxxx;

			if (opcode[15:10] == CMD_MUL[15:10])
			begin
				registers[0] <= registers[dest[4:0]] * registers[src[4:0]];
			end


```

#テストベンチを書く。

```
module test;
    reg clk,
        rst;
    wire [7:0] outport;
    avr u(.clk(clk), .rst(rst), .porta(outport));
    initial
    begin
        $monitor("%d", outport);
        clk = 0;
        rst = 1;
        #2
            rst = 0;
        #2
            rst = 1;
        #330
            $finish;
    end
    always
        #1
            clk = ~clk;
endmodule
```

#実行結果

```
x
18

```

以上。
rpi4 4G ( micro SD カードで起動、でもルートは USB ハードディスク)

##単なる個人的メモです
Xのところを　
dmesg | grep sd
や
fdisk -l
や
lsblk

で
確かめ慎重に進まないと大変なことになります
よって　無保証です



##1)
普通に microSD **X**にラズビアンのインストール

dd if=./2021-05-07-raspios-buster-armhf.img  of=/dev/sdX bs=1M status=progress



##2)
microSD で一旦ラズビアンを立ち上げ 完成させ
再起動


##３）
マイクロ SD を USB ハードディスクにddでクローンする


##4)

マイクロ SDの第1領域の cmdline.txtのルートを
/dev/sda2にする

かつ

USBハードディスクfstab のルートを /dev/sda2　にする



##５）
こうするとマイクロ SD と USB ハードディスク
両方使って立ち上がる


##６）
gpartedで USBハードディスクの第二領域を拡張する


##７）必ずしも必要でないが

もう一つ別のマイクロ SD カード**Y**に予備をつくる

dd if=/dev/sdX of=/dev/sdY bs=16k count=20000 status=progress
Swift で簡単多言語プレビュー Extension

## はじめに

[Swift UI][ui] 最高ですよね！

非常に直観的で、コードとUIが直結しています

Swift　UI　での開発時、多言語（と言っても英語と日本語だけだけど）でプレビューが表示したくなったので、簡単に書けるようにしました

## 通常のプレビュー

こんな感じのコードのとき

```swift
import SwiftUI

struct ExampleView: View {
    var body: some View {
        Text("hello")
            .font(.title)
    }
}

struct ExampleView_Previews: PreviewProvider {
    static var previews: some View {
        ExampleView()
    }
}
```

以下のように言語設定していたとして

- Localizable.strings (English)

  ```text
  "hello" = "Hello";
  ```

- Localizable.strings (Japanese)

  ```text
  "hello" = "こんにちは";
  ```

プレビューは以下のようになります

![スクリーンショット 2021-06-21 11.59.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/ca28cc9b-c4bd-e3a7-8208-80400b553f8a.png)

これだと英語のときは分かっても、日本語のときどうなるか分かりません

ちゃんと `.strings` に設定しているか、折り返しなどでおかしくなっていないか、など心配です

## Extension

毎回言語を指定すると大変なので、以下のような Extension を用意します

```swift
import SwiftUI

extension View {
    func en() -> some View {
        self.environment(\.locale, .init(identifier: "en"))
    }

    func ja() -> some View {
        self.environment(\.locale, .init(identifier: "ja"))
    }
}
```

そして、プレビューを以下のように変更します

```swift
struct ExampleView_Previews: PreviewProvider {
    static var previews: some View {
        ExampleView().en()
        ExampleView().ja()
    }
}
```

そうするとプレビューで各言語版が縦に並んで表示されます

![スクリーンショット 2021-06-21 12.03.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/1f81d1ce-c83f-ecf0-396d-a3420c5bd2bb.png)

### モジュール化

言語が増えてきたりすると、毎回 `.en()` と `.ja()` を書くのも面倒だし漏れそうです

というわけで、以下のようにモジュール化します

```swift
import SwiftUI

struct MultiLanguagePreview<Content>: View where Content: View {
    var content: () -> Content

    init(@ViewBuilder content: @escaping () -> Content) {
        self.content = content
    }

    var body: some View {
        SwiftUI.Group {
            VStack(content: self.content).en()
            VStack(content: self.content).ja()
        }
    }
}

struct MultiLanguagePreview_Previews: PreviewProvider {
    static var previews: some View {
        MultiLanguagePreview {
            Text("hello")
        }
    }
}
```

プレビューを以下のように変えれば、それだけで多言語プレビューができるようになります

```swift
struct ExampleView_Previews: PreviewProvider {
    static var previews: some View {
        MultiLanguagePreview {
            ExampleView()
        }
    }
}
```

## まとめ

Extension を使うことで、プレビューの記述をスッキリさせることができました

今後も余裕のあるときに便利な Extension を紹介していきたいと思います

[ui]: https://developer.apple.com/jp/xcode/swiftui/
遠隔でJetsonの管理を実現する方法－デバイスログの収集

#はじめに
[前回の記事](https://qiita.com/Koharu1993/items/4fb6dda6e6b5071afe9b)では[Allxon DMS](https://dms.allxon.com/next/signup)の一番重要であってベーシックな5つの機能をご紹介しましたが、
今回は中のデバイスログ収集機能を更に深堀していきたいと思います！
ぜひ最後まで見て頂けたら嬉しいです！

#Allxon DMSについて
Allxon Device Management Solutions (Allxon DMS) は、
多数のデバイスを容易に一元管理できるサービスです。
SIer企業及びサービスプロバイダ企業に対して、
シンプルにナビゲートしやすいデバイス管理サービスを提供します。
事業部をまたぐ多用なデバイス管理すらもひとつのAllxonアカウントから実行できるため、
デバイス上の問題解決のみならず、人件費と運用コストの大幅削減にも実現可能です。

#デバイスログ収集機能について
デバイスが障害や不具合が発生する際に、原因や解決策を知るために、
障害発生時のデータが原因を分析して未然に防ぐにも繋がる重要なエビデンスとなっています。
その時にAllxonのデバイスログ機能を利用して、遠く現場にあるデバイスに対して、
即座に遠隔でログの取得が可能になります。こんな便利な機能を皆様にご紹介していきたいと思います。

#ログ収集の設定手順
ログは最大5セット（8つのログパス）設定することができ、
自動でエージェントが定期的にログを収集するように命令、
またはユーザーが手動でログを収集する命令を実行できます。

①ログ収集のための新規設定を追加するには"+"をクリックしてください。
![擷取01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1509678/221f765f-84f4-2b75-dfe6-dcd90f91e03e.png)

②ログパスの設定方法
• 定期的にログを収集するスケジュール（オプション） 
*注意：ここで定期スケジュールを設定しなければエージェントはスケジュールによる収集を実行をしません。
デバイスプロファイルページの「デバイスログをすぐに取得」
（下記「デバイスログを取得」を参照）によって随時取得することは可能です。
• ログパッケージ名 (必須)
• ログのパス（少なくとも1つのパスを含める必要があります
• 保存をクリックして変更を保存します。
![擷取02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1509678/b290f66e-95ee-248b-9fe1-21d0c70aaeb1.png)

③デバイスログをすぐに取得
![未命名.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1509678/743f4933-e969-d6bd-31b0-81bfb69d8500.png)

#終わりに
以上、デバイスログの詳細設定の方法についてご紹介させて頂きました！
とても簡単ですよね、ぜひ試してみてください！
また、すでにAllxon DMSをダウンロードした方に是非こちらの”[マニュアル](https://app.hubspot.com/documents/7375543/summary/3800002)”をご覧になって、
操作してみて頂ければと思います。
さて、次回はコマンド送信の詳細設定をご紹介します。お楽しみにしてください。
毎週火曜日に記事を更新致しますので、
ご意見または感想がございましたら、ぜひコメント欄に書いて頂けると嬉しいです！
Microsoft AZ-900 資格の合格確実！な学習環境をまとめてみた

クラウドを使い始めたばかりの方や Microsoft Azure 初心者の方向けの
AZ-900 資格（Microsoft Azure Fundamentals）の取得に向けて、

おすすめの学習環境や、受験料が無料になる情報などをまとめてみました。





### 1. 試験について


まず、会場受検とリモート受検が選べます。（2021年1月時点）
どちらも割と近日に予約が取りやすく、
どちらの方法で受験してもオンライン形式の試験です。



1000点満点の700点以上で合格で、
合否は、問題を終了したら、その場ですぐPC画面に表示されます。



問題数は44問程度、そのほとんどが4択式で、長文記述っぽいものや
実践系の問題はありません。
（なのでAzureポータルなどを触った経験がなくてもいける）


凝った問題が出ることはほとんどなく、以下でまとめている学習モジュールを使用して
基本的な用語の意味などを押さえておけば大丈夫かと思います。



   

### 2. Microsoft Learn


マイクロソフトが提供するオンライントレーニングプラットフォーム、
Microsoft Learn では Azure などの Microsoft の技術について
無料で学ぶことができます。


AZ-900 資格に対応したラーニングパスは以下の6つです。


   1. [Azure の基礎 第 1 部:Azure の主要概念に関する説明](https://docs.microsoft.com/ja-jp/learn/paths/az-900-describe-cloud-concepts/)
   2. [Azure の基礎 第 2 部:Azure の主要サービスに関する説明](https://docs.microsoft.com/ja-jp/learn/paths/az-900-describe-core-azure-services/)
   3. [Azure の基礎 第 3 部:Azure のコア ソリューションおよび管理ツールに関する説明](https://docs.microsoft.com/ja-jp/learn/paths/az-900-describe-core-solutions-management-tools-azure/)
   4. [Azure の基礎 第 4 部:一般的なセキュリティ機能およびネットワーク セキュリティ機能に関する説明](https://docs.microsoft.com/ja-jp/learn/paths/az-900-describe-general-security-network-security-features/)
   5. [Azure の基礎 第 5 部:ID、ガバナンス、プライバシー、およびコンプライアンス機能に関する説明](https://docs.microsoft.com/ja-jp/learn/paths/az-900-describe-identity-governance-privacy-compliance-features/)
   6. [Azure の基礎 第 6 部:Azure Cost Management およびサービス レベル アグリーメントに関する説明](https://docs.microsoft.com/ja-jp/learn/paths/az-900-describe-azure-cost-management-service-level-agreements/)    
    

やはり、AZ-900 範囲の知識習得にはこれが一番だと思われます。





### 3. バーチャルトレーニング


Microsoft が提供しているバーチャルトレーニングでは
試験受験料（12,500円）が **無料** になるバウチャーをゲットできるため、
もれなく受講をおすすめします。
※バウチャー取得まで、トレーニング受講から5営業日かかるので注意。



対象イベント名：　Microsoft Azure Virtual Training Day: Azure Fundamentals

[直近の開催スケジュール](https://www.microsoft.com/ja-jp/events/top/training-days.aspx?activetab=a1%3aprimaryr3) から上記のイベント名、日程を確認して申し込んでください。



私が受講したとき（2021年1月）は、1日3時間を2日連続、
担当の Microsoft 社員の方による講義でした。
AZ-900 試験に直結した内容を、分かりやすく教えてくれます。


またトレーニング受講中は、その場で Microsoft 社員の方に質問できる
チャットが用意されているので疑問点などは随時質問できます。


ちなみに、単元毎に復習問題のようなものが最後にあるのですが、
実際の試験では、同じレベル感の問題が出るのでしっかりメモしておくと良いです。

   



### 4. 書籍


Microsoft Learn だと、英語から訳された日本語による説明が少々分かりづらい部分もあり、
特にクラウド初心者の方にはスッと理解しづらいことがあるかもしれません。
その場合は、初めから日本語で書かれたテキストを使用した学習もおすすめです。


タイトル：　『合格対策  Microsoft 認定  AZ-900:Microsoft Azure Fundamentals  テキスト & 問題集』
※Microsoft の公式書籍ではありません。


[Amazon 公式サイト](https://www.amazon.co.jp/%E5%90%88%E6%A0%BC%E5%AF%BE%E7%AD%96-Microsoft%E8%AA%8D%E5%AE%9A-AZ-900-Microsoft-Fundamentals%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88/dp/4865942319/ref=asc_df_4865942319/?tag=jpgo-22&linkCode=df0&hvadid=422136559639&hvpos=&hvnetw=g&hvrand=1505214705299733265&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009318&hvtargid=pla-891142858018&psc=1&th=1&psc=1) から購入可能です。
これ1冊勉強するだけで試験合格できるほどの知識は十分つきます。


また各章末の復習問題みたいなものと、最終章として模擬試験がついているのですが
これらは本番の試験とそっくりなので、
問題を何度か解き直して全問正解できるようにしておけば怖いものなしです。





### 5. さいごに


いかがでしたでしょうか。試験合格に向けて、ぜひ頑張ってください。


試験情報は以下から確認できます。
[公式サイト](https://docs.microsoft.com/ja-jp/learn/certifications/exams/az-900)：AZ-900 の受験を申し込む







以上、はじめてのQiita投稿でした～！
Instanaを使ってOpenShift上で動作するアプリのパフォーマンスを監視する (1)

# 1. はじめに
IBM がアプリケーションを作成するために役立つ情報を「パターン」として公開しているポータルサイト「 [Code Patterns](https://developer.ibm.com/patterns/) 」に
「[Monitor the performance of your microservice app - 
　Integrate Instana into your polyglot microservice app running on Red Hat OpenShift](https://developer.ibm.com/patterns/integrating-instana-with-microservice-app-on-openshift/)　」
というコードパターンがあります。

和訳すると「 マイクロサービスアプリのパフォーマンスを監視する -
InstanaをRed Hat OpenShiftで実行されている多言語アーキテクチャーのマイクロサービスアプリに組み込む。」でしょうか

このコード・パターン自体は、英語ですが、実際に　このコード・パターンを使って
Red Hat OpenShiftクラスターに APMツールのInstanaを導入し、マイクロサービスアプリケーションのパフォーマンスを監視した時の手順を日本語で何回かに分けて手順を起こそうと思います。

補足) [Instana](https://www.instana.com/): アプリケーション・パフォーマンス管理(APM)ツールの１つでサービスに問題が発生した時に、インフラからアプリまでの依存関係を視覚化し、どこのサービスで、ソースコードの何行目が問題があるのか原因究明コストを大幅に削減できるのが特徴なツールです。

# 2. このコード・パターンの概要

このコード・パターンでは、Red Hat OpenShiftクラスターで多言語アーキテクチャのマイクロサービス で構成される旅行代理店のWebアプリケーション [Bee Travels](https://github.com/bee-travels)を動かします。 そして、Instanaを OpenShiftに導入し、Webアプリケーション [Bee Travels](https://github.com/bee-travels)を監視します。
Instanaは、インフラストラクチャ、アプリケーション、サービスを可視化、パフォーマンス管理することのできるパフォーマンス・モニタリング（APM）ツールです。

今回は、 [Puppeteer](https://developers.google.com/web/tools/puppeteer/)　を使用して旅行代理店のWebアプリケーション [Bee Travels](https://github.com/bee-travels)へのトラフィックを生成し、 Instanaのダッシュボードでトラフィックを分析します。

このコードパターンで使用される旅行代理店のWebアプリケーションは、 GitHubの [Bee Travels](https://github.com/bee-travels)プロジェクトの一部です。このコード・パターンに含まれるサービスは次のとおりです。

- Destination v1 (Node.js)
- Car Rental v1 (Node.js)
- Hotel v1 (Python)
- Currency Exchange (Node.js)
- UI (Node.js/React)

# 3. アーキテクチャー
下図はこのコード・パターンのアーキテクチャを表したもので、下記の１～３の処理を行います。
![instana-arch-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209170/fe7d46d0-8074-ecc3-4735-476c41be39d2.png)

1. Puppeteerスクリプトは、OpenShiftクラスターで実行されているBee Travelsアプリケーションへのトラフィックを生成します。
1. Bee Travelsアプリケーションの各サービスのInstanaコードは、それぞれのサービスに関するデータをOpenShiftクラスター内のInstanaエージェントに送信します。(クラスターノードごとに１つのInstanaエージェント)
1. Instana Agentは、そのデーターをInstanaのアカウントに送信します。ここで、Instanaダッシュボードを介してBee Travelsマイクロサービスを分析および監視できます。

# 4. 今後の内容
今回の投稿は、概要レベルで、次回からは、GitHubリポジトリ 「[Integrate Instana with a Microservice Application on OpenShift](https://github.com/IBM/instana-openshift/blob/main/README.md)」　の手順に沿って、以下の１〜５の内容の投稿したいと思います。

1. コード・パターンを完了するために必要な前提条件をインストール。
2. BeeTravelsアプリケーションのコードをInstanaでトレースできるように修正。
3. BeeTravelsアプリケーションをOpenShiftにデプロイ。
4. InstanaAgentのインスタンスをOpenShiftに作成。
5. Pupeteerを使用してトラフィックを生成し、Instanaを使用してトラフィックを分析。

個人的には、この投稿をスタートに、以下のリストのように、OpenShiftにアプリがデプロイできる、APMツールでパフォーマンスモニタリングできる、ARMツールでリソース管理できるというのが、実際に手を動かして理解できる記事を作成したいと考えています。

・OpenShiftにマイクロサービスができる
    → [Instanaを使ってOpenShift上で動作するアプリのパフォーマンスを監視する (2)](https://qiita.com/daihiraoka/items/288589e5f3b0aabe0444)

・APM(アプリケーション・パフォーマンス管理)ツールのInstanaを使って、OpenShiftのマイクロサービスをモニタリングする
　   → 今後、投稿
・ARM(アプリケーション・リソース管理）ツールのTurbonomicを使って、OpenShiftのマイクロサービスを効率的に管理する
   → Qiita記事:[Turbonomic のOpenShiftへのインストール Operator版](https://qiita.com/daihiraoka/items/d9ee4ea61d18b85c8dfc)
   → Qiita記事:[Turbonomic のOpenShiftへのインストール (Instana連携編）](https://qiita.com/daihiraoka/items/4273ef4272b66a9e080d)
javascriptでイベントで値を送る方法

メモ

取得用イベントを作る
  document.addEventListener("originalname", function(e) {
    console.log(e.detail); // Prints "Example of an event"
  });

こっちは送信用イベント
    var event = new CustomEvent("originalname", { "detail": "hello world" });
    document.dispatchEvent(event);
justify-selfを使用して右寄せしたいとき

###結論
`justify-self`は`grid`で使用できます。

・親要素を`display:grid`、子要素を`justify-self:end`にする。
・または、親要素を`display:flex`、子要素を`margin:left`にする。

###参考にさせて頂きました。ありがとうございます。
https://qiita.com/mishiwata1015/items/7c26ea7bc80a9200ad78
https://drafts.csswg.org/css-align-3/#overview

下記ページにも`Note that justify-self is ignored in Flexbox layouts.`とあります。
https://developer.mozilla.org/en-US/docs/Web/CSS/justify-self
Digilent プログラマブルロジック開発ツール FPGA USB 開発 ボード Genesys  ZU-3EGを開梱する

IoT ALGYANの抽選でDigilent プログラマブルロジック開発ツール FPGA USB 開発 ボード Genesys ZU-3EGを頂くことが出来ました。
![DSC_0325 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6225e88c-ac8c-cc32-49fc-aae4cece30ae.jpeg)
過去にAlgyan4周年の際にインテルのI嶋さんからDE-0nano-SoC Kitを頂けることになっていたのですが
何故かもらう事が出来ずにいたところ今回、アールエスコンポーネンツ様から頂くことが出来た次第です。
宮原様、小暮理事長ありがとうございます。
#IoT ALGYANとは？
IoT ALGYAN は、IoTを学べる最強コミュニティでオンライン、オフラインにおいてIoT関係のイベント、ハンズオンを多数実施しています。
https://algyan.connpass.com/
理事長の小暮さんは、ピンクのボードでお馴染みルネサス社のがじぇるねブランドの創設者でもあります。
#ZU-3EGとは？
ZU-3EGはDigilent社のZynq UltraScale+ MPSoCを搭載したFPGAボードになります。
https://jp.rs-online.com/web/p/processor-development-tools/2003904/
##主要仕様
####CPU:
___Quad-core ARM Cortex-A53 Application Processing Unit
Dual-core ARM® Cortex-R5 Real-Time Processing Unit___
####Memory:
___4GB DDR4 SODIMM module___
##開梱
それでは、箱を開けてみましょう
![DSC_0326 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/fba92773-312c-65c8-9963-eb90c12dfb72.jpeg)
付属品は、ACアダプター、JTGA、USBケーブル、電源ケーブル、SDカードケースです。
![DSC_0327 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/4cb14e53-3bbf-f829-24fd-e23428104383.jpeg)
ACアダプターは12V8.33Aの6ピン。PCI Express電源コネクタと同等のようです。
![DSC_0328 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/0d049900-8800-6918-d77c-e6910f2b2236.jpeg)
JTAGはJTAG-HS1とUSBケーブルです。
![DSC_0329 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/681b486b-a2dc-3bfe-ce14-f9a9d09ef66b.jpeg)
USBケーブルはMicroUSBとType-C⇒Aの延長ケーブルです。
#ボード全景
![DSC_0334 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6e4edf47-842c-d2bb-6a83-322172bfe7fd.jpeg)
![DSC_0341 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/c5849cf9-d360-4236-7243-f5dcdb733296.jpeg)
#ブート選択
ジャンパピンでブートデバイスを選択できます。
![DSC_0336 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/35874877-b3d0-44d3-1f10-dc117d1e3e7b.jpeg)
#WiFi部
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/2f594f3f-a498-e894-25e9-f8d180dd0ece.jpeg">
#MIPI端子とminiPCIExpress・SDカード
HDMI端子及び部品はNoMountです
miniPCIExpressはSSDなどを搭載可能なようです。
![DSC_0338 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/21e37d1d-2bbe-d35d-0cad-0f1d28f1151f.jpeg)
#HDMI部
HDMIのコントローラーが上下に分かれてつくようです。
![DSC_0337 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/b9abb4d0-ae3e-fa19-5a5f-7785bbc19bf7.jpeg)
![DSC_0339 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/3d61ee99-5bdb-932c-251f-e13297d03f71.jpeg)
#BGA部
![DSC_0344 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/90c68226-2a02-013a-ce89-c268cd2da757.jpeg)
#SIM部
![DSC_0342 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/5dc5f5c2-e873-04e8-a9c8-3134c76177ea.jpeg)
#QSPI部
IS25LP256D-JMLE 256Mbitのメモリが搭載されています。
![DSC_0349 (2).JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/72e4f8d0-fac9-3622-0a74-5ce5ad4e6420.jpeg)
#最後に
USB3まで搭載する本ボード、SDカードにはpetalinux がインストールされているようです。
サーバーを立ち上げようとしたらエラーが出た場合

サーバーを立ち上げようとして

ターミナルでrails sを実行したら以下のエラーが出ました。



Address already in use - bind(2) for “127.0.0.1” port 3000 (Errno::EADDRINUSE)



エラー文を読んでみると
「３０００番ポートが既に使われてしまっている」とのこと。



対処法の１つとしては、３０００番以外のポートを使ってポートを立ち上げるのが有効。



つまり以下のターミナルで以下のコマンドを実行する。

rails s -p ポート番号



（注意）ポート番号には3001などの3000以外の数字を入れること。



3001以外にも使えるポート番号はいろいろありますので
良かったら調べてみてください。
WordPressでNephila clavata (絡新婦)を使って負荷分散をした話

#目的と手段
管理しているHPの読み込み速度を上げたくて悩んでいました。画像や動画が多いサイトで読み込みに時間がかかっています。そこでWordPressのプラグインNephila clavata (絡新婦)を使って負荷分散をし、読み込み速度の改善を図りました。以下にその時の流れを書いておきます。
#Nephila clavata (絡新婦)
WordPressのメディアライブラリに画像をアップロードすると自動でAmazon S3へアップロードし、リンクも変更してくれる大変便利なプラグインです。
##使い方
###S3バケット作成
まずはS3のバケットを作ります。バケットネームはstatic.〇〇.com とかの静的ファイルを配布したいドメイン名が良いと思います。自サイトのドメイン名とは別のまだ使っていないサブドメインを利用してください。リージョンは日本なら東京です。作成したら、セキュリティ証明書画面で取得した「アクセスキー」「シークレットアクセスキー」をメモしておいてください。
###Nephila clavata (絡新婦)の設定
Nephila clavata (絡新婦)をインストールし、有効化すると設定に「Nephila clavata」という追加メニューが表示されます。
![kumo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1371599/b768ea8d-7a09-d990-5cef-3cf3b5eb84b9.png)
先ほど作成したバケットがある「AWSアクセスキー」「AWSシークレットアクセスキー」「AWSリージョン」を入力します。入力した「AWSアクセスキー」「AWSシークレットアクセスキー」「AWSリージョン」が正しければ「S3 バケット」「S3 URL」という項目が表示され、作成済みの S3 バケットがリスト表示されます。「S3 バケット」には先ほどのバケットを「S3 URL」にはプロパティに書いてあるバケットのエンドポイントを入力します。※必ず http://となっていることを確認してください。
設定に問題が無ければ、画像ファイルが自動的にS3 バケットにアップロードされ、投稿中の画像URLがS3 バケットのURLに変更されます。
graphics/cairo の build 時 cairo-glx.pc が無い場合の対処法

X11 依存関連の変更が [2021/6/17](https://reviews.freebsd.org/D25020) に発生した模様。

[graphics/cairo](https://www.freshports.org/graphics/cairo) の build 時に 2021/6/17 以前迄は [graphics/mesa-libs](https://www.freshports.org/graphics/mesa-libs) をビルドされとったのじゃが [graphics/libglvnd](https://www.freshports.org/graphics/libglvnd) へ変更となっちょるけ /etc/make.conf 等で mesa-libs ビルド時だけ X11 を有効にしよる環境じゃと cairo_glx.pc がインスコ出来んと文句言われて嵌る。

```text:変更前
graphics_mesa-libs_SET=X11
```
```text:変更後(追記が望ましい)
graphics_libglvnd_SET=X11
```
【JavaScript】オブジェクトについて

##はじめに
JavaScriptの基礎を勉強したらとても良い学びになったのでメモ
JavaScriptのオブジェクトについてです

こちらの本を参考にさせていただきました

https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88JavaScript%E6%9C%AC%E6%A0%BC%E5%85%A5%E9%96%80-%EF%BD%9E%E3%83%A2%E3%83%80%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E7%8F%BE%E5%A0%B4%E3%81%A7%E3%81%AE%E5%BF%9C%E7%94%A8%E3%81%BE%E3%81%A7-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B-ebook/dp/B01LYO6C1N/ref=sr_1_5?dchild=1&keywords=javascript&qid=1623279484&sr=8-5

##概要
###オブジェクトとは：
名前をキーにアクセスできる配列

* **連想配列との違い**
連想配列：複数要素の集合体（個々の要素が主体）
オブジェクト：１つのモノを表現するために、複数の属性情報をもつ（モノ全体が主体）

* **オブジェクト＝プロパティ＋メソッド**
プロパティ：オブジェクトの状態や特性を表すための情報
メソッド：オブジェクトを操作するための道具
![オブジェクト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1009493/059e4435-d1c0-eb18-4959-7bf92f90c545.png)

	
##new演算子（インスタンス）
オブジェクトは自身でデータを保持できる
競合を避けるためオブジェクトのコピーを作成して操作する
→**インスタンス化**

####インスタンス生成方法

```javascript
var 変数名 = new オブジェクト名([引数,…])
```


####プロパティ/メソッド呼び出し方法
変数名.プロパティ名
変数名.メソッド名

例外）静的プロパティ/メソッド

##組み込みオブジェクト
…JavaScriptが動作するすべての環境で利用可能なオブジェクト

ex)
 
* Object：すべてのオブジェクトのひな型となる機能を提供
* Array：配列を操作するための手段を提供
* Map：キー/値からなる連想配列を操作するための手段を提供
* String：文字列を操作するための手段を提供
* Function：関数を操作するための手段を提供

→リテラルをそのまま対応する組み込みオブジェクトとして利用できるため、インスタンス化をほとんど意識する必要がない
	
##Objectオブジェクト
...全てのオブジェクトの基本オブジェクト

ex)

* toStringメソッド：そえぞれのオブジェクトの内容を基本型の値に変換する
* assignメソッド：既存のオブジェクトを結合できる
* createメソッド：オブジェクトを生成する

##Globalオブジェクト
...グローバル変数やグローバル関数を管理するため、JavaScriptが自動的に生成する便宜的なオブジェクト

ex)

* Numberオブジェクト：数値にかかわる機能
isFinite, isNaN, parseFloat, parseInt

* encodeURI/encodeURIComponent関数：クエリ情報をエスケープ処理する
	URLの末尾「～？」以降に「キー名=値 &…」の形式
	→クエリ情報（＝サーバー上で動くアプリへの問い合わせに必要なデータ）
	
>**URIエンコード**（＝クエリ情報は渡せる情報に制限があるため、無害な文字列に変換する）

* eval関数：与えられた文字列をJavaScriptのコードとして評価・実行する

>第三者が任意にスクリプトを実行できてしまうセキュリティリスク・処理速度が遅いという理由からJSON.parseで代用

##おわりに
今までなんとなく使っていたものの仕組みとかを知ると、伏線回収みたいになってとても面白いですね

* オブジェクトという概念
* 関数をfunction()で定義していたのも実は、組み込みオブジェクトを利用していた

という2点が特に勉強になりました

他のことも学んだらQiitaでアウトプットしていきたいです
Python 上層のモジュールをimportするためのsys.path.append

# 備忘録：実行ファイルより上層に配置した自作モジュールをimport

いつも躓くので書いておく

## 結論
moduleがあるディレクトリのpathをPYTHONPATHへ追加する

```
# .pyの場合
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '実行ファイルからの相対path'))
```

```
# .ipynbの場合
import os
import sys
from pathlib import Path
sys.path.append(os.path.join(Path().resolve(), '実行ファイルからの相対path'))
```

ipynbではfile変数を参照できないのでPath()から参照する
通常pythonは環境変数PYTHONPATHの上位から順に探索してるらしい

https://note.nkmk.me/python-import-module-search-path/

https://kyousukekinoshita.hatenablog.com/entry/2018/10/28/191420

## 感想
- これで読み込めるが、sys.path.append("相対path")との違いがよくわかってない
- 首記のコードでは実行ファイルまでのpathに相対pathをつなげて(絶対pathとして)いるのだろうけど

## 備考
PYTHONPATHをコード内でいじらず、pthファイルに記述する方法もある

https://www.sejuku.net/blog/66459
VSCodeでserialVersionUIDを自動生成したい！【2021/04～】

# こんな人のための記事

Language Support for Java(TM) by Red Hat では `0.77.0 (April 15th, 2021)` 以降、
`Serializable`の実装クラスで `serialVersionUID`が未定義のクラスに対して
Warningが出ないようになりました。

え！？　Warningが出なかったら、Quick fix から
`Add generated serial version ID` できないじゃん！！

# 見つけるのはWarningを消す記事ばかり

大体の「Warningを消したい」サイトには、アノテーションを追加するか

``` ..settings/org.eclipse.jdt.core.prefs
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
```
を追記しろという話でした。

# 逆手に取りましょう
デフォルトが`ignore`になったなら、出すために`obey`を追記しよう！

``` ..settings/org.eclipse.jdt.core.prefs
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=obey
```

これで無事にWarningが出て`Add generated serial version ID` ができるようになります。
Gitを使ったコミット、プッシュ、プルリクエストの流れについて解説

まだ書いている途中です！参考にしないでください
忘れるのでメモ


やりたいこと
プロジェクトをGitHubからクローンしてきた。
新しいブランチを切り、ファイル内容を変更し、リモートにプッシュしたい。
プッシュ後、mainブランチにプルリクエストしたい。


今どこのブランチにいるのか確認

```
$ git branch
*main
```

新しいブランチの作成

```
$ git checkout -b 作りたいブランチ名をここに書く
* new-branch
  main
```

コミットする

```
$ git add .
$ git commit -m "コミットさせる名前をここに書く、今回はfirstcommit"
```

作ったブランチにプッシュさせる

```
$ git push origin firstcommit
```
AtCoder Beginner Contest 206（Sponsored by Panasonic）

https://atcoder.jp/contests/abc206

A,B：時間内AC
C：時間内解けず。あとでAC

https://atcoder.jp/contests/abc206/tasks/abc206_a
A問題
消費税8%計算をして、206円より高いかどうかの判定。
小数点切り下げでいいので、自動で桁落としする。

```php
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <iostream>
using namespace std;

int main(void){
    double N;
    cin>>N;
    int N2=N*1.08;//intにして勝手に桁落とし
    if(N2<206){
        cout<<"Yay!"<<endl;
    }
    else if(N2==206){
        cout<<"so-so"<<endl;
    }
    else{
        cout<<":("<<endl;
    }
}
```

https://atcoder.jp/contests/abc206/tasks/abc206_b
B問題
1日1円ずつ増やして貯金。いつN円を超えるか？
単純な等差数列。
whileで日数を加算して、N円を超えたところでbreakしてans出力。

```php
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <iostream>
using namespace std;

int main(void){
    long long money=0;
    long long date=0;
    long long N;
    cin>>N;
    while(1){
        date++;
        money=date*(date+1)/2;
        if(money>=N){
            cout<<date<<endl;
            break;
        }
    }
}
```

https://atcoder.jp/contests/abc206/tasks/abc206_c
C問題
ある数列で、Ai≠Ajになる組み合わせの数を出力。
要素数Nは3E5なので、全探索すると1E10以上になって時間足りないだろうとすぐわかる。
Nから2個を選ぶ組み合わせから、いくつかを引く方針で考えた。
重複した数字が2個以上ある場合、その分がﾀﾞﾌﾞﾘになるから差っ引けばいい。
重複数を最初mapでやろうとしたけど、その後の探索がうまくできず、当日時間切れ。
解説みるともっとシンプルだった。
・Aをソート
・A[i]=A[i+1]が成立するときcount++
・count++から2個を選ぶ組み合わせを差っ引く
でおｋ。
こういうのはささっと解けるようにしたい。

```php
#include <stdio.h>
#include <bits/stdc++.h>
#include <math.h>
#include <iostream>
using namespace std;

long long com(long long a){
    long long c=(a*(a-1))/2;
    return c;    
}

int main(void){
    long long N;
    long long ans=0;
    long long count =1;    
    cin>>N;
    vector<long long>A(N);
    for(int i=0;i<N;i++){
        cin>>A[i];
    }
    sort(A.begin(),A.end());

    ans=com(N); 
    for(int i=0;i<N;i++){
        if(A[i]==A[i+1]){
            count++;        
        }
        else{
            if(count>1)
            {
                ans=ans-com(count);
                count=1;
            }
        }
    }
    cout<<ans<<endl;
}
```
【Git】マージ後にコミットのプッシュし忘れに気づいたとき

①feature/OAuthブランチでログイン機能を実装、
②コミットしてGithubにプッシュ
③feature/OAuthブランチでログアウト機能を実装
④feature/OAuthブランチをgithubでmargeした後にdelete blanch
⑤ログアウト機能の実装分をプッシュしていないことに気づく...

上記のことが起きたので、自分用のメモとして書きました。

# 対処法
<font color="Red">本記事は自分用のメモですが参考にされる場合は、より良い方法を追記したので[追記](#追記)に飛んでください。</font>

feature/OAuthブランチから新しいブランチを切ってプッシュする。

```
$ git checkout -b feature/logout
$ git add .
$ git commit -m "ログアウト機能の追加"
$ git push origin HEAD
```

コミット時に「nothing to commit, working tree clean」と言われたら

```
$ git commit --allow-empty -m ""
```

それでもダメなら何かしら差分を作ってからコミットする。(あまり良いとは言えないけど1行増やすなど)

# 追記
最適な方法を教えていただいたため、以下に追記します。
#### ⑤の後にfeature/OAuthブランチからそのままプッシュする。
「Create pull request」が出てこないので一見何も起きなかったように見えるが、

New pull requestボタンから以下のようにすると新しいプルリクを作れる。
![スクリーンショット 2021-06-21 11.47.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/639096/2bfbd81e-07ea-64b9-19e5-57ee68df98cf.png)

「曖昧なことがあった時に自分でできる限り調べた範囲内での最適解で対処する」っていう独学の頃の癖が抜けないので、「他にもっとやり方ありそうだけどこの方法で良いのかな」って思った時には積極的に質問しようと強く思いました。
sqlplus の ORA-24454 は /etc/hosts に自分のホスト名が無いのが原因

小ネタです。

Oracle clientのsqlplusで、 `ORA-24454: client host... Show more` というエラーが起き、かなりハマったので原因をメモしておきます。

Sqlplusは `12.2.0.1.0` を使用しています。（ちょっと古いサーバを利用していたので）


```bash
$ sqlplus -S -M 'csv on quote off' '****/****@PRODDB' @exec1.sql
ERROR:
ORA-24454: client host... Show more
```


原因はとてもシンプルで、 `/etc/hosts` にサーバ自身のホスト名が記載されていないことでこの問題が起きていました。

`ORA-24454` で検索すればいくつかの事例も出てきますし、[Oracleドキュメント](https://docs.oracle.com/cd/E96517_01/errmg/ORA-24280.html#GUID-7B2814DB-F946-4EB1-80B5-219B256E90C0)にも記載がありました。

> ORA-24454: クライアント・ホスト名が設定されていません
原因: /etc/hostsのようなファイル内のネットワーク・ホスト名が設定されていません。
処置: ホスト名を設定して、もう一度やり直してください。

tnsname.ora の場所や、sqlplusへ渡す接続情報などを疑って時間を浪費したので反省メモでした。（加えて今時点でQiita内に記載がなかった）
【論文紹介】Effect of Temperature on Human Sensitivity to Sweetness

#論文紹介
論文：Effect of Temperature on Human Sensitivity to Sweetness
著者：Yoko Okamoto, Keiko Yoshida
https://www.jstage.jst.go.jp/article/cookeryscience/47/2/47_97/_pdf


#どんなもの
　物質の温度が味の感じ方に与える影響を調べるために、8種類の甘味料と市販の甘味飲料を対象に、甘味の強さを官能評価法で測定した。実験の結果、8種類の甘味料のうち温度による甘味の強さの違いは、D-クラフトースとキシリトールに見られ、他の甘味料には見られなかった。市販の甘味飲料では、25℃よりも7℃のほうが甘味強度が弱く、25℃よりも43℃のほうが甘味強度が強いものが多く見られた。


#先行研究と比較してすごいところ
　先行研究では、温度変化による化学物質に対する人間の感受性の変化は報告されているが、最近では報告されていない。また、報告された多くの結果は矛盾していた。そこで、物質の温度が味の感じ方に与える影響を調べるために、この論文では甘味料と市販の甘味飲料の甘味強度を官能評価法で測定した。


#技術や手法のキモ
　8種類の甘味料をそれぞれ純水に混ぜて、サンプルの溶液を作成した。甘味液の濃度は、甘味が感じられるように設定した。市販の甘味飲料は酸味のない製品を11種類選んだ。
　糖度の測定には、携帯型屈折計を用いた。

#検証方法
　被験者にはまず標準溶液(25℃)を飲み、順番に甘味飲料を飲んでもらった。標準溶液の甘さを0として -3 ~ +3 の7段階(＋1は「やや甘め」＋2は「やや甘め」＋3は「かなり甘め」-1は「やや甘さ控えめ」-2は「やや甘さ控えめ」-3は「かなり甘さ控えめ」0は「同じ甘さ」)で評価してもらう。
　各溶液の評価スコアを平均値±標準偏差で表し、各変数はShapiro-Wilk検定で正規性を検定した。また、官能評価の評価点データを量的変数として分散分析を行った。

→7℃ではD-フラクトースとキシリトールが、それぞれの標準溶液よりも有意に甘く感じられた。43℃ではD-フルクトースとキシリトールは、それぞれの標準溶液よりも有意に甘くないと感じられた。
　甘味料の種類によって、甘さの感じ方が異なる。7℃~25℃、25℃~43℃では甘さの感じ方に違いはなかった。

→11種類の甘味料入り飲料のうち、7℃では5種類の飲料でそれぞれの基準に比べて甘さの感じ方が有意に弱く、43℃では7種類の飲料でそれぞれの基準に比べて甘さの感じ方が有意に強かった。
　甘味飲料の種類によって、甘さの感じ方が大きく異なる。7℃~25℃、25℃~43℃では甘さの感じ方が大きく異なる。


#議論
　市販の甘味飲料と甘味料の結果が異なったのは、市販の甘味飲料には甘味料以外の成分が含まれているからでは。

#気になった論文
　Thermal stimulation of taste
応用数学

# 1.線形代数学
- スカラーとベクトルの違い

スカラーとは、『大きさ』のみを持つ量のことを指します。

$$
{
a
}\\
$$

ベクトルとは、『大きさと向き』を持つ量のことを指します。

$$
{
\vec{AB}
}\\
$$

- 行列とは

スカラーを表にしたもの

  ```math
  A =\begin{bmatrix}
  a & b \\
  c & d \\
  \end{bmatrix}
  ```

ベクトルを並べたもの

```math
B =\begin{bmatrix}
\vec{AB} & \vec{CD} 
\end{bmatrix}
```

- 単位行列

単位行列とは、行列の対角の成分が全て１、それ以外の成分が0のものである。

```math
E =\begin{bmatrix}
1 & 0 \\
0 & 1 
\end{bmatrix}
```
- 逆行列

逆行列とはある正方行列A、Xの積が単位行列となるときの正方行列Xのことです。
Aの逆行列を$A^{-1}$で表します。

```math
AA^{-1}=E=\begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{bmatrix}
```

- アダマール積

```math
{\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
\odot
\begin{bmatrix}
e & f \\
g & h
\end{bmatrix}
=
\begin{bmatrix}
a \times e & b \times f \\
c \times g & d \times h
\end{bmatrix}
}
```

- 行列積

```math
AB=
{\begin{bmatrix}
a & b \\
c & d \\
e & f
\end{bmatrix}
\times
\begin{bmatrix}
g & h & i \\
j & k & l
\end{bmatrix}
}
```

```math
=
{\begin{bmatrix}
a \times g+b \times h & a \times h+b \times k & a \times i+b \times l \\
c \times g+d \times h & c \times h+d \times k & c \times i+d \times l \\
e \times g+f \times h & e \times h+f \times k & e \times i+f \times l
\end{bmatrix}
}
```
 
- 行列の転置

```math
A=\begin{bmatrix}
a & b & c \\
d & e & f 
\end{bmatrix}
とすると、行列Aの転置は、
A^{T}=\begin{bmatrix}
a & d \\
b & e \\
c & f
\end{bmatrix}と表される。
```

-  固有値

固有値とは、その方向のベクトルで変換前と変換後のベクトルの長さの比のことをいう。
固有値をλとすると、固有値方程式は


```math
A-λE=0であるから
{\begin{bmatrix}
a & b \\
c & d
\end{bmatrix}
-λ
\begin{bmatrix}
1 & 0 \\
0 & 1
\end{bmatrix}
＝0
}となり、
```

```math
{\begin{bmatrix}
a-λ & b \\
c & d-λ
\end{bmatrix}
＝0
}となる。
```

-  固有値ベクトル

固有値方程式に求めた固有値をλを代入して求める。

```math
{\begin{bmatrix}
a-λ & b \\
c & d-λ
\end{bmatrix}
\begin{bmatrix}
x_{1} \\
x_{2}
\end{bmatrix}
=
\begin{bmatrix}
0 \\
0
\end{bmatrix}
}に代入して求める。
```
# 2.確率・統計
-  条件付き確率

```math
P(Y|X)=\frac{P(Y,X)}{P(X)}
```

-  同時確率

```math
P(X,Y)=P(X)P(Y)
```

-  ベイズ則

```math
P(X|Y)=\frac{P(Y|X)P(X)}{P(Y)}
```

-  期待値

```math
E(f) := \sum_{x \in X}{f(x)P(x)}
```

-  分散

```math
Var(f) = E((f - E_f)^2) \\
Var(f) = E(f^2) - E(f)^2
```

-  共分散

```math
Cov(f, g) := E((f - E_f)(g - E_g))
```

-  標準偏差

```math
{σ=\sqrt{Var(f)}=\sqrt{E((f_{(X=x)}-E_{(f)})^2)}
}
```

-  ベルヌーイ分布

```math
{P(x|μ)=μ^x(1-μ)^{1-x}
}
```

-  二項分布

```math
{P(x|λ,n)=\frac{n!}{x!(n-x)!}λ^x(1-λ)^{n-x}
}
```

-  ガウス分布

```math
{N(x;μ,σ^2)=\sqrt{\frac{1}{2\pi σ^2}}exp(-\frac{1}{2σ^2}(x-μ)^2)
}
```


# 3.情報理論
-  自己情報量

事象そのものの情報量を指す。
「確率の関数」・「減少関数」・「加法性」という３つの性質がある。

```math
I(x) := -log(P(x)) = log(W(x))
```

-  シャノンエントロピー

```math
H(x) = E(I(x))
```

-  カルバック・ライブラーダイバージェンス

```math
D_{KL}(P||Q) := \sum{P(i)\log{\frac{P(i)}{Q(i)}}}
```

-  交差エントロピー

```math
{D_{KL}(P||Q)=\sum_xP(x)(-log(Q(x)))-(-log(P(x))) \\
H(P,Q)=H(P)+D_{KL}(P||Q) \\
H(P,Q)=-E_{x～P}logQ(x)=-\sum_xP(x)logQ(x)
}
```
MicrosoftのRPA - Power Automate Desktop 2021年6月アップデートについて

皆さんこんにちは、マイクロソフトの川端です。
2021年6月のPower Automate Desktopのアップデート情報を紹介していきます。

#1. はじめに
元の情報（英語）はこちらになります。
https://flow.microsoft.com/ja-jp/blog/power-automate-desktop-june-2021-update/

本内容はPower Automate Desktopのバージョン2.10.36.21161での動作内容となります。
最新のインストーラーはこちらからダウンロード可能です：https://flow.microsoft.com/ja-jp/desktop/

#2. Power Automate Desktopの2021年6月アップデート情報
###同一環境内でのデスクトップフローを呼び出すことができるように
フローコントロール配下に、「Desktopフローを実行」アクションが新しく生成されています。　
大規模な自動化プロセスを走らせる場合に、サブフロー構成ではなく細かな単位にデスクトップフローを分割して構成できるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/808554/9ff39562-1a7c-46b8-0f12-ac62f6eb83da.png)
クラウドフローからデスクトップフローのアクションを登録する際にも入力変数を指定可能ですが、本アップデートでは、デスクトップフロー間での呼び出しの際にも引数として指定することができるようになりました。
この機能追加によって、今までサブフローとして構成しても、内部的にはフロー変数がグローバル変数となっていた（ローカル変数としての定義が難しかった）部分をデスクトップフロー間の構成でローカル変数として扱えることができるので、デスクトップフロー内でのプロセスをモジュール化しやすくなりました。例えば複数のデスクトップフローから共通して呼び出されるような、共通部品としてのデスクトップフローを構成することが容易となります。

###リモートデスクトップ接続やCitrix環境内でのレコーダーでの記録で画像認識モードへ自動変換がなされるように
デスクトップレコーダーでの記録で、対象アプリケーションの画面要素の取得が限定的なケースでは画像記録によるレコーディングが有効な手段となりますが、そちらの切り替えでは以前は人手の判断で手動にて切り替える仕様となっていました。
今回のアップデートで自動化対象のリモートデスクトップ(RDPやCitrix環境)が記録対象であることを判別し、レコーディングモードを自動的に切り替えてくれるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/808554/9653bc9c-24d6-5a1d-707e-492f77cea45e.png)

###Windows環境変数に関連するアクション設定の機能向上
システム配下にあるアクション、「Windowsの環境変数を設定する」や「Windowsの環境変数を削除する」で環境変数名の候補が自動で取得され、選べるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/808554/8ab517fc-faf2-4df2-3af0-41c6a8b8d405.png)

また、「サービスを開始」や「サービスを停止」、「プロセスを待機する」で関連するWindowsプロセスやサービスで自動的に候補のサービスやプロセス名が選択できるようになりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/808554/347297b6-1ea4-3333-98e6-843370d5c647.png)

###「MODI OCRエンジンを作成」のアクションにおける非推奨化を発表しました
来月、7月のリリースでOCRのアクショングループ配下にある、MODI OCRエンジンの利用が非推奨となります。詳細はこちら[Tesseract OCRへの移行推奨]。

#3. 最後に
Power Automate Desktopの[公式ドキュメント]もどんどんアップデートがなされ、充実してきています。
何かコメントがありましたら[Power Automate Community]までぜひコメント、フィードバックください！

[公式ドキュメント]:https://docs.microsoft.com/ja-jp/power-automate/desktop-flows/introduction
[Power Automate Community]:https://powerusers.microsoft.com/t5/Microsoft-Power-Automate/ct-p/MPACommunity
[Tesseract OCRへの移行推奨]:https://powerusers.microsoft.com/t5/Power-Automate-Community-Blog/Announcing-deprecation-of-MODI-OCR-engine-and-Create-Tesseract/ba-p/941316
Python_requestでファイルをダウンロード

今日は久しぶりにパイソンを復習しようと思います。 その中でパイソンを利用してファイルをダウンロードする方法を調べてみようと思います。

##方法
方法はrequestモジュールを活用することです。

```
pip install requests
```

requestモジュールを使用するには、まずpip install requestsを使用してrequestsモジュールをインストールする必要があります。

```python
import requests

url = "http://google.com/favicon.ico"//..... 接続したいアドレス...
req = requests.get(url, allow_redirects = True) // getを使ってもいいし、postを使ってもいいし、別の接続方式を使ってもいいです。
open('google.ico','wb').write(req.content)
```

https://2.python-requests.org/en/master/user/quickstart/

ここからより多様な使い方を確認することができます。
デバック環境を構築する　Windows10をアップデートする

ソフトウェアやハードウェアのデバックを行う際に開発環境とともに必要となるのがデバック環境です。
デバック環境を構築する　Windows10をクリーンインストールするの続きとして、Windows10のアップデートを簡単にまとめました。
https://qiita.com/usashirou/items/2bb913d896116338be05
#アップデートUSBを準備する
Windows10は半年毎にアップデートされています。
デバックの際に使用する為、MediaCreationTool等でISOデータをダウンロードして、起動用のUSBメモリを各バージョン毎に作る事をお勧めします。
作ったUSBメモリは写真の通りテプラを貼っておくことをお勧めします。
![IMG_2809.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/88a0dd01-bccf-90e3-e616-20723d0e28fb.jpeg)
わからない時は、プロパティのバージョンを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/7684e8b2-287c-2625-75be-7b431a53850f.png)
##各バージョンのUSBメモリを作る意味
新しいOSが発表されるに伴い、旧バージョンのISOファイルが公式から消えてしまいます。
このため、必要となる可能性があるので、各バージョンをダウンロードして、保管しておくことをおススメしています。
#アップデートする
Windows10は新規インストール以外では、アップデートのみ可能です。(アップデート後10日間のみ前のバージョンに戻せることがある）
今回は、1909から2004(20H1)にアップデートします。
USBメモリからSetupを起動してインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/fc91bda2-4e1c-26ce-76a8-73da160dba6b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/95b96643-dc2c-f940-3a34-ec6df0fe6e89.png)
![スクリーンショット 2021-06-20 173935.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/37140d38-4146-5155-3c92-835f0775096b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/6b988185-99d1-1747-62fb-17a30197b419.png)
引き継ぐ内容を選択して進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/ed983da7-c8ca-7a58-8b1c-4df66323633e.png)
![スクリーンショット 2021-06-20 174224.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/30ca7221-da87-e584-337d-301ec46fbe13.png)
#アップデート完了
今回は、30分では終わらず1時間程度かかりましたが問題なくアップデートされました。
![スクリーンショット 2021-06-20 183511.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/a3d7cc1c-9d42-751e-845e-9d382bffabfc.png)
Ubuntu18.04へのNeo4jインストール手順

以下、Ubuntu18.04 に Neo4j Community Edition (v4.3.0) をインストールする手順。
（Ubuntu20.04でも同じ手順でいけるかも？　※試してない。）

## OpenJDK11 をインストールしておく

```
$ sudo apt -y install openjdk-11-jdk
```

```
$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing)
```

# Neo4j のリポジトリを追加

```
$ wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add -
```

```
$ echo 'deb https://debian.neo4j.com stable latest' | sudo tee -a /etc/apt/sources.list.d/neo4j.list
deb https://debian.neo4j.com stable latest
```

```
$ sudo apt-get update
```

```
$ apt list -a neo4j
一覧表示... 完了
neo4j/stable,stable 1:4.3.0 all
```

# Neo4j Community Edition インストール

```
$ sudo apt-get install neo4j=1:4.3.0
```

※Enterprise Edition の場合はこっち↓。

```
$ sudo apt-get install neo4j-enterprise=1:4.3.0
```

# Neo4j がインストールされたことを確認する

```
$ neo4j --version
neo4j 4.3.0
```
HTML その他いろいろ（使えるタグ）

#HTMLで使用するタグ
##strong(強調できる）

```
<strong>すごいサービスです！</strong>
```

##blockquote
引用を表すには blockquote タグを使うことが出来る

```
  <blockquote cite="https://kamekame.com">
    <p>これから学ぶべきです！</p>
  </blockquote>
```

##hr
horizontal rule の略。水平線に線を入れることで段落を変えることを示すことができる。

```
<hr>
```

##br
改行を行うことができる。

```
 私は<br>
 HTMLを<br>
 学ぶ
```

##pre
改行や空白をそのまま表現するには pre タグ

##code
コードを表す(コードを見せる） code タグ

##実体参照
特殊記号も表現することができる

##ol　順序付きリスト
ol は ordered list 、順序付きのリスト

##ul　箇条書きリスト
ulは、 unordered list 順序がついていないリスト

##dl  説明リスト
項目は dt 、説明は dd で記述する

```
  <dl>
    <dt>質問A</dt>
    <dd>回答A</dd>
    <dt>質問B</dt>
    <dd>回答B</dd>
  </dl>
```
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?  If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.

```
sudo docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle
```

コンテナを作成しようとしたところ、以下のエラーが発生しました。

```
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?

If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
```


#原因

結論から申し上げますと、今回の場合はdockerのサービスを開始していなかったのが原因でした。


#解決策

```
sudo systemctl start docker
```
 を行ない、docker サービスを起動させ、再度

```
sudo docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle
```

を実行したら解決しました。


#補足

権限によっても同様のエラーが出る場合もあるようです。
その場合はDockerとdocker-composeにそれぞれ権限を付与する必要があります。

```
sudo usermod -aG docker $USER
sudo chmod +x /usr/local/bin/docker-compose
```

実行後、設定を反映させるために一度ログアウトする必要があるようです。

```
Exit
```

#参考

参考にさせていただきました。ありがとうございます。

https://qiita.com/dnnnn_yu/items/14a31721a2870b735938