OmniAICreator/Qiita-1.07M huggingface dataset:
【Unity】Vector3は2Dゲーム作成時でも使用可能

勝手な認識でVector3は３Dゲームの時、Vector2は2Dゲームを作る時って認識でいました。
違ったみたい。２Dゲーム作成時でもVector3を使うのね。

```
Vector2 = new Vector2(X, Y);

Vector3 = new Vector2(X, Y, Z);
```
Vector2はX(左右)Y(上下)に対して、Vector3はZ(手前奥)も指定
Zを指定することで立体感が出る為、３Dになるということ。
必ずしも、２Dゲーム作成の時はVector2というわけでは無い。
JavaScriptのアロー関数で定義したsort()の−１とか１とか０について

## 最初に
個人的なメモです
sort()中の返り値での挙動の理解に手間取ったのでメモとして残します

## Array.sort((n, m) => (n > m ? -1 : 1)) について考える

### sort(n,m)はnとmの比較結果を
- 0 ：（優先度が同じ）
- 1 ：（nがmより優先度が低かったので）
- -1：（nがmより優先度が高かったので）

で返す
### ここでの優先度とは？
- __優先度は高いほど配列の前に並ぶ__
- -1は前に　1は後ろに 0はそのまま
### 自分が混乱したのは１の挙動
以下自分の解釈
 __nとmを比較する際にmより後ろにあるnをどうするかという話__ なので
 今、mより優先度の低い扱いを受けているnを、mより優先度を高くするの？という問いかけが
 __n 比較演算子 m ? -1 : 1__
 なので
 返り値1の場合は __もともとmより優先度が低い扱いを受けているnにあらためてmより優先度が低いよと伝えているだけ__ なので順番は変わらない

~~~ javascript
// 例
const arr = [1, 3, 8, 15,8];
//arr.sort(n,m)でnをどうしたいの？　
//↑はつまり、この配列arrをどうしたいの？降順？昇順？にしたいの？ってこと

 //大きい順にならべたい場合
 //nがmより大きいなら配列の前に並べて欲しい（優先度を高くして欲しい）
 // n>m　の時に　nを配列の前に（優先度高い）並べたい　＝ -1を返す
console.log(
  [...arr].sort((n, m) => (n > m ? -1 : 1)) // Array [15, 8, 8, 3, 1]
);

// 小さい順にならべたい場合
// nがmより小さいなら配列の前に並べて欲しい（優先度を高くして欲しい）
// n<m　の時に　nを配列の前に（優先度高い）並べたい＝ -1を返す
console.log(
  [...arr].sort((n, m) => (n < m ? -1 : 1)) //  Array [1, 3, 8, 8, 15]
);


console.log(arr);// Array [1, 3, 8, 15, 8]
// ちなみにスプレッド構文を使わないで[...arr].sortじゃなくarr.sortとするとarrの中の並び順そのものが変更される破壊的メソッドになるのでスプレッドにしている
// ただし、スプレッド構文はシャローコピーなのでオブジェクトの場合、ネストの深さが第２階層以降は破壊される
// シャローコピーやスプレッド構文についての詳細はご自身でお調べください
~~~

上記コードを試したい場合は
[Array.prototype.sort()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)の試してみましょうに貼り付ける試せます
ここでarray.sortと[...array].sortを比べてもいいかと
Elixir 全プロセスIDのリストを取得


[elixir]で開発しているときに[プロセスID][Processes]を見失ってしまうことはないでしょうか。そういうときはとりあえず全プロセスIDのリストの取得すると何か手がかりが見つかるかもしれません。

https://qiita.com/torifukukaiou/items/17d55cf896c24b13350e

この記事を読んで知りました。

https://samuelmullen.com/articles/elixir-processes-observability/

<!-- begin hyperlink list -->

[elixir]: https://elixir-lang.org/
[erlang]: https://www.erlang.org/
[phoenix]: https://www.phoenixframework.org/
[nerves]: https://hexdocs.pm/nerves
[livebook]: https://livebook.dev/
[iex]: https://elixirschool.com/ja/lessons/basics/basics/#%E5%AF%BE%E8%A9%B1%E3%83%A2%E3%83%BC%E3%83%89
[GenServer]: https://hexdocs.pm/elixir/GenServer.html
[ETS]: https://elixir-lang.org/getting-started/mix-otp/ets.html
[Erlangの公式ドキュメント]: https://www.erlang.org/doc/man/ets.html
[Elixir School]: https://elixirschool.com/ja/lessons/storage/ets
[:ets.fun2ms/1]: https://www.erlang.org/doc/man/ets.html#fun2ms-1
[Match Spec]: https://www.erlang.org/doc/apps/erts/match_spec.html
[ex2ms]: https://hex.pm/packages/ex2ms
[Ex2ms.fun/1]: https://hexdocs.pm/ex2ms/Ex2ms.html#fun/1
[:sys.get_state/1]: https://www.erlang.org/doc/man/sys.html#get_state-1
[Map]: https://hexdocs.pm/elixir/Map.html
[Process.list/0]: https://hexdocs.pm/elixir/Process.html#list/0
[Process.info/2]: https://hexdocs.pm/elixir/Process.html#info/2
[Processes]: https://elixir-lang.org/getting-started/processes.html
<!-- end hyperlink list -->

## 論よりRUN (IEx)

早速[IEx]を開きます。

```bash:terminal
iex
```

[IEx]が印字できるリスト長の制限を無効化。デフォルトでは50個まで。

```elixir:IEx
IEx.configure inspect: [limit: :infinity]
```

現在の環境で存在している全てのプロセスIDを取得する。
[Process.list/0]と[Process.info/2]を組み合わせて有用な情報を取得。

```elixir:IEx
for pid <- Process.list() do
  {_, registered_name} = Process.info(pid, :registered_name)
  {pid, registered_name}
end
```

![](https://user-images.githubusercontent.com/7563926/240624656-8455a80c-e509-4fa3-b39c-c1551918dee8.png)

## 論よりRUN (Livebook)

Livebook で RUN する場合は、Kino のデータテーブルを使うと結果が見やすくなります。

```elixir:Livebook
Mix.install([{:kino, "~> 0.10.0"}])

Process.list()
|> Enum.map(fn pid -> [{:pid, pid}, Process.info(pid, :registered_name)] end)
|> Kino.DataTable.new()
```

![CleanShot 2023-05-24 at 09.42.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82804/b75f7509-943b-8b32-c963-c4e1c1bb5cd1.png)

## ご参考までに

https://qiita.com/piacerex/items/e0b6e46b1325bb931122

https://qiita.com/torifukukaiou/items/1edb3e961acf002478fd

https://qiita.com/piacerex/items/e5590fa287d3c89eeebf
オブジェクト名 'dbo.SAMPLE' およびインデックス名 'PK__SAMPLE_RI__0733E2324E9651AT' に重複したキーが見つかったので、CREATE UNIQUE INDEX ステートメントは終了しました。重複したキーの値は (0) です。

SQLServerで`ALTER TABLE`によって主キーを変更しようとした際にエラーが発生した

オブジェクト名 'dbo.SAMPLE' およびインデックス名 'PK__SAMPLE_RI__0733E2324E9651AT' に重複したキーが見つかったので、CREATE UNIQUE INDEX ステートメントは終了しました。重複したキーの値は (0) です。

## 原因
SQLを流す順番を間違えている

## 解決方法
`ADD PRIMARY KEY`を発行する前に、主キーとするカラムにユニークな値が入っている状態にする必要がある

1. INSERT INTO ...
2. ALTER TABLE ...

```sql
ALTER TABLE sample ADD PRIMARY KEY (sampleId);
```
2022/11/20主にITとかセキュリティの記事

「うちの会社はサイバー攻撃を防げるか」企業で流行しはじめた“防衛力診断”
サイバーセキュリティ能力を「格付け」するイスラエルの企業の実力(11/18)
https://jbpress.ismedia.jp/articles/-/72755

病院や工場も止まる、サイバーリスクへの理解を経営層が深めておくべき理由(11/18)
https://forbesjapan.com/articles/detail/51911

名古屋大・岐阜大運営の機構に不正アクセス　4万人分個人情報流出か(11/18)
https://news.biglobe.ne.jp/domestic/1118/mai_221118_3728779985.html

名大 岐阜大運営機構にサイバー攻撃 個人情報約4万件漏えいか(11/18)
https://www3.nhk.or.jp/news/html/20221118/k10013896211000.html

個人情報４万人分流出か　不正アクセスで―名古屋大など(11/18)
https://www.jiji.com/jc/article?k=2022111800993&g=soc

個人情報4万人分流出か　不正アクセスで　名古屋大など(11/18)
https://news.yahoo.co.jp/articles/92e1c7426838ac710f00d26ec22ed0474c63d15c

個人情報保護委員会 2022上半期注意喚起、病院や薬局での漏えい目立つ(11/18)
https://scan.netsecurity.ne.jp/article/2022/11/18/48512.html

米監査院、洋上石油・ガス施設にサイバー防衛戦略求める(11/18)
https://jp.reuters.com/article/usa-energy-cybersecurity-idJPKBN2S805J

１ランク上の企業セキュリティを目指そう！
「ウィズコロナ時代」でゼロトラストネットワークは変わったのか？(11/18)
https://swri.jp/article/1162

暗号資産ハッキング被害額、10月は今年最大に(11/18)
https://www.coindeskjapan.com/164680/

VUCA時代のサイバーセキュリティを見通す、脅威インテリジェンスとゼロトラスト(11/18)
https://atmarkit.itmedia.co.jp/ait/articles/2211/18/news010.html

セキュリティ相談を受けたときに引用したい記事集(WIP)(11/17)
https://qiita.com/shioshiota/items/6134f2a4bd349df3a3c5

横行するネット詐欺犯が捕まらない「3つの偽装」。SNSだけでつながるピラミッド構造(11/18)
https://tamakino.hatenablog.com/entry/2022/11/18/080000

外交部高官「北朝鮮が３月にハッキングで８３００億ウォンの仮想通貨を窃取」(11/18)
https://www.donga.com/jp/article/all/20221118/3770584/1

自分は詐欺にはあわない？注意深い人でも巧妙な詐欺メールの文言には騙されてしまうことが判明：Visa調査(11/18)
https://prtimes.jp/main/html/rd/p/000000188.000006846.html

東京海上、サイバー被害を全契約で補償　中小団体向け(11/17)
https://www.nikkei.com/article/DGXZQOUB243OL0U2A021C2000000/

米仮想通貨取引所コインベース「私たちを信頼して」｜異例の声明文を公表もユーザーは懐疑的(11/18)
https://nextmoney.jp/?p=54700

パスワードの使い回し、「5個以上のサービス・アプリで同じのを使い回し」が44.1%も存在！【AironWorks調べ】(11/18)
https://webtan.impress.co.jp/n/2022/11/18/43680

「スマートアプリコントロールの設定」でWindows 11の守りがさらに強固に(11/18)
https://news.infoseek.co.jp/article/asciijp_4113662/?tpgnr=it

「Log4j」パッチ未適用の組織はネットワーク侵害を想定すべき--CISAとFBIが警告(11/18)
https://japan.zdnet.com/article/35196264/

Windows OSの「Telnet」クライアントの使い方(11/18)
https://atmarkit.itmedia.co.jp/ait/articles/0207/06/news002.html

ランサムウェアの身代金を支払ったら有罪？逆効果という指摘も(11/18)
https://news.mynavi.jp/techplus/article/20221118-2515355/

Amazon RDSの上の数百のデータベースが個人識別情報を漏洩(11/18)
https://news.mynavi.jp/techplus/article/20221118-2516562/

MacBookがウイルス感染したら？被害や対策法を徹底解説(11/18)
https://cybersecurity-jp.com/column/75146

Zoom に複数の脆弱性(11/18)
https://scan.netsecurity.ne.jp/article/2022/11/18/48507.html
プロジェクト進行時に気をつけていること

# プロジェクト進行時に気をつけていること

SIer11年、事業会社3年のエンジニアが、案件規模も大小それなりに携わってきた中で、ポイントとなるかなと感じることです。

## メンバーの健康状態

`私自身が1人で担当するプロジェクトの場合は、私自身がやるので、頑張るのみなので関係ないです。`

プロジェクトは、メンバーが全員心身ともに健康な状態で取り組むのと、心が疲れている、体が疲れている状態で取り組むのとでは、進行中に発生する問題や、リリース後の障害発生、品質に大きく影響してきます。
流石に、癒す能力は持ち合わせていないので検知するときに気にしているポイントを紹介します。

1. 前日、当日休暇が増えていないか
1. 声のハリや、トーンに変化がないか
1. 複数プロジェクトや案件に関わり、他で遅延や問題が発生していないか
1. チャットなどのレスポンス速度が落ちていないか
1. 沼にハマっていないか（プロジェクト進行上や、コミュニケーション、技術的な問題など）

だいたい、このどれかに該当すると、少し話を聞いておいた方が良いです。

## プロジェクト開始のリスク整理

多かれ少なかれ、これは全ての人がやっていることかと思います。

私がリスクとして整理するポイントは

- プロジェクト開始時にプロジェクトゴールまでのタスクや、コミュニケーションをとる相手、利用する技術をシミュレーションして脳内でゴールできるか

です。
案件の大小によっては、タスクや利用技術の単位がどんどんざっくりになりますが、これは必ずやっています。
脳内でぼやけてしまうフェーズや、項目があれば事前に列挙していき、相談・調査検証しています。

## プロジェクトの起源を関係者全員で把握できているか

大きなプロジェクトほど難しいかもしれませんが、関係者全員でなぜ必要なのか、誰に届けるのかを把握していると、品質が全く違います。
そして、把握したチームで取り組むと、なぜかデリバリーできるタイミングが早まります。

途中で忘れていくポイントでもあるので、私は

- 今やっている案件って、なんのためにやっているんだっけ？

と、時折質問するようにしています。


## 最後に

実は結構簡単なことで、プロジェクトは成功することも多いです。逆に１つ歯車が噛み合わないだけで、遅延しますし、障害は起きます。失敗プロジェクトが少しでも少なくなって、関係者全員がハッピーになればいいなといつも考えています。

もちろん、失敗するときはするので、その時はしっかり振り返りをする必要がありますし、全てうまくいくことはないです。

そして、せっかく書いたのに、文字ばかりで、伝わりにくい内容になってしまいました。
挿絵を入れられたら今後アップデートしていこうかと思います。
テックキャンプを受講した感想

# はじめに
この投稿は、テックキャンプを受講し、就職が決まった私の感想文です。
スクールの受講を検討している方の参考になれば幸いです。

# 内容
1.自己紹介
2.受講理由
3.学習環境
4.感想
5.まとめ

## 1.自己紹介
私とは？
・30代後半の男性
・中堅私立大学（文系）卒業
・プログラミング未経験
・正社員で営業職経験を経て無職

## 2.受講理由
なぜテックキャンプを選んだのか？
・プログラミングスクールを選んだ理由
　　プログラミングを仕事にしてみたいと思っていたが、なんのスキルもないため、現状での就職は難しいだろうと考えた。
　　何かスキルを証明できる方法はないか？ プログラミングスクールを受講すれば一応の証明になるのではないか？
　　プログラミングスクールは就職支援もしていたので、私の目的に合っていると判断した

・他社との比較
　　複数あるプログラミングスクールの中から選んだ理由は、専門実践教育訓練給付制度の対象であったこと。
　　対象のスクールは他にもあったが、個別の事情により、私が受けられるのはテックキャンプだけだった。
　　どこのスクールでも大差はないだろうと思っていたので、より安く受けられるところにした。

※専門実践教育訓練給付制度
https://www.mhlw.go.jp/stf/seisakunitsuite/bunya/koyou_roudou/jinzaikaihatsu/kyouiku.html

## 3.学習環境
学習環境はどうだったか。

・コース
　オンライン短期集中コース

・受講生
　　同期にあたる受講生は20代〜30代の男女が２０人強。その中でスクール側によって6・７人のチームに分けられる。
　　同チームではない同期と関わることはほとんどなく、学習は同じチームメンバーと進めることとなる。
　　チームメンバーとは1日に複数回、学習内容の発表を行うので親近感はわくが、チームメンバーでの共同作業はあまりない。

・タイムスケジュール
　　タイムスケジュールに従って毎日の学習を進める。オンラインでの自宅学習のため、独学しているのとあまり変わりない。
　　学習する内容は各々の進捗状況によって異なるため、自分の好きな内容を学習しても問題はない。（＝自習のイメージに近い）
　　タイムスケジュールの中にチームメンバー同士の学習発表（直前に時間に学んだ内容を説明）が予定されているが、各々の事情により欠席することもできる。

・講師陣
　　主要な役割は、ライフコーチ：学習の進捗具合を管理する人、メンター：質問に答える人、キャリアアドバイザー：就職支援の人、の３つ。
　　カリキュラムの進捗に問題がなければ、ライフコーチと話すことはあまりない。
　　カリキュラムでわからないことがあれば、受付時間内ならメンターに質問ができる。時間外の場合でもテキストで質問できるが、返答は受付時間中のみ。
　　カリキュラムの後半になると、就職活動に向けてキャリアアドバイザーとの面談が始まる。

## 4.感想
個人の感想です。
スクールのこと、私の判断のこと、受講に向いている人について記述しました。

### スクールについて
・カリキュラム
　　カリキュラムを進めていくことで、アプリ開発を行える力を身に付けることができた
　　学習の進捗は受講生によって差がでており、このカリキュラムが特別に優れているとは思えなかった
　　
・メンター
　　知識は一定水準以上だとは思うが、物足りない人や合わない人はいた。誰が対応してくれるかは運任せのため、合わない人の時はストレスを感じた
　　カリキュラム以外のことに対して質問できないのは、大きくマイナスだと感じた

・転職支援
　　求人の紹介や面接対策などのサポートは大いに役に立った

### 私の判断について
・プログラミングに関わる仕事をするのが目的でスクールを受講
　　目標であった就職まで辿り着けたので、受講の判断は間違いではなかったが、ベストでもなかったと思う。
　　例えば、就職するためのスキルの証明は、スクール受講以外になかったのか。
　　オリジナルアプリがスキルの証明になり得るなら、オリジナルアプリの制作に力を注いだ方が良かったのではないか。
　　といった検討が十分にできていなかったと思う。
　　
### 受講に向いている人
・コストパフォーマンスよりも結果を重視する人　 /　独学が不安な人
　　費用は安くないが、スクールというサポート体制・学習仲間ができることがスクールのメリットだと思う

## 5.まとめ
プログラミングスクールの受講について、ネットでは賛否いろんな意見がある。
それぞれに事情が異なるため、答えも人の数だけある。
私に関して言えば、スクールを受講して良かった。
ストレージの形式の種類

●ストレージの形式

・ファイルストレージ
ファイル単位で管理・アクセスするストレージ。代表的なものとしては、NASの記憶域などで使用されるSMB共有フォルダやNFS共有フォルダなど

・ブロックストレージ
ブロック単位。代表はコンピューターに内蔵されたディスクやVHDファイル、iSCSIやファイバーチャネルなどのSANの記憶域

・オブジェクトストレージ
オブジェクト単位。代表はAzure Blob StorageやAmazon S3。

●Blob Storageの特徴
・ストレージアカウント
ストレージサービスを使用するためのアカウント

・コンテナー
BlobStorageを使用するための擬似的なフォルダ

・BLOB
コンテナ内に格納されるファイル
【Excel】複数ファイルを結合（Power Query）

# 1.やりたいこと
1）月別に分かれた複数Excelファイルを 1ファイルに結合
2）受注コード列の重複している受注コードをまとめて1件にする
　<例>　受注コード5レコード　→　1レコード

2）はピボッドで値の個数を表示することで解決できました。
1）について、下記に方法をメモしておきます。

# 2.複数ファイルの結合

まずは複数ファイルを結合します。
最初に試した方法だとうまくいきませんでした。
その記録も残しておきます。

## 2-1.試行錯誤1　→エラー

**はじめに情報収集です。**
複数ファイルを1ファイルに結合するには、Power Queryを使えば良さそうです。

Power Query、初めて使います。

PowarQueryって何でしょうか。
YouTubeに解説がありました。

Office TANAKA[『【機能】Power Queryとは何か？何ができるのか？を詳しく解説』](https://www.youtube.com/watch?v=Z-08XG5wwRc&t=0s)

TANAKAさんによると
Excelの機能の名称は「取得と変換」。
使われる技術の名称が「Power Query」だということ。Power QueryはExcel専用の技術ではないのですって。
（Excelの「取得と変換」機能を使うと「Power Queryエディター」と表示される）

続いて同じくTANAKAさんの
[『【機能】Power Queryで複数のファイルが自動的に結合されます』](https://www.youtube.com/watch?v=vAx2G9rVYh8)を確認。
この動画に沿って進めてみます。


**実行してみます。**
※TANAKAさんの動画ではCSVファイルを結合させていたけれど、Excelファイルも同じ操作で進めることができた。

1）フォルダAを新規作成。結合したいファイル（今回は全14ファイル）をフォルダAに入れる。
2)新しいExcelファイルを立ち上げる。
3）2）のデータタブ　＞　データの取得　＞　ファイルから　＞　フォルダーから　＞（該当フォルダを選択して）開く
　→　（フォルダAに入っているファイルが一覧表示される）
<img width="500" alt="無題.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/16677ee7-5437-be9c-ac2b-67d791245953.png">
　→　結合　＞　データの結合と変換

※動画内ではここで「Fileの結合」ウィンドウの中に、どんな形式で表示されるかという表示がサンプルファイルでプレビュー表示されていた。が、私のFileの結合ウィンドウではプレビュー表示はされなかった。変わりに「表示オプション＞パラメーター1＞〇△〇△」とファイル名のようなものが表示されていたので試しに〇△〇△をクリックしたところ、プレビューが表示された。

<img width="500" alt="無題1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/2ebb6e6a-322d-5d28-b3aa-473eaf096095.png">

　→OK
　→Power Queryエディターが起動しPowerQueryエディターウィンドウが出てくる

**ここで問題発生しました。**

「202109.xlsx」のデータしか読み込まれていません。
本来であれば他の月のファイルも読み込まれてダダ―っと一覧表示されるはずなのですが…。
他の方法を探します。

## 2-2.試行錯誤2　→成功！
仕切り直してこちらの動画を参考に進めていきます。
要所要所、自分がしたい方法に変更して進めました。

『[パワークエリはデータクリーニングにて最強【EXCEL Power BI Power Query Data Cleaning](https://www.youtube.com/watch?v=22o2pCVCLFE)』

1）フォルダAを新規作成。結合したいファイル（全14ファイル）をフォルダAに入れる。
2)新しいExcelファイルを立ち上げる。
3）2）のデータタブ　＞　データの取得　＞　ファイルから　＞　フォルダーから　＞（該当フォルダを選択して）開く
　→　（フォルダAに入っているファイルが一覧表示される）
　→　データの変換
（※2-1ではここで「結合」をクリックしたけれど、そうではなく「データの変換」をクリック）
<img width=500" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/db4c8734-1028-aa58-77f8-27d8397a0ebf.png">

4) （Power Queryエディターが表示される）
　→Content列のFileの結合ボタンをクリック（赤四角部分↓）
<img width=500" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/155e5b3a-336f-1962-f0aa-69475cc63b64.png">
　→パラメーター1[1]　＞　OK
<img width=500" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498057/156653f9-0b30-8194-47bc-5acf958802d9.png">

※この状態だと、各ファイルの中のどのシートを選択するかが定まっていない状態。選択するシートを指定する必要がある。

5)　適用したステップの「変更された型」を削除
6）Data列に「Table」と表示されているのを、右上の矢印ボタンをクリックして展開する
「元の列名をプレフィックスとして使用します」のチェックは付けたままで「OK」

7）「閉じて読み込む」　で、全14ファイルの結合が完成！

この後のデータ整形作業（不要な列の削除、データ型の整形）については、解説動画ではPowerQuery上で行なっていたけれど、私は慣れているExcel上でやった。
Herokuの代替先をいくつか試してはみた

自分は初心者に毛が生えた程度の知識しかないので一般的な基準ではない前提で見て欲しい。そもそもこの「Herokuの無料期間は終わるので代替先を探してみた！」って記事はさんざん書かれてるだろうから、今更ではある。

結論から書けば、**無料Herokuの代替先は現状存在しない**が、個人的には「Herokuより良いところも悪いところもあるけど概ねスタンドアロンで動かせる」という意味では**fly.ioがダントツ**だと思う。fly.io以外は「これ一つ足りない！」ではなく、どれもこれも二つも三つも足りないという印象。ただ当然のことだが、広く使われていたとという意味で「情報量がまったく違う」というのはどのサービスであれだいぶ大きい。

以下、とくに断りがなければ全て無料プラン前提の話をする。

# 自分に必要な要件

自分がHerokuで展開していたrailsのwebアプリに必要な要件は次のものがある

1. RailsとPostgresqlが必要
1. cronかスケジューラーとなるものが必要
1. webアプリとは別にスクリプトを回せるWorkerが必要
1. seleniumが動かせる環境が必要
1. 24時間でなくてもいいが、せめて月700時間程度は動かせてほしい

単純なアプリではあるのだが、botやスクレイピングなども行うので意外と必要な項目が多いのがなかなかキツい。

## render.com

Herokuの代替先が話題になったときに、まず最初に話題になったサービスだと思うんだけど、正直言って**無料ではほとんどムリ**だと思う。あくまで、有償プランと考えるとHerokuより安いというだけだ。

Cronも使えるが**有償**である。Heroku Schedulerは無料だった…致命的なのは**PostgreSQLが90日で初期化する**という仕様。データベースを毎回作りなおすか、別のDB使うならありかもしれない。

ちなみに、herokuでもあった無償で使える時間制限は750時間。24*31で744時間なので、複数のアクティブがなければ一応起動しっぱなしも可能だが、herokuと同じように15分自動スリープはついてくる。

当初は「cronは有償といっても、Redisは無料なんだからsidekiq Schedulerを使えばいいんじゃん」と思っていたが、なんと**Workerも有料**である。いや、webとworker一つずつなら無料だったHerokuが異常だったと言われれば返す言葉もないが。もし無料プランでrender.com使うのなら、余計な機能はいらず、データベースは他と繋げるって前提なら、まぁいけるかもしれない。それならrender使う理由もとくにないが。

## ~~Railway.app~~
:::note info
2023年7月3日以降は無料プランが廃止なので、無償の選択肢ではなくなった。月5ドルで既存無料プランは使えるので、5ドルならいいかって人は今後も使えると思う。
:::

Railwayはほんとーーーにドキュメントがわかりづらい。普通にrailsデプロイして動かすだけで相当苦しんだ。他二つはサンプルアプリを1からデプロイまでできるドキュメントがあるのに対して、Railwayは断片的な情報があるにすぎない。

railway.appは512MBのRAMが使えるのでHerokuと同等だが、**500時間制限**がかなりきつい。webは一時的にシャットダウンする時間を設けるだとかで対応できるかもしれないが、データベースやRedisも無料時間を食う計算になっているのは驚き。Herokuはデータベースは時間換算されてなかったと思うので、この仕様には驚いて最初は断念した。

しかしクレカを登録することで、500時間制限は解除される。5ドル未満の利用範囲なら無料なので、小規模なら一応無償ではいける。

ただ使ってみて、思った以上に料金のかかり具合がシビアだということがわかった。webについてはわからないが、自分はworkerだけ走らせてる。数時間に一回動かしてるだけで残りは何もしてないし、走らせたWorkerのメモリは解放するようにしてるのでかなり節約してるつもりだけど、それでも3.5ドルペースという感じ。タスクの実行そのものより、Railsの待機メモリの方だけで相当食ってるようなので、一時的にシャットダウンできるような仕組みができなきゃ、単純なRailsあげるだけでも割とカツカツだと思う。

あとはもしかしてだがwebとworkerを同時に一つずつ動かすは出来ないかもしれない？自分が試した限り、何やってもどっちかしか動かない。それとDockerfile自体は使えるが、Dockerコンテナでビルドしているわけではないっぽいので、Dockerの仕組みを利用したあれこれはできないように感じる（Docker composeも非対応）。Docker側で再起動してやればメモリ浮くかなぁと思ったらそれも出来ないのでなかなかつらい。

## Fly.io

今回試した中では圧倒的に良かった。ドキュメントも圧倒的に丁寧だし、Rails使いへの配慮も行き届いていた。時間制限もなし！そしてPostgresqlは1GB無料で、Redisも使える！国内リージョンもある！回してみた感じ、web回すだけなら無料範囲超えるような料金かかる感じは全くない！最高！

**だが致命的なのはVMのメモリ256MB**だった。これじゃーchromedriverつかったSelenium動かせないんだね。ここはworkerなどでちょっと凝ったことしたい場合は、別の対処が必要なところ。実際webアプリ移設して動かしても、herokuのときよりは少し重いとは感じる。まぁ無料で使わせてもらってるサービスなんて身内向けなんで、多少重くて別に構わないと思うけど。

CLIがメインだから初学者にはとっつきづらい云々いわれていたが、正直railwayに比べれば圧倒的に簡単だった。デプロイ時に選択肢が出てきてそれを選ぶだけでセッティング完了。エラーも大してでないし、コマンドも多くてわかりやすい。ビルダーがたまにおかしくなるようなので、たまにビルダーをdestroyしなきゃいけないってくらいなもの。他は自分の使う限り不満はほぼなかった。


# 所感、今のところの迷い
自分のアプリは自分用ではなく、自分のコミュニティ用ということもあって「移行先がないから潰す」というわけにもいかず、とりあえずHerokuに上納金を支払うことにはしている。

だが大した利用人数もいない有志のためのアプリに月2000円支払い続けるのは正直にキツイ。

なので今はFly.ioにwebとデータベースを移管し、railwayにworkerを移すことにした。renderはそのどっちも有料なので無理。Fly.io側には何の不満もないんだが、railwayの料金のシビアさにちょっと困ってて、また他を試すかも。
JavaScriptでprint()を使う

最近はPython3で競プロを楽しんでいます。そんな中、JavaScriptに舞い戻ってくると、思ってしまうことがあります。それは、「**console.log()** 長すぎでは？」です。
Python3で **print()** に慣れてしまった体には、 **console.log()** は億劫に感じられてしまいます。

そこで、邪道ではありますが、JavaScriptで **print()** を実装してしまおうと考えました。

---
### 実装したコード

```JavaScript
const print = anything => console.log(anything)

x = 'オススメしません'
print(x)
// >> オススメしません
```
docker-compose DBの起動を待つ

docker-compose時にDBの起動前に接続を試みてエラー。
なんでやねん…と調べた結果、[公式](https://docs.docker.jp/compose/startup-order.html "公式")にもある通り [wait-for-it](https://github.com/vishnubob/wait-for-it "wait-for-it") を使うとの事。そうなのね…
他にもやり方あるようですが、一旦これで解決したので、忘れないように備忘録として残します。
環境はdjango & postgrsql & React

### backendのDockerfile
```backend:Dockerfile
FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
```

### wait-for-it取得と実行権限付与
```
curl -L https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh -o wait-for-it.sh
```
```
chmod 755 wait-for-it.sh
```

### docker-compose.yml
```docker:docker-compose-yml
version: "3"
services:
  db:
    image: postgres
    environment:
        - POSTGRES_DB=postgres
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=postgres
    ports:
        - 5432:5432

  backend:
    build: ./backend
    command: ["./wait-for-it.sh", "db:5432","--","python","manage.py","runserver", "0.0.0.0:8000"]
    volumes:
      - ./backend:/app
    depends_on:
      - db
    links:
      - db:db
    ports:
      - 8000:8000
  
  frontend:
    build: ./frontend
    volumes:
      - ./frontend:/app
    depends_on:
      - db
    ports:
      - 80:80
```
["./wait-for-it.sh", "db:5432",~]　この部分。
これで5432ポートが開放されたらコマンド実行される。


### djangoのsettings.py
```django:settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'postgres',
        'USER': 'postgres',
        'PASSWORD': 'postgres',
        'HOST': 'db',
        'PORT': 5432,
    }
}
```
settings.pyも忘れずに書き換えとく。
これだけだけど、最初原因が分からず四苦八苦…
公式ちゃんと読みます。すみません。

##  参考記事
https://docs.docker.jp/compose/startup-order.html
DDDがわからない～人を知る～

# 人を知るには
その人が組織のなかでどんな人なのか、自身の名前、グループの名前、自身のコメントで伝わるような名前の付け方をしましょう。また、いい組織というのは組織の名前や構造によって何がやりたいのか伝わってくるはずです。

# テストする人
人が正しく作業や指示を行っているかテストする人がいます。テストする人がどういったテストをするかを見ることでテストされる側の人についても理解を深めることができます。
ニューラル機械翻訳の仕組み

初学者ですがニューラル機械翻訳について理解したことをまとめました

### ニューラル機械翻訳とは  
ニューラル機械翻訳(以下NMT)とは、文字通りニューラルネットワークを利用した機械翻訳です。Google翻訳やDeepLにも採用されている、機械翻訳の最先端です。

NMTは、大きく分けて Encoder、Attention、Decoderの3つからできています。
Encoderでは、入力文をベクトルに変換します。
Attention機構では、重要な領域に着目させる機能を付与し正確な出力を手助けします。
Decoderでは、ベクトル情報とAttention情報から出力文を決定します。
ここから、この3つを詳しく説明していきます。

### 各機構の説明
#### Encoder
EncoderはEncoder-Decoderモデルの前半部分です。
翻訳には、単語本体の意味と前後関係の2つの情報が必要になります。まず、単語本体の意味の取得方法です。入力文を単語に分割し(形態素解析)、単語分散表現と呼ばれる数百次元からなる実数値ベクトルに変換します。この作業をEmbeddingと呼び、単語埋め込み層で実行されます。
また、Encoderは次元削減の役割も担います。単語分散表現は低次元(50〜300)のベクトルで表されるため、ここで次元削減をしていることになります。これで、各単語の意味を得ることができました。
次に、単語同士の前後関係の取得方法です。RNNを利用し、前後の単語情報を次層の入力値として学習していきます。ここで、片側からの読み込みだけでは前後両方の関係性を得ることができないため、文頭(forward)と文末(backward)の両側から学習を行う。そうして得られた2つのベクトルを単純に繋げたものを各単語の分散表現として翻訳で利用します。
以上が、Encoderの役割です。

#### Attention機構
Attention機構は、Encoderから渡されたベクトルを受け取り、Decoderに渡します。その際、正規化された重みをベクトルに割り振る作業を行う、これがAttention機構の重要な役割です。このときDecoderに渡される重み付きベクトルをコンテキストベクトル(context vector)と呼びます。Attention機構を理解するにはベクトルに関する複雑な知識が必要なため、詳しい説明は省略します。
簡単に説明すると、Attention機構ではEncoderの全ての隠れ層の状態に重み付けをし、それらを足し合わせて(重み付き和)Decoder層に渡しているのです。重み付けする際の情報としては、Decoder層における単語翻訳時の内部状態とEncoderから渡された隠れ層の情報を利用します。Decoder層の内部状態とは、状態ベクトルのことです。つまり、情報はEncoder層からDecoder層に一方通行に流れているのではなく、各層を行ったり来たりして翻訳しているのです。

#### Decoder
Decoderは1つのRNNで構成されている。コンテキストベクトルと1つ前に出力した単語の情報を入力として受け取り、新たな単語を訳文として出力します。ここまで数値情報として扱われていた単語ベクトルをここで自然言語に変換するのです。翻訳対象の単語はAttention機構からの情報によって決定され、訳出された単語は文頭から順に並べられます。入力文にはEncoder層の時点で文末に<EOS>という文の終わりを表すタグが取り付けられており、このタグがDecoder層から出力されると翻訳は終了となります。

### おわりに
以上がNMTの基本構造になります。この記事ではNMTの初歩の初歩しか紹介できていませんが、ぜひみなさんもAttention機構やEncoderDecoderの詳しい仕組み、NMTの課題などを調べてみてください。私もまた勉強して記事を書きたいと思います。最後まで読んで頂きありがとうございました。
参考文献
中澤敏明 "機械翻訳の新しいパラダイム ニューラル機械翻訳の原理" J-STAGE 2017/06/01
https://www.jstage.jst.go.jp/article/johokanri/60/5/60_299/_pdf 
参照:2022/11/19
Go言語 go versionが出力されない時の対処法

お疲れ様です。
go言語を始めようとしたところ出落ちしたので、情報共有します。
```:開発環境
Apple m1 macbook
macOS 13.0.1（22A400）
```


# 対処法
1\.どこのファイルにPathを追記するか確認
下記コマンドをターミナルで実行
```
echo $SHELL
```
・bashなら、~/.bash_profile
・zshなら~/.zprofile
に追記していくことになります。

2\.該当の設定ファイルにパスを追記
```
$ open ~/.zshrc  
  または
$ open ~/.bash_profile
```
openで設定ファイルが開かれるので、pathを追記してください。
自分はzshrcだったので以下のように追記しました。
※ドキュメントにも該当のPATHを追記しろと明記してあります。https://go.dev/doc/install
```:zshrcの場合
$ export GO_HOME=/usr/local/go
$ export PATH=$PATH:$GO_HOME/bin
```
ファイルを追記したら、ファイルを保存して、以下コマンドでファイル内容を更新してください。(忘れがち）
```
source ~/.bash_profile
```
3\.go versionを実行
以下のようにバージョンが出力されました！
```
go version go1.19.3 darwin/arm64
```

参考文献
・MacでPATHを通す
https://qiita.com/nbkn/items/01a11392921119fa0153
・Macでgolang
https://qiita.com/sakasa/items/b0c9dfe3ccf84c75d0d1
・【zsh, bash】macでPATHを通す方法 - not found と出てしまったら
https://qiita.com/k3ntar0/items/eb8cdbd8eba9da388def
・goドキュメント　Download and install
https://go.dev/doc/install
DDDがわからない～考えないメモ術～

# メモの書き方
メモに書かれた数字同士の計算など複数のメモから判断して新しい情報をメモすることはよくあります。
たとえば、ジュースの容量がミリリットルで書かれたメモを２枚もらって合計したものをデシリットルにして合計容量のメモが返す。となった場合、計算する人はミリリットルについてとデシリットルについての両方を考える必要が出てきてしまいます。
# 考えることを減らしたメモ
計算することはそれだけでめんどくさいです。なので、計算する人はミリリットルからミリリットルで計算するようにしてもらい、ミリリットルからデシリットルにするのは専用の人を用意しましょう。
OUPC2022 F「Cueing」解説

# はじめに
[問題リンク](https://onlinejudge.u-aizu.ac.jp/beta/room.html#OUPC2022/problems/F)

「Cueing」writer の kotamanegi です。裏テーマを出題1日前に[爆破](https://atcoder.jp/contests/abc278/tasks/abc278_c) (偶然の一致？) されました。

簡単枠に見せかけた沼枠を目指しました。中難易度と高難易度の橋渡し的な問題となっていたら嬉しいです。

# 解説

まず、整数秒目ではない 0.5 秒目などのタイミングでボタンを押すことはないとしてよいです。なぜなら、ボタンを押すタイミングを整数秒目にずらしても損しないからです。

時間ステップ $t$ を、$t-1$ 秒目から $t$ 秒目までの時間帯とします。この時間ステップの概念を使って元問題を区間スケジューリング問題に帰着します。


観客に聞こえる音の制約から、各時間ステップ $t$ の各スピーカーの状態の制約が以下の3つに定まります。
- 制約 A: スピーカーから音が必ず再生されている
- 制約 B: スピーカーの状態はどの状態でも良い
- 制約 C: スピーカーが必ず止まっている

このうち制約 A が一つ以上含まれるような制約 A + 制約 B の区間を取り出すことを考えます。制約 A の個数は $Q$ 個であることから、このような区間は高々 $Q$ 個です。

制約 A + 制約 B の区間を取り出した後は、以下の部分問題を各区間について解けば良いです。

> 区間 [$L$, $R$] が与えられます。
> 長さ $T_s$ の区間を追加することがコスト $1$ で、 長さ $1$ 以上 $T_s$ 未満の区間を追加することがコスト $2$ で可能です。追加した区間は重複部分を含んではなりません。
> 制約 A から生成される区間 [$c_i$, $c_i + 1$] を全て追加した区間で被覆するときに必要なコストの最小値を求めてください。

以下に入力例と、そこから区間への分割方法を示します。

```
2 5
2 2
1 2 1 1 2

------

スピーカー 1 から生成される区間: [0,∞]、[0,1] と [2,3] と [3,4] を被覆する必要がある
スピーカー 2 から生成される1つ目の区間: [1,2]、 [1,2]を被覆する必要がある
スピーカー 2 から生成される2つ目の区間: [4,∞]、 [4,5]を被覆する必要がある
```

この問題は、制約 A から生成される各区間について動的計画法をすると解くことができます。
被覆しなければならない区間それぞれについて、(被覆するためにかかるコスト, 被覆した場合に余る右端の部分) を保持して、セグメント木などで管理することによって合計 $\mathrm{O}(Q log Q)$ で解くことができます。

# バグを混入しやすい点

- $Q$ 秒後にはどのような音が鳴っていてもよいので、部分問題に分割するときに右端が∞となる区間ができる可能性があります。
- 部分問題に分解したあとの区間スケジューリング問題は、貪欲法で解くことは難しいです。セグメント木などを使って求める必要があります。
IBM Log Analysis (旧IBM Log Analysis with LogDNA) でエクスポートしたログをコンソールで見た時のそれに近付ける方法

## はじめに
IBM Log Analysis (旧IBM Log Analysis with LogDNA) のコンソールでログを検索し、絞り込んだログをエクスポートすると、JSONL(JSON Lines)形式のファイルになる。

これを元のコンソールで見ていた時と同じ見栄えに近付ける方法を模索してみた。

## 試行錯誤

このように表示されていたログをエクスポートすると・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307720/73098d62-0da1-a959-f637-31c18109949e.png)
まず、時刻が `_ts` フィールドにミリ秒のUNIX時間で表現されてしまう。

```
"_ts": 1668866479459
```

これを、jqコマンドでローカルの時刻に変換するには、以下のようにすると良いらしい。

```
._ts / 1000 | localtime | todateiso8601
```

そして、時刻以外にコンソールに表示されていたフィールドは `_host, ._app, .level, ._line` (`.level`は上記の例では表示されていないが、ログのレベルを示すWARN、ERRORなど) で取れそうなので、エクスポートしたgzip圧縮のjsonlファイルを整形するには以下のようにする。

```
gzip -cd ファイル名 | jq -r '. | [(._ts / 1000 | localtime | todateiso8601) as $ts | $ts, ._host, ._app, .level, ._line] | @tsv'
```

しかし、エクスポートしたファイルは、時系列が降順になっているので、コンソールと同じ昇順にするには、最初にファイルの中身を逆さまにする必要がある。これを実現する`tac`というコマンドがあることを初めて知りました。

## 結論

こうなりました。

```
gzip -cd ファイル名 | tac | jq -r '. | [(._ts / 1000 | localtime | todateiso8601) as $ts | $ts, ._host, ._app, .level, ._line] | @tsv'
```

<img width="900" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307720/81552fbb-d750-70d7-7231-dc28650a697e.png">

なんかコンソールで見たのとちょっと違う・・・が、実際のサーバー上のログ`/var/log/cron`を見ると、後者の方が正しい（`_line`フィールドにあるものが、実際にログに出力された文字列で、コンソールに表示されていたのは、LogDNAが何かしらの法則で取り出した`message`フィールドに入っていた文字列）ので、気にしないことにする。

役に立つことがあるか分からないが、一旦満足したのでメモ。
細かいけど個人的にはこだわりたいコーディングのあれこれ【HTML編】

**個人のこだわりに近い細かい話**です。
もし共感してもらえる部分があれば大変嬉しいです！

## HTMLを記述する時のこだわり
HTMLを記述するときに個人としては絶対にやりたくない事例を紹介していきます。
感覚的なところもありますが、基本的にはHTMLの言語仕様の観点から見てBadケースだと思っています。

### inputタグでアコーディオンを実装する
アコーディオンはクリックすると要素が出てくる上下に開閉するコンテンツです。
HTMLの規約違反ではないのですが、inputタグで実装するケースは正しいコーディングではないと感じています。

```HTML
<input id="accordion" type="checkbox">
<label for="accordion">アコーディオン【タイトル】</label>
<div class="accordion-body">
  <p>アコーディオンが開いた時に表示されるテキストが入る</p>
</div>
```

HTMLの`details`タグで実装するのが最適だと考えます。

```HTML
<details>
  <summary>アコーディオン【タイトル】</summary>
  <p>アコーディオンが開いた時に表示されるテキストが入る</p>
</details>
```

https://developer.mozilla.org/ja/docs/Web/HTML/Element/details

### 空のdivタグで実装されている
アイコンやボタンなどを実装する際に空のdivを設置して、CSSでデザインを当てているケースを見かけます。
**空タグはHTML規約では問題ないが、マークアップの観点からは良いとは言えないと考えています**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146612/8c939688-9b20-f507-323c-3e220df325e3.png)　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146612/5e090735-682a-5426-508b-fa462d8686d9.png)

```HTML
<div class="header-menu"></div>
<div class="next-bitton"></div>
```

SEO観点からも空のタグが順位に影響するようなものではないとされていますが、**できる限り意味のないタグや空タグがないほうが良い**と思っています。

:::note info
iconなどはHTMLやSEOどちらの観点でも必ず意味を持たせたい要素ではないので、CSSの`before`や`after`の擬似要素を使って実装するのが良いと考えます！
:::

### テキストはpタグとbrタグだけで実装されて、段落とかの概念を無視している
下記のような文章があったとして、表示上は全く問題ありません。
ただ、**下記は段落ではなく文章なので全てをpタグで囲むのは誤りではないか？ということが言いたいです。**

```HTML
<p>
  親譲りの無鉄砲で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰を抜かした事がある。なぜそんな無闇をしたと聞く人があるかも知れぬ。<br>
  別段深い理由でもない。新築の二階から首を出していたら、同級生の一人が冗談に、いくら威張っても、そこから飛び降りる事は出来まい。弱虫やーい。と囃したからである。<br>
  小使に負ぶさって帰って来た時、おやじが大きな眼をして二階ぐらいから飛び降りて腰を抜かす奴があるかと云ったから、この次は抜かさずに飛んで見せますと答えた。（青空文庫より）
</p>
```

上記はコーディングとしては間違っていないと思います。
ですが、段落を意識してマークアップするなら

```HTML
<div>
  <p>
    親譲りの無鉄砲で小供の時から損ばかりしている。小学校に居る時分学校の二階から飛び降りて一週間ほど腰を抜かした事がある。なぜそんな無闇をしたと聞く人があるかも知れぬ。
  </p>
  <p>
    別段深い理由でもない。新築の二階から首を出していたら、同級生の一人が冗談に、いくら威張っても、そこから飛び降りる事は出来まい。弱虫やーい。と囃したからである。
  </p>
  <p>
    小使に負ぶさって帰って来た時、おやじが大きな眼をして二階ぐらいから飛び降りて腰を抜かす奴があるかと云ったから、この次は抜かさずに飛んで見せますと答えた。（青空文庫より）
  </p>
</div>
```

冗長的な感じはしますが、個人的にはこれが正しいと考えています。


### formの情報をbuttonタグではなくaタグやJavaScriptの処理で送っている
古いコードでよく見かけます。

```HTML
<form id="form1" action="#" method="get">
  <input type="text" name="name">
  <a href="#" onclick="document.getElementById('form1').submit(); return false;">
    データを送信する
  </a>
</form>

```

buttonタグを使えばHTMLにJavaScriptを記述しなくてもデータは送れます。

```HTML
<form id="form1" action="#" method="get">
  <input type="text" name="name">
  <button type="submit">
    データを送信する
  </button>
</form>
```

submitするbuttonとして利用する場合はtype属性を指定しなくても良いです。
type属性を`type="button"`にするとsubmitの機能は消え自分でアクションを定義できます。

:::note info
アクセシビリティの観点から押下する役割の要素はbuttonで実装されることが好ましいとされています。
:::

## まとめ
誰が見てもわかるようにしておくにはHTMLの基本ルールに則るのが一番だと考えています。

:::note warn
HTMLは自由にかけてしまうため個人で独自のスタイルが生まれやすいです…
また、ブラウザが優秀なのでタグ閉じられてないなどの多少のミスならいい感じにフォローしてくれるのでエラーが出にくいのも煩雑になってしまう原因だと思っています。
:::

関わる全員で共通認識を持つためにチームでコーディングへのこだわりなど、こんな考えでやっているなど共有することもわかりやすいく、保守しやすいコードを書くための方法の一つかもしれないと考えています。
HTML&CSS Day1 : 制作環境を整える（VS Codeインストール）

# 前提
・MacBook Pro を使用。バージョン13.0.1
・Webデザインは初めて

# はじめに
IT業界の端っこに身を置いているが肩身が狭くなってきたので技術の幅を広げるため、Webデザインを学んでみることにした。
HTMLやCSSは大学の情報系の授業でやったきりなので、初心者用の本を買って一から勉強をスタート。
参考書　：　HTML&CSSとWebデザインが1冊できちんと身につく本　増補改訂版
著者　　：　服部　雄樹　　
発行　　：　株式会社技術評論社

GOAL : ポートフォリオサイトを作る

# まずはVS Codeをダウンロード
Chapter1は既知のことも多いため、流し読み。Chapter2にて制作環境を整えた。

　**point**
　　・VS Codeを日本語化
　　・作業フォルダの指定が必要
　　・ツールのインストール
　　　HTMLHint / CSSTree vaildator / Live Server 

# Google　Chrome
Google　Chromeはダウンロード済。
 （久々に起動したらアップデートのアイコンが出たため、アップロード）
 →参考書ではプレビュー表示機種を「iPhone 6/7/8」を指定するよう記載があったが、メニューにない。「iPhone 12 Pro」を指定した
ActiveRecord::StatementInvalid: Mysql2::Error: Specified key was too long; max key length is 767 bytes エラー

　Railsでアプリ作成時、rails db:migrateのコマンドの後、
Mysql2::Error: Specified key was too long; max key length is 767 bytes
というエラーが出る場合がある。
そんなときは、

<変更前>
/config/database.yml
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843483/39dd7ce0-237e-6bdb-e8d5-ae21c4c2711b.png)

<変更後>
/config/database.yml
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2843483/6cd813bf-b8be-2a34-2db4-fed58ce4031a.png)

上記のように、databaseのencodingのところを修正することで、エラー解決ができる可能性がある。
DDDがわからない～絶対に必要な人間～

# 大きな組織を立ち上げる
大きな組織を立ち上げるときは、まず共通言語を決めます。
そのあと組織に必要な人をすべて洗い出します。
最後に、組織の一番重要な目的を達成することに必要な人だけ残しましょう。

# 立ち上げメンバーは少ない方がいい
組織が立ち上がった直後というのは、誰も組織への深い理解がない状態のためすぐに変更が加わります。
人数が多いと一度に作業の変わる人数が増えてしまうため。安定するまでは最低限の人数にするようにしましょう。
DDDがわからない～成長期～

# 人は成長する
人はみんなで話し合いを続けることで日々成長し続けます。しかし、その成長速度は人によって様々です。
それなのに、早い人や遅い人を同じグループ入れてしまうと成長の早い人に合わせて遅い人も変更を加えなければならなくなってしまいます。ほとんど変化しないで済んだはずなのにめんどくさいことになってしまいます。

# 成長の早い人
システムの中心にいる人や、新しいシステムを担う人は常に話の中心となるため成長がとても速いです。

# 成長の遅い人
システムの中心から外れたところにいる人や、保守扱いとなっているシステムの人、外部に指示を出す人は緩やかに成長することが多いです。

# 老いていく人
一時的に雇うことになった人や、新しい人に交代をして役目が終わろうとしている人。消えていくので一番別のグループとしておくべき人々。
変数の初期化にかかる計算量も意識したい (ABC278 C問題に対する感想)

本記事はABC278 C問題に関する感想です。

https://atcoder.jp/contests/abc278/tasks/abc278_c

## 誤答とその原因
マジ悔しい。
はじめ各ユーザごとにfolloweeを管理するsetを持つ方針で進めたが、pythonで提出するとTLE。
```python
N, Q = [int(s) for s in input().split()]
T = []
A = []
B = []
for _ in range(Q):
    t, a, b = [int(s) for s in input().split()]
    T.append(t)
    A.append(a)
    B.append(b)

follows = [set() for _ in range(N+1)]

for t, a, b in zip(T, A, B):
    if t == 1:
        follows[a].add(b)
    elif t == 2:
        follows[a].discard(b)
    elif t == 3:
        if b in follows[a] and a in follows[b]:
            print("Yes")
        else:
            print("No")
```
pythonが遅いのかと思って、C++で書き直したら、RE
```cpp
#include <iostream>
#include <vector>
#include <set>
using namespace std;

int main(){
    int64_t N, Q;
    cin >> N >> Q;
    vector<int64_t> T(Q+1), A(Q+1), B(Q+1);
    for (int64_t i = 0; i<Q; i++){
        cin >> T.at(i) >> A.at(i) >> B.at(i);
    }
    vector<std::set<int64_t>> follows(N+1);

    for (int64_t i = 0; i<Q; i++){
        if (T[i] == 1){
            follows[A[i]].insert(B[i]);
        }else if (T[i] == 2){
            follows[A[i]].erase(B[i]);
        }else if (T[i] == 3){
            if (follows[A[i]].count(B[i]) && follows[B[i]].count(A[i])){
                cout << "Yes" << endl;
            }else{
                cout << "No" << endl;
            }
        }
    }
    return 0;
}
```
こういうテストケースでエラーが出た
```
1000000000 3
1 2 3
2 3 2
3 2 3
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
```
C++よく知らないので何が起こってるのかわからなかったけど、メモリを確保できないときにこういうエラーが出るらしいです。
なぜメモリを確保できないのかわからなかったが、解説読んでようやく気付きました。

問題は、N=10^9程度のときに、10^9人のユーザそれぞれに対して(かなり少なく見積もって)8byteなりのデータを管理すると、少なくとも8GBはメモリが必要になることです。
1ユーザあたり8byteとしているのは`int64_t`1つ分の話で、実際はその何倍も必要でしょう(`std::set`1つ分がどれぐらいメモリを使うのか知りませんが)。

pythonでは、10^9個のsetを動的に確保するところで非常に時間がかかっていたのではないかと予想(計測してないので、あくまで予想)。
- というか、他の部分が$O(Q)$だったとしても`follows = [set() for _ in range(N+1)]`が既に$O(N)$ですね。アホすぎる…

MLEが出ていればメモリが足りないのかな？というあたりは付けられたのですが、TLEやREだったので原因がわかりませんでした…

## 教訓
- メモリをアホほど使う解法(誤答)では、MLEではなくてTLEやREが出ることもある。
- 変数の初期化にかかる計算量も意識できれば、誤った解法なことがわかったはずなので反省。
- そもそも、今回のようなケースに限らず、コーナーケースでテストしてから提出する。

## 正答
[解説](https://atcoder.jp/contests/abc278/editorial/5230)にも書いてありますが、全ユーザーのfollow状況を管理するsetを1つ用意すれば解けます。
```python
N, Q = [int(s) for s in input().split()]
T = []
A = []
B = []
for _ in range(Q):
    t, a, b = [int(s) for s in input().split()]
    T.append(t)
    A.append(a)
    B.append(b)

#follows = [set() for _ in range(N+1)]
follows = set()

for t, a, b in zip(T, A, B):
    if t == 1:
        follows.add((a, b))
    elif t == 2:
        follows.discard((a, b))
    elif t == 3:
        if (a, b) in follows and (b, a) in follows:
            print("Yes")
        else:
            print("No")
```
Pythonエンジニア認定データ分析試験合格までの勉強法

### はじめに
前回に引き続きPython試験に挑戦し、約一か月で無事合格できましたのでこれから試験に臨む方向けに、どのように勉強したか共有したいと思います。
私自身は、Pythonを実務で扱った経験はありませんが、Pythonエンジニア認定基礎試験は合格しています。同じような境遇でしたら参考になるかと思います。

Pythonエンジニア認定基礎試験の合格までの勉強法についてもまとめていますのでよかったら参考にしてみてください。

https://qiita.com/y-matsunaga/items/e0a9ec28584930cf2b2a

### 試験について

>◆受験方法
受験日：通年
試験センター：全国のオデッセイコミュニケーションズCBTテストセンター
申込URL：http://cbt.odyssey-com.co.jp/pythonic-exam.html
受験料金：1万円（税別）　学割5千円（税別）

出題範囲
>主教材である翔泳社「Pythonによるあたらしいデータ分析の教科書」より以下の範囲と割合で出題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/7ddb5ed7-7024-fadc-44cf-b9f8014878f1.png)

プログラミング未経験者の方へ
>プログラミング未経験者の方が、いきなり主教材を読まれると躓くことがありますので、以下の参考図書を読まれることをお勧めします。また受験の前に下段に記載している模擬試験を受験いただき不得手な部分を再度復習してから受験されると合格しやすくなると思います。

・「いちばんやさしいPythonの教本 第2版」
・「スラスラわかるPython第2版」
・「Pythonスタートブック [増補改訂版] 」

### 勉強法その１　教科書の読み込み

私はキャンペーンに参加して無料で手に入れました。
条件は、友達（フォローやフォロワー）が１００人以上いる対象のSNSで受験宣言をするというもの。期間限定キャンペーンだと思いますが、まだ購入していない方は是非チェックしてみてください。

https://www.pythonic-exam.com/archives/news

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/8db719a8-0299-36f2-4853-773312bd4aa5.png)


https://twitter.com/InfraRose_n/status/1580330360172601344?s=20&t=Dltk_ejLTYrOQCfB4AOifw


※2022/10/24に第２版がでているようですが、試験が変わったわけではないので、学習にはさほど影響ないのではないかと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/377ad19c-5f93-201f-b479-2cffcb41a2c7.png)

### 勉強法その２　動画学習（数学）

私は３章で少し躓きました。
数学の基礎知識があまりにもなかったので、数式見てドン引きしましたｗ
ベクトルのユークリッド距離やマンハッタン距離の計算まではよかったですが、線形代数の計算のあたりが教科書だけでは理解できなかったので動画で学びました。この動画は本当におすすめです。

https://www.youtube.com/watch?v=ltFl0FpLTzQ&t=354s

### 勉強法その３　模擬試験の実施

基礎試験同様、PrimeStudyにお世話になりました。

https://study.prime-strategy.co.jp/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/a13b224c-ec75-dbbc-edbf-6d76901df8a9.png)

なんとうれしいことか、動画にて問題解説がついています。
初見で６０％ほどを取れましたが、運でとれていた問題もあったのでありがたく問題解説動画をみて間違った問題を復習しました。
第一回については２回目で８０％ほど取れてたと思います。
引き続き第二回と第三回を受験したところ二つとも合格圏内で８割ほど取れていました。
間違えたところを復習するで十分で、何度も繰り返し実施することはしませんでした。
（同じ問題なので答えを覚えてしまうのもあります）

一通り模擬試験をこなし、すべて合格圏内に入ったら、次はDIVE INTO CODEに無料登録し、模擬試験を実施。

https://diver.diveintocode.jp/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/e8b73c19-49ee-c654-6269-f43e5428abee.png)


なんと、びっくり６０％しか取れませんでした。。（試験予定２日前）
問題の出題の仕方がPrimeStudyの模擬試験とは雰囲気が全然違い、これ初見では？と思うような問題も多く、驚きました。これに焦った私は、間違った問題の解説がどうしても見たくなり、１０日間のお試し無料期間を利用して有料登録し、模擬試験を４回ほど回しました。
８０％以上は取れるようになったくらいで試験日を迎えました。

### 試験日当日
正直、落ちる可能性もあるかなと不安もよぎりました。
基礎試験の時ほど復習しなかったので。
試験が１６時開始でしたので当日も模擬試験を実施して準備しました。
いざ本番試験、問題形式はDIVE INTO CODEに近いと感じました。
難易度はやはり模擬試験より少し優しめか？と感じるほど。
ただ、一つ問題が。２０問ほど解いたあたりで、お昼ご飯に食べたカレー(5辛)の副作用お腹の調子が急に悪く、、、その為大急ぎで問題を解きました。見直す余裕がなく、後半は問題全部読まずに解答するような問題もあるくらい追い込まれました・・・
ですがなんとか無事試験を終え、結果見て安堵。
![IMG_7654.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1744893/c73d787a-fd1f-4a92-3712-43421cadb92d.jpeg)

### 感想
数学が怖かったですが、そこまで問題数も多くなかったので助かりました。
行列の計算とか暗算でできるものでした。
やはり模擬試験よりかは少し易しめに感じますので、模擬試験で連続で合格点とれるようであれば自信をもって受験して大丈夫だと思います。実際受けた人はみんなこんな感触だと思います。あまりに簡単だよと無責任なことは言えませんが、模擬試験全部１００％とるほど頑張らなくても大丈夫です。あとは、試験にはしっかりと体調を整ええてから挑みましょう！
腹痛もWarningレベルで止まってくれたのでよかったですが万が一Criticalまで行っていたらと思うと震えが止まりません。
MOOCで機械学習と深層学習を学ぶ #1 Mathematics for Machine Learning

随時更新していく予定です。

# いまさら？
勉強してみることにしました。業務で使うかもしれないので。。。
なぜMOOCかというと、英語もわかるようになりたいため。
新しい情報は英語ですし。

# Mathematics for Machine Learning
まずはCourseraの[こちら](https://www.coursera.org/specializations/mathematics-machine-learning)の専門講座からスタートします。もうだいぶ忘れているので思い出しも兼ねて。あと多変数にめっぽう弱いので。。。
⇒1.5か月ほどで終えることができました。

# 1講座目 Linear Algebra (線形代数)
## 1週目
コースの説明とベクトルについて。ベクトルの加減算とスカラー倍。
## 2週目
ベクトルの内積と射影(スカラー射影、射影ベクトル)。余弦定理との関係、基底ベクトルの変換、線形独立。
## 3週目
行列、行列の和と積、行列による変換。逆行列、ガウスの消去法、連立方程式の解法、行列式。
## 4週目
アインシュタインの縮約記法、正方行列以外の行列の積、行列による基底の変換、直交行列、グラム・シュミットの直交化
## 5週目
固有値と固有ベクトル、PageRankの考え方。

# 2講座目 Multivariate Calculus (多変数の微積分)
## 1週目
コースの説明とベクトルについて。関数、関数の勾配、微分の定義と例、積の微分、合成関数の微分。
## 2週目
変数と定数、偏微分、ヤコビアン、ヘシアン。
## 3週目
多変数関数の合成関数の微分、ニューラルネットワーク、誤差逆伝搬法。
## 4週目
累乗の微分、テイラー展開(1変数)、テイラー展開(多変数)。
## 5週目
ニュートン・ラフソン法、最急降下法、ラグランジュの未定乗数法。
## 6週目
線形回帰、非線形関数の最小二乗誤差。

# 3講座目 PCA (主成分分析)
(編集中)

## 感想など
* 普通に高校でやってる(だろう)線形代数でカバーできます。
* 一方、英語は丁寧だけど私のような初心者には速いので繰り返し聞かないと不明なところがあります(ただ、これくらいが聞き取れないときついんだろうな、という感覚はある…がんばろう…)。
* Jupyter Notebookらしきものを使う課題(コースで用意されます)が出されます。穴埋め式なので問題ないですが、プログラミング初めてだとちょっとどうなんだろうかという感じです。
  ⇒ 3週目はちょっと考えないとできない感じ。
* 英語の聞き取り・読み取りと高校の線形代数が抑えられていればあっという間にクリア可能だと思われます。私は2日で1週分をやりましたがペースとしては3日で1週分をやるのがちょうど良さそう。
* 1週目と2週目の先生は割と楽しそうに話しているのですが、3週目の先生があまり表情が出ない感じなので眠くなるんだけど、最後に「Very well done!!」と言ってくれます。
Cloud Functions for Firebaseをローカルで実行する方法

FirebaseでCloud Functionsを使うときにはローカルでも実行できる環境が必須です。たとえデプロイするにしても1分くらいかかってしまいます。

そのため、この記事ではCloud Functions for Firebaseをローカルで動かす方法をまとめました。

## 手順

### エミュレータを入れる
まず、ローカルにエミュレータを入れます。
functionsディレクトリにて、以下のコードを実行してください
```
firebase init emulators
```
functionsのみをインストールします。

※Firebaseプロジェクト作成時にfunctionsのemulatorを入れた人は不要みたいです

### エミュレータを起動する
次に、エミュレータを実際に起動します。以下のコマンドを入力し実行してください。
```
firebase emulators:start --only functions
```

### ローカルサーバーを起動する
最後に、以下のコマンドでサーバーを起動します。
```
firebase serve --only functions
```

以上です！
これでlocalhost:5000とかで動くはずです。


## 参考
詳しくは、以下の2つの公式ドキュメントを参照してください。

https://firebase.google.com/docs/emulator-suite/install_and_configure

https://firebase.google.com/docs/functions/local-emulator#web-version-9
Elixirをデコンパイル（逆コンパイル）


[逆コンパイル]: https://ja.wikipedia.org/wiki/%E9%80%86%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9
[Elixir]: https://elixir-lang.org/
[Erlang]: https://www.erlang.org/
[Phoenix]: https://www.phoenixframework.org/
[Nerves]: https://hexdocs.pm/nerves
[Livebook]: https://livebook.dev/
[IEx]: https://elixirschool.com/ja/lessons/basics/basics/#%E5%AF%BE%E8%A9%B1%E3%83%A2%E3%83%BC%E3%83%89
[Mix.Project]: https://hexdocs.pm/mix/Mix.Project.html
[Mix.Project.config/0]: https://hexdocs.pm/mix/Mix.Project.html#config/0
[Mix.Projec - Invoking this module]: https://hexdocs.pm/mix/Mix.Project.html#module-invoking-this-module
[Application.get_all_env/1]: https://hexdocs.pm/elixir/Application.html#get_all_env/1
[Application.get_env/3]: https://hexdocs.pm/elixir/Application.html#get_env/3
[Application.compile_env!/2]: https://hexdocs.pm/elixir/Application.html#compile_env!/2
[Module attributes]: https://elixir-lang.org/getting-started/module-attributes.html#as-constants
[michalmuskala/decompile]: https://github.com/michalmuskala/decompile
[ElixirのSlack]: https://elixir-slackin.herokuapp.com/

ある日[ElixirのSlack]にて、コンパイルされた[Elixir]モジュールを[逆コンパイル]する方法を見かけたので、遊んでみます。

https://qiita.com/torifukukaiou/items/17d55cf896c24b13350e

## 論よりRUN

### [michalmuskala/decompile]をインストールする

```
mix archive.install github michalmuskala/decompile
```

### Elixirプロジェクトを作る

```sh
❯ mix new toukon

❯ cd toukon

❯ ls
README.md lib       mix.exs   test

❯ cat lib/toukon.ex
defmodule Toukon do
  @moduledoc """
  Documentation for `Toukon`.
  """

  @doc """
  Hello world.

  ## Examples

      iex> Toukon.hello()
      :world

  """
  def hello do
    :world
  end
end
```

### コンパイルする

```sh
❯ mix compile

❯ ls
README.md _build    lib       mix.exs   test

❯ tree _build
_build
└── dev
    └── lib
        └── toukon
            ├── consolidated
            │   ├── Elixir.Collectable.beam
            │   ├── Elixir.Enumerable.beam
            │   ├── Elixir.Hex.Solver.Constraint.beam
            │   ├── Elixir.IEx.Info.beam
            │   ├── Elixir.Inspect.beam
            │   ├── Elixir.List.Chars.beam
            │   └── Elixir.String.Chars.beam
            └── ebin
                ├── Elixir.Toukon.beam
                └── toukon.app
```

### 逆コンパイルする

```sh
❯ mix decompile Toukon --to expanded

❯ ls
Elixir.Toukon.ex README.md        _build           lib              mix.exs          test

❯ cat Elixir.Toukon.ex
defmodule Toukon do
  def hello() do
    :world
  end
end
```

## ご参考までに

https://qiita.com/piacerex/items/e0b6e46b1325bb931122

https://qiita.com/torifukukaiou/items/1edb3e961acf002478fd

https://qiita.com/piacerex/items/e5590fa287d3c89eeebf
Cookieが原因でhttp://localhost:8080/にアクセス出来ない

# 現状
IntellJでmain/java/in.packagenameディレクトリにあるApplicationファイルを右クリックして実行を行ない
[http://localhost:8080/]でアクセス出来るか確認した所
HTTP Status 400 – Bad Requestと表示されてアクセスが出来ませんでした

IntellJ内では下記のエラーコードが出ていました

```java
2022-11-16 14:52:43.949  INFO 35198 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Request header is too large
```

# 原因

エラーコードではリクエストのヘッダサイズが大きいと表示されており原因を探してみた所
過去に開発したアプリが原因で[http://localhost:8080/]に大量のCookieが送られてるという可能性があるのが分かりました
試しに普段使わないブラウザを使ってみると問題なくアクセスする事が出来ました、そこからChromeのcookieを削除してみた所
問題なくアクセス出来るようになりました。

# まとめ
原因が分かればなるほどとなったのですが最初は全く分からずに時間だけをかけてしまいました
もし同じようにJavaを学び始めて同じような症状になった方がいれば参考の一つにして頂ければ幸いです。

# 参考にさせて頂いたサイト
[hello wordが表示されない HTTP Status 400 – Bad Request](https://teratail.com/questions/333727)
Windows10のスタートアップにProgramって名前の謎の奴がいる

# 概要

なんぞ ↓ こいつ？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/8f899fae-06ab-c31c-df97-92b61fc5aea3.png)

# 正体の調べ方

カラム名上で右クリック ⇒ コマンドライン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/9c317bfb-08a8-38ab-7f9a-92689bf62b3f.png)

Programが ***スタートアップ時に起動するファイル*** が分かる。

例えばコマンドラインが ```"C:\Program"``` のようになっていたら…
スタートアップの登録に失敗 ⇒ ```"C:\Program"``` の ```Program``` を拾って名前にした、という状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/3465eb81-4e7c-75da-c703-d64edb9f5f9d.png)

# スタートアップの修正 or 削除

## レジストリエディター

スタートアップの設定はいろんな箇所にあるので、下記の場所を一つ一つ見ていく。

```
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
```

```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
```

```
HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
```

```
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
```

```
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run
```

## エクスプローラー

```
shell:startup
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/62868be4-346e-7b3e-fe75-544984e79ce6.png)


# 参考サイトさん

https://akarui-nippon.com/blog/windows-%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AB%E8%AC%8E%E3%81%AEprogram

https://itojisan.xyz/trouble/21949/

# バージョン

Windows 10 Home 22H2 19045.2251
今日のdocker error:  repository does not exist or may require 'docker login'

Cコンパイラ使おうかなってなった。

```macOS:bash
$ docker run -v /Users/ogawakiyoshi/n4910/n3540:/Users/ogawakiyoshi/n4910/n3540 -it kaizenjapan/n3540 /bin/bash
Unable to find image 'kaizenjapan/n3540:latest' locally
docker: Error response from daemon: pull access denied for kaizenjapan/n3540, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
```

前から、ちょくちょくお目にかかった。 

GUIでログインしているのに、コマンドでログインしなおさせることがあった。

コマンドでログインしようとしてもエラーになってしまうことしばしば。

```macOS:bash
docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: kaizenjapan
Password: 
Error saving credentials: error storing credentials - err: exit status 1, out: `error storing credentials - err: exit status 1, out: `The user name or passphrase you entered is not correct.``
```
年齢や転職回数に負けないキャリアを構築する



# アラフォーでもアラフィフでもそれなりに食べていくために

ITに携わる者として自身の年齢や転職回数をが気になる人も多いと思う。
昨今の人手不足の状況でやや気にしなくなってきているものの特に雇われプログラマーは第一線を渡り歩いていれば別だが30代後半以降では忌避されることも多いのではないかと思う。40代ならまだしも50代になるとやはり厳しくみられると思う。日本では雇用の流動性がまだまだ低いのが事実だと思う。そんな中でアラフォーでもアラフィフでも仕事を変えることができるきっかけをもっておくにはどうしたらよいのか。実際に転職をするかどうかは別として常に動ける状態になっておく・・・というのは時代の流れ的に必要不可欠に思える。

# BPR経験を積む
BPR（Business Process Reengineering）は一言でいうとすると業務プロセス改革・改善。多くの場合で最適なITツールの活用、自動化もスコープに入る。日本の多くの企業では生産性の低さが話題になるが、生産性を高くするのもBPRの一環。実はこの領域、若い人や転職回数が少ない人はまず勝負ができないことが多い。なぜなら企業全体・部門横断的に、ときには経営者から中間管理職から現場まで巻き込んで仕事をするのって若手じゃ無理というか相手にされないことが多い。そして一つの企業での経験より多種多様な複数の企業・環境で実績を積み再現性がある方が、実際に任せたときに仕事が上手くいくかどうかの賭けに臨むとき採用の決め手になるというか信用されることが多い。DX推進と言っているのが実はBPRだったりすることも多い。

# BPRをどこで積むのか？
フリーランスで受託開発だとやや厳しいかもしれないが正直どこでも積めるはず。それこそ、日本ではIT業務の多くも生産性が低いと感じることが多い。システム開発であれシステム運用であれまずは自分自身の担当領域は本当に最適化されているのかと疑問を持ってみる。時間を短縮できることは何かないのか・・・そして何かできそうならできるところからまずは着手して少しずつ実績を積む。これも立派なBPR。これを積み上げて職務経歴書に書くことが増えればしめたもの。そして少しずつでもいいから範囲を広げて会社全体・・・　総務手続きでも良いし、経理手続きでも良いし、それこそMicrosoft 365が導入されている企業なら会議調整をMicrosoft Bookingsを使うことで自動化して面談時間の無用なやりとりをなくしましたとかやれることはいくらでもあると思う。

# BPRの求人
BPR 求人と検索すると最近求人をかなり目にすることが多くなった。10年前より明らかに増加している。どれも若手・20代じゃ無理っぽい要件、案件ばかり。経営陣から現場まで、20代から60代の人まで巻き込んで推進していくなんて・・・。　若くてもアラサー、いや、アラサーでできるのかという仕事内容でアラフォー、アラフィフ位がちょうどよさそうなものが多い。年齢、転職回数・環境変化の回数がプラスになるお仕事であることは間違いない。

ということで、BPRを意識してキャリア形成をしてみてはいかが。アラフォーでも2回仕事変わりましたが、私はBPRを意識していてよかったと思っています。
conda activateしたらエラー出た件

Condaで環境を作ったのでゴリゴリ作業進めるぞー!
と意気込んだもののconda activateしたらエラーが出たので
確認するべきことと原因・解決方法をまとめます....

## 確認するべきこと

- コマンドを実行するディレクトリの位置を確認する
- タイプミスないか確認する
- 使う仮想環境間違えていないか確認する（コマンド側で）

## 原因
今回の原因ですが....

原因その①：実行コマンドで`conda activate hoge`の「hoge」の部分を間違えていた
原因その②：conda activateを実行する場所（パス）を間違えていた

という凡ミスです。

## 出てきたエラー
### エラー①
作業ディレクトリを仮にhogeとして、
その場所まで移動し`conda activate hoge`を実行したところ

```
EnvironmentNameNotFound: Could not find conda environment: hoge
You can list all discoverable environments with `conda info --envs`.
```
と言われたので構築した仮想環境の一覧を確認します

```
conda info -e

# conda environments:
#
base                  *  /Users/HOME名/miniforge3
fuga                  /Users/HOME名/miniforge3/envs/fuga
```
fuga（仮の名前）が私が作った環境ですがどうやらbaseにいる模様でした。

### 原因その①：存在しない仮想環境を実行しようとしていた
ここまで来ればお分かりかもしれませんが、作った仮想環境の名称をダイレクトに間違えてactivateを実行していたのが原因その①です。
そもそもhogeという仮想環境は作っていないので実行できなくて当たり前です...
作業ディレクトリとおもいきり間違えていました...

正しくは作業ディレクトリの名前ではなく作った仮想環境の名称でactivateします。

```
//間違い
conda activate hoge

//正解
conda activate fuga
```

次にpwdとlsとcdを駆使しながら実行するコマンドの場所まで移動しました。


### エラー②
これも同じタイミングで出てきていたエラーです
`python /path/to/script/manage.py`を実行したら次のように出てきました。

```
python /path/to/script/manage.py

python: can't open file '/path/to/script/manage.py': [Errno 2] No such file or directory
```

が、これは実行する場所が間違ってる時に出てくるそうな。

### 原因その②：そもそもの実行する場所とコマンドの意味合いを間違えていた
そもそも仮パスまでの指示なんだそう。
これを回避するためにmanage.pyがいるところまでcdで移動しておく。
そこまで移動しておけば`python /path/to/script/manage.py`必要もないので変にエラーが出なくて安心できると思いました。


## 解決

1. manage.pyがいるところまで移動し
2. activeteする仮想環境を`conda info -e`で確認

これらを確認できたので
`conda activate fuga`を実行し
`python manage.py runserver`でローカルサーバーを無事起動することができました!

飛んだ凡ミスで恥ずかしいのですが
Python初心者の私は未知の出来事すぎて焦りまくりました...
次回以降は同じことしないようにしたいところです..
今日のdocker error:requested access to the resource is denied

Linuxのカーネルソースコンパイルしようとして詰まった。　

```macOS:absh
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e62098c7fe61        gcc                 "/bin/bash"         2 days ago          Up 2 days                               compassionate_beaver
$ docker commit e62098c7fe61   kaizenjapan/linuxkernel
sha256:511c133ebe1af0100ddec401a9ecd0db17e0380323d31069e3eadaeccb13363c
$ docker push kaizenjapan/linuxkernel
The push refers to repository [docker.io/kaizenjapan/linuxkernel]
4327e6715320: Preparing 
56eb75c73288: Preparing 
0fa93d229b9b: Preparing 
70c24d70e9a0: Preparing 
8feaf4fcfb5e: Preparing 
b78efdac8138: Waiting 
bcc8223cbebf: Waiting 
a24f9e96a54c: Waiting 
54b354c15c5a: Waiting 
b9fcb0f781e4: Waiting 
denied: requested access to the resource is denied

```