OmniAICreator/Qiita-1.07M huggingface dataset:
nix Flakesについて

## 概要
最近出てきた概念。
APIリファレンスないじゃんと思ったら普通に[NixOS WiKi Flakes](https://nixos.wiki/wiki/Flakes)にあったのでまとめる。
基本的にnix CLIで参照するための変数。読んだら本当にプロジェクトのテンプレートだった。
- Flakesは
    - プロジェクトのテンプレートを提供する
    - 実行可能なプログラムであることを定義する
    - 外部のgitリポジトリから依存関係を取り組むことができる
    - パッケージのビルドと環境構築を同じリポジトリで管理できる
    - nixpkgs、NixOSの拡張を簡単にできる
        - [overlays](https://nixos.wiki/wiki/Overlays)

以下の3つで構成される。

- description: 何をするリポジトリか
- inupts: 依存関係
- outputs: 生成物をどうやって作るか
    - packages: for `nix build & nix shell?`
    - checks: for `nix check`
    - apps: for `nix run`
    - devShells: for 'nix develop'
    - overlays: for overlays of nixpkgs
    - nixosModules & nixosConfiguration: for NixOS

## InputSchema

```nix
inputs.nixpkgs.url = {
  type = "github";
  owner = "NixOS";
  repo = "nixpkgs";
  ref = "nixos-unstable";
};
# 上記は下と同義（こっちを主に使う）
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";

# home-managerで使うnixpkgsを継承によって指定する
homemanager = {
  url = "github:nix-community/home-manager";
  inputs.nixpkgs.follows = "nixpkgs";
};

# flake.nixを含まないリポジトリもflake=falseにすることで使える
inputs.grcov = {
  url = "github:github/mozilla/grconf";
  flake = false;
};

```

## OutputSchema

```nix
inputs @ { self, nixpkgs, home-manager, grcov}:
{
  # nix flake checkで使用されるチェックコマンドを定義する
  checks."<system>"."<name>" = derivation;
  # nix flake build .#<name>でのビルドコマンドの定義。中身は各言語のビルドコマンド。
  packages."<system>"."<name>" = derivation;
  # nix flake buildでビルドされるデフォルトターゲットの定義
  packages."<system>".default = derivation;
  # nix run .#<name>で実行されるバイナリの定義
  apps."<system>"."<name>" = {
    type = "app";
    program = "<store-path>";
  };
  # nix runで実行されるデフォルトターゲットの定義
  apps."<system>".default = { type = "app"; program = "..."; };

  # ここで定義したnixpkgsはnix build .#<name>でもビルドできる
  legacyPackages."<system>"."<name>" = derivation;
  # overlaysの定義。nixpkgsの拡張などに使う
  overlays."<name>" = final: prev: { };
  # デフォルトのoverlay。overlay=は廃止になったので注意
  overlays.default = {};
  # flakesで定義されたnixosModules
  nixosModules."<name>" = { config }: { options = {}; config = {}; };
  # デフォルトのnixosModules
  nixosModules.default = {};
  # nixos-rebuild --flake .#<hostname>でのコンフィグの定義
  # nixosConfigurations."<hostname>".config.system.build.toplevel must be a derivation
  nixosConfigurations."<hostname>" = {};
  # nix-develop .#<name>で入る環境の定義
  devShells."<system>"."<name>" = derivation;
  # nix-developで入るデフォルトの環境
  devShells."<system>".default = derivation;
  # Hydra build jobs
  hydraJobs."<attr>"."<
```
【まとめ】Dataverseリレーションシップの使い方

Dataverseでのリレーションシップの使い方をまとめました。
１つ１つの記事で完結しているので、必要なところだけ見ていただくのもいいですし、
体系的に学びたい方は順番に見ていくのもおすすめです。
Dataverseリレーションマスターになりましょう！
以下に各記事のURLとコンテンツについてまとめていますので、参考にしてください。

 - [【Dataverse】リレーションシップ](https://qiita.com/skuramoto/items/03bf837efed710fdbfee)
      - まずそもそもリレーションシップとは
      - Dataverseのリレーションシップとは
      - Dataverseでのリレーションシップの設定方法
 - [キャンバスアプリでのリレーションシップの使い方](https://qiita.com/skuramoto/items/b26db9a5dbe7c88e9740)
     - 呼び出し方
     - ギャラリーでの使い方
     - フォームでの使い方
     - 関連レコードを含めたデータの登録方法
 - [モデル駆動型アプリでのリレーションシップの使い方](https://qiita.com/skuramoto/items/ab2498362ec30c3913d7)
     - ビューでの使い方
         - 関連テーブルの列をビューへ表示させる
         - フィルタリング機能
     - フォームでの使い方
         - 親レコード詳細画面への遷移
         - 関連タブ
         - サブグリッド
         - 簡易表示フォーム(Quick View Form)
         - 簡易表示フォーム（編集版）
         
- [Power AutomateでのDataverseのリレーションシップの使い方](https://qiita.com/skuramoto/items/433ac11ed1a954ba75f5)
     - [Power Automateでのリレーションシップの使い方【前編】](https://qiita.com/skuramoto/items/a4f0c4441f76972a0e98)
     - [Power Automateでのリレーションシップの使い方【後編】](https://qiita.com/skuramoto/items/11f1111a8eba7673714c)
物理学で理解するグラフフーリエ変換

# 目的

グラフニューラルネットワークの論文を読んでいると突然

>グラフフーリエ変換後のフィルタリングを1次の項までで近似すると以下の式が導出できる. ここの$\theta_0$と$\theta_1$と$\vec{\beta}$を学習させる.
>$$P^{T}(\theta_0I+\theta_1\Lambda) P\vec{x}+\vec{\beta}$$
>ここで$\Lambda$はラプラシアン行列の固有値行列で, $P$がラプラシアン行列の対角化行列である.

などといった文章が出てくることがある.
これについて信号処理の知識で導出している文書は多いものの, 恥ずかしながら筆者は信号処理に明るくないためよく理解できなかった.
そのため, 筆者と馴染みのある物理学の知識を用いて上式の導出を行う.
(そういった背景なので, いい加減なことを言っていたら訂正してくれるとありがたいです)

# 導出

出力$\vec{F}$が入力${x}$によって決定するものとする.
ここで, $\vec{F}$, $\vec{x}$は$d$次元のベクトルであり,$d$個の各ノードの出力入力に対応する.
$F_i$は$i$とその隣接ノード$\mathcal{N}_i$の入力からのみ影響をうけるとする.
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950973/875a599e-db70-48b1-1a7d-ae16d2fdfe41.png" alt="FA" width="300px">

この入力と出力は何でもいいが, 今回は$\vec{x}$が変位で$\vec{F}$が力の調和振動子モデルという見立てで話をすすめる.

入力値$\vec{x}$と出力値$\vec{F}$の関係は冪で展開すると$$
    F_i(x)=\beta_i+\sum_{j\in \mathcal{N_i}} k_{ij}^{(1)}x_j+\sum_{j,k\in \mathcal{N_i}} k_{ijk}^{(2)}x_jx_k+\cdots
$$
と記述できる.
ここで2次項以降が無視できるとすると
$$
    F_i(x)=\beta_i+\sum_j k_{ij}x_j =\beta_i+k_i^{\mathrm{self}}x_i+\sum_j k_{ij}^{\mathrm{int}}(x_j-x_i)
$$
となる.
ここで第2項が非相互作用項であり, 第3項が相互作用項である.
加えて, 各種ノードから受ける影響が対象的であると仮定する.
$$非相互作用項=F_i^{\mathrm{self}}(x)=k^{\rm{self}}x_i$$
$$ 相互作用項=F_i^{\mathrm{int}}(x)=k^{\mathrm{int}} \sum_{j\in \mathcal{N_i}} (x_j-x_i) $$

## 相互作用項について
相互作用項$\vec{F}_i^{\mathrm{int}}(x)$を行列表記する.
```math
F_i^{\mathrm{int}}(x)=k^{\mathrm{int}} \sum_{j\in \mathcal{N_i}} (x_j-x_i)=k^{\mathrm{int}} \sum_jL_{ij}x_j \\
\vec{F}^{\mathrm{int}}(x)=k^{\mathrm{int}} L\vec{x} 
```
ここで, 行列$L$はラプラシアン行列と呼ばれ
```math
L_{ij}=\begin{cases}
        -\# \mathcal{N}_i&(i=j)\\
        1 &(j\in \mathcal{N}_i)\\
        0 & \mathrm{otherwise}
        \end{cases}
```
を満たす.
ラプラシアン行列$L$の対角化が$P^T\Lambda P$とすると
$$\vec{F}^{\mathrm{int}}(x)=k^{\mathrm{int}}P^T\Lambda P\vec{x}$$

## 非相互作用項について

非相互作用項$\vec{F}_i^{\mathrm{self}}(x)$も同様に行列表記する.
```math
\vec{F}^{\mathrm{self}}(x)=k^{\mathrm{self}}\vec{x}=k^{\mathrm{self}}P^TP\vec{x} 
```
ここで, 対角化行列$P$のエルミート性($P^TP=I$)を用いた.

## まとめ
以上の式をふまえると
```math
        \vec{F}({x})
        =P^{T}(k^\mathrm{self}I+k^\mathrm{int}\Lambda ) P\vec{x}+\vec{\beta}
```
が導出できる.
ここで, 未知の変数は$k^\mathrm{self}$, $k^\mathrm{int}$, $\vec{\beta}$の計$d+2$次元に抑えられる.
一方, 入力と出力が線形しか仮定しないとき(ニューラルネットにおける全結合層)の自由度は
```math
    \vec{F}=W\vec{x}+\vec{\beta}
```
なので$d^2+d$である.
よってグラフフーリエ変換とは, ｢エッジ(=最近接)での相互作用に対象性がある｣｢エッジ(=最近接)以外相互作用しない｣を仮定することで関数の自由度を下げるテクニックと解釈できる.

# [おまけ]グラフフーリエ変換はどこがフーリエ変換っぽいのか
$\vec{F}$を力だとする.
$\vec{\beta}=0$のときの系の時間発展は$\vec{F}=m\partial_t^2\vec{x}$より
```math
\vec{\omega}=\frac{k^{\mathrm{self}}}{m}\vec{1}+\frac{k^{\mathrm{int}}}{m}\vec{\lambda}
\\
    \frac{\partial}{\partial t^2}P\vec{x}=(\mathrm{diag}{\vec{\omega}})P\vec{x}
```
上は波動方程式なので$\vec{\omega}$の三角関数の線形結合が$x$の解になる.
```math
x_j=\sum_i A_{ij}\sin(\omega_j t+\theta_{ij})
```
よって, グラフフーリエ変換を行うことで入力の時間発展を各周波数成分に分解することができる.

# [おまけ]ラプラシアン行列はどこがラプラシアンっぽいのか

流体力学などの空間をメッシュで区切るような数値計算を考える.
一次元の場合のラプラシアンは単純差分で計算すると
$$\nabla^2 f(x)\simeq f(x-1)+f(x+1)-2f(x)$$
であり, 2次元の場合は
$$\nabla^2 f(x)\simeq f(x-1,y)+f(x-1,y)+f(x,y-1)+f(x,y+1)-4f(x,y)$$
であるように, $\sum$(隣接するもの)-(隣接数)×自身をしている.
これをグラフに適用させた場合, ラプラシアン行列になる.
paiza.ioでelixir その28

# 概要
paiza.ioでelixirやってみた。
Map使ってみた。

# サンプルコード

```


m = %{a: 1, b: 2}
Map.delete(m, :a)
|> IO.inspect
Map.delete(m, :hoge)
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
k = [:a, :b]
Map.drop(m, k)
|> IO.inspect
#ap.drop(m, [:hoge])
m = %{a: 1, b: 2}
m2 = %{a: 1, b: 2}
Map.equal?(m, m2)
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.fetch!(m, :a)
|> IO.inspect
#Map.fetch!(m, :hoge)
m = %{a: 1, b: 2, c: 3}
Map.fetch!(m, :a)
|> IO.inspect
#Map.fetch!(m, :hoge)
m = %{a: 1, b: 2, c: 3}
Map.get(m, :a)
|> IO.inspect
Map.get(m, :a, "default")
|> IO.inspect
Map.get(m, :hoge, "default")
|> IO.inspect
Map.get(m, :hoge)
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.has_key?(m, :a)
|> IO.inspect
Map.has_key?(m, :home)
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.keys(m)
|> IO.inspect
m = %{a: 1, b: 2}
m2 = %{c: 3, d: 4}
Map.merge(m, m2)
|> IO.inspect
m3 = %{a: 11, b: 22}
Map.merge(m, m3)
|> IO.inspect
Map.merge(m3, m)
|> IO.inspect
m = %{a: 1, b: 2}
m2 = %{a: 11, b: 22}
#Map.merge(m, m2, fn k, v1, v2 -> v1 end)
#Map.merge(m, m2, fn k, v1, v2 -> v2 end)
m3 = %{c: 3, d: 4}
#Map.merge(m, m3, fn k, v1, v2 -> v2 end)
Map.new()
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.pop(m, :a)
|> IO.inspect
{v, mm} = Map.pop(m, :a)
v
|> IO.inspect
mm
|> IO.inspect
Map.pop(m, :hoge)
|> IO.inspect
Map.pop(m, :hoge, "fuga")
|> IO.inspect
m = %{a: 1, b: 2}
Map.put(m, :c, 3)
|> IO.inspect
Map.put(m, :b, "hoge")
|> IO.inspect
m = %{a: 1, b: 2}
Map.put(m, :c, 3)
|> IO.inspect
Map.put(m, :b, "hoge")
|> IO.inspect
m = %{a: 1, b: 2}
Map.size(m)
|> IO.inspect
Map.size(%{})
|> IO.inspect
m = %{a: 1, b: 2, c: 3, d: 4, e: 5}
Map.split(m, [:b, :d])
|> IO.inspect
Map.split(m, [])
|> IO.inspect
m = %{a: 1, b: 2, c: 3, d: 4, e: 5}
Map.split(m, [:b, :d])
|> IO.inspect
Map.split(m, [])
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.to_list(m)
|> IO.inspect
Map.to_list(%{})
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.update!(m, :b, fn v -> 
	v * 2 
end)
|> IO.inspect
#Map.update!(m, :hoge, fn v -> 
#	v * 2 
#end)
#|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.update(m, :b, "fuga", fn v -> 
	v * 2 
end)
|> IO.inspect
Map.update(m, :hoge, "fuga", fn v -> 
	v * 2 
end)
|> IO.inspect
m = %{a: 1, b: 2, c: 3}
Map.values(m)
|> IO.inspect





```

# 実行結果

```
%{b: 2}
%{a: 1, b: 2}
%{c: 3}
true
1
1
1
1
"default"
nil
true
false
[:a, :b, :c]
%{a: 1, b: 2, c: 3, d: 4}
%{a: 11, b: 22}
%{a: 1, b: 2}
%{}
{1, %{b: 2, c: 3}}
1
%{b: 2, c: 3}
{nil, %{a: 1, b: 2, c: 3}}
{"fuga", %{a: 1, b: 2, c: 3}}
%{a: 1, b: 2, c: 3}
%{a: 1, b: "hoge"}
%{a: 1, b: 2, c: 3}
%{a: 1, b: "hoge"}
2
0
{%{b: 2, d: 4}, %{a: 1, c: 3, e: 5}}
{%{}, %{a: 1, b: 2, c: 3, d: 4, e: 5}}
{%{b: 2, d: 4}, %{a: 1, c: 3, e: 5}}
{%{}, %{a: 1, b: 2, c: 3, d: 4, e: 5}}
[a: 1, b: 2, c: 3]
[]
%{a: 1, b: 4, c: 3}
%{a: 1, b: 4, c: 3}
%{a: 1, b: 2, c: 3, hoge: "fuga"}
[1, 2, 3]
```

# 成果物

https://paiza.io/projects/3RJA9bq5TsAuE5U56Yup_Q?language=elixir


以上。
paiza.ioでelixir その27

# 概要
paiza.ioでelixirやってみた。
defstruct使ってみた。

# サンプルコード

```
defmodule User do
  defstruct name: "John", age: 27
end

defmodule Main do
  def main do
    john = %User{}
    IO.puts(john.name)
    IO.puts(john.age)
  end
end

Main.main

```

# 実行結果

```
John
27
```

# 成果物

https://paiza.io/projects/FIwDiSLLxmjA_njdCpeiuQ

以上。
microCMSのデータをJavaScriptで取得したときに、ハイフンつなぎの項目にアクセスできなくて困った件

自分の制作実績をmicroCMSで管理していて、そのデータを静的サイトにJavaScriptSDKを使って、Fetchしようとしたときに、ハイフンつなぎのデータにうまくアクセスできなくて困りました。
そのときに調べて理解できたことをメモしておきます。
## 問題の状況
https://www.npmjs.com/package/microcms-js-sdk
こちらの記事を参考にデータをFetch
ここまでは超スムーズにできて、自分の成長を感じます😆

res.createdAt　とばっちりデータにもアクセスできた！となっていたのですが、
res.works-title としたときに、なにやらエラーっぽい波線が引いてあります。
console.logしてみると、やはりエラーでした。
ハイフンつなぎがだめだということはわかったのですが、
その先、どうすればいいかわからないとなってしまいました。

## microCMSのデータはObject形式でやってくる
```javascript
const { createClient } = microcms;
// Initialize Client SDK.
const client = createClient({
  serviceDomain: "domain", // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
  apiKey: "api-key",
});

client
  .getListDetail({
    endpoint: 'works-main',
		contentId: 'english-school',
  })
  .then((res) => {
		console.log(res)
	})
  .catch((err) => console.error(err));

```

`res`にObject型でデータが渡ってきます。

このObject型データにアクセスする基本形は2つ

### ドット
`res.createdAt`
という形でアクセスします。
ぼくのなかでは一番ポピュラーな形でした。

そしてぼくのmicroCMSのデータの中に
「works-title」
という項目がありました。
`res.works-title`
これではアクセスできないのです。
どうすればいい！と調べると、次の記事に助けられました。
https://web-dev.hatenablog.com/entry/web/js/lang/access-to-json-hyphen-key

### 角括弧
`res['key']`
角括弧でkeyを指定すると、そのkeyに対応するデータがとれます。
```
const createdAt = res['createdAt']
const worksTitle = res['wroks-title']
```
これで一安心。
制作実績を無事自分のサイトにひょうじできます。
でも、これって1つずつ、アクセスして、変数に代入して使うのか？
そういえば「分割代入」というやつがあったな。

## 分割代入したい！
分割代入という便利な仕組みがあります。
例えば resというデータの中身が
```javascript
{
id: 'english-school', 
createdAt: '2022-08-14T08:49:34.112Z', 
updatedAt: '2022-10-29T23:20:37.810Z', 
publishedAt: '2022-08-14T08:49:34.112Z'
・・・
}
```
こんな感じのデータなら
```
const { id, createdAt } = res
```
とすると、id,createdAtという変数ができちゃうといいうやつです。
ということで、works-titleを分割代入しようとして

```
const { id, works-title } = res
```
としましたが、だめでした。
次に助けていただいたのは、こちら
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
ご存知MDN様です。
```
const { id, 'works-title': worksTitle } = res
```
これで無事データをとることができました！

あらゆる状況を想定して、言語仕様が作られているということなんだなと感激しました。
いや、これは超基本なのだろうなと、なんとなくコードを書いてきた自分を
戒めるきっかけとしたいと思います。

## 気づき
ウェブ制作で、けっこうハイフンつなぎでクラス名とかつけることが多いので、
その流れで、項目名とかもつけてしまっていました。
その後、どんな環境でそれを使うかなど、考えてやったほうが良いなと思いました。

それまでは、GtasbyでmicroCMSを扱うことが多かったので、
基本、GraphQLでしたが、このハイフンつなぎ問題とかも、
そこでよしなにしてくれているんだなと感動しました。
47歳でAtCoder黄レート入りした話

# はじめに
筆者は現在47歳、競技プログラミングを始めてかれこれ12〜3年、AtCoderを始めてからは6年ちょっとになりますが、このたびAtCoderアルゴで念願の黄レートになることができました。

この記事はいわゆる色変記事になりますが、この年代の黄色コーダーは数が少ないと思われますので、年齢特有の内容を中心に書いてみたいと思います。

# 黄色コーダーになるまで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/202945/c93b5212-0edf-79ab-17fb-189dc8f2848b.png)

AtCoderを始めたのは2016年なので42歳の頃です。すぐにレート1956までは到達しましたが、グラフを見てわかる通り、その後しばらくコンテストにあまり参加しない時期がありました。
2019〜20年にかけて何度か参加しましたが、年齢による衰えなのか周囲のレベルが上がったのか、レートは下がる一方で水落ちの危機を迎えました。
2021年から本格的にコンテスト参加を再開し、しばらくは停滞していましたが、2021年末頃から上昇基調に入り、2022年10月29日に47歳11ヶ月で入黄を果たすことができました。

# 年齢を克服するために
歳をとってくると、いろいろと新たな敵が現れます。
- 老眼
- 記憶力の低下
- 思考スピードの低下
- 集中力の低下

この辺りが主なところです。これらを克服するための取り組みを書きます。

### 大きなディスプレイを買った
2020年頃からCOVID-19の流行でテレワークになったということもありますが、32インチのディスプレイを購入しました。これにより2つの効果がありました。

- ソースコードを大きな文字で表示させることができる
- ソースコードと問題文(ブラウザ)を並べて表示することができるようになる

前者は当然老眼対策なわけですが、後者は記憶力低下の対策になりました。ソースコードと問題文を並べて表示することで、特にインプットの読み込み部分を問題文を見ながら実装することが可能になります。もし並べて表示できない環境であれば、問題文を見て一時的にインプットを記憶し、エディタに切り替えて実装することになりますが、歳を取ってくるとこのような一時記憶が特に弱くなり、ウィンドウの切り替えの回数が結構増えてしまって時間のロスにつながります。こういうのは環境面で解決してしまいましょう。

### メンタルの強化
これも競プロ向けに買ったわけではないのですが、メンタルトレーニングの本を買って読みました。野球とかでも若い頃は豪速球で勝負していたピッチャーが技巧派に転じるケースがあるように、衰えてくる思考スピードを何かで補えないかなと思い、メンタル面の強化を図りました。

と言ってもまだまだメンタル弱いですが、多少つまづいてしまってもパニックにならずに立ち直れる（こともある）ようになりました。

大成功が見込みにくくなってきた分、大失敗しないようにすることも大切だと感じています。

### ツールの整備
同じくスピードの衰えの対策として、事前にできる準備はするようにしました。能力は衰えつつあるので、なりふり構わず使えるものは使っていきます。具体的には、以下を整備しました。

- テストケースの自動ダウンロード、自動テスト、自動submitツール(ojツールをラップして自作)
- スニペットの整備(modの値、インプット読み込み等)
- コピペ用のライブラリの整備(セグメント木、UnionFind、modInv等たくさん)

### リフレッシュタイム
コンテストは通常100分〜120分程度で、若い頃はこれくらいの時間は普通に集中力が続きましたが、歳を取って途中で疲れてくるようになりました。コンテスト中に少し難し目の問題に当たったくらいのタイミングで1〜2分おやつタイムを取って、また難問に集中して取り組めるようにリズムを変えました。

完全に休憩するのはさすがにちょっと時間がもったいないので、次の問題を読んで内容を把握したくらいの状態で、ざっくり方針を考えながら休憩を取るようにしています。

# その他の努力
当然ではありますが、黄レートに到達するには年齢対策以外の普通の努力も必要です。他の方々の色変記事でもいろいろ触れられていると思いますが、自分がやったことを簡単に書いておきます。

### 競プロ典型90問
2021年4月から[競プロ典型90問](https://qiita.com/e869120/items/1b2a5f0f07fd927e44e9)という企画があり、これにリアルタイムで参加しました。競プロ歴はそこそこ長かったものの、典型と言われる手法を系統立てて学んだことがなく、コンテストに参加していても知らない解法が必要なケースも結構多かったので、大変勉強になりました。
典型90問については、紹介されていた類題も含めて(難易度が高すぎたものを除いて)ほぼ解きました。

これで基礎力がだいぶ上がったと思います。

### AtCoder Problems Recommendation
[AtCoder Problems](https://kenkoooo.com/atcoder/)というサイトにRecommendationという機能があります。これは自分にちょうど良い難易度の問題をオススメしてくれるものですが、これをひたすら解きました。結果的に現時点でほぼ青埋めした状態(96.7%)になっています。
典型90問とこのRecommendationで、最低1日1問解いて、Streak365日を達成しました。(ただStreakが呪縛になるのも嫌だったので365日に到達したところで一度切りました)

これにより、青diffまではかなり高い割合で解けるという自信ができました。

### コンテスト参加
冒頭のグラフを見てもわかると思いますが、ここ1年以上は毎週のようにコンテストに参加しています。「[GigaCode 2019 | 高校生がプログラミングイベントを主催したおはなし](https://qiita.com/e869120/items/b1440af876b0c26ced0c)」でも紹介されていますが、問題を1500問以上解いている人の87%が黄色以上だそうです。問題数をたくさんこなしていくというのは力になります。現在1266問なので少し早めでしたがおおよそこの基準に当てはまっているかと思います。

レートは上がったり下がったりを繰り返してきましたが、黄色を目指す上でこの1500問を目指すというのを1つの励みとして頑張ることができました。解いた問題数は減らないですからね。

# おわりに
競プロの世界は若者の活躍が目立ちますが、40代を過ぎてもそれなりに楽しんで取り組むことができます。この記事が現在の40代以上の競プロerの参考になるとともに、今の若い方々が歳を取った時に参考になると嬉しい限りです。

黄色になったとは言え、黄色レートの方々と比べると解くスピードも解ける問題の難易度の上限もまだまだ差を感じています。またすぐに青に戻ってしまうかもしれませんが、少しでも黄色に定着できるよう今後も頑張っていければと思います。
VPS(Ubuntu)にSSH接続時にinvalid formatとなった

# はじめに
ここ最近VPSを触っているのですが、WindowsのPowerShellからVPSにSSH接続しようとしたときに、うまくいかなかったのですが、なんとか解決できたので、ほかにも同じように困ってしまった人がいたときのために記事にしておきます。

# 環境
VPS: Conoha VPS (OS:Ubuntu22.01)
ローカル: Windows11

# 経緯
### 暗号鍵作成
VPS側で以下のようにコマンドを打って暗号化キーを作成しました。
パスフレーズはなしで作成しています。
```powershell
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "メールアドレス"
```

### 作成された鍵をWindows側に作成
sshフォルダ内にid_rsaとid_rsa.pubができています。
サーバー側に公開鍵を置いて、クライアント(windows)側に秘密鍵を置く必要があるので、コピーして作成しました。
※これが実はエラーとなる原因でした・・・
```
cat ~/.ssh/id_rsa
```
表示されたKEYをコピー
```conf
-----BEGIN OPENSSH PRIVATE KEY-----
AAAABBBBCCCCDDDDDXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END OPENSSH PRIVATE KEY-----
```
Windows側にid_rsaファイルを適当に作成して、メモ帳で開いて、ペーストして保存する。

# 接続確認
さて、これでOKと思って接続しようとしたところ、以下のようにエラーがでました。
```console
Load key "id_rsa": invalid format
[user]@[xxx.xxx.xxx.xxx]: Permission denied (publickey).
```
フォーマットがあかんと叱られてしまいました。

### フォーマット確認
とりあえずサーバー(Ubuntu)側のフォーマットを確認します。
```
 nkf --guess id_rsa
```
すると結果は LF となっていました。
```console
ASCII (LF)
```

### Windows側のフォーマット確認
サクラエディタ使うと分かりやすいので、そちらで見てみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/956246/c065308c-0069-7bca-a2e5-71d6caef9536.png)
CRLFになってました。

# 解決方法
コピペがダメだったので、Windows側で鍵を作成して、公開鍵だけをサーバーにアップする形に変更しました。

### PowerShellで鍵を作る
```
PS C:\ConoHaVps\id_rsa> ssh-keygen -t rsa -b 4096 -C "メールアドレス"
```
パスフレーズはなしで作成します。
できるのか不安でしたが、PowerShellでもssh-keygenが動きました。
初期状態でできるのか、それとも今までいろいろと触ってきた中で入れてあったのか覚えていないですが、自分の環境で動いたので、使えるということだけは事実です。(確認不足すみません)
ちなみに、できあがった鍵をサクラエディタで見たところ、無事にLFとなっていました。

### scpでサーバーにアップ
公開鍵(id_rsa.pub)をアップロードします。
``` 
scp id_rsa.pub [user]@[xxx.xxx.xxx.xxx]:.ssh
```

### ログインしてみる
先ほど作成した秘密鍵(id_rsa)を使ってログインしてみます。
```
 ssh -i id_rsa [user]@[xxx.xxx.xxx.xxx]
```

無事にログインできました！
diffusers 0.7.0.dev0をColabで試す

diffusersの不具合が次のリリースで解消するか検証しました。

https://qiita.com/cress_cc/items/e23e822bf17b08d04b23

有志の方が修正してくれたものの、メインブランチにマージされていないようだったので、マージ元のものをチェックアウトします。

```bash:
#git clone https://github.com/huggingface/diffusers.git
git clone https://github.com/hadaev8/diffusers.git
cd diffusers
git fetch
git checkout fix-negative-promt
pip install .
```

問題なさそうなので、あとは正式リリース待ち。
VRM Memo

https://booth.pm/ja/items/2437978
https://note.com/koaro_11/n/nd4c91ff13a2e
https://hinzka.hatenablog.com/entry/2021/05/05/233915
https://hinzka.hatenablog.com/entry/2021/12/02/005814
https://github.com/hinzka/52blendshapes-for-VRoid-face
ABC275回答メモ

0.はじめに
　A問題からなんか歯ごたえがあり、それでもBまではすんなり解けましたが
　Cが解けず時間切れ、Dもちんぷんかんぷんでした。
　ビギナーとは・・・。
　ただ、レイティングは1しか下がらなかったので、他の人も
　難しかったんだろうなと思いました。
　C,Dは試験の翌日解説等参考にしながらなんとか解けました。


1. 	A - Find Takahashi
　Aから配列を使う問題か・・・と思いつつさっと実装しテスト。
　したら、最も高い橋の高さではなく何本目が一番高いかという
　問題であることに気づきなかなか難しいな！となりました。
　とはいえ、まぁ、最高値を更新した番号を覚えて置き
　表示することで解決。

　https://atcoder.jp/contests/abc275/submissions/36037869

2.　B - ABC-DEF
　Aに比べたら簡単だけど、Python以外だと型とかめんどいのかなと思いつつ
　ササっと回答

　https://atcoder.jp/contests/abc275/submissions/36041382


3. 	C - Counting Squares
　てこずりました。そして時間切れ。
　例題の入力形式にある斜めの正方形が正方形ということにしっくりこず
　これを正方形というのは無理があるのでは？という質問を投げかけようと
　思ってしまいました。

　考え方(最初は2次元表を作り判定・・・等無駄に複雑でしたが最終的に以下に)
　　1)インプットしながら、"#"のx,y座標を配列Dに保存
　　　→x行-y列順に蓄積される
　　2)Dの各x,y座標から2つを順に組み合わせ辺とし、各辺について
　　　正方形の条件を満たす他2点がないかをチェックし
　　　存在する場合カウント。

　ざっくり↑の考え方で回答したところ半分くらい不正解
　試験時間では原因はつかめなかったけど、一旦寝て
　翌朝試行錯誤して以下に気づく。

　例題にある斜め正方形に対応したチェックをしていましたが
```
..1......
2........
...3.....
.4.......
```
例）座標1(1,3)-座標2(2,1)の辺をもとにした四角形頂点の求め方
　(1)座標１と座標２の行列それぞれの差を求める
　　行の差1-2=-1
　　列の差3-1= 2
　(2)座標１と座標２の対となる点の座標を求める
　　座標1の行に列の差を加え、列に行の差を加える
　　座標1(1,3)→座標3(3,4)
　　座標2の行に列の差を加え、列に行の差を加える
　　座標2(2,1)→座標3(4,2)

逆パターンもあることに気づきそれを加えることで解決しました。
```
.#.......
...#.....
#........
..#......
```
例）座標1(1,2)-座標2(2,4)の辺をもとにした四角形頂点の求め方
　(1)座標１と座標２の行列それぞれの差を求める
　　行の差1-2=-1
　　列の差2-4=-2
　(2)座標１と座標２の対となる点の座標を求める
　　座標1の行に列の差を加え、列から行の差を減らす
　　座標1(1,2)→座標3(3,1)
　　座標2の行に列の差を加え、列から行の差を減らす
　　座標2(2,4)→座標3(4,3)

加えて、辞書に正方形としてカウントした頂点の組み合わせを
記憶し、重複してカウントすることが無いようにして解答表示。
9*9の枠の制限があるのでTLEにならず完了でした。
色々無駄がありそうな実装になりましたが、まぁ通りました・・。

　https://atcoder.jp/contests/abc275/submissions/36081873


4.D - Yet Another Recursive Function
　試験時間に問題を見るも、ちょっと解き方が分かりませんでした。
　試験後にかいせつをみてもメモ化再帰？？字面は見覚えあるけど
　実装方法が分からず、ググってもピンときませんでした。
　ただ、”https://docs.python.org/ja/3/library/functools.html”
　こちらのサイトでメモ化再帰の関数”lru_cache”は
　一回求めたinとoutの組み合わせを
　辞書に登録する的なことが書かれていたので
　自分なりに実装してみました。

```
dict={}                         #登録用辞書
def f(n):
    if(n==0):
        return 1
    elif(n in dict):            #引数が辞書にある場合は辞書の値を返す
        return dict[n]
    else:
        r=f(n//2)+f(n//3)
        if(n not in dict):      #引数が辞書にない場合は辞書に登録しておく
            dict[n]=r
        return r
#--
N=int(input())
print(f(N))
```
関数の説明だけだと、理解できませんでしたが自分で
関数を作ることで、理解できるようになりました。

　https://atcoder.jp/contests/abc275/submissions/36082238
Databricks Unity Catalog のカタログ情報を収集するには？ (Information Schemaって何？）


# はじめに

DatabricksのUnity CatalogにはInformation Schemaというシステム情報を格納しているテーブルが作成されます。これを利用する事でUnity Catalogのテーブル情報や権限情報などのカタログ情報が取得できるとのこと。

> Information Schema について
> https://docs.databricks.com/spark/latest/spark-sql/language-manual/sql-ref-information-schema.html

Unity Catalogを利用すると、以下のような構造のテーブルがinformation_schemaというスキーマ下に作成されます。
これをチェックすれば好きな情報が取得できるのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/64b1816f-be5c-a64c-b3f4-ad019200cf41.png)

# Information Schemaを使って情報をチェックしてみる

それでは早速に上記のInformation Schemaを見てどんな事ができるかチェックしてみましょう。

その前にUnity Catalogを利用すると自動的に４つのカタログが表示されます。(hive_metastore, main, samples, system)
この中のsystemというカタログにはメタストアに格納される全カタログの情報が収集されるため、全体をチェックしたい場合はこちらのsystemカタログにあるInformation Schemaを見るといいでしょう。

また、hive_metastoreカタログの情報はUnity Catalogではないため、このInformation Schemaには含まれない点をご注意ください。こちらは従来のHiveカタログにアクセスするためのものになります。


## 1. 全てのカタログ、スキーマ（データベース）とテーブル一覧の収集

```sql
SELECT
  table_catalog,
  table_schema,
  table_name,
  table_owner,
  comment,
  table_type,
  data_source_format
FROM
  system.information_schema.tables
WHERE
  table_schema != 'information_schema'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/d53fa868-8163-aaf0-0168-14e42a48c5a3.png)


## 2. テーブルの権限確認

```sql
SELECT
  *
FROM
  system.information_schema.table_privileges
WHERE
  table_schema != 'information_schema'
```
Databricks SQLでは下記のようにフィルターも作成出来るため特定のカタログやスキーマに絞るのも簡単にできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/aeb91f4c-ae79-f18b-8ded-48266161cf65.png)


## 3.最近1時間以内に作成されたテーブル情報

```sql
SELECT
  table_name,
  table_owner,
  created_by,
  last_altered,
  last_altered_by,
  table_catalog
FROM
  system.information_schema.tables
WHERE
  datediff(now(), last_altered) < 1;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/93bbd7da-c96c-bade-7afc-587174f11cdf.png)

## 4.　カラム数の多いテーブルを多い順にリストする

```sql
SELECT
  table_schema,
  table_name,
  count(column_name)
FROM
  system.information_schema.columns
WHERE
  table_schema != 'information_schema'
GROUP BY
  table_schema,
  table_name
ORDER BY
  3 DESC
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/e2715e5f-0762-c1df-5d94-cb5f7b05ef2c.png)


# 最後に

Information_schemaのテーブル情報はまだまだあるのでいろんな分析が出来そうです。

また、これらをすぐにチェック出来るようにダッシュボードを作成しておいたり、特定条件のテーブルなどを見つけたらアラートをあげるなどしておけば運用にも役にたちそうですね。


UnityCatalogセットアップについてはこちらもご覧ください。
https://qiita.com/maroon-db/items/57cee03cef202c839b94
M5Stackからpingを発信するメモ

M5Stackからpingを発信する方法メモ

https://github.com/pvint/ESP32_ping

から、ファイルをダウンロード・展開し、ディレクトリ名を``ESP32_ping-master``から``ESP32_ping``に変更し、
``~/arduino/libraries/``にディレクトリごとコピーする。
構造的に``~/arduino/libraries/ESP32_ping/libraries/Ping.cpp``みたいになる。

ソースコードとしては、

```

//（M5Stack.hとかWiFi.hにかかる部分は省略）
#include <ping.h>

//（中略）
void loop(){
    IPAddress adr=IPAddress(1,1,1,1); //オクテット単位でカンマで区切る
    ping_start(adr,2,0,0,5) //戻り値はtrueかfalseのbool型
                            //引数はIPアドレス、回数、インターバル（0は規定値1）、サイズ（0は規定値32）、タイムアウト（0は規定値1）
                            //単位は秒・バイト？
//（略）

```

となる。

---
参考

https://qiita.com/nanbuwks/items/06f87b278a3d2269e39a

自分の環境ではエラーが出たため、フォーク版で修正されていたものを利用。
get/set簡単にまとめてみた

## はじめに
get/set・didSet/willSet先に呼ばれるのはどっち？どう呼ばれるの？呼ばれる際にどういうことはできるの？そんな超基本的な使い方を簡単にまとめることとする。間違い・補足等があればコメントください。

## get/setの詳細
下記コードのように変数や定数の後に{}があるものを**コンピューテッドプロパティ**という。
**コンピューテッドプロパティ**とは値を自分自身で**持たない変数**のことである、ちなみに、ptorocolでの変数定義の際、同じような表現方法のためセットで覚えておくと良いかも。また、それとは逆に**ストアドプロパティ**と呼ばれる変数がある。こちらは値を自分自身で**持つ変数**のことである。
* getは読み取り専用/setは書き込み専用と理解しておく
    * setが先に呼ばれ、setでセットした値はnewValueに格納される
    * そのため、処理の順番はsetで値を書き込む → その書き込んだ値を元にget値を取得するというイメージ
```swift:Swift
//ストアドプロパティ
var stored: Int = 1 //今回は使わない

//コンピューテッドプロパティ
protocol computed {
    var taxPrice: Int {get set}
}

//定義（税抜、税込を想定したクラス）
class Price: computed {
    
    //ストアドプロパティ 今回、setが呼ばれることによってここの値が変化していく
    var noTaxPrice: Int = 100
    
    //コンピューテッドプロパティ ここで値をあれこれする
    var taxPrice: Int {
        //setが呼ばれた場合２番目に呼ばれる処理
        get {
            return noTaxPrice * 2
        }
        //setが呼ばれた場合１番目に呼ばれる処理
        //インスタンス化し、taxPriceに新たに値をセットした際はnewValueに格納される。
        //値はnewValueに格納されるのであって、taxPriceには格納されない。
        set{
            self.noTaxPrice = newValue / 2
        }
        
    }
}

//インスタンス化
let price = Price()
//set{}が呼ばれる、この300はnewValueへ格納される
price.taxPrice = 300

//出力
//setが呼ばれた場合、self.noTaxPrice = newValue / 2 の計算結果がnoTaxPriceプロパティに格納される
print(price.noTaxPrice) //150
//set → get の順で呼ばれる
print(price.taxPrice) //300
```

## おわりに
むずかしい。

## 参考記事
[【swift】get、setってなんのこと？](https://qiita.com/miyakooti/items/a8ac0896eb912c60bd1f)
[Swift : 変数の後に{ }・・これはComuputedプロパティ(get/set)というものです。
](https://fuuno.net/swift/computed/computed.html)
## 開発環境
- Xcode-13.4.1
- iOS13以降
KAGOYA VPSのUbuntu 20.04にDockerをインストールしてみる

KAGOYA VPSを契約したのでUbuntu 20.04にDockerを入れてみる。

# Dockerインストール
下記のDocker docsに従います。
https://docs.docker.com/engine/install/ubuntu/

Docker入っていたら消す。
~~~
$ sudo apt-get remove docker docker-engine docker.io containerd runc
~~~
リポジトリのセットアップ
~~~
$　sudo apt-get update
$　sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
~~~


~~~
$　sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

$　echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
~~~
~~~
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
~~~

~~~
$ docker -v
~~~
Docker version 20.10.21, build baeda1f
以上でインストール完了です。

# Docker-composeのインストール

インストール（ビルド不要）
~~~
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
~~~
アップデート
~~~
$ docker-compose migrate-to-labels
~~~
アンインストール
~~~
$ sudo rm /usr/local/bin/docker-compose
~~~
都道府県マスタをDBに作成する理由

どのサイトでも使用する都道府県データ。
都道府県のような変更が起こりにくいものもDBに登録しておくのが一般的です。

変更がないからDBに登録するのではなく、ソースに書きたいと思う人もいるかもしれません。
そういう時でも、DBに持っておいたほうが後々便利です。

というのも、都道府県のような情報は、いろいろな場面で使用するからです。
例えば、検索時に都道府県から選択させる時。または、ユーザーの出身地を登録する時。配送元 or 配送先を設定する時などなど。

2つ以上の画面で使用する場合は、DBで管理しているほうが開発の手間も削減できます。
加えて、専用の取得メソッドも作成しておくと、簡単に使えますね。

リレーションを意識すると、なおさらDBに登録することをオススメします。

## リレーションして使う場合は、あらかじめE-R図を書いておくこと
例えば、「ユーザーに都道府県の情報を紐づける」などの時は、E-R図に関係性をまとめておくとスムーズに開発が進められます。
この場合は、ユーザーのテーブルで都道府県のIDを持つことが多いでしょう。

ある程度、システム開発の経験を積んでいると経験値的にパパッと済ませられることですが、まだまだ慣れていない時は難しいかもしれません。

また、実際の開発では、ユーザーと都道府県以外にもテーブルを作成する必要があります。
システムの規模にもよりますが、100以上のテーブルを用意することは、よくあることです。
E-R図で全てのテーブルの関連性を決めておくことが大事ですね。

## 改修の時もマスタが活躍します
新しく機能を追加する。
既存のテーブルを変更する。

システム開発には、機能を付け加えることが多々あります。

システムに新機能を追加する時も、都道府県のようなデータは使われることがあります。
マスタとしてDBに登録していると、こういう場面でも気軽に呼べて便利です（開発の工数も軽減できますね）

設計の段階で、将来的に工数を軽減できるかまで考えて、作っていくのがベストですね。
paiza.ioでelixir その26

# 概要
paiza.ioでelixirやってみた。
パイプラインでzundoko書いてみた。

# サンプルコード

```
Stream.repeatedly(fn ->
	Enum.random(["ズン", "ドコ"])
end)
|> Enum.reduce_while([], fn x, acc -> 
    acc
    |> (&(List.starts_with?(&1, ["ドコ", "ズン", "ズン", "ズン", "ズン"]) && !List.starts_with?(&1, ["ドコ", "ズン", "ズン", "ズン", "ズン", "ズン"]))).()
    |> if(do: {:halt, ["キ・ヨ・シ！" | acc]}, else: {:cont, [x | acc]}) 
end)
|> Enum.reverse
|> Enum.each(fn x ->
	IO.puts x
end)
```

# 実行結果

```
ドコ
ドコ
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ズン
ドコ
ズン
ズン
ズン
ドコ
ドコ
ドコ
ドコ
ドコ
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ！
```

# 成果物

https://paiza.io/projects/Zx2iOiCqQRdS9UmNLX9y_A


以上。
標準入出力・リダイレクト・パイプ - Perlプログラミング入門【Windows・Mac・Linuxテキスト処理】

標準入出力とリダイレクト・パイプについて解説しました。

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

Perlで標準出力
Perlで標準エラー出力
Perlで標準入力を読み込む
リダイレクト
パイプ
パイプの連結
素早くファイルへの出力作業を終わらせる

パイプの仕組みを理解する - Perlゼミ
https://perlzemi.com/blog/20080801121768.html

標準入出力とリダイレクト - Perlゼミ
https://perlzemi.com/blog/20080731121760.html


Perlプログラミングちゃんねるは、初級者向けのPerlプログラミング入門です。Perlテキスト処理プログラミングを覚えると文章の中に含まれる文字を簡単に検索・置換できるようになります。対応OSは、Windows/Mac/Linuxです。

テキスト処理プログラミングは、一番簡単なプログラミングの分野のひとつです。プログラミングが初めての方でも大丈夫。テキスト処理は、あらゆる分野に登場するので、実用性も高いです。

Perlのダウンロードとインストールからはじめて、Perlの基本的なプログラミングが書けるようになります。Perlゼミの無料オンラインテキストも活用できます。わからないことがあれば、Perlクラブフォーラムで、質問することができます。

木本裕紀のプロフィール

Perlゼミを運営しているPerlクラブ代表の木本です。次世代プログラミング言語SPVMの作者。CPANモジュール、Giblog、DBIx::Customの作者。Youtube「Perlプログラミングちゃんねる」。YAPC::Kansai 2017 OSAKA ゲストスピーカー。技術評論社「業務に役立つPerl」著者。
自宅のルーター遍歴


いろいろとルーターを買い換えてきましたが、なかなかIPv6で安定するルーターがなくずっと悩んでいます。
もしいいルーターがあれば教えてほしいです。

■エレコム
　・WRC-X3200GST3-B
　　https://www.elecom.co.jp/products/WRC-X3200GST3-B.html
　　⇒MTG中に落ちるので買い換え

■I/Oデータ
　・WN-DAX3000QR
　　https://www.iodata.jp/product/network/wnlan/wn-dax3000qr/
　　⇒IPv6でバグがあるっぽい。サポートに問い合わせするも解決せず買い換え
　・WN-DAX1800GRW
　　https://www.iodata.jp/product/network/wnlan/wn-dax1800grw-y/
　・WN-DEAX1800GR
　　https://www.iodata.jp/product/network/wnlan/wn-deax1800gr/
　　⇒APなら使える。

■バッファロー
　・WSR-2533DHP3
　　https://www.buffalo.jp/product/detail/wsr-2533dhp3-bk.html
　　⇒映画とかを複数DLするとハングするので買い換え
　★WXR-6000AX12B
　　https://www.buffalo.jp/product/detail/wxr-6000ax12b.html
　　⇒いまこれ、DHCPのDNSアドレスが指定できるのでいい

■NEC
　・UNIVERGE IX2106
　　https://jpn.nec.com/univerge/ix/Info/ix2106.html
　　⇒RTXの後釜。コマンドにクセがあるが安定していた。マンションのWifi設置スペースの問題で買い換え

■YAMAHA
　・RTX1500
　　https://network.yamaha.com/products/routers/rtx1500/index
　　⇒長年愛用。安定していたがアップリンクが100Mbpsなので買換を余儀なくされた
　・RTX3000
　　https://network.yamaha.com/products/routers/rtx3000/index
　　⇒高性能で良かったが電源に爆弾を抱える。2台電源が逝って買い換えた

※中華系のルーターは買わないのです。
paiza.ioでelixir その25

# 概要
paiza.ioでelixirやってみた。
再帰でfizzbuzz書いてみた。

# サンプルコード

```

defmodule Fizzbuzz do
    def say([]) do
		0
	end
	def say([head | tail]) do
	    cond do
		rem(head, 15) == 0 ->
			IO.puts "FizzBuzz"
		rem(head, 3) == 0 ->
			IO.puts "Fizz"
		rem(head, 5) == 0 ->
			IO.puts "Buzz"
		:else ->
			IO.puts head
		end
		say(tail)
	end
end

Stream.iterate(1, fn(n) ->
	n + 1
end)
|> Enum.take(100)
|> Fizzbuzz.say




```

# 実行結果

```
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
```

# 成果物

https://paiza.io/projects/oq-eXSlTtOes8ygDT9g0cA


以上。
SNSでの戦略転換

SNSでの戦略転換します。　

# followerがfolloweeより桁違いで多い方をfollowerから外させていただきます。　
桁違いとは10倍以上を指します。


ただし、followして下さっている方は除きます。　

別記事に書いたように。ネットで最初にいろいろご指導いただいたのはWOMさんです。書くだけで読まない方。機器製造業の営業の方でした。　

人の書いたものを読まない方が嫌いな訳ではありません。読まずに書く方とはネット上で関わらないようにし、実営業でご支援差し上げようと言う意図です。　

試しに100にん確認したら5人follow外させていただきました。

# 従来方針　

## 市場調査、市場誘導　
たくさんの方をfollmwし市場どうこを確かめます。能動測定をするためもします。　

## followerに迷惑がかりそうな方はfollowしない
データサイエンティストになるために安く勉強する

データサイエンティストになるには、データ分析の知識はもちろんとして、データ分析ツールをちゃんと使いこなせることが重要となります。

しかし、データ分析のツールは基本高くて、個人が勉強用に契約するには高すぎます。
それを解決する方法がありました。ズバリ”放送大学”へ入学することです。


SalesforceのTableau
月$79の使用量→学生サービス無料

EXPLORATORY
データベースまで使用が可能で学生サービス無料

放送大学
入学：最低3万円＋授業半年で5000円

生涯学習としての大学利用の割あがい多い放送大学の学生証で本当に学割登録できるのか？と疑いの目をかけている方もいらっしゃるかもしれませんが、私が所属している[放送大学SNS](https://sites.google.com/campus.ouj.ac.jp/portal/)の中ですでに成功例も出ています。
もし、Tableau,EXPLORATORYを安く手に入れたいならそう言った方法でどうでしょうか！
2022/10/30主にITとかセキュリティの記事

16万7000超のクレジットカード情報を盗んだPOSマルウェアに注意(10/28)
https://news.mynavi.jp/techplus/article/20221028-2496541/

クレカ情報流出…サービス導入していた「ABC-MART」ら各社が謝罪　少なくとも3000件以上報告(10/27)
https://news.yahoo.co.jp/articles/778f7c86a8b9ac26b0ffcccf58e18b4d0211cf71

グーグル、Web3開発を支援する新サービス「Blockchain Node Engine」を発表(10/28)
https://japan.zdnet.com/article/35195279/

「不正にログインされた可能性」とメッセージ…ＳＭＳを悪用、スミッシング被害が多発(10/28)
https://www.yomiuri.co.jp/national/20221028-OYT1T50119/

公開されたばかりの「Google Chrome 107」にゼロデイ脆弱性 ～アップデート版が公開 深刻度は「High」(10/28)
https://forest.watch.impress.co.jp/docs/news/1451260.html

【鼎談】高度化・巧妙化し続けるサイバー攻撃に対応するために――SASE・EDR導入の勘どころ(10/28)
https://news.mynavi.jp/techplus/kikaku/20221028-2494564/

マルウェアとウイルス、何が違う？ 誤解を整理(10/28)
https://news.mynavi.jp/techplus/article/20221028-2494804/

件名「【新生銀行】必ずご回答ください／お客様の直近の取引における重要な確認について」のメール、新生銀行をかたるフィッシングに注意(10/27)
https://news.yahoo.co.jp/articles/351d4f87b55fda97d1dd571d6f589505e2437101

ISR、「ハードウェアベースの認証」の重要性を強調　“新冷戦時代”において必須のサイバーセキュリティ対策に(10/28)
https://cloud.watch.impress.co.jp/docs/news/1451274.html

WSUSとは何か？主な機能や必要性、IT資産管理の重要性について(10/28)
https://japan.cnet.com/release/30793466/

DKIMとは？ なりすましメール対策の仕組み、SPFやDMARCとの違いを図解(10/28)
https://ascii.jp/elem/000/004/110/4110579/?rss

「サイバーセキュリティ経営ガイドライン Ver3.0」の意見募集が開始に
https://www.security-next.com/140973

サプライチェーン全体のサイバーセキュリティ向上のための取引先とのパートナーシップの構築に向けて(10/28)
https://www.jftc.go.jp/dk/guideline/unyoukijun/cyber_security.html

XDRとは何かをわかりやすく解説、EDRと何が違う？セキュリティ検知統合のメリット(10/27)
https://news.yahoo.co.jp/articles/b3b6b2c6c3a45b034ec0eb1ee2ec6a74661b3fc2

解雇された“著名ハッカー”が「Twitterは欠陥と不正だらけ」との衝撃告発(10/28)
https://techtarget.itmedia.co.jp/tt/news/2210/28/news08.html

CoinMarketCapを検索するとGoogleが詐欺サイトを表示する不思議(10/28)
https://nextmoney.jp/?p=54085

【オンライン】量子サイバーセキュリティ最前線：QKDとPQC(11/15開催)
https://quantinuum.connpass.com/event/264001/

チェック・ポイント、9月の世界脅威インデックスを発表　東欧各国の脅威ランクが軒並み上昇(10/28)
https://enterprisezine.jp/news/detail/16877

チェック・ポイント、2022年9月に最も活発だったマルウェアを発表　2月より国内1位に君臨していたEmotetがランキングから外れる結果に(10/28)
https://www.jiji.com/jc/article?k=000000150.000021207&g=prt

SSDでもHDDでもなく、今こそ「テープ」の理由(10/28)
https://forbesjapan.com/articles/detail/51395

Google Cloud、Web3開発のためのフルマネージドノードホスティングを発表(10/28)
https://news.mynavi.jp/techplus/article/20221028-2497746/

デジタルガバナンス・コードとは？概要や改訂のポイントなどを解説(10/28)
https://retailguide.tokubai.co.jp/knowledge/29895/

【墨汁速報】チームファイナンスのハッキングでユニスワップの流動性がドレインされる(10/28)
https://coinchoice.net/team-finance-hack-relusts-uniswap-v2-liquidity-drain_bnews/

【原因と対処法】「ファイルまたはディレクトリが壊れているため読み取ることができません」(10/28)
https://cybersecurity-jp.com/column/74103

「これからのコーポレートサイト制作」をCMSの変遷から考えてみる(10/28)
https://note.com/plusjam/n/nc53b88f0f50c

ビットコインの暴落トップ5を振り返る(10/28)
https://www.coindeskjapan.com/163986/

マイナンバーについてわかりやすく解説　なぜ必要？　どう管理する？　事業主が守るべきルールとは(10/28)
https://zuuonline.com/archives/242168

再び急増中の「振り込め詐欺」被害　中国人ハッカー集団が「日本人のカード情報を毎日数百件抜き取る」驚きの手口(10/28)
https://news.yahoo.co.jp/articles/eea9b551496f33631b1f9ea5154ac156b2e4ba71
Visual Studio2022からGitHubへプッシュする方法

# TL;DR
- あらかじめGitHub側で新しいリポジトリを作成しておく
- Visual Studio2022のトップページからリポジトリのクローンを作成
- Git変更ウィンドウからすべてor変更したい部分をコミットしてプッシュ


# 背景
-  C言語の学習記録用にGitHubのバージョン管理をするためVidualStudioとの連携を試みました
-  新規プロジェクトのメニューバーにあるGitからリモートリポジトリを設定しようとするも悉く失敗…
※主に起きたエラー
・Gitリポジトリの設定にあるリモート項目へGitHubのアドレスを追加しても表示されない
・なんとかgit pushに繋げるも「.suo」ファイル（VSの一時的ファイル）になってしまい、文字化け祭り
・VSで作成したプロジェクトをデスクトップ上に新たに作成したディレクトリに保存し、gitbushで飛ばすという回り道をするも、出力部分しかプッシュされず失敗
・「すべてをコミット」しようとすると一部のファイルに認証エラーが発生する

# 解決
①あらかじめGitHub上で新規リポジトリを作成
②Vidual Studioのトップ画面からリポジトリを複製し、ソリューションエクスプローラー横のGit変更ウインドウから**プッシュしたい変更のみ選択**
③すべてをコミットしプッシュを押下

※チームで開発されている方はメニューバー→表示→同期で解決できるようです


# 参考
- [Visual Studio のバージョン コントロールに関するドキュメント](https://learn.microsoft.com/ja-jp/visualstudio/version-control/?view=vs-2022)
- [ローカルリポジトリへのコミットとGitHubへのプッシュ (Visual Studioの使い方 Tips)](https://www.ipentec.com/document/visual-studio-2019-github-commit-and-push-using-team-explorer)
Windows10のコマンドプロンプトでカーソルが消える問題

### 環境
```
OS Version:                10.0.19044 N/A Build 19044
Hotfix(s):                 19 Hotfix(s) Installed.
                           [01]: KB5017262
                           [02]: KB4562830
                           [03]: KB4570334
                           [04]: KB4577586
                           [05]: KB4580325
                           [06]: KB4586864
                           [07]: KB5003791
                           [08]: KB5012170
                           [09]: KB5018410
                           [10]: KB5006753
                           [11]: KB5007273
                           [12]: KB5011352
                           [13]: KB5011651
                           [14]: KB5014032
                           [15]: KB5014035
                           [16]: KB5014671
                           [17]: KB5015895
                           [18]: KB5016705
                           [19]: KB5005699
```

### 事象
- コマンドプロンプトのカーソルが消える
- clsしても直らない

### 解決策
マイクロソフトコミュニティの回答にあった方法を実行しました。
https://answers.microsoft.com/ja-jp/windows/forum/all/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97/e8341230-74ec-46c5-8827-649b8e83c3d8

```
C:\Users\xxx>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS C:\Users\xxx>cls

PS C:\Users\xxx>exit
```
原神のドラゴンスパインにいる遺跡守衛の暗号を解読するスクリプトを書いた

**※注意！原神の一部ネタバレを含みます。**
# やったこと
- [攻略wiki](https://gamewith.jp/genshin/article/show/249056)の暗号解読方法をそのままTypeScriptで実装

# スクリプト
```typescript
import * as fs from 'fs';

// ファイル読み込み
const cipherText = readFile('cipherText.txt');
const lineArray = cipherText.split('\r\n');
for (const line of lineArray) {
    // 暗号文を3進数に変換
    const ternaryText = mapToTernary(line);
    const ternaryArray = ternaryText.split(' ');

    // 3進数を10進数に変換
    let numberArray: number[] = [];
    for (const ternary of ternaryArray) {
        if (parseInt(ternary, 3)) {
            numberArray.push(parseInt(ternary, 3));
        }
    }

    // 10進数を、13文字ずらしたアルファベットに変換
    let alphabets: string = '';
    for (const number of numberArray) {
        if (96 + number + 13 <= 96 + 26) {
            alphabets += String.fromCharCode(96 + number + 13);
        } else {
            alphabets += String.fromCharCode(96 + (96 + number + 13) % (96 + 26));
        }
    }
    console.log(alphabets);
}

/**
* ファイルを読み込む
* @param inputFile 読み込むファイルのパス
* @return 読み込まれたファイル内のテキスト
*/
function readFile(inputFile: string) {
    return fs.readFileSync(inputFile, 'utf8');
}

/**
* 暗号文を3進数に変換する
* @param cipherText 暗号文
* @return 変換後の3進数の配列
*/
function mapToTernary(cipherText: string): string {
    const map = new Map<string, string>([
        [".", "0"],
        ["-", " "],
        ["2", "1"],
        ["3", "2"],
    ]);
    let ternaryText: string = '';
    // 暗号文を1文字ずつ取り出し、mapに従って変換
    for (var i = 0; i < cipherText.length; i++) {
        if (map.get(cipherText.charAt(i))) {
            ternaryText += map.get(cipherText.charAt(i));
        } else {
            // mapにない文字は変換しない
            ternaryText += cipherText.charAt(i);
        }
    }

    return ternaryText;
}
```

# 使い方
1. cipherText.txtに暗号文を書いて、スクリプトと同じディレクトリに置く
    ```
    3.2-..3-.23-.32-32.-3..-
    ..2-223-.32-322-..3-..2-
    ```
1. スクリプトを実行すると解読結果が表示される
    ```
    forthe
    nation
    ```

# なんでやったの
- 仕事でTypeScript使うことになったので軽く予習するため
- スメールにいる遺跡守衛の暗号解読結果がwikiに未記載で、同じやり方で解読できそうと思ったけど手でやるのが面倒なため  
↑普通に[別のwiki](https://wikiwiki.jp/genshinwiki/%E6%9A%97%E5%8F%B7%E8%A7%A3%E8%AA%AD)にあって草。しかも解読方法全然違う
cronのアクセス制御

cronの利用制限はユーザ単位で実施できる。

ユーザーを制限するには以下の２つのファイルを使う。
・`/etc/cron.allow`
・`/etc/cron.deny`

ファイル詳細確認

```
[root@localhost ~]# ls -l /etc/cron.{allow,deny}
ls: '/etc/cron.allow' にアクセスできません: そのようなファイルやディレクトリはありません
-rw-r--r--. 1 root root 0 10月 25 15:57 /etc/cron.deny
```
デフォルトでは・・・
・cron.allowファイルは存在しない。
・cron.denyファイルは存在するが、空ファイル。

よってデフォルトの状態ではすべてのユーザーがcronを使える。
ただし/etc配下のファイルを編集できるのはrootユーザのみ！


## ユーザ許可設定する

`/etc/cron.allow`にcronの利用制限させたいユーザーを登録する。

```
[root@localhost ~]# cat > /etc/cron.allow << EOF
> tanaka
> yamada
> suzuki
> EOF
[root@localhost ~]# cat /etc/cron.allow 
tanaka
yamada
suzuki
```

viコマンドではなく、ヒアドキュメントで複数行のテキストを記述しました。（新しいlinuxの教科書P.333）

設定が終わったので動作確認をする。
 /etc/cron.allowに登録したユーザーがcrontabを使えるのかを確認する。

現在rootユーザなので一度exitで抜け、tanakaでログインし、crontabは使えるか確認する。


```
[root@localhost ~]# exit
ログアウト
[mgt@localhost ~]$ su - tanaka
パスワード:
[tanaka@localhost ~]$ whoami
tanaka
[tanaka@localhost ~]$ crontab -l
no crontab for tanaka
```

使えることを確認しました。
では、/etc/cron.allowで登録していないユーザーでcrontab使えるか確認。

```
[mgt@localhost ~]$ su - nakajima
パスワード:
[nakajima@localhost ~]$ whoami
nakajima
[nakajima@localhost ~]$ crontab -l
You (nakajima) are not allowed to use this program (crontab)
See crontab(1) for more information

```
nakajimaはcrontab利用が許可されていないことを確認できます。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

# エラー内容
- railsでサーバーを起動しようとしたところ下記エラーが発生

``` ターミナル
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
```

# 原因
- mysql.sockファイルがないと言われているよう
- ファイルが突然消えることがあるらしい

# 対処法

- mysql.sockファイルを作成
```
$ sudo touch /tmp/mysql.sock
```

- MySQLを再起動
```
$ sudo mysql.server restart
```

無事サーバーに接続できた。


[参考にしたサイト]https://zenn.dev/ogakuzuko/articles/6958a35833d4fd
これまで買った本

これまで自分が買った本をここに書き溜めていきます。
仕事で必要になったから買った本はもちろん、仕事では一生使わないが教養として身につけたいと思って買った本や、単純に興味があったので買ってみた本などが含まれます。
また、資格試験の対策本なんかも混ざっています。

# プログラミング
仕事では全くやらないので、趣味や教養として。
## 全般
- リーダブルコード
- プログラムはこうして作られる
- プログラムはなぜ動くのか
- オブジェクト指向でなぜつくるのか
## C
- スッキリわかるC言語入門 第2版 
## Java
- スッキリわかるJava入門 第3版
- スッキリわかるJava入門 実践編 第3版
- なぜ、あなたはJavaでオブジェクト指向開発ができないのか
- Head First デザインパターン 第2版

## Python
- 退屈なことはPythonにまかせよう
- Pythonでわかるアルゴリズム入門

## JavaScript
- [改訂新版]モダンスタイルによる基礎から現場での応用まで JavaScript本格入門

## その他
- 実践Rustプログラミング入門

# Windows
- Windows PowerShell クックブック

逆にこっちは仕事で使えたら結構役に立つだろうに、あまり読んでない…

# Linux
- Ubuntuスタートアップバイブル
- CentOS7 で作るネットワークサーバ構築ガイド
- まんがでわかるLinux シス管系女子1～3
- Linuxシステム[実践]入門
- UNIXという考え方
- AWKを256倍使うための本

Linuxはだいたいシス管系女子に教わった。

# コンテナ
- さわって学ぶクラウドインフラ docker基礎からのコンテナ構築

# ネットワーク
- マスタリングTCP/IP 入門編 第6版
- 絶対わかる！ネットワーク超入門　増補改訂版
- Linuxで動かしながら学ぶ TCP/IPネットワーク入門

# Web
- Webを支える技術
- いちばんよくわかるHTML5&CSS3デザインきちんと入門

# データベース
- スッキリわかるSQL入門 第2版

# クラウドサービス
- AWS認定 ソリューションアーキテクトアソシエイト 第2版
- Amazon Web Service インフラサービス活用大全
- ひと目でわかる Power Apps ローコードで作成するビジネスアプリ入門
- ひと目でわかる Azure Active Directory 第3版

# その他
- コンピュータはなぜ動くのか
- 情報はなぜビットなのか
- 電話はなぜつながるのか
- 24時間365日サーバ/インフラを支える技術
- みんなのRaspberry Pi入門　第4版
- 「ひとり情シス」虎の巻
- ひとり情シス ONE MAN IT
- 完全SIer脱出マニュアル

# 買ってないタイプの本
本記事に限らず、ある人がやったことばかり可視化されるが、やってないことはなかなか可視化しづらい。
だからこういうのも書いておいたほうがいいかと。
- Windows Server関連の本
- 無線LANに関する本

理由：いずれもネットの方が情報が豊富だし新鮮。
Azure ADへのデバイス情報の登録

Azure ADへのデバイス情報の登録

microsoft IntuneをはじめとしたMDMシステムと組み合わせることができる。

●Azure ADデバイス登録
主にBYOD(Bring Your Own Device)、つまりユーザーが個人で所有するデバイスを業務で使用し低ｒ状況を想定。

●Azure AD参加
主に社給のデバイスを想定した登録方法。

●ハイブリッドAzure AD参加
既存のAD DSにドメイン参加しているデバイスを想定した登録方法。AD DSとAzure ADの両方にデバイスを登録する方法。
【WSL2/Windows11】LunarVimでyankしたものを外で貼り付けできなかった

## 問題点
* LunarVimでyank(yyや:%y)したものをGoogle Chromeに貼り付けようとしたらChromeが応答停止した.
* NeoVimでも同じことが起こった.
* メモ帳に貼り付けようとしても反応しない.
* メモ帳→Chrome間ではコピー&ペーストが正常.

## 環境
* LunarVim(NeoVim v0.9.0-dev)
* WSL2 Ubuntu 20.04.5 LTS

## 解決
* __Windows11で使っているwin32yank.exeと, LunarVim内で使っているコピペソフトが違うらしい__
* Windows11で使っているwin32yank.exeをLunarVimに使わせてやればいい.
* つまり`wsl2の中から見たWindows11内のwin32key.exe`のシンボリックリンクを`LunarVimが参照するwin32key.exe`に張ればいい.

> To use the Windows clipboard from within WSL, win32yank.exe has to be on our `$PATH`.
> 
> If Neovim is installed on both Windows and within the WSL distribution, the `win32yank.exe` binary provided by the Neovim Windows installation can be symlinked to a directory included in our `$PATH` so it can be found by Neovim on WSL. Replace `$NEOVIM_WIN_DIR` with the path to our Neovim Windows installation, e.g. `/mnt/c/Program Files/Neovim`. The command can then be symlinked using:

```sh
# 例
% sudo ln -s /mnt/c/Program\ Files/Neovim/bin/win32yank.exe /usr/local/bin/win32yank.exe
```


* __xclipが存在してたらそれを`sudo rm -rf xclip`しなければ, win32yankではなくxclipが使われてしまう.__

> If it does not work, you can debug it using `:checkhealth` to identify any issues, e.g., there could be xclip installed and taking precedent over win32yank.

```
## これでは意味がない
## Clipboard (optional)
  - OK: Clipboard tool found: xclip
```

## 参考
* [not able to access yanked content outside the file #3263](https://github.com/LunarVim/LunarVim/issues/3263)
* [How to use the Windows clipboard from WSL?](https://github.com/neovim/neovim/wiki/FAQ#how-to-use-the-windows-clipboard-from-wsl)
C++書いてる人間がC#始めて驚いたこと

最近Unityに入門したのでC#を書き始めた．そこでふと疑問に思った．

## あれ，C#ってヘッダファイルなくね？

C#ってヘッダファイル無いけどどうやってファイル間の依存関係解決してるんだろ．usingディレクティブは名前空間に対して使ってるし．  
という訳で少し調べてみた．

## C++の話

- C++では基本的にヘッダファイル(.hや.hppファイル)に宣言を書き，ソースファイル(.cppや.ccファイル)に定義を書く．
- 外部のソースファイルを利用したい場合は対となるヘッダファイルをincludeする．

## C#の話

### C#の宣言はどこへ？

- ソースファイル上の定義が宣言を兼ねてるらしい．

### 依存関係はどうやって解決してるの？

- .NETが全部いい感じにやってくれる．
- プロジェクト内のソースファイルは全てincludeされてると考えて良さそう．

## 参考
- [Why doesn't C# have header files? Will the namespace take care of everything?](https://stackoverflow.com/questions/11814771/why-doesnt-c-sharp-have-header-files-will-the-namespace-take-care-of-everythin)
CentOSに関して　周辺知識

CentOS
Linuxディストリビューションの１種
Red Hat系のもの

特徴
・完全無料
・サーバー向き
・安定性が高い
・CentOS７まではサポートが効く
・サーバーは、安定稼働したらそこから機能を追加しないことが多いので、ソフトウェアのバージョン更新が容易に行われない。
・有償サポートがなく、トラブルは自己責任

向いている人
・Linux初心者→メジャーなので情報リソースが多い

移行先など、流れがあるみたいだけど、まず使ってみる
それから更新
エラー　npm ERR! code TAR_BAD_ARCHIVE

コンポーネントインストールする時にできなくなり色々やっているとこのエラーがでる。
　
```
npm install axios
```
しようとしたらエラーがでてできなかった。
色々やっていたらnpm installが全くできなくなった。
フォルダを作り直しても、該当のコンポーネントインストしようとするあたりから雲行き怪しくなる。
（数日前くらいから急に怪しくなったので、何かおかしいなという気がしていた）

## 解決法（Windows10pro）

▶nodeのアップデート
（インストーラーでインストールする）

https://nodejs.org/ja/download/

▶npmのアップデート
```
npm install -g npm
```

## 気を付ける事

コンポーネントのインストールコマンドがそれぞれで異なることがあるようだ。
react-modalはjsでファイルを書いていっているとコンポーネント以外に*型定義ファイル*をインストールする必要があったりする・・・らしい。
nodeとnpmを最新にし、以下のコマンドでエラーなくインストールできるようになった。

```
//react-modalの場合
npm install --save react-modal @types/react-modal

//axios
npm i axios

```

## 根本的な解決法（推察）

yarn使うとこういうのがなくなるかもしれない

それかこれなのか？

https://twitter.com/laco2net/status/1585972591810207744?s=20&t=c2iPswYOlhzw0F4_ReSTdg
Windows11 ARMでChrome 64bit版を使う

# 概要
Parallesを使ってM1 MacにインストールしたWindows11にChrome(64bit版)をインストールする

# 環境
https://qiita.com/DR623G/items/5b098d97b3cfa3d878dc

の手順でインストールしたWindows11環境

# 手順
## インストール
:::note info
現在はWindows ARM用にリリースされている。[ここ](https://www.google.com/chrome/)から「Chromeをダウンロード」をクリックしてインストールできる。下記手順は必要ない。
:::

https://www.google.com/chrome/

[ビジネス用にChromeブラウザをダウンロード - Chrome Enterprise](https://chromeenterprise.google/intl/ja_jp/browser/download/#windows-tab "ビジネス用に Chrome ブラウザをダウンロード - Chrome Enterprise")で

https://chromeenterprise.google/intl/ja_jp/browser/download/#windows-tab

下記を選択してダウンロードする。

|チャンネル|ファイル形式|アーキテクチャ|
|----------|------------|--------------|
|Stable    |MSI         |64ビット      |

ダウンロードした`googlechromestandaloneenterprise64.msi`を実行してChromeをインストールする。

## バージョンの確認
Chromeの設定画面で確認する。
![ChromeSetting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591123/814195ea-90a6-5682-e97f-07a73efe6516.png)

ubuntuのfileコマンドで形式を確認する。
```shell
$ file chrome.exe
chrome.exe: PE32+ executable (GUI) x86-64, for MS Windows
```

# 参考情報
## Arm64EC ("Emulation Compatible")
https://learn.microsoft.com/en-us/windows/arm/arm64ec

:::note info
Arm64EC is a new application binary interface (ABI) for apps running on Arm devices with Windows 11. It is a Windows 11 feature that requires the use of the Windows 11 SDK and <font color="red">**is not available on Windows 10 on Arm**</font>.
:::

## Download the new Chrome on your Arm-compatible Windows PC

https://blog.google/products/chrome/download-google-chrome-windows-pc-arm/
Virtual BoxとVagrantについて＋Dockerとの違い

結論
・『vagrant』は、Virual Box を設定する際のツール
・『Virual Box』はゲストOSを立ち上げて作業したものをホストOSに反映させ、ゲストOSで作業したものをバックアップ（保存）したり、それを呼び出したりできる。
→立ち上げが遅くなったり作業が遅くなったりする一面もある
・『Docker』は、軽量なコンテナ型「アプリケーション実行環境」で、OS内部に独立してコンテナを生成し、いつでも環境を立ち上げることができる。
→OSのカーネルがないので、この箱の中ではホストのカーネルを共有している

Dockerではなく、Vitualboxなどの仮想マシンでもできるが、もっと効率的にするために、部分的に仮想化しているってこと。
virtualboxはマシンの仮想化
Dockerはアプリを仮想コンテナへ隔離する。

virtual box
ホストOS上に、別のOS=ゲストOSという仮想環境を構築するための、OSSのこと
仮想環境とは…サーバーなどの物理的な環境上で、仮想的に構築されたOSの実行環境。仮想マシンは、実際のサーバーと同様に、CPU・メモリが割り当てられてOSが動作する。
ゲストOSでミドルウェアなどを動かす

主な機能
①スナップショット
→仮想環境の状況を全てバックアップする機能
→もし環境が壊れても復元ができる

②シームレスモード
→ホストOS上でゲストをOSを削ぐとウェアのように扱う機能→→例）『WindowsOS上』で、『MacOS』を、wordやexcelのように使うことができる

③共有フォルダ
→ホスト/ゲストOSを両方共通して使える「共有フォルダ」を作成できる。

④クリップボードの共有
→ホスト/ゲストOS間で、クリップボードを共有できる
→→例）ゲストOSのCentOS上でエラー表示された時、文字列をコピーして、ホストOSで検索する。という作業が可能になる。
→→→CUIベースのOSより、GUIできる方が簡単に実行できて便利

Docker
ホストOSのカーネルを利用し、ユーザやプロセスを切り離すことで仮想環境を実現している
コンテナはカーネルを利用してサーバごとにプロセスなどを隔離する。
つまり、こんてなーは」OSを複数のサーバが共通して利用するため、軽量で起動や停止が高速。Dockerは軽くて早くていけてる


あとは使って理解を進めてみよう