OmniAICreator/Qiita-1.07M huggingface dataset:
pythonでjson編集

pythonによってjsonの編集をする際は
jsonをdict型に変換すると楽。

<h5>まずはjsonを読み込んでみる</h5>

```sample.json
{
    "object": "food",
    "object_list": [
        "rice",
        "meat",
        "salad"
    ]
}
```

```edit_json.py
import json

with open('./sample.json', 'r') as js:
    dict_json = json.load(js) #jsonをdict型に変換

print(type(dict_json))
print(dict_json)
```
```$ python edit_json.py```
```
<class 'dict'>
{'object': 'food', 'object_list': ['rice', 'meat', 'salad']}
```

<h5>続いてjsonを編集して保存してみる</h5>

```edit_json.py
import json

with open("./sample.json", "r") as js:
    dict_json = json.load(js) #jsonをdict型に変換

dict_json["object"] = "color"

color_list = [
    "red",
    "blue",
    "yellow"
]

dict_json["object_list"] = color_list

#./edited.jsonファイルを作成し、dict_jsonを書き込み。
with open("./edited.json", "w") as js:
    json.dump(dict_json, js, indent = 4) #indentを指定すると綺麗に整形されます
```
```$ python edit_json.py```
で以下jsonファイルが生成されます。

```edited.json
{
    "object": "color",
    "object_list": [
        "red",
        "blue",
        "yellow"
    ]
}
```

以上でした🍞
ねえパパ、numpyのnp.max(a, axis=1)、Nxに無いの？

# やりたい事

Nxで、各列の最大値を値とする行列を作りたい

numpyのnp.max(a, axis=1)に相当する処理です

Nx.maxは二つの行列を与えて、各要素の大きい方をとるものなので、ちょっとちがいました。

argmaxで最大値のindexを調べて、take_along_axisで値を取り出せばできそう。

# argmax

```Elixir
iex(1)> a = Nx.tensor([[1,3,2],[2,1,5]])   
#Nx.Tensor<
  s64[2][3]
  [
    [1, 3, 2],
    [2, 1, 5]
  ]
>
iex(2)> i = Nx.argmax(a, axis: 1, keep_axis: true)    
#Nx.Tensor<
  s64[2][1]
  [
    [1],
    [2]
  ]
>
```

# take_along_axis

```Elixir
iex(3)> Nx.take_along_axis(a, i, axis: 1)
#Nx.Tensor<
  s64[2][1]
  [
    [3],
    [5]
  ]
>
iex(4)> 
```

# 結論

argmxとtake_along_axisを組み合わせてできる

```Elixir
iex(1)> a = Nx.tensor([[1,3,2],[2,1,5]])   
iex(2)> Nx.take_along_axis(a, Nx.argmax(a, axis: 1, keep_axis: true), axis: 1)
#Nx.Tensor<
  s64[2][1]
  [
    [3],
    [5]
  ]
>
iex(8)> 
```

# 結論(最新）

Nx.reduce_maxを発見しました。これでできます。

```Elixir
Nx.reduce_max(a, axes: [1])
```

# 結論(最新）(最新）

結論と同じ形状のtensorを得るには、keep_axes: trueが必要でした。

```Elixir
Nx.reduce_max(a, axes: [1], keep_axes: true)
```
【M1 Mac】npm start できなかった時の対処記録

# 状況
普段使っているWindows環境でいつも通り
`Create Reactapp！`
（この段階では普通に起動できる）

GitHub経由でファイルを移して
掘り起こしたMacにHomebrew・node.jsをインストールしてターミナルで
`npm start..`　あれ？
`sh: react-scripts: command not found`
binファイルを確認してもNode.jsはしっかりインストールされているし...

という状況に陥ったので、同じ状況に陥った仲間のために本記事を投稿します。
※筆者は酷く初心者なため稚拙な内容をお許し下さい。

# 原因
色々調べてみると M1 macにてパッケージマネージャのHomebrewが上手くインストールできないという記事を発見。

https://qiita.com/___fff_/items/17655df4e80ebadd8fc3

# Homebrewの再インストール
上記の記事を参照してターミナルをRosettaを使用して開くにチェックを入れ、下記のコードをターミナルにコピしてHomebrewを再インストール。
```terminal
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew- v
Homebrew 3.6.12
Homebrew/homebrew-core (git revision 0ab8010e32e; last commit 2022-11-22)
```
`brew -v`でバージョンを確認し、インストールが確認できました。

# Node.jsのアンインストール・インストール
### アンインストール
Node.jsを再インストールする前に一度アンインストールしておきます

```terminal
sudo npm uninstall -g npm
Password:

removed 211 packages, and audited 1 package in 499ms

found 0 vulnerabilities
```

### 再インストール
下記のリンクからNode.jsのインストーラをDLし再インストール


https://nodejs.org/ja/


# package.jsonのインストール
node.jsを再インストールしたのでpackage.jsonを読み込み直します
```terminal
npm install
npm run build
```
# 頼む npm start
プロジェクトに戻って`npm start`
無事起動しました
```terminal
Compiled successfully!

You can now view replace in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://192.168.1.9:3000

Note that the development build is not optimized.
To create a production build, use npm run build.

webpack compiled successfully
```

# 最後に
原因の分解がうまく出来ず、お恥ずかしながらどれが解決に繋がったのかは分からなくなってしまいましたが同じ症状に出会った方が解決につながれば嬉しいです。
iphone で Date関数を使用すると NaN 表記になる件

## 結論

- `new Date()` は `{}`が返される。
- 現在時刻の年月日を計算に使いたい場合は、`new Date().getFullYear()`などで１つずつ地道に取得しなくてはならない。

```js
// NG
new Date()  // => なぜか {}

// OK
Date() // => "Wed Nov 23 2022 09:20:44 GMT+0900" ※ただしstr型

new Date().getFullYear()  // => 2022 
new Date().getMonth()+1  // => 11
new Date().getDate()  // => 23
```

## 動作環境

- 端末：iphone12mini
- ブラウザ：safari/chrome ver?
- react: 18.2.0

## 参考

iphone 上でコンソール出す方法については下記を参照しました

- https://laptopreneur.net/%E3%82%B9%E3%83%9E%E3%83%9B-%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB/
bashターミナル出力の色分け設定


やり方は簡単で、bashプロンプトを開く際に読み込まれる「.bashrc」というファイルに設定を加えることで、このような表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427357/17df8b96-fda4-671a-6fd1-8132b1fff5ae.png)


## 設定方法
#### 1. ~/.bashrcをviエディタで開く
```bash:コマンド
sudo vi ~/.bashrc
```

#### 2. 以下のコードを追加する
```bash:~/.bashrc
set_ps1() {
    local _PS1
    if [ $UID = 0 ] ; then
        #rootの場合の表示
        _PS1="\[\033[1;31m\][\u@\h \W]#\[\033[0m\] "
    else
        #root以外の場合の表示
        _PS1="[\e[1;32m\u\e[00m@\e[1;32m\h\e[00m \e[1;33m\w\e[00m] (\e[1;34m$1\e[00m)\n$ "
    fi
    export PS1=$_PS1
}
# ユーザ名などの横に表示する文言
set_ps1 "AWS EC2"
```

即反映されるので、色分けができていれば成功です。
NetBSD/armのINSTALL

MV2120_INSTALLなカーネルをビルドしてORIONでnetbsd.ubを起動してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/8029f722-1e5e-b643-7cf7-1ffa95a19dec.png)

カーネルの中に以下のファイルが入っていて、mdにコピーされてmountされてsysinstが実行されるようです。

![INSTALL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/06ca4629-e894-a323-f4d3-4ccbb8ae9d33.png)

組み込まれているファイルはここにあります。

usr/src/distrib/evbarm/instkernel/ramdisk/obj/ramdisk.fs

fileで見ると

```
./usr/src/distrib/evbarm/instkernel/ramdisk/obj/ramdisk.fs:      Unix Fast File s
ystem [v1] (little-endian), last mounted on , last written at Wed Nov 23 12:48:02
 2022, clean flag 1, number of blocks 6144, number of data blocks 5863, number of
 cylinder groups 1, block size 4096, fragment size 512, minimum percentage of fre
e blocks 0, rotational delay 0ms, disk rotational speed 60rps, SPACE optimization
```

中身はこんなです

```
# ls -asl
total 4695
   1 drwxr-xr-x  14 root  wheel      512 Oct 27 11:27 .
   1 drwxr-xr-x  14 root  wheel      512 Oct 27 11:27 ..
   5 -r--r--r--   1 root  wheel     2438 Oct 27 11:27 .profile
   1 drwxr-xr-x   2 root  wheel      512 Oct 27 11:27 bin
  23 drwxr-xr-x   2 root  wheel    11776 Oct 27 11:27 dev
   1 drwxr-xr-x   2 root  wheel      512 Oct 27 11:27 etc
   1 dr-xr-xr-x   2 root  wheel      512 Oct 27 11:58 kern
   1 drwxr-xr-x   3 root  wheel      512 Oct 27 11:27 libexec
   1 drwxr-xr-x   2 root  wheel      512 Oct 27 11:27 mnt
   1 drwxr-xr-x   2 root  wheel      512 Oct 27 11:27 mnt2
   2 drwxr-xr-x   2 root  wheel     1024 Oct 27 11:27 sbin
4376 -r-xr-xr-x  67 root  wheel  2233372 Oct 27 11:27 sysinst
  72 -r--r--r--   1 root  wheel    36367 Oct 27 11:27 sysinstmsgs.de
  70 -r--r--r--   1 root  wheel    35362 Oct 27 11:27 sysinstmsgs.es
  71 -r--r--r--   1 root  wheel    36128 Oct 27 11:27 sysinstmsgs.fr
  64 -r--r--r--   1 root  wheel    32542 Oct 27 11:27 sysinstmsgs.pl
   1 drwxr-xr-x   2 root  wheel      512 Oct 27 11:27 targetroot
   1 drwxrwxrwt   2 root  wheel      512 Oct 27 11:27 tmp
   1 drwxr-xr-x   6 root  wheel      512 Oct 27 11:27 usr
   1 drwxr-xr-x   6 root  wheel      512 Oct 27 11:27 var
# df
Filesystem   512-blocks       Used      Avail %Cap Mounted on
/dev/md0a          5863       4756       1107  81% /
kernfs                2          2          0 100% /kern
# 
```

binの下のファイルはiノードが同じなので、実際は一つのファイルのようでbusyboxと同じようになっているのかもしれません。

かなり古いですが、概要はここにあるようです。

https://wiki.netbsd.org/tutorials/how_to_create_bootable_netbsd_image/

build.shのrelaseでreleasedirにramdisk.fsにも作れれるようだが関係は不明。

ramdisk.fsが正しくカーネル内にコピーされていないと止まります。

```
[   1.0698833] boot device: <unknown>
[   1.0698833] root on md0a dumps on md0b
[   1.0698833] Supported file systems: mfs lfs ffs ext2fs nfs umap procfs overlay null kernfs fdesc union tmpfs udf puffs ptyfs ntfs msdos hfs cd9660 coda
[   1.0698833] no file system for md0 (dev 0x1200)
[   1.0698833] cannot mount root, error = 79
[   1.0698833] root device (default md0a): 
```

sysinstは/.profileから実行されています。
export, export defaultの違い

## export

```js
export const a = 1;
export const b = 2;
```

```js
import a from './test';

console.log(a);
```

## export default

```js
let k; export default k = 12;
```

```js
import m from './test'; // k がデフォルトエクスポートなので、インポートする k の代わりに m を使用することができる点に注意してください
console.log(m);        // log 12 になる
```

## exportとexport defaultの違い

exportとexport defaultの違いは、exportは複数定義できるが、export defaultは1つしか定義できない。

また、export defaultはimport時に名前を自由に変更できるが、exportは名前を変更できない。

## 参考

[export - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/export)
保存版：人のソースコードを読める様になる３つの方法

![24962495_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23130/c93ca04f-18a5-0d9c-a5bf-c5954921075a.jpeg)
自分のソースコードを久しぶりに見直した時、結構な確率でブルーになりますｗ
なんでこんな書き方をしたのだろう、あの頃の僕は、若かったなぁと反省します。
自分のソースコードも嫌ですが、人のソースコードを読むのは、難しいものです。

# 昔に書かれたソースを読む難しさ
僕が入社した会社は、製鉄所のシステムを作っていた会社でして、システムは１９7０年とかから構築されていて、超昔に書かれたソースコードが沢山残ってました。書かれた後に何年も改修を重ねられた様なシステムです。
そのシステムのソースコードを読むのは難解です。小さな罠も仕込まれています。変数が急に違う意図で使われ始めたり、沢山の人の違う意図が入り組んでます。お陰様で、ここで人のソースコードを読むのを鍛えられました。

# １．実際のデータをイメージして読む
ポイントはあまり細かい部分を気にしない事です。関係ない所まで、考えていたたら時間が掛かるし混乱します。木をみずに森をみます。
そして、対象とする部分を、実際のデータを具体的にイメージしながら読むことです。そのデータが流れる部分に沿ってソースコードを読んでいくと具体的にソースコードが見える様になると思います。
この時、自分のデータの流れ以外の部分も気にはなるのですが、一旦、そこは目をつぶってブラックボックス化してソースコードを読んでいきます。これで全体をブロックで把握する事も出来ます。

# ２．オープンソースを読む
人のソースコードを読む中でも、読みやすいと思うのがオープンソースだと思います。
何故ならオープンソースは、
・優秀なエンジニアが書いている
・良くないコードは、修正される
・バグも改修される
・仕様が分かっている
比較的に読みやすいし、一番、読みやすいのは、仕様がはっきりしているからです。オープンソースにあるものは、仕様が大体明確で、これなんでだろうがありません。RFCに沿った作法であれば、ソースも読みやすいです。
オープンソースを読めば、レベルの高いソースコードの高い書き方も習得出来るし、そのオープンソースに関しての知識レベルも上がるし一石二鳥です。是非、怖がらずに面倒くさがらずにチャレンジしてください。

# ３．本を読んだり、ブログを書いたり
本って最初に目次があります。目次って素晴らしくわかりやすく本をサマリーした部分です。よく出来た本は、目次が素晴らしくポイントをついてます。目次を見るだけでも本の概要がわかります。目次から気になる部分だけ読んでいくことで時間の節約にも繋がります。
この目次ってプログラムでの関数名やモージュル名の抽象化の似てます。
そして、ブログを書くことも自分の情報を整理してアウトプットすることも重要ですが、抽象化したタイトルや段落つけ等わかりやすくまとめる勉強になります。
これを続けると、人のソースコードを見て、意図を計り知りながらポイントだけを理解するのが上手になります。

# 最後に
以上、人のソースコードを読める様になる３つの方法でした。
他人のソースコードには罠が沢山ありますが、勉強になる部分も沢山あります。良いソースコードは学びになりますが、悪いソースコードも悪い事例として学びになります。
沢山の人のソースコードを読んで、生産性をあげて、品質をあげながら、自身のコーディングレベルをあげていきましょう。
吉祥寺.pm31 の感想

https://kichijojipm.connpass.com/event/265657/

> 今回のテーマは、「来年に向けて、今年やったこと、書いたコード」

https://twitter.com/kichijojipm/status/1595010363455844353?s=20&t=BsERYpOJ3sYnTMqKFwrYGA

## 感想

毎度、適度なユルさとごった煮感があって参加してよかったと思える吉祥寺感があるのですが、今回も期待にたがわずとてもリラックスして聞けました。「ツイートやブログは最大のご褒美」とのお言葉があったことに共感するので、しっかり自分の記録としても残したいと思います。

まったく個人的な、気分的な話ながら、自分が最近職場を変えたせいもあり「既存の快適なコミュニティから脱して人とかかわる」ことに抵抗がさらになくなっていることにも気づきました。2023 年も色々なところに首を突っ込める活動をしたいと感じます。

かかわった皆様、大変ありがとうございました！

## 本編


- まつひさ hmatsu47 さん
https://twitter.com/hmatsu47

<script async class="speakerdeck-embed" data-id="50a8ca2bcfbf4c3fbc5f2dd0d7fadae0" data-ratio="1.77725118483412" src="//speakerdeck.com/assets/embed.js"></script>


- ゆめみん yumemean さん
防災としての転職活動
https://twitter.com/yumemean

<script async class="speakerdeck-embed" data-id="c0988cb012ca44e28c934d6fb0570bba" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

https://twitter.com/yumemean/status/1595029908396576768?s=20&t=BsERYpOJ3sYnTMqKFwrYGA

- Masashi Suto さん
https://twitter.com/kurotyann9696
20 年続く YYC のリプレース
V1 から V2

<script async class="speakerdeck-embed" data-id="5fc7b3a75d8140a49760d8157c87e4f6" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

https://metacpan.org/pod/aliased


## LT 枠

- Higuchi Kokoro さん
<script async class="speakerdeck-embed" data-id="cbf25e4cb5fc403d8a8b4fbe272493fd" data-ratio="1.77404403244496" src="//speakerdeck.com/assets/embed.js"></script>

- うたがわさん
https://twitter.com/utgwkk

<script async class="speakerdeck-embed" data-id="dc49b1252db4412fbcf50ee80b24a613" data-ratio="1.77725118483412" src="//speakerdeck.com/assets/embed.js"></script>

https://blog.yapcjapan.org/entry/2022/10/26/161847

- Akiko さん
https://note.com/akiko_pusu/n/n3b6e8fc805e9

https://note.com/akiko_pusu/n/n9150ce14479f

https://crowdin.com/project/minecraft



## 参考
https://hmatsu47.hatenablog.com/entry/2022/11/23/005951

## 過去
[吉祥寺.pm28 をながら視聴したので、その感想 - Qiita](https://qiita.com/e99h2121/items/d794f5a006ea5853f912)
M2 Mac macOS Ventura 13.0.1でのCocoaPodsインストール方法(FilePermissionError)

![CleanShot 2022-11-23 at 01.31.45@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953056/69a51250-e639-a8ad-086b-a1a52403192b.png)
# 目的
最速でVenturaにアップデートしたので、CocoaPodsのインストールに苦労しました。
色々と調べている中で、どこかのサイトで`VenturaでCocoaPodsインストールできた！`というコメントを見て、やり方は書かんのかいと半ギレになったので自分で書きます。

## エラーの内容(FilePermissionError)
`gem install cocoapods`の実行結果
```
% gem install cocoapods                      
ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
```
Library/Ruby/Gems/2.6.0 ディレクトリに対する書き込み権限がありません。
## 解決方法

### 1.Homebrewをインストール
#### 公式サイトの一番上をコピぺしてターミナルに貼り付ける
ターミナルの出し方
command+スペースでSpotlightからターミナルを検索
パスワードを要求されて鍵マークが出た場合、入力しても表示はされないが、入力後エンターを押せば大丈夫



https://brew.sh/index_ja


![CleanShot 2022-11-23 at 03.00.06@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953056/56ca4c7f-b431-0508-175b-beffa9239223.png)
#### 赤枠の所をターミナルにコピペ

![Homebrew.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953056/4108f4fb-29a7-51fb-efdf-520a48545ecd.png)
### 2.rbenvとrubyをインストール
rbenvとは

https://valed.press/programming-learning/how-to-install-ruby-with-rbenv/
#### brewからrbenvとrubyをインストール

https://qiita.com/nishina555/items/63ebd4a508a09c481150


```
% brew update
% brew install rbenv ruby-build
```


#### 現在(2022年11月)の安定版が3.1.1をインストール

```
% rbenv install 3.1.1
```
#### グローバル化


https://obel.hatenablog.jp/entry/20171128/1511852346

```
% rbenv global 3.1.1
```

## 3.CocoaPodsインストール
```
% sudo gem install cocoapods
```
## 終わり
参考にしたサイトから必要なものだけを引用しました。
ありがとうございました。
![CleanShot 2022-11-23 at 05.21.56@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953056/92d91043-2296-be52-123c-f444b0f6c281.png)
PHP Fatal error:  Uncaught Dotenv\Exception\InvalidFileException: Failed to parse dotenv file. Encountered an invalid name at xxxxx の解決例

## エラーが出た環境
xserver
larravel8
PHP 8.0
mariaDB
node 14.17.xx

## 何をしようとしたら起きた？
.envを環境ごとに.env.prodと.env.localのように分けても自動で読み取れる実装をしたところ、レンタルサーバー上でタイトルのエラーが出た。（nameに当たるxxxがxserverへのssh接続のコマンドだった）

## 原因
.env.prodを作成（コピーアンドペースト）したときにsshコマンドまで貼り付けてしまった。

## 結論（修正方法）
.envファイルの不要な記述を削除で直った。

## 余談
上記の作業中に.envファイルの`APP_ENV=production`を`APP_ENV=prod`にした箇所でもバグったので、.envのエラー探しのときは確認してみても良いかもしれない。
Pythonで引数と戻り値の型を明示する

# 前提
そもそもPythonでは引数や戻り値等の型を宣言する必要はない。
変数について型を宣言しないことで、柔軟かつ簡単にプログラムを記述できるというメリットがある。
一方、可読性の面では、場面ごとに各変数がどの型であるかを把握しづらくなるデメリットがあるといえる。

# Pythonで型を明示する意義
引数や戻り値として想定される型を明示することで、コードの可読性と保守性を高める。
(あとで読んだときに理解しやすい)
※型を明示するが、処理として型安全性を保証するものではない。つまり、明示した型以外の値が変数に代入されても通常通り処理される。

# アノテーション記法
Pythonでは、変数の型についての注釈(アノテーション)を記述するための記法としてアノテーション記法が用意されている。
次のように記述することで変数の型を明示することができる。
```Python
a: int = 10
b: bool = True
c: str = 'Hello'
```
これを用いて、次のように関数の引数も型を明示できる。
```Python
def func(a:int, b:bool, c:str):
    print(a,b,c)
```
また、関数の戻り値については次のように表現する。
```Python
def func(a:int, b:bool, c:str) -> int:
    return a * 10
```
戻り値が無い場合は次のようにする。
```Python
def func(a:int, b:bool, c:str) -> None:
    print(a,b,c)
```
# まとめ
* アノテーション記法を用いるとコードの可読性が上がる。
* アノテーションは処理には影響せず、型安全性は保証されないので注意。


#  参考
https://docs.python.org/3/howto/annotations.html?highlight=annotation
petalinux-package vs *.bif

petalinux-package には色々な引数があって、色々なことが出来る。
が、深掘りし始めると、何かよく分からない動きをする。
入れたつもりのないデバイスツリーとか入ってくる。(Linux起動には必要でしょ、ってことだろうが、FITイメージから起動する場合にはいらない。)

ここは、--bifオプションを使用し、*.bifファイルを指定したほうが、結局融通が効く。これをお勧めしたい。

また、*.bifでは、変な並び替えとか入らない。
その分、移動しようと思ったら、前後の入れ替えが必要になるが、ロード順まで制御できるということでもある。(FSBLはパッケージされた順にロードする。)

このせいか分からないが、動作がものすごく速い。
たぶん、余計なことをしない、言われた通りに動く、というものなんだと思われる。

何といっても、資料が豊富(笑
petalinux-packageの説明は、なんか怪しい。
bifは以下のドキュメント、Chapter 8、BIF Attribute Referenceが詳しい。
[Bootgen User Guide (UG1283)](https://docs.xilinx.com/r/en-US/ug1283-bootgen-user-guide)

# Example
### *.bifによる記述
コマンドライン、ないしはshell
```
petalinux-package --boot \
  --bif qspi.bif \
  --force --format BIN -o ./images/linux/BOOT.BIN
```

```*.bif
the_ROM_image:
{
    // bootloader, FSBL
    [
        bootloader,
        destination_cpu=a53-0
    ] ./images/linux/zynqmp_fsbl.elf

    // PMUFW
    [
        destination_cpu=pmu
    ] ./images/linux/pmufw.elf

    // FPGA bitstream
    [
        destination_device=pl
    ] ./images/linux/system.bit

    // TF-A (Trusted Firmware-A)
    [
        exception_level=el-3,
        trustzone,
        destination_cpu=a53-0
    ] ./images/linux/bl31.elf

    // u-boot
    [
        exception_level=el-2,
        destination_cpu=a53-0
    ] ./images/linux/u-boot.elf

}

```

### petalinux-packageによる記述
コマンドライン、ないしはshell
```
petalinux-package --boot --force --format BIN \
  --fsbl \
  --pmufw \
  --fpga \
  --u-boot \

```
【LSI】check_lsi_raid Plugin使用方法

# はじめに
GitHubに書かれている手順がさっぱり・・・
見る人が見れば分かるのか???
そんな私、みなさんのためのメモです。

ですので新しい情報はないです。
GitHub見てください。

# 参考
- [GitHub check_lsi_raid (https://github.com/thomas-krenn/check_lsi_raid)](https://github.com/thomas-krenn/check_lsi_raid)
- [LSI_RAID_Monitoring_Plugin (https://www.thomas-krenn.com/de/wiki/LSI_RAID_Monitoring_Plugin)](https://www.thomas-krenn.com/de/wiki/LSI_RAID_Monitoring_Plugin)

# 環境
- OS CentOS7系
- check_lsi_raid

# 手順
- (0) 概要
- (1) check_lsi_raidダウンロード
- (2) check_lsi_raidビルド
- (3) 動作確認
- (4) 応用編

# (0) 概要
LSI_RAID-Controllers系からステータス採取するためのツール
Controllers情報/HDD情報/Battery情報/温度など採取可能

# (1) check_lsi_raidダウンロード
```diff
- 緑色のコード⇒ダウンロードZIP
+ git clone https://github.com/thomas-krenn/check_lsi_raid.git
```
https://github.com/thomas-krenn/check_lsi_raid

# (2) check_lsi_raidビルド
そのまま実行ファイルになっていますのでビルドは不要

# (3) 動作確認

```bash:./check_lsi_raid
cd check_lsi_raid
tree check_lsi_raid
├── COPYING
├── README.md
├── changelog
└── check_lsi_raid
./check_lsi_raid

#エラー発生
---
Error: cannot find storcli executable.
Ensure storcli is in your path, or use the '-p <storcli path>' switch!
---
```
storcli pathが見つからないエラーなので`-p` オプション追加

```bash:./check_lsi_raid
# 再度実行
./check_lsi_raid -p /opt/hpe/storcli/storcli64
#色々とステータス表示
---
Critical (PD Crit, BBU Crit) [c0/e246/s1_Drive_Temperature=47;40;45] ・・・・
---
```
今回のRAID_ComtrollerはBBUを搭載していない物になります
BBUが毎回エラーになるのは不便なので`-b 0`オプション追加

```bash:./check_lsi_raid
# 再度実行
./check_lsi_raid -b 0 -p /opt/hpe/storcli/storcli64
#BBUのCritical表示がなくなりました。
---
Critical (PD Crit) [c0/e246/s1_Drive_Temperature=47;40;45] ・・・・
---
```
PDの閾値がDefault WARNING = 40 CRITICAL = 45で低いので`-PDTw`オプション追加  
```bash:./check_lsi_raid
# 再度実行
./check_lsi_raid -b 0 -PDTw 60 --p /opt/hpe/storcli/storcli64
# ステータスが全て正常になりました。。
---
- OK (CTR, LD, PD)・・・・
---
```

# (4) 応用編
```bash:cat check_lsi_raid
# check_lsi_raidの先頭に各ステータスの閾値があります
# ここを変更すればコマンドにオプション不要で実行出来ます。
our $VERBOSITY = 0;
our $VERSION = "2.5";
our $NAME = "check_lsi_raid: Nagios/Icinga plugin to check LSI Raid Controller status";
our $C_TEMP_WARNING = 85;                  # Controller
our $C_TEMP_CRITICAL = 95;                 # Controller 
our $C_MEM_CORRECTABLE_WARNING = 0;        # Memory
our $C_MEM_CORRECTABLE_CRITICAL = 0;       # Memory
our $PD_TEMP_WARNING = 40;                 # Disk
our $PD_TEMP_CRITICAL = 45;                # Disk
our $BBU_TEMP_WARNING = 50;                # Battery
our $BBU_TEMP_CRITICAL = 60;               # Battery
our $CV_TEMP_WARNING = 70;
our $CV_TEMP_CRITICAL = 85;
our ($IGNERR_M, $IGNERR_O, $IGNERR_P, $IGNERR_S, $IGNERR_B) = (0, 0, 0, 0, 0);
# $IGNERR_M ignore-media-errors
# $IGNERR_O ignore-other-errors
# $IGNERR_P ignore-predictive-fail-count
# $IGNERR_S ignore-shield-counter
# $IGNERR_B ignore-bbm-counter

our $NOENCLOSURES = 0;
our $NOWRITEBACKOK = 0;
our $CONTROLLER = 0;
```

ひとまず実行すればステータスに問題ないか確認出来るようになりました。
詳しい情報が知りたい場合は`-vvv`を付けると実行コマンド詳細が確認出来ます。

参考になれば

ではまた
What should your professional PHP developer know?

"Here’s a list of ingredients that your professional PHP developer must have:
Good grip on procedural programming theory Well-versed with Object Oriented Programming
Technology Expertise Ability to build flawless digital products using the latest technology stack comprising:
o	Symfony
o	Zend Framework
o	PHP
o	JS
o	CakePHP
o	jQuery
o	CodeIgniter
o	Dojo
o	Lamp
Security Seasoned in professional practices and instincts providing high-level security to your code, database and file system 
Analysis A good understanding of your project requirement, target audience, business goals and expectations.
Planning Ability to analyze and evaluate the project and its technical requirements to implement a project plan.
Prototype Create a wireframe with design assets and mock-ups as per the project plan.
Development Develop the product after you approve the prototype
Test & Launch Conduct rigorous testing to ensure an optimized and bug-free product before launch
Debugging Can go from an error code to problem-solving, even in a different configuration and can devise exit strategies.
Your professional PHP developer must be an adaptable player in the programming game. Being a language with multiple use cases, outsourcing and offshoring PHP developers is in high demand. Keep the above in mind before you hire a professional PHP developer.
"
部分的にPostProcessをかける方法ノート

※自分向けノートですが、View多ければ記事整えたいと思います。

## やりたいこと
- 一般的なPostProcessは画面内オブジェクトすべてにかかってしまう
- しかし、PostProcessをかけないで置きたいオブジェクトがある
- PostProcessがかかる範囲を部分的にしたくなった

## 参考URL
- [【Unity】特定のLayerだけPostProcessを適用する](https://qiita.com/Maron_Vtuber/items/8188da652ff10995a136)

## 開発環境
- Unity
  - PostProcessをインストールしておく

## レイヤーをつくっておく
ここでは仮に下記とする
- PP
- Avatar

## Skybox用のRenderTextureを作成しておく
- Project -> 右クリック -> Create -> RenderTexture
- 名前をここでは ScreenRenderTexture とする

## Canvas(RawImage)を作成しておく
- Hierarchyで右クリック -> UI -> RawImage
- Canvas
  - Width           : 1920
  - Height          : 1080
  - Canvas
    - Render Mode   : Screen Space - Camera
    - Render Camera : Camera1
- RawImage
  - Width           : 1920
  - Height          : 1080
  - RawImage
    - Texture       : ScreenRenderTexture

## カメラ設定
- Camera1 (postprocessオンで使う)
  - Layer           : PP
  - Clear Flags     : Dont Clear
  - Culling Mask    : UI, PP
  - Depth           : 1
  - Post-process Layer (追加する)
    - Layer         : PP

- Camera2 (post-processオフで使う)
  - Layer           : Default
  - Clear Flags     : Dont Clear
  - Culling Mask    : Avatar
  - Depth           : 0

- Camera3 (Skybox映す)
  - Layer           : PP
  - Clear Flags     : Skybox
  - Culling Mask    : Nothing
  - Depth           : -1
  - Target Texture  : ScreenRenderTexture
  - Post-process Layer (追加する)
    - Layer         : PP

## オブジェクトの設定
- Cube
  - Layer           : Avatar
- Cube(1)
  - Layer           : PP
  - Post-process Volume (追加する)

## 理由はわからないがポイント
- Cube(1)はPost-process Volumeが付いている
- Cube(1)をCanvasへ丁度いい距離に置く必要がある
  - post-process Volumeのコライダーでpost-process範囲を決めてるっぽいがよくわからない
Java コンパイルができない

# 目的
Javaを勉強中にコンパイルができず無駄に時間を浪費したので、備忘録として投稿します。

## 流れ

- 階層とやりたいことの確認
- 発生したエラー
- 解消法

# 階層構造
Eclipseを使用

`tree /f`にて階層を確認

```cmd
C:\ocjp\workspace\CoffeeChoiceApp>tree /f
```

```terminal
C:.
│  .classpath
│  .project
│
├─.settings
│      org.eclipse.core.resources.prefs
│      org.eclipse.jdt.core.prefs
│
├─bin
│  └─main
│
└─src
    └─main
            BestCoffeeChoiceApp.java
            CheckNumber.java
            CoffeeTasteList.java
            ConnectDatabase.java
            ExecutingClass.java
```

## やりたいこと
`BestCoffeeChoiceApp.java`をコンパイルしたい

## 実際にやったこと
cmdからコンパイルをしようと下記の階層に移動し実行

```terminal
C:\ocjp\workspace\CoffeeChoiceApp\src\main>javac BestCoffeeChoiceApp.java
```

# エラー内容
コンパイルしようとすると以下のようなエラーが発生した

```terminal
BestCoffeeChoiceApp.java:9: エラー: シンボルを見つけられません
                ConnectDatabase cd = new ConnectDatabase();
                ^
  シンボル:   クラス ConnectDatabase
  場所: クラス BestCoffeeChoiceApp
BestCoffeeChoiceApp.java:9: エラー: シンボルを見つけられません
                ConnectDatabase cd = new ConnectDatabase();
                                         ^
  シンボル:   クラス ConnectDatabase
  場所: クラス BestCoffeeChoiceApp
BestCoffeeChoiceApp.java:10: エラー: シンボルを見つけられません
                CheckNumber cn = new CheckNumber();
                ^
  シンボル:   クラス CheckNumber
  場所: クラス BestCoffeeChoiceApp
BestCoffeeChoiceApp.java:10: エラー: シンボルを見つけられません
                CheckNumber cn = new CheckNumber();
                                     ^
  シンボル:   クラス CheckNumber
  場所: クラス BestCoffeeChoiceApp
BestCoffeeChoiceApp.java:12: エラー: シンボルを見つけられません
                        ExecutingClass ec = new ExecutingClass();
                        ^
  シンボル:   クラス ExecutingClass
  場所: クラス BestCoffeeChoiceApp
BestCoffeeChoiceApp.java:12: エラー: シンボルを見つけられません
                        ExecutingClass ec = new ExecutingClass();
                                                ^
  シンボル:   クラス ExecutingClass
  場所: クラス BestCoffeeChoiceApp
エラー6個
```

**エラー: シンボルを見つけられません**とはなんぞ？

## 調べてみた
> [Java「でシンボルが見つかりません」のエラー原因と対処方法を徹底解説](https://style.potepan.com/articles/32824.html#:~:text=Java%20%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97,%E3%81%AA%E3%81%84%E6%99%82%E3%81%AB%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)

>[Javaでエラー: シンボルを見つけられませんというエラーが発生したがどうすればこのエラーを解決できるか知りたい](https://terakoya.sejuku.net/question/detail/16261)

上記のサイトを参考に原因をまとめた結果、以下の4点が主な原因だと判明した
- 変数やメソッド、クラスなどのスペルミス
- クラスを使用する際に必要なインポートがされていない
- private なのに外部クラスから参照したことによる不可視
- 外部ライブラリやビルドパスなどの誤り

ぼく「Eclipseで実行したときは普通に動くから、どれもありえなくない？？」

## 解消法

> [Java コンパイルに失敗する シンボルを見つけられません](https://teratail.com/questions/161406)

上記のサイトを参考に解消した

`src`をカレントディレクトリとして以下を実行する
```terminal
javac main/BestCoffeeChoiceApp.java
```

無事コンパイルが完了した
Sakura Editorで「Vistaスタイルのファイルダイアログ」

# サクラエディタについて

「サクラエディタ」検索してください、たぶんすぐ分かると思う。

# 本記事の話

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/0b22ab36-8dc3-8cbf-27e0-338ae17fbab7.png)

チェックボックスをつけることで、Windows10で馴染みのあるモダンなファイルダイアログが表示される、というだけの話でした。

[ソースが公開されている](https://sakura-editor.github.io/)ことは知っていたものの、てっきりコツコツ手を入れなくてはならないと思っていたら、そんなことはなかったという話。
TsukuCTF運営あれこれ（ｎ番煎じ）

先週は北九州ポップカルチャーフェスティバルに行ってきました
ぼっちちゃん役の青山さんと、虹夏ちゃん役の鈴代さんのステージも観てきました～

![bottistage.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873754/cbf76edd-d478-83be-13c9-b647da4afba8.jpeg)


[TsukuCTF2022](https://fans.sechack365.com/ctf/TsukuCTF2022)の運営、作問に携わったので体験記を。（いつの話書いてるんだよという声が聞こえてきそう）

# TsukuCTFとは
OSINTをメインとしたCTFです。（今年は半分以上がOSINTのジャンルでした）  
[SecHack365](https://fans.sechack365.com/ctf/TsukuCTF2022)修了生の有志で運営を行っており、今年はSecHack365 Returnsと並行して行われました。
詳しくは別の運営の方が詳しく書いて下さっています。
https://xryuseix.hatenablog.com/entry/2022/10/24/032011
なので、ぶっちゃけあまり書くことないです（n番煎じなので）

# 作問
今年は自分の中で勝手に聖地巡礼枠を設けて出題しました
進撃の巨人（[Attack_of_Tsukushi](https://fans.sechack365.com/ctf/TsukuCTF2022/Attack_of_Tsukushi)）、白い砂のアクアトープ（[Desk](https://fans.sechack365.com/ctf/TsukuCTF2022/Desk)）、FGO（[PaperJack](https://fans.sechack365.com/ctf/TsukuCTF2022/PaperJack)）
昨年はJR九州と無限列車がコラボしたときのやつを問題にしました。

また、TsukuCTFは他のCTFにはあまりないHardwareジャンルがあります。（といっても作問者私が1人だけですが..）しかも、今年は1問しか出せなかった（昨年は3問でした）
[DefuseBomb](https://fans.sechack365.com/ctf/TsukuCTF2022/DefuseBomb)は出題ミスがないように最新の注意を払いました。最後はハードウェアツヨツヨの運営メンバーにチェックをお願いしたほか、実際に回路を組んで確認しました（爆弾の代わりにLED使用）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873754/bc71177d-c7f7-c9db-8930-0fd7709fa1f1.png)
DefBom1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873754/e0d8e879-c7b7-4535-cb8c-1a6fafc407b4.png)
DefBom3
来年も回路問題あったらFirst Bloodの方にはプリント基板を..も考えています。（Hardwareジャンルあるかは未定）


# Writeup賞
TsukuCTFでは成績上位者とは別にWriteup賞を設けています。
景品等は寄付していただいた皆様と[Defios株式会社](https://www.defios.jp/)様のご厚意により用意することができました。本当にありがとうございました!!
また、以下にWriteup賞に応募してくださったWirteupをまとめたスプレッドシートを載せておきます。
https://docs.google.com/spreadsheets/d/1g6i897qMM16zMli1s_LtmZ8R1MMSptE4T4O_SprQNqU/edit#gid=0

最後になりますが、参加していただいた皆様ありがとうございました。
来年もまた、何かしらの形で開催、運営に携われたらと思っています。

**P.S**
陽キャオーラで手元が狂って綺麗に撮れなかった喜多ちゃん
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/873754/f37c90d5-1a8b-99c3-e611-6d1bb7fb70fa.png)
【OpenLayers】アイコン付きのポイントデータを表示する

## はじめに
この記事は#30DayMapChallenge2022 22日目の記事です。
テーマはNULLです。
OpenLayersを使ってNULL島をアイコン付きで表示してみます。

![image](https://raw.githubusercontent.com/tjukanovt/30DayMapChallenge/main/images/flyers/30dmc-2022.png)

https://30daymapchallenge.com/

## OpenLayersとは
簡単にダイナミックなマップを設置することができるJavaScriptライブラリ
地図タイル、ベクトルデータ、マーカーを表示することができる
フリーかつオープンソースで、2条項のBSDライセンス（FreeBSDとしても知られています）の下でリリースされている
執筆時の最新バージョンはv7.1.0でした


## ヌル島とは
ギニア湾に位置する架空の島で、経度0度、緯度0度にあると設定されている。
位置情報の扱いが不適切な場合などに、この位置に地図にマーカーが表示されることがある。

OpenLayersのExampleでもNULL島が使われています！
![image](https://user-images.githubusercontent.com/83101503/203352739-4758740c-41f0-4f30-834d-536f12966899.png)



## アイコンを表示する
[公式のサンプルコード](https://openlayers.org/en/latest/examples/icon.html)を参考に実装します。

```index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8" />
        <title>サンプル</title>
        <meta name="description" content="サンプルです" />
        <link href="style.css" rel="stylesheet" />
        <!-- OpenLayers -->
        <script src="https://cdn.jsdelivr.net/npm/ol@v7.1.0/dist/ol.js"></script>
        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v7.1.0/ol.css" />
    </head>
    <body>
        <div id="map"></div>
        <script src="main.js"></script>
    </body>
</html>
```

```style.css
body {
    margin: 0;
    padding: 0;
}
#map {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 100%;
}
```

```main.js
const iconFeature = new ol.Feature({
    geometry: new ol.geom.Point([0, 0]),
    name: 'Null島',
    population: 4000,
    rainfall: 500,
});

const iconStyle = new ol.style.Style({
    image: new ol.style.Icon({
        anchor: [0.5, 46],
        anchorXUnits: 'fraction',
        anchorYUnits: 'pixels',
        src: 'https://openlayers.org/en/latest/examples/data/icon.png',
    }),
});

iconFeature.setStyle(iconStyle);

const vectorSource = new ol.source.Vector({
    features: [iconFeature],
});

const vectorLayer = new ol.layer.Vector({
    source: vectorSource,
});

const map = new ol.Map({
    layers: [new ol.layer.Tile({ source: new ol.source.OSM() }), vectorLayer],
    view: new ol.View({
        center: [0, 0],
        zoom: 3,
    }),
    target: 'map',
});
```

![image](https://user-images.githubusercontent.com/83101503/203347867-6fe4f54d-0372-4436-9327-e5896e855a3f.png)

NULL島にアイコンを表示できました！

## 参考文献
https://openlayers.org/en/latest/examples/icon.html

https://ja.wikipedia.org/wiki/%E3%83%8C%E3%83%AB%E5%B3%B6
バイナリ配布されているフレームワークをCocoaPodsで扱う

## やりたかったこと
時雨堂さんの[WebRTCビルド](https://github.com/shiguredo-webrtc-build/webrtc-build)のiOS用フレームワークのバイナリを使いたかったのですが、バイナリが数百MBもあり(アーキテクチャ絞ればもっと減りますが)、そのままリポジトリに登録したくなく、そのプロジェクトでパッケージ管理に使用している CocoaPods 管理でなんとかしたかった感じです。

## やったこと

### ローカルのpodspecを読ませたい

時雨堂さんはXcode用のフレームワークをtar.gzで固めてアップしてくれているので、podspecをうまいこと記述してやれば、CocoaPodsのパッケージとして扱え、`pod install`のときに直接バイナリをダウンロードしにいくとかできるのではと目論みました。ただ、そのためにはpodspecファイルをなんとかしてpodコマンドから読んでもらわないといけません。独自のリポジトリを用意する方法もあるようですが、それはさすがに面倒だったので、ローカルで単体のpodspecファイルを読ませたく、調べたところPodfileの [podspec](https://guides.cocoapods.org/syntax/podfile.html#podspec) の記法を使えばよいようでした。

具体的には、以下のように書けました。

```ruby:Podfile
   podspec :path => "./Podspecs/WebRTC-shiguredo.podspec"
```

なんですが、何故か実際の手元のファイルにはこう書いてました。

```ruby:Podfile
   pod 'WebRTC', :podspec => "./Podspecs/WebRTC-shiguredo.podspec"
```

まぁ、どちらも動くようなのでこれで……。

### ローカルのpodspecを用意する

無事にローカルのpodspecファイルを読ませることに成功したので、今度はpodspecファイル自体を用意します。[podspecの仕様](https://guides.cocoapods.org/syntax/podspec.html) を読みながら以下のように準備しました。

```ruby:./Podspecs/WebRTC-shiguredo.podspec
Pod::Spec.new do |spec|

  spec.name         = "WebRTC"
  spec.version      = "XXX.YYYY.Z"
  spec.summary      = "Shiguredo's distribution of WebRTC framework binaries for iOS. "
  spec.description  = "This pod contains Shigredo's distribution of WebRTC framework binaries for iOS."

  spec.homepage     = "https://github.com/shiguredo-webrtc-build/webrtc-build/"
  spec.license      = { :type => 'Multiple', :file => 'NOTICE' }
  spec.author       = "Shiguredo"
  spec.ios.deployment_target = '13.0'

  spec.source       = { :http => "https://github.com/shiguredo-webrtc-build/webrtc-build/releases/download/mXXX.YYY.Z.0/webrtc.ios.tar.gz" }
  spec.ios.vendored_frameworks = ["Frameworks/WebRTC.xcframework"]
end
```

ミソとなったのは、 `spec.source` / `spec.ios.vendored_frameworks` のあたりです。今回利用させていただいた時雨堂さんのバイナリはtar.gzで固めてあったのですが、ソースには他にもzipファイルとかも指定でき、自動で展開してくれるようでした。その上で、圧縮ファイルを展開した際のframeworkのパスを `vendored_frameworks` に記載しておくと、フレームワークをCocoaPodsで扱えるようになりました。

## 注意が必要なこと

* ライセンスについて、ちゃんと確認して色々と気をつけて使いましょう。
  * 今回の時雨堂さんのバイナリについては、NOTICEファイル以外に [配布バイナリ自体のライセンス](https://github.com/shiguredo-webrtc-build/webrtc-build#%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9) (と[適用されているパッチのライセンス](https://github.com/shiguredo-webrtc-build/webrtc-build/tree/master/patches#%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9))があります。
* CocoaPodsさん、すぐ色々とキャッシュしてくれるので、実験中に古いデータが残ってうまく取得処理が更新されなくて半日くらい溶かしました。
x=getElementByid("x")はやめよう

## getElementByIdと変数スコープ
簡単な3つの要素(input button, input text,div)をもち、ボタンが押されるとテキストボックの値をdivタグ内にコピーするHTMLとjavascriptがあるとします。
```html:scope.html
<html>
<body>
    <input type="text" id="txt" />
    <input type="button" id="btn" value="Start" />
    <div id="lbl"></div>
    <script src="scope.js"></script>
</body>
</html>

```

```javascript:scope.js(変数スコープエラーのあるプログラム)
const myfunc=()=>{
    //スコープ外からローカル変数参照するとエラー
    albl.innerHTML=atxt.value;
}
document.addEventListener("DOMContentLoaded", () => {
    const abtn = document.getElementById("btn");
    const atxt=document.getElementById("txt");
    const albl=document.getElementById("lbl");
    abtn.addEventListener("click",() => {
        myfunc();
    });
  });
```
上記のmyfunc関数はイベントハンドラ関数内のオブジェクト変数のスコープ外にあるので上記javascriptは正常に動作しません。教科書通りです。ところが以下のようにmyfunc関数内で参照する変数名の冒頭のaをとると
```javascript:scope.js（動いてしまうプログラム）
const myfunc=()=>{
    lbl.innerHTML=txt.value;
}
document.addEventListener("DOMContentLoaded", () => {
    const abtn = document.getElementById("btn");
    const atxt=document.getElementById("txt");
    const albl=document.getElementById("lbl");
    abtn.addEventListener("click",() => {
        myfunc();
    });
  });
```
上記プログラムは動作します。DOMの要素のid名はそのままグローバルのオブジェクト変数として暗黙的に宣言されています。このため、下記プログラムのようにイベントハンドラ内からもの冒頭のaをとると、スコープ外のmyfuncからイベントハンドラ内のローカル変数が参照できたように見えます。教科書に書いてあることが嘘に見えるコードです。
```javascript:scope.js（動く上に変数スコープを破壊したように見えるプログラム）
const myfunc=()=>{
    //スコープ外からlblやtxtを参照できたように見える
    lbl.innerHTML=txt.value;
}
document.addEventListener("DOMContentLoaded", () => {
    const btn = document.getElementById("btn");
    const txt=document.getElementById("txt");
    const lbl=document.getElementById("lbl");
    btn.addEventListener("click",() => {
        myfunc();
    });
  });
```
それならgetElementByIdを使わず、全部グローバル変数を参照した方が潔いのでしょうか。
```javascript:scope.js(getElementByIdを使わない動作するプログラム)
const myfunc=()=>{
    lbl.innerHTML=txt.value;
}
document.addEventListener("DOMContentLoaded", () => {
    btn.addEventListener("click",() => {
        myfunc();
    });
  });
```
いずれにせよ下記のようなid名と変数名を一致させたgetElementByIdは無駄でスコープを破壊したように見えるコードができるので、やめた方が良いのでは、というお話です。
```javascript:
x=getElementById("x");
```

```javascript:scope.js(暗黙のグローバル変数を使わないコード)
document.addEventListener("DOMContentLoaded", () => {
    const abtn = document.getElementById("btn");
    const atxt=document.getElementById("txt");
    const albl=document.getElementById("lbl");
    const myfunc=()=>{
        albl.innerHTML=atxt.value;
    }
    abtn.addEventListener("click",() => {
        myfunc();
    });
  });
```
ターミナル：no matches found

# 症状
ターミナル(zsh)にてコマンドを入力してlaravelの新規プロジェクトを作成しようと,

```zsh
composer create-project laravel/laravel=6.* new laravel
```

上記のコマンドを入力したところno matches foundが返ってきた。

```zsh
zsh: no matches found: laravel/laravel=6.*
```

# 原因

久しぶりにlaravelを触ろうとしたところこんなことになってしもたのでかなり焦ったが特にややこしいことはなく、原因はコマンド内に* ? {} [] ~ などのグロブ表現(ワイルドカード)が含まれていると、zshがファイル名だと解釈してしまうからみたいです。

[参照ブログ：Linux【ワイルドカードと正規表現】の違いと変換,展開の動作 ~ ls, grep, findでの具体例の解説~
](https://milestone-of-se.nesuke.com/sv-basic/linux-basic/wildcard-regular-expression/
 "SEの道標")

# 解決策
`~/.zshrc`に`setopt nonomatch`を入力して読み込む。

ここで注意したいのが`.zshrc`は隠しファイルなので普通にlsコマンドを叩いても出てこない。
ファイルがない！？となった方は`ls-a`を叩いてみてください。あります。

あとはvimでもviでも叩いて中身を編集するだけ。

最後に
```zsh
source ~/.zshrc
```
このコマンドで読み込めば無事完了です。
Gitの基礎知識２

## branch
branchと聞くと「枝」を想像してしまうので、僕はずっとbranchを「線」みたいなものだと思っていました。

実際、branchとは**コミットハッシュを指すポインタ**のことです。

例えばmainブランチからdevelopmentブランチを切った場合、mainブランチとdeveopmentブランチが指すコミットハッシュは同じものです。

developmentブランチで作業後にコミットした場合、新しいコミットハッシュが作成されますが、developmentブランチはその新しいコミットハッシュを指すようになります(mainブランチが指すコミットハッシュは変わらない)。

公式サイトの図を見るととてもわかりやすいです。

https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%81%AF

## HEAD
HEADは現在作業をしているブランチを指すポインタのことです。
branchがポインタであることを踏まえると、HEADはポインタを指すポインタです。
HEADの移動履歴は下記のコマンドで確認することができます。
```
    git reflog
```
HEADはn回前の移動履歴を```HEAD@{n}```のように表します。
```~```を使うことでも表現でき、2回前の移動履歴は```HEAD~~```と書くことができます。
```
    git reset --hard HEAD@{n}
```
上記のコマンドでHEADの位置を移動させることができます。
この操作によってHEADが指すブランチが変わることはありません。 <=> ブランチが指すコミットハッシュが変わる(ブランチとHEADが共に移動する)

## checkout
chekcoutはHEADを移動させることです。
```terminal
    git checkout branch_name
```
checkoutすることによって、ブランチが指すコミットハッシュが変わった場合は、そのコミットハッシュの内容がワークツリーに展開されます。

checkoutと同時にブランチ作成もしたい場合は下記のコマンドで実行することができます。

```
    git checkout -b new_branch_name
```

「checkout」は8文字もあるので毎回打つのはめんどくさいと思います。
そんな時はaliasを作成しましょう。
↓

https://qiita.com/chihiro/items/04813c707cc665de67c5
サービスエンドポイント、SAS、SSEについて

ストレージセキュリティ

●サービスエンドポイント
設定すると、インターネットからのアクセスをブロックし、指定した仮想ネットワークからのアクセスのみを許可する様に構成できる。
例えば、そのストレージサービスを外部からインターネットを経由せず、同じリージョン内の仮想マシンからアクセスして使用する場合に役立つ。

●Shared Access Signature(SAS)
ストレージサービスのリソースに対して制限月のアクセス権を付与できる機能。使用できるサービス種類や許可する操作、アクセス可能な日時などを指定した上で、アクセスするための接続文字列を生成することができる。
SASを設定すると、設定時に指定したサービスの種類やそれらに対して許可する操作などのパラメータから、SASトークンと呼ばれる情報が生成される。さらに、ストレージリソースの所在及びエンドポイント情報であるリソースURIとSASトークンを組み合わせたSAS URL(SAS URI)も生成される。

■サービスSASの設定
サービスSASでは、Blob、キュー、テーブル、ファイルサービスのいずれか１つのストレージサービスへのリソースアクセス権限を付与できる。

●Storage Service Encryption(SSE)
ストレージサービスで使用されるストレージそのものを暗号化する機能。
ストレージサービスに保存されるデータは、この機能によって暗号化された状態でAzureのデータセンター内に保持され、データが取得されるときに暗号化が解除される。

■SSEで使用される暗号化キー
既定では、ストレージアカウント内のデータは、Microsoftマネージドキーで暗号化される。ユーザーは設定の変更も鍵の管理も不要。
ただ、必要に応じてMicrosoftマネージドキーではなく、独自のキーであるカスタマーマネージドキーで暗号化を管理することもできる。

●カスタマーマネージドキーを使用するための設定変更
使用する場合は、ストレージアカウントの管理画面で暗号化のメニューをクリックし、暗号化の種類をカスタマーマネージドキーに変更して使用するキーの作成や選択を行う。なお、
使用するキーはAzure Key Vaultというサービスのキーコンテナーに格納して管理する。
赤いカゴの中の鳥

# 『カゴが赤い』のかそれとも『鳥が赤い』のか

**コレガワカラナイ**

たった8文字の文なのに、 **読み手によって解釈が分かれてしまう** 。
こういった文は **誤認識による手戻りやバグの元** 。

ここ最近、文（チャット）による連絡が多くなってきてる。
**読み手の立場に立って、少し見直し** してから送ろう。

**『赤いカゴの中の鳥』状態** になっていないか。

# 警戒する文

自分が作ったにしろ、他の人から届くにしろ、下記のような文は警戒に値するぜ。

## 『の』が多い

『赤いカゴ **の** 中 **の** 鳥』は『の』が二つ出てくる。
逆に、修正後の『赤いカゴ **の** 中に鳥がいる』や『赤い鳥がカゴ **の** 中にいる』という文には『の』が一つだけ。

見直しする時はまず最初に **『の』量** に注目するとよいと思います。

## 主語が長い

**『Aさんが好きなBさんは…』** という文は、一見問題無さそうに見える。
しかし、好意の向き先が『A → B』なのか『A ← B』なのか… 
**コレガワカラナイ** 。

**『AさんはBさんのことが好き』** と修正すれば解釈が分かれない。
『Aさんが好きなBさんは』という長い主語を『Aさんは』と短くしているから誤解を招きにくくなっている。

また、主語が長い文は **2つ以上の文に分割** すると、分かりやすくなる傾向があると思います。

## 一意に特定できない

例えば **『前と同じ番号』** という文。

**『前』** とはいつのことを指しているのか。
1年前の初回リリース時のことかもしれないし、2日前の直近リリースのことかもしれない。

**『番号』** って結構いろんな種類がある。
『社員番号』『電話番号』『伝票番号』などなど…。

ある程度会話を交わしている状態なら『前と同じ番号』と言っても認識がずれない場合もあるので、状況によりけり。

個人的には **会話のスタート時** 、 **一意な言い方になっているか** に気をつけてます。
『この会話における番号とは電話番号のことを指す』みたいな『言葉の定義を頭の中に作ってもらえる文になっているか』を意識してます。
いいねをいただいた記事ランキング(O.K.版) Advent Calendar 2022 目標

2022 いいねをいただいた記事ランキング(O.K.版) Advent Calendar 2022

https://qiita.com/advent-calendar/2022/goods

なんとか盛り上げる方法を検討する。

 <この項は書きかけです。順次追記します。>


目標は、それぞれの記事のviews数が、その記事で引用、参照している記事のviewsの数の10分の１以上になること。　

影響力がある人に拡散してもらうのが一番いいかも。　




 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

# 文書履歴(document history)
ver. 0.01 初稿 　20221122
AWS認定クラウドプラクティショナー合格に向けて Day2

# 前回の内容
[AWS認定クラウドプラクティショナー合格に向けて Day1](https://qiita.com/Ayako_0224/private/b99d552fa100aca8ec4a)

# クラウドプラクティショナー試験概要
AWS認定のベースとなる試験
AWSのクラウドの知識とスキルを身につけ、全体的な理解の証明になる個人向けのテスト
この先のアソシエイトやプロフェッショナルなどの認定を取得する前の基本知識を身につけていることの証明になる

- 試験時間: 90min
- 問題数: 65問
- 得点: 100~1000の範囲で難易度が平均化される
- 合格点: およそ７割

## 回答方式
選択式(単一正解のものもあれは複数選択のものもある)

# 試験範囲
クラウドプラクティショナーの性質上広く浅く出題される
## クラウドの概念
- 概念と価値提案について
- AWSクラウドエコノミクスについて
- クラウドアーキテクチャの設計原理について

## セキュリティ
- 責任共有モデルについて
- セキュリティとコンプライアンスに関するコンセプトについて
- アクセス管理機能について
- セキュリティサポートのリソースについて

## テクノロジー
- デプロイと運用の方法
- グローバルインフラストラクチャについて
- AWSの主要なサービス
- テクノロジーサポートのリソースについて

## 請求と料金
- 様々な料金モデルについて
- 多様なアカウント構造について
- 請求サポートのリソースについて

# 必要な知識と経験
- クラウドの概念・AWSサービスと役割の概要理解
- ６ヶ月程度の実戦経験(絶対足りないけど大丈夫かな...)

次の記事は➡️[AWS認定クラウドプラクティショナー合格に向けて Day3](https://qiita.com/Ayako_0224/items/ed8b349af8366174f8b7)
[C#]WPFでマルバツ表示（自動で消えるWindow）

# この記事は

WPFアプリケーションにおいて、ユーザーのアクションに対して**良い／悪いをおおげさに表現したい**場合がある

たとえば・・・

- 検査アプリケーションで良品と不良品を表示したい
- マウスではない非接触の入力デバイスからの入力があった際に、受け付けたことをユーザーにフィードバックしたい
- 会社内でマルバツゲームをつくる業務が降ってきた場合

## ゴール

- Goodボタンを押すと緑の丸印が浮かぶ
- Badボタンを押すと赤のバツ印が浮かぶ

![Animation1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272511/7eb09ac1-a44c-5071-85fa-104d56a1061a.gif)

動画には収めていないが
親ウィンドウのセンターに表示されるので、ウィンドウが移動しても追従する


# ソースコード

要点だけ載せる

## XAML

- 初期表示位置は、すでにあるウィンドウの中央にする（`WindowStartLocation`）
- `WindowStyle`を`None`にすることで、上部のバーを消す

```xml:Green.xaml
<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    Width="200"
    Height="200"
    Background="Green"
    WindowStartupLocation="CenterOwner"
    WindowStyle="None">
    <Grid>
        <Label
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Content="〇"
            FontSize="128"
            Foreground="White" />
    </Grid>
</Window>

```

## C#（コードビハインド）

`ContentRendered`イベントに「２秒後に自身をクローズする」処理を追加する
※`Loaded`や`Activated`イベントでは画面が真っ白のまま、中身が描画されずに閉じてしまう

```csharp
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Markup;

namespace PopUp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click1(object sender, RoutedEventArgs e) =>
            Button_ClickCore("../../GreenWindow.xaml");

        private void Button_Click2(object sender, RoutedEventArgs e) =>
            Button_ClickCore("../../RedWindow.xaml");

        private void Button_ClickCore(string path)
        {
            Window w = null;
            using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                w = (Window)XamlReader.Load(fs);
            }
            w.Owner = this;

            w.ContentRendered += (ss, ee) =>
            {
                Thread.Sleep(2000);
                w.Close();
            };

            w.ShowDialog();
        }
    }
}
```

# 糸冬了！！
管理者側ジャンル機能の作成の仕方

## ジャンル機能について
今回はジャンル機能について記述していきたいと思います。
前提として今回は顧客と管理者側に分けており、管理者側の方にジャンル作成していきます。
※adminは管理者の事です。

## ジャンルのモデル作成
```
$ rails g model Genre
```
のコマンドを打ち込み作成します。

その後にマイグレーションファイルを開きカラムを追加。

```db/migrate/_create_genres.rb
class CreateGenres < ActiveRecord::Migration[6.1]
  def change
    create_table :genres do |t|
      t.string :name

      t.timestamps
    end
  end
end
```
t.string :nameを追加してあげましょう。
nameは今回ジャンルに追加する名前の事です。

```
$ rails db:migrate
```
忘れずにrails db:migrateをしたら下準備は完了です。


## Viewページに記述
今回はindex.html.erbとedit.html.erbの2つを使用します。

```app/views/admin/genres/index.html
      <h3>ジャンル一覧・追加</h3>

      <%=form_with model: @genre,url: admin_genres_path, method: :post do |f| %>

        <td><%= f.label :"ジャンル名", class: "mr-3" %></td>
        <td><%= f.text_field :name, class: "mr-5" %></td>
        <td><%= f.submit'新規登録',class: "btn btn-primary" %></td>

      <% end %>
          
     　　 <th>ジャンル</th>
       <% @genres.each do |genre| %>
         <td><%= genre.name %></td>
         <td><%= link_to "編集する", edit_admin_genre_path(genre.id), class: "btn-success" %></td>
       <%end%>
```


```app/views/admin/genres/edit.html
      <h3>ジャンル編集</h3>

      <%= form_with model: @genre, url: admin_genre_path,method: :patch do |f| %>
        <td><%= f.label :"ジャンル名", class: "mr-3" %></td>
        <td><%= f.text_field :name, class: "mr-5" %></td>
        <td><%= f.submit "変更を保存", class: "btn btn-primary" %></td>
      <% end %>
   
```
indexとeditにそれぞれform_withなどを用いながら作成していきます。
レイアウトはこの状態では綺麗ではないのでそれぞれの好みに合わせて見た目などは作成してください。

## コントローラーに記述
```app/controllers/admin/genres_controller.rb 
class Admin::GenresController < ApplicationController
  def index
    @genre = Genre.new
    @genres = Genre.all
  end

  def create
    @genre = Genre.new(genre_params)
    @genre.save
    redirect_to admin_genres_path
  end

  def edit
    @genre = Genre.find(params[:id])
  end

  def update
    @genre=Genre.find(params[:id])
    @genre.update(genre_params)
    redirect_to admin_genres_path
  end

private

  def genre_params
     params.require(:genre).permit(:name)
  end

end
```


![スクリーンショット 2022-11-22 23.11.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952785/a57ec028-9e11-7098-6fdb-ffa47ae29c2f.png)
これらをそれぞれコントローラーに記述し定義してあげレイアウトを整えるとシンプルではありますが上の写真のようにジャンルの一覧と追加を行う事ができます。

こちらの使い方の前提として管理者側でジャンルを追加し、顧客側で追加したジャンルを反映させ使用するものとなりますので使い方を間違えないようにお願いいたします。
AWS認定クラウドプラクティショナー合格に向けて Day1

# 前回の内容
[AWS認定クラウドプラクティショナー合格に向けて Day0](https://qiita.com/Ayako_0224/private/06c209cf75b518976957)

# AWSとは
## そもそもAWSとは
インフラやアプリ開発に必要な様々な機能を利用できるサービス
物理的なサーバーを調達したり設置することなくインターネット経由でクラウドから借りてくることができる
すぐに安価にサーバーを立ち上げることができる

## AWSの提供するサービス
システム開発や運用に必要なサービスは200以上一通り揃っている
例えば、
- コンピューティング
- ストレージ
- ネットワーキング
- DB
- セキュリティ
- マネジメント
- アプリ統合
- コスト管理
- 移行と移転

などなど...

## 最先端の技術も利用可能
- IoT
- AI
- ブロックチェーン
- 量子コンピューター
- VR/AR

など最先端技術もクラウドで提供されている

## グローバルに展開
インフラがグローバルに展開されている(26リージョン・アベイラビリティゾーン100以上・エッジロケーション300以上)
世界中にサービスを提供できる

# AWSの様々な資格
4つのカテゴリーが用意されている([公式](https://aws.amazon.com/jp/certification/)より)
- FOUNDATIONAL
    - Cloud Practitioner
- ASSOCIATE
    - Solution Architect
    - SysOps Administrator
    - Developer
- プロフェッショナル
    - Solution Architect
    - DevOps Engineer
- SPECIALTY
    - Advanced Networking
    - Security
    - Machine Leaning
    - SAP on AWS
    - Data Analytics
    - Database
![スクリーンショット 2022-11-22 22.58.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436259/32166e6f-bb23-83a0-7d3f-dd16633a55c7.png)

次の記事は➡️[AWS認定クラウドプラクティショナー合格に向けて Day2](https://qiita.com/Ayako_0224/items/d3087ce68ab2ba7cbabb)
AUTOSAR Countdown Calendar 2022 目標設定

記事の投稿募集を始めます。宜しくお願いします。

下のAUTOSAR Countdown Calendar 2022のURLに飛んで購読するボタンをまず押してください。それから記事を書いてくださるかどうかをお考えください。

昨年の実績（一部概算集計）と今年の目標。

|表題|投稿者|購読者|いいね数|views|
|:--|:--|:--|--:|--:|
|AUTOSAR Advent Calendar 2021 https://qiita.com/advent-calendar/2021/autosar|2|8|6|10,000|
|AUTOSAR Advent Calendar 2022 https://qiita.com/advent-calendar/2022/autosar|3|10|10|30,000|


 <この項は書きかけです。順次追記します。>


投稿者は、今回は3人,
購読者は１０人を目標に。　

今日から、勧誘を始める。　

いいねの目標は１０個あればいいかな。一人一つづつって感じ。

viewsの目標は、約三倍にする。記事は１０倍以上になるのだから。

期間内に書き終わるかどうかが鍵。


AUTOSAR 21-11, 318文書読んだ。2022年6月初旬にFO, AP, CP全部到達。

https://qiita.com/kaizen_nagoya/items/4043e8414f850ce266a4

# 成果
今回の行事を企画して始めた作業の成果の一番は318文書だったことが分かった事。　
重複記事が一つ。最新でない記事がいくつか。どうせなら廃止して消えた文書以外全部の一覧にすればよかったかも。

p.s. 
 adventカレンダーにviewsをつけてくださいとお願いしました。　スポンササイトにはついたかもしれない。
今日現在、一般サイトでは実現していなさそうです。　
残念。　

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞

AUTOSAR 「完全に理解した」
https://qiita.com/kaizen_nagoya/items/51983798ad7902b33cb1

A big wrapping cloth with the miniature garden
https://qiita.com/kaizen_nagoya/items/96411f20632e7f3ff73a

Network Defined Vehicle
https://qiita.com/kaizen_nagoya/items/a696f8a8cbd141215266

AUTOSAR Advent Calendar 2022記事を購読していただくために
https://qiita.com/kaizen_nagoya/items/4fd4843f60af8432d6c0

# 文書履歴(document history)
ver. 0.01 初稿 　20221122
ver. 0.02 成果加筆20221126
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.