OmniAICreator/Qiita-1.07M huggingface dataset:
paiza.ioでelixir その123

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

# サンプルコード

```

File.mkdir!("pack")
File.ls!
|> IO.inspect
File.cd!("pack")
File.ls!
|> IO.inspect
File.cwd!()
|> IO.inspect
File.cd!("../")
File.ls!
|> IO.inspect
File.exists?("missing.txt")
|> IO.inspect
File.exists?("Main.exs")
|> IO.inspect
{:ok, file} = File.open("exec_stdin.txt", [:read])
IO.read(file, :line)
|> IO.inspect
File.close(file)
File.open("exec_stdin.txt", [:read, :write], fn file ->
	IO.read(file, :line)
	|> IO.inspect
end)

```

# 実行結果

```
["pack", "main.tar.gz", "Main.exs", "runner_mysql", "exec_stdin.txt",
 "run_user", "runner_php", "exec_stderr.txt", "exec_command", "exec_stdout.txt"]
[]
"/workspace/pack"
["pack", "main.tar.gz", "Main.exs", "runner_mysql", "exec_stdin.txt",
 "run_user", "runner_php", "exec_stderr.txt", "exec_command", "exec_stdout.txt"]
false
true
"test"
"test"
```

# 成果物

https://paiza.io/projects/zCUtNR6HmXTTnL9m2Ff4EA

以上。
intelliJのundo回数を増やす

intelliJのundo回数は、デフォルトだと１００回で少ない。
最初、undoしていて途中で戻れなくなり、戸惑った。
回数は以下で変更可能。

・find action(⌘⬆︎A)で、registryを検索。
・undo.documentUndoLimitの回数を変更。
Elixir IExを便利にするために設定しておきたい環境変数



[IEx]を便利にするために設定しておきたい環境変数があります。

これらの[環境変数]をあらかじめご自身の`.zshrc`、`.bashrc`等で`export`しておくと良いかもしれません。

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

## ERL_AFLAGS

```sh
export ERL_AFLAGS="-kernel shell_history enabled"
```

これを設定しておくと[IEx]の履歴を保存できるようになります。

## ELIXIR_EDITOR

お気に入りのテキストエディタを指定します。[VS Code]の場合は`code --goto`です。

```sh
export ELIXIR_EDITOR="code --goto"
```

これを設定しておくと[IEx]からお気に入りのテキストエディタを開いてソースコードを閲覧できます。

https://qiita.com/mnishiguchi/items/e62280edae8b2009384a

詳しくは[IExのドキュメント](https://hexdocs.pm/iex/IEx.html)をご参照ください。

## ご参考までに

https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian

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

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

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

[Dashbit]: https://dashbit.co/
[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
[Node | hexdocs]: https://hexdocs.pm/elixir/Node.html
[otp_distribution | elixirschool]: https://elixirschool.com/ja/lessons/advanced/otp_distribution
[Node.ping/1]: https://hexdocs.pm/elixir/Node.html#ping/1
[Node.connect/1]: https://hexdocs.pm/elixir/Node.html#connect/1
[Node.spawn/2]: https://hexdocs.pm/elixir/Node.html#spawn/2
[Node.list/0]: https://hexdocs.pm/elixir/Node.html#list/0
[Node.set_cookie/2]: https://hexdocs.pm/elixir/Node.html#set_cookie/2
[Node.get_cookie/0]: https://hexdocs.pm/elixir/Node.html#get_cookie/0
[epmd]: https://www.erlang.org/doc/man/epmd.html
[rpc]: https://www.erlang.org/doc/man/rpc.html
[erpc]: https://www.erlang.org/doc/man/erpc.html
[phoenix_live_dashboard]: https://github.com/phoenixframework/phoenix_live_dashboard
[phoenix_pubsub]: https://github.com/phoenixframework/phoenix_pubsub
[遠隔手続き呼出し]: https://ja.wikipedia.org/wiki/%E9%81%A0%E9%9A%94%E6%89%8B%E7%B6%9A%E3%81%8D%E5%91%BC%E5%87%BA%E3%81%97
[BEAM (Erlang virtual machine)]: https://en.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine)
[:rpc.call/4]: https://www.erlang.org/doc/man/rpc.html#call-4
[IEx.Helpers.open/1]: https://hexdocs.pm/iex/IEx.Helpers.html#open/1
[Enum.reduce/3]: https://hexdocs.pm/elixir/Enum.html#reduce/3
[IEx.Helpers.h/1]: https://hexdocs.pm/iex/IEx.Helpers.html#h/1
[VS Code]: https://code.visualstudio.com/
[環境変数]: https://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0
[Kernel]: https://hexdocs.pm/elixir/Kernel.html
【Vue】Geolocation APIで現在地情報を取得する

## 実装
JSのGeolocation API を使用することで簡単にユーザーの位置情報を取得することができます。
今回はVue3のcomposition api の中で使用しています。

```js
import { ref, onBeforeMount} from 'vue'
import VueGeolocation from 'vue3-geolocation'

//現在地情報を取得する関数を用意
const current = ref({
        position: undefined,
        lat: undefined,
        lng: undefined,
        getLocation: () => {
            VueGeolocation.getLocation()
                .then((coordinates) => {
                    current.value.position = coordinates
                    current.value.lat = coordinates.lat  //緯度
                    current.value.lng = coordinates.lng  //経度
                })
                .catch((error) => {
                    console.log(error)
                })
        },
    })


//ページが読み込まれると同時に関数を呼び出す
    onBeforeMount(() => {
        current.value.getLocation()
    })
```


あとは使いたい場所で`current`の値を呼び出してあげれば、位置情報を使うことができます。
```js
cosole.log(current.value.position)
cosole.log(current.value.lat)
cosole.log(current.value.lng)
```
データベースのホスト名をCNAME経由で参照する

### 前提
- AWS RDSとRoute53を例にしています。
- 何かしらのドメインを取得している前提です。

### 本題

アプリケーション側でデータベースのホストを直接参照している場合、以下のような状況で困ったことは無いでしょうか。

- 接続しているデータベースをスタンバイ中の別データベースに切り替える場合
- スナップショットから新しいデータベースを復元して使用する場合

データベースが変わるとホスト名も変わるため、アプリケーションやSQLクライアントツール等の接続情報を全て書き換える必要があります。

```plantuml
title ホストを直接参照する場合

agent アプリケーション [
    アプリケーション
    ....
    ホスト情報：
    <b>db-a</b>.ap-northeast-1.rds.amazonaws.com
]

agent SQLクライアントツール [
    SQLクライアントツール
    ....
    ホスト情報：
    <b>db-a</b>.ap-northeast-1.rds.amazonaws.com
]

rectangle RDS {
    database DB_B [
        DB_B
        ....
        <b>db-b</b>.ap-northeast-1.rds.amazonaws.com
    ]
    database DB_A [
        DB_A
        ....
        <b>db-a</b>.ap-northeast-1.rds.amazonaws.com
    ]
}

アプリケーション -[hidden]-> DB_A

アプリケーション --down-> DB_A
SQLクライアントツール --down-> DB_A
```

以下の通りCNAMEレコードを使用することで、データーベースが変わった場合はCNAMEレコードの参照先の修正だけで済みます。

:::note info
CNAMEレコードとは
ドメイン名やホスト名に対する別名（エイリアス）を定義したDNSレコード。
例えば`veryverylong.hogedomain.com`の別名として`short.hogedomain.com`CNAMEレコードを定義すると、以後`short.hogedomain.com`で接続できるようになる。
:::

```plantuml
title ホストを参照するCNAMEレコードを使用する場合

agent アプリケーション [
    アプリケーション
    ....
    ホスト情報：
    sample-cname.hogedomain.com
]

agent SQLクライアントツール [
    SQLクライアントツール
    ....
    ホスト情報：
    sample-cname.hogedomain.com
]

agent CNAMEレコード [
    CNAMEレコード
    ....
    レコード名：
    sample-cname.hogedomain.com
    ....
    ホスト情報：
    <b>db-a</b>.ap-northeast-1.rds.amazonaws.com
]

rectangle RDS {
    database DB_B [
        DB_B
        ....
        <b>db-b</b>.ap-northeast-1.rds.amazonaws.com
    ]
    database DB_A [
        DB_A
        ....
        <b>db-a</b>.ap-northeast-1.rds.amazonaws.com
    ]
}

アプリケーション -down-> CNAMEレコード
SQLクライアントツール -down-> CNAMEレコード

CNAMEレコード --down-> DB_A
```

### CNAMEの設定方法

AWSコンソールであれば、以下のように設定できます。
CNAMEの参照先を修正する場合は、データベースのホストを新しいデータベースのものに修正するだけです。

![Screenshot 2022-12-06 at 11.13.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659776/dc6e86d5-a102-66e0-3a10-dd3c015e6f3e.png)

terraformであれば、`aws_route53_record`リソースの`records`をdb_aからdb_bに変更するだけなので非常に楽ですね。
```terraform
// hosted zone
data "aws_route53_zone" "main" {
  zone_id = "ゾーン名"
}

// CNAMEレコード
resource "aws_route53_record" "db-host-alias" {
  zone_id = data.aws_route53_zone.main.id
  name    = "レコード名"
  type    = "CNAME"
  ttl     = 60

  // db_bに接続を変更する時はここをdb_bに置き換え
  records = [aws_rds_cluster_instance.db_a.endpoint]
}
```
波なのか？粒なのか？(2) HQFTをより深く知る

#
**HQFTで物理の革命が近づいているのか？**

# よりじっくり考えて行くよ

先に上げた記事のこれだけど、

https://qiita.com/imaginarytake/items/b93d01b03775ff54272d


おかげさまで紹介記事はかなりの人に見てもらったようです。実際に実験できるわけだし、量子力学、量子コンピュータ、そして人類の物性物理の基本の認識や、究極の大統一理論なんかにも影響してきたり、と言う「可能性」は間違いなくある話だと思うし、一応数十年来の物理マニアの自分が見ても今の所破綻らしきものが見えず、むしろ今の量子力学の不完全と皆が思う部分をかなり無理なく明確にしてる事から、今後数年以内に有力な理論になっていく可能性も高いと思ってる。(科学の政治的な圧力がなければ・・・これが実は難しいかもだけど)

この理論(もうある程度実際に複数の論文で理論化されてきてる)だけど、名前として、今の所は仮に以下のような名称と考えて

**Hydrodynamic-inspired Pilot Wave Quantum Theory(HPQT)(無理に訳すと「液滴様量子力学」？)ないしは、後に述べる「John Bush教授」は「Hydrodynamic Quantum Field Theory(HQFT)」(液滴量子場理論)？と呼んでいるね。**

とにかく長いのでこれからは自分では暫く略称の中でも、上記のBushさんに習って、HQFTと暫くは言うことにします。

そしてちょうど先日、あの茂木健一郎氏が同じ様な量子力学の限界の話を上げてたので、これも見てね。

https://youtu.be/cGnU5ZzQJTY

かなり激しく、「コペンハーゲン解釈」をけなしてるね。この人が前から言ってることでもあるけど、ここまで明確にもう「コペンハーゲン解釈」なんか信じてる学者は頭おかしいでしょ？のレベルに強く言っている。

こう言うマスコミにも出るような人が今の量子力学に対しての疑問としてこう言うと影響が大きいから良いよね🤤

なので、これから、紹介をより深くしながら、その理論面もある程度じっくりと考えていくようにもしようと思ってます。より多数の実験などの映像、そして今までの数々の量子力学での謎実験(遅延選択実験とか)も実際にどうとらえ直すのかを再解釈する形で深掘りして行けたらいいかなと思ってます。

そして、あと少し話すと、これは意識の(科学的)理論なんかも繋がってくる話だと思ってる。自分なりにはある程度の仮説を持ってます。その話もおいおい出来れば。まあ怪しいけどw、物理の一番奥の話なんだからある程度でも繋がらない訳が無いのは不思議では無いぐらいに思ってもらえばいいかなと。

映像だけでもそこそこ多いし、それを見ての量子力学の再解釈の話は一つ一つ長くもなりやすいので、とても一回におさまりきれないとは思うので、随時増やしていくよ。

本日は3つ資料をざっくりだけど記載しようと思う。まずは、かなりの時間を割いて詳細な理論面を実際述べてる人がいるので紹介。

# MITの教授 John Bush 氏

この人は、「John Bush」氏と言い、なんとMITの応用数学の教授です。この様なプレゼンを何回もやってるのがYoutubeでも確認できる。

https://youtu.be/Olj_zkSrtPc

この人のものは非常に緻密に多数のことを分析しているので、時間のある人は是非見てください。既にこの液滴の系が「何か面白い現象」と言う所から、実際に今の量子力学に置き換えが考えられる厳密な理論として扱うレベルに達してきた事がわかる。

またこの内容はとても細かいし、多数の話があるので、今後また詳細にそれぞれのスライドの訳や解説などもぜひ紹介していきたいね。MITの数学の教授がちゃんとこの理論を扱ってる事にびっくりする人もいるかもね。



# スピンがどういうものか

そして次がスピンがこの系でどう見えるかに関しての詳細な映像だ。

https://youtu.be/-2yYgfaU6Ik

量子はどこにあるか分からないものではなく、「高次元側に張り出した実体としての粒子」になっていることに注意。そして、それは実際にぐるぐると回転している。実際のスピンも実は「角運動量」が計算もできるしそれで磁場も発生しているし、物理的回転とみなすのがおかしくないのはわかる人も多いだろう。(アインシュタインドハース効果)

https://www.px.tsukuba.ac.jp/~onoda/ssh/node12.html


そして重要な事として、この系ではスピンの重ね合わせは、回転のカオス的な時間反転によって起こることが示されるよ。

# もう1人、Pedro Saenz氏

https://youtu.be/ktbCIFY3lt4

この人もノースカロライナ大学のAssitant Professor、やはり応用数学の人で、とても詳しく説明をしてる。上のスピンの映像もある。複数の人達が実際に真剣に分析をして論文なども出してきてることがより明確になるよ。

# なんか面白くて調べてたら

もう理論面がどんどん固められてきてるのがわかって自分でもそこまでとは思ってなかった所もあるので多少驚いてる。世界の物理学が実際に大きく変わるのが近い気がしてきてるよな😎🤤
【ChatGPT】師走の忙しい時期に借りた猫の手が進化しすぎてひょえーと思った話

最近めっきり寒くなってきましたね
いかがお過ごしでしょう

[私とあなたの Advent Calendar 2022](https://qiita.com/advent-calendar/2022/trade_eco) への記事の投稿をしていきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188038/12e423d6-a80a-4140-0d4e-1a001dd30eb0.png)

# 主題：『ChatGPT』 がえげつない
今回取り上げるネタは、『ChatGPT』 についてです

取り上げようとした経緯としては、

最近話題になってるけど、どんなもんかな
↓
へー、無料でチャットボットサービス使えるんだー
↓
え、これえげつないな・・・
↓
ひょえー

・・・こんな感じです

ひょえーと思ったところを重点的に書きます


# ことの始まり
師走の忙しい時期に差し掛かろうというとき

うちの部署のリーダーが「11月分の勤務実績の入力確定忘れずにやってね」

という投稿をした

それを見て、若手メンバーが「その投稿、自動化すればよくないですか？」

で、『月末の最終勤務日に「〇〇して」とチャットアプリに投稿するBot』の作成という案があがった

こーやったらいけるんじゃね

とか

「月末の最終勤務日って算出するの意外とむずいっすねｗ」

とか

いろんなアイデアが投稿されて少し盛り上がってきた

そのとき

ふと、「最近話題のChatGPTにお願いしたら書いてくれるかも」

と思ってやってみた

# やったこと①：関数の作成


Q: 『「月末の最終勤務日を算出するJavaScriptの関数」を書いて』

↓

A: 『おかのした』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188038/093b301b-4fd2-1009-0cd2-2c72a5856fe5.png)

え・・・

ちょっと待って・・・

普通につかえ・・・る・・・？

いや、正しく動くかどうかはテストしないとわからんな

でも大体は正しく動きそうには見える・・・

ちょっと感動したので、
もう一度、今度は画面をキャプチャしながら実行してみる

↓

2度目の Q: 『「月末の最終勤務日を算出するJavaScriptの関数」を書いて』

↓

A: 『おかのした』

![Animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188038/e9704637-7632-f92b-fbba-aaad7e99b26f.gif)

まったく同じ依頼内容なのに出力結果が違う・・・だと・・・

先程は現在時刻から、現在の月の最終勤務日を返してくれる関数だったが、
今度は年と月を引数に、その年月の最終勤務日を返してくれる関数になった

しかも、合間にコメントを挿入してくれて読みやすくしてくれている

「最終勤務日」の定義についても、やや誤解がありそうだが補足してくれている

# やったこと②：単体テストの作成
作ってくれたは良いけど、

あらゆるパターンで正しく動くかどうかは検証してみないとだよなぁ・・・

結局、人の手で単体テスト書いてデバッグしてたら作業量は結構かかりそう・・・

いや、

単体テストの作成もお願いしてみるか

Q: 『上記関数の単体テスト書いて』

↓

A: 『おかのした』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188038/25a10e6e-7838-092d-3b11-2e975281bfe2.png)

ファーｗｗｗ

これもう単純なテストプログラマーいらないじゃんｗ

・・・

さすがにプログラマーいらないは言い過ぎだけど

関数のinterface間違ってるし・・・

とはいえ、シンプルな処理を実装する単なるプログラマーであれば

もう職を放棄するレベルかもしれない・・・

・・・

そうです

単純なプログラマーは職を追いやられて

より複雑な仕事を行うシステムアーキテクチャ

システム間連携を実現して顧客価値を探究するソリューションアーキテクチャ

そういった職種を目指す必要があることはもう明白です

・・・


単体テストの作成って楽しいし、時間があればパラメータを振って網羅的なテスト作って・・・

単体テストの作りやすいInterface を考えるのも楽しいですよね

でも、開発が切羽詰まっていると、

どうしても単体テストまで手が回らなくて

『誰か代わりに書いて・・・！』

とか

『妖精さん、朝起きたら作っておいてくれないかな・・・』

とか

『猫の手でも借りたい・・・』

とか

思ったことがある人は結構いるはず

朗報です

猫の手、めちゃくちゃ進化してます・・・！

単体テスト、書いてくれます

さらに、

関数自体も、作ってくれます


# ChatGPTについて
ChatGPTは、こちらから利用できます↓
https://chat.openai.com/chat

世の中進化してますね

おわり

この記事がおもしろいなとおもったら❤ボタンをポチッとお願いします
知識として知っている内容を、実際にスクリプトへ落とし込む難しさ

## はじめに
AIQVE ONE Advent Calendar 11日目を担当します、@kaesaruです。
12月に入って急に寒くなり、南国土佐の国出身としては毎日の通勤時間が辛い季節がやってきたなと震えています。

さて、私が所属しておりますAIQVE ONE株式会社では、[独自の自動化ツール](https://www.aiqveone.co.jp/news/2022/491/)を各案件で導入し自動テストが盛んに行われております。
今回の記事では独学でちょろっとPython3を勉強している私が今年、実際の案件で初めてスクリプトを作成した際につまづいたことについて紹介させていただきます。

***

#### ■自己紹介
まず初めに、[弊社独自の自動化ツール](https://www.aiqveone.co.jp/news/2022/491/)はPython3を使って動かしていくのですが、
私がどの程度のレベルの自動化スクリプトを作成できるのか、どのようにしてPython3を勉強しているのか、簡単にご説明させてください。

▼kaesaruのできること
・for文/While文を使ったループ
・if文を使った分岐の作成
・関数を作ってなんやかんやする
(・うっすらとしたリスト内包表記の知識)

▼kaesaruの勉強方法
・プログラミング学習サイトにて勉強(基本無課金)
・Qiita等で自分が作りたいスクリプトに近い投稿内容を探し、参考にしながら実際に作ってみる

このような感じで、独学でPython3をちょろっとかじっている***ほんっっっとうにプログラミング超初心者***です。

***

### ■知識として知っている内容を、実践の自動化スクリプトに落とし込む難しさ

私は前述の通り、プログラミング学習サイトなどでちょっとだけPython3を勉強しているプログラミング超初心者です。
プログラミング学習サイトでは、

~~~Python3
number = 1
if number == 1:
	print("ギョウザ")
else:
	print("チャーハン")
~~~

のように、本当に基本的なプログラミングの考え方や作成方法を学習できます。

ただ、これを実際に稼働している案件で自動化スクリプトとして落とし込もうとした際、
***「あれ、if文を使ったらいい感じにできそうなのは分かる。けど、どうやって使ったらいいか分からない…」***
という状況に最初陥りました。

どうして学習サイトではできていたif文の使い方が分からなくなってしまったのか、自分なりに考えてみると

「学習サイトではif文の後ろに続くワードは、問題文としてあらかじめ提示されているが、実際にスクリプトを自分1人の力で作ろうとするとif文に続くワードも自分で考えないといけない。
知識として知っている内容から、自分のやりたいことを自分の力で0からスクリプトに落とし込んでいかないといけないから、スクリプトの動作を明確にイメージする必要があるのではないか。」

と思いました。

そこで私が意識して行ったことは、

### 【スクリプトでやりたい動作を一つ一つ全部日本語に置き換えて考えてみる】

です。

もちろん初心者なのでフローチャートを作成するのは大前提ではありますが、
こうすることによって、最初は漠然としていたif文の後ろに続くワードが明確に分かるようになり
***「もし 画像A があれば 画像B を押下する。そうでなければ 画像C を押下する」***
***「もし 画像A があれば 3秒間待機する。そうでなければループを抜ける」***
といった具合に、徐々にではありますが自分がスクリプトで動かしたい内容を書き起こせるようになってきました。

※ただ、自分が知らないPython3の使い方はたくさんあって「動く気はする…でも動かし方が分からない…」
となることが多いのでまだまだ勉強が必要です…

私と同じように、 ***いざ初めて自分でスクリプトを書いてみるぞ！*** となった方で、
どうやって落とし込んだらいいか分からなくなってしまった方がいらっしゃいましたら
##### 【スクリプトでやりたい動作を一つ一つ全部日本語に置き換えて考えてみる】
をやってみると、突破口が見える…かもしれません。


***

### ■まとめ
自分で言うのも変ですが、Python3を勉強し始めた頃に比べると、多少は自分が作りたいスクリプトを
自分の力で表現できるようになってきたのではないかと思います。

意外とプログラミング言語を勉強した後、「初めて自分で1からスクリプトを作成してみる！」という方で、私と同じように勉強した内容をどうやって自分が作りたいスクリプト内容に落とし込んでいったらいいのか悩まれる方は多いのではないでしょうか。

そんな方には是非 ***【スクリプトでやりたい動作を一つ一つ全部日本語に置き換えて考えてみる】*** を実践してみてください！
もしかするとスクリプト作成の糸口になる…かもしれません。

最後になりますが、ここまでご覧いただきありがとうございました。
サンプルデータを用いてDelta Live Tablesパイプラインを作成・実行する

こちらで紹介されている機能をウォークスルーします。

https://docs.databricks.com/workflows/delta-live-tables/delta-live-tables-ui.html#create-an-example-pipeline

サンプルデータを用いてクイックに[Delta Live Tables(DLT)](https://www.databricks.com/jp/blog/2022/04/05/announcing-generally-availability-of-databricks-delta-live-tables-dlt.html)の機能を試すことができます。

# パイプラインの作成

1. サイドメニューの**ワークフロー**をクリックします。
1. **Delta Live Tables**タブをクリックします。
1. 左上にある**パイプラインを作成**ボタンの右にある下向き矢印を展開し、**サンプルデータからパイプラインを作成する**を選択します。
![Screen Shot 2022-12-06 at 11.03.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/27e26648-61ca-40b5-d250-aa66b9ca022a.png)
1. パイプライン設定画面が表示されます。
![Screen Shot 2022-12-06 at 11.06.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/eecb4e5e-212b-e0d9-ab59-296c91f56e3c.png)
   - パイプラインの名前を**パイプライン名**に入力します。
   - [クラスターポリシー](https://qiita.com/taka_yayoi/items/93d7597d7fc739b48bb7)を適用する際には、**クラスターポリシー**を選択します。
   - 自動でDLTノートブックが作成されますが、その際の**言語**を選択します。
   - DLTの処理によって生成されるDeltaテーブルをSQLでクエリーできる様にするために**ターゲットスキーマ**にデータベース名を指定します。
![Screen Shot 2022-12-06 at 11.17.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c19e748d-ccba-c4ee-beff-070dfb313dd2.png)
1. **作成**をクリックします。
1. パイプラインの画面が表示されます。
![Screen Shot 2022-12-06 at 11.17.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/293f0e07-c5b2-1293-6021-1b1446768b15.png)

# パイプラインの実行

1. **開始**をクリックしてパイプラインを実行します。
1. クラスターが起動するとパイプラインのDAG(有効非巡回グラフ)が表示され、パイプラインの処理が実行されます。
![Screen Shot 2022-12-06 at 11.21.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2e30b491-5fcf-e60d-e232-e5226d082ce9.png)

# ノートブックの確認

1. 処理が完了したらパイプラインのノートブックを確認してみます。**パス**に表示されているリンクをクリックします。
![Screen Shot 2022-12-06 at 11.23.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6dd7007b-bb0d-2879-5d4d-ba13c474061f.png)
1. パイプラインの各ボックスの定義をSQLで確認することができます。
![Screen Shot 2022-12-06 at 11.24.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/aa9deee0-3dd8-0981-9969-c63af7e42de2.png)

# データの確認

1. サイドメニューの**Data**をクリックし、`hive_metastore`配下にある、[パイプラインの作成](#パイプラインの作成)で指定したターゲットスキーマを選択し、テーブルが作成されていることを確認します。
1. テーブルの中身を確認することができます。
![Screen Shot 2022-12-06 at 11.26.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b55c91ba-a441-e718-b2de-9271e3ddf39f.png)

# まとめ

サンプルデータを用いてDLTをウォークスルーすることで、全体の操作、処理の流れを把握できるかと思います。ここで生成されたノートブックをカスタマイズして、ご自身のデータを用いてETLパイプラインを構築することも可能です。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
【M】metaタグでOGPを指定すればTwitterやDiscordのリンク表示をカスタマイズできる

これ意外と情報が見つからないんですよね……
OGPという言葉にたどり着かないと検索難易度が高い。

## 使いそうなOGP一覧

### ページタイトル

`<meta property="og:title" content="ページのタイトル">`
title要素より優先される~~がtitle要素があればそれが見られることがほとんどらしいから設定しなくてもいいのでは……？~~。

### ページの種類

`<meta property="og:type" content="article">`
トップページなら`content="website"`とか。他にも色々あるらしい。
http://ogp.me/#types などを参照するといい気がする(英語)

### ページURL

`<meta property="og:url" content="https://example.com/">`
絶対パスでURLを指定する。相対NG

### サイトイメージ画像指定

`<meta property="og:image" content="https://example.com/example.jpg">`
絶対パスで画像URLを指定する。相対NG

### サイト名

`<meta property="og:site_name" content="サイト名">`
ページじゃなくてサイトなことに注意。

### ページの説明文

`<meta property="og:description" content="ページの説明">`

### Twitterでの表示形式

`<meta name="twitter:card" content="summary">`
contentは`summary`, `summary_large_image`, `app`, `player`のいずれか。
summary_large_imageの例 : [ライブドアニュース様](https://twitter.com/livedoornews/status/1599951448355536896)
(すいません他の例見つかりませんでした……)

### 位置情報

```
<meta property="og:latitude" content="緯度">
<meta property="og:longitude" content="経度">
<meta property="og:country-name" content="国名">
<meta property="og:postal-code" content="郵便番号">
<meta property="og:region" content="都道府県">
<meta property="og:locality" content="市区町村">
<meta property="og:street-address" content="住所(市区町村のあとの部分？)">
```

### 連絡先情報

```
<meta property="og:email" content="メールアドレス">
<meta property="og:phone_number" content="電話番号">
<meta property="og:fax_number" content="FAX番号">
```
PL-900：リレーションシップについて理解する

この投稿はMicrosoft PL-900の受験に向けた勉強資料をMS Learnページを参考にして作っています。
一発合格に向けて頑張りましょう！

[リレーションシップについて理解する][MS-Learn]

[MS-Learn]: https://learn.microsoft.com/ja-jp/training/modules/introduction-common-data-service/4-understand-relationships

# リレーションシップについて理解する
* 効率的にスケーラブルなソリューションを構築するには異なるコンテナー（テーブル）にデータを分ける必要がある
→　コンテナーをひとつにして全部入れようとすると効率が悪るくなるかつ、動きまたはそれに対する理解も難しくなる

### 例）
* 販売注文を管理するシステムを作成する場合、以下が必要
    * 製品一覧、在庫、品目のコスト、販売価格
    * 顧客、顧客の住所や信用情報などのマスターリスト
    * 売上の請求書の管理
→　日付、請求書番号、営業担当者、住所や信用情報などの顧客情報、請求書の各項目の明細などの情報が含まれる
    * 明細
→　販売した製品への参照情報、各製品のコスト、価格
→　販売された数量に基づいて在庫数を減らしたりする機能
* 上記機能をサポートするために４つのテーブルを作成
    * 顧客
    * 製品
    * Invoices
    * 明細
* 各項目に対してテーブルを分け、紐づけることで高いパフォーマンスを実現および拡張、効率的なソリューションを構築できる
→　同じデータを繰り返し格納したり、大量の空白データを含む大きな行をサポートしたりする必要がなくなる。 さらに、レポートの作成がはるかに簡単になる
* テーブル間のリレーションシップ
→　一般的に2タイプ（一対多、多対多）
→　Microsoft Dataverse でサポートされている
    * 一対多リレーションシップ
        * 親子関係
        * 上記の例では請求書テーブルが親、明細が子テーブル
        * １つの請求書は０個から複数の明細を持つ
        * １個の明細は１個の請求書のみ紐づくことができる
        * 子行は親行なしでは存在しない
        * 請求書番号のように親行を識別するために使用される値（ユニークで重複できない）をキーと呼ばれる
        * 子行では親行の番号を格納していて、これを外部キーと呼ばれる
* 複数のテーブルを分割するなど、効率的なソリューション設計をすることは難しいため、Microsoft Dataverseで用意されている標準テーブルを利用したらより簡単にソリューションを構築することができる
ライブラリに任せる技術

## はじめに

**なんであの人は開発が早くてミスがないんだろう**と思うことありませんか？

もしかしたら、その人は実は**コードを書かない**ことがうまいだけかもしれませんよ。

今回は、開発が早くて、バグの少ない人はやっている。
**ライブラリに任せる技術**について話します。

## なぜか使われないライブラリ達

実は、みんな**ライブラリは便利なもの**だと思ってるんです。
なのに、コードレビューをしていると、**これ、「ライブラリあるのに」と思うコードが上がってきます**。

なぜこのようなことが起こるのでしょうか？

僕は、**ライブラリを使ってできないかな？という発想にそもそもなってないから**かなと思ってます。

検索をすると、独自実装されたコードが出てきたりしますし、最近の言語は優秀なので、ライブラリを使わずとも数行でやりたいことを実現できたりします。

なので、**そもそもライブラリを使おう！という発想にすら至っていない**ケースがほとんどです。

## ライブラリに任せる技術

ライブラリを使わないと複雑なロジックができていったり、自分達のチームでメンテナンスをするのが後々大変になってきます。
後輩達にそのメンテナンスを押し付けるのではなく、**世の中の優秀なエンジニア達に押し付けましょう**。

そのためのマインドやヒントをここに記します。

### 1. できるだけコードを書くのをサボりたいマインドを持つ

いきなり精神論ですが、**僕はコードを書く時に常に何かサボりたいなと考えてます**。
10行のコードを書くより、ライブラリを一つ入れる方が早いし確実です。

ほとんどの仕様・ビジネスロジックはどこかで見たことがある処理です。

認証も、ランダムソートもCookieの処理もどこかで見たことがある機能というのは、**その人達の知恵と経験がライブラリという形で作られているはず**です。

常にその人達に頼ってサボりたいと心がけるようにしましょう。

### 2. Google検索ではなく、ライブラリ検索から始める

要件・仕様を見た時に真っ先にすることは**ライブラリを検索すること**です

例えば、「何かしらのリストをランダムに並び替えて欲しい！」みたいな要件が出てきた時

**Google検索してみる**

こうしてしまうと、シャッフルするためのアルゴリズムみたいな記事が出てきます。

![スクリーンショット 2022-12-06 21.35.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136353/949ebc28-d200-c21f-e08c-aec0a1916014.png)

本質的には僕たちは**シャッフルするアルゴリズムが知りたいわけではなく、シャッフルさえしてくれればいい**んです。

なので、Google検索ではなくライブラリの検索をする習慣をつけましょう。

**npmレジストリを検索してみる**

以下のような感じで、npmでshuffleと検索し、Popularityで絞り込むといい感じのライブラリが出てきたりします。

![スクリーンショット 2022-12-06 21.33.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136353/e8f10a32-d7c8-bcea-c020-6b80d8b7340e.png)

メンテナンスがなされているか、ダウンロード数が多いかなどの情報もここで見れるのでここで検索してみるという習慣をつけるといいと思います。

### 3. テストコードを書く癖をつける

テストコードを書く習慣をつけると、これやってくれるライブラリないかな？と気づける確率が上がります。

テストコードを書くと、

- ロジックの抽象化が進む
- 抽象化したコードにもテストコードを書こうとしたら、結構面倒臭いことに気づく

結果、抽象化したロジックというのは、誰かがライブラリという形で外部パッケージ化してくれていたりするものです。（GitHubを見に行くと、ほとんど同じようなコードがありますw）

### 4. ちゃんとコードレビューを機能させる

経験豊富な人に見てもらいましょう。

実装者は盲目になりがちですし、いろいろ気をつけていても最後は嗅覚だと思います。
これを自分たちがメンテナンスできるのだろうか？というリスクが見える人に見てもらいましょう。


## まとめ

いかがでしたでしょうか？

気をつけていてもやっちゃいがちな車輪の再開発。

完全にはなくせないとは思いますが、少しでも減ることを祈っています。
オンラインイベントわいわい視聴会のすすめ

![READYFORアドベントカレンダー20221206カバー画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141872/4e88107e-fcbd-4c37-a2cf-d0f968379a26.png)

こんにちは、READYFOR DevHR の関根です！

この記事は「READYFOR Advent Calendar 2022」の6日目の記事です。

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

▼ 昨日（5日目）の記事はこちら

https://blog.t-wakabayashi.com/it/2022/12/05/google-workspace-dlp.html

▼ 明日（7日目）の記事はこちら

https://qiita.com/toyoc/items/bc5ca0e49b207e266af0


## この記事はなにか
オンラインイベントをエンジニアメンバーみんなでわいわい見ると楽しかった、という話です。

## わいわい視聴会とは

オンラインで集まり、Slack でわいわいガヤガヤしながらオンラインイベントを見る会です！

現在 READYFOR ではリモートワークをベースにしており、リアルタイムにみんなでわいわいできる機会を増やせればなぁと考えていました。

### 実施方法

みんなでわいわい見ましょう！という事前アナウンスはしましたが、基本的には任意参加で、どのセッションを見るかも自由です。
（とは言え完全自由もまとまりにくいにので、イベントによっては一緒に見れると良さそうなセッションを予めお知らせしました。）

### 楽しみ方
オンラインの集合場所は Gather か Google Meet にし、メンバーの一人に画面共有してもらいます。
READYFOR には #engr-on-air という実況用の Slack チャンネルがあるので、当日はそこでわいわいします。

![ 2022-12-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141872/20324c33-611c-9c62-9a82-869e033932d5.png)

## どんなイベントを見たのか

### Kaigi on Rails 2022
今年もスポンサーとして協賛させていただいたイベントです。
こちらは Tech Branding チームから声かけをして実施しました。

https://kaigionrails.org/2022/


### AWS Dev Day 2022 Japan

弊社の [@MinoDriven](https://twitter.com/MinoDriven) が登壇することとなり、みんなで応援視聴しました。

https://aws.amazon.com/jp/events/devday/japan/?aws-dev-day-2022-japan-cards.sort-by=item.additionalFields.sortOrder&aws-dev-day-2022-japan-cards.sort-order=asc&awsf.aws-dev-day-2022-japan-filter-session-category2=*all&awsf.aws-dev-day-2022-japan-filter-track=track%23track-a&awsf.aws-dev-day-2022-japan-filter-dev-type=*all&awsf.aws-dev-day-2022-japan-filter-dev-subject=*all&awsf.aws-dev-day-2022-japan-filter-tech-category=*all&awsf.aws-dev-day-2022-japan-filter-dev-level=*all

見逃した方、見返したい方はこちらからぜひ！

https://twitter.com/MinoDriven/status/1590181987910029314?s=20&t=iI8uCWyF-OdnDst6V2nliA


## やってみた感想

視聴会にしたことで個人の times チャンネルではなく、エンジニア全体のチャンネルでわいわいでき、リアルタイムで一緒に見てる感がよかったなぁと感じています。

また、事前アナウンスをした際にエンジニアメンバーから以下のようなコメントをいただき嬉しかったです！
「こういうイベントは『なんかよくわからないけどすごい』で終わることが多かったので、Kaigi on Railsのわいわい会楽しみです。良い機会をありがとうございます！」

オフラインのイベントも少しずつ戻ってきていますが、まだまだオンラインイベントも多く開催されると思いますので、こういった機会をうまく活用していきたいと思います。
【L】let, const(, var)の違い

色んな人から何百回も言われてきたことな気がするが……

個人的にはvar派です。大規模なものを書くことが少ないので許してくれ。

## 主な違い

|        |   let  |  const |   var  |
|:------:|:------:|:------:|:------:|
| 再宣言 | × | × | ○ |
| 再代入 | ○ | × | ○ |
| ES5以前 | × | × | ○ |

初心者向けだからスコープとかの話はしないぞ！

## 使い分け

### ES5以前の場合

**全部var**

めっちゃ再宣言に気をつけながら変数を使う

### ES6以降の場合

**定数はconst, 変数はlet**

letとconstの違いは"再代入ができるか"なので、再代入されてほしくない定数はconstで。
varは再宣言の心配があるのでなるべく使わないほうがいい。

---

## ところで

- 本業だったり大規模だったりするならともかく、趣味で小規模なものを作るくらいならvarでもいいと思うんだ
- letやconstだと宣言前参照はReference Errorが出ますが、varはUndefinedを返します。varで宣言する変数は先に場所をとるだけとっておくという挙動("巻き上げ"と呼ぶらしい)をとるらしいです。

## 参考

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/let

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/const

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/var
Falco Ruleを紹介するシリーズ - Directory traversal monitored file read

本シリーズでは、ランタイム脅威検知のデファクトスタンダードである<a href=https://falco.org/ target=new>Falco</a>の検知Ruleを、１つの記事で１つ簡単に紹介していきます。
ランタイムセキュリティやFalco自体の概要を知りたい方は<a href=https://sysdig.jp/blog/intro-runtime-security-falco/ target=new>こちらのブログ記事</a>をご参照ください。
今回ご紹介する検知Ruleは<b>「Directory traversal monitored file read」</b>です。
# Rule記述
```
- rule: Directory traversal monitored file read
  desc: >
    Web applications can be vulnerable to directory traversal attacks that allow accessing files outside of the web app's root directory (e.g. Arbitrary File Read bugs).
    System directories like /etc are typically accessed via absolute paths. Access patterns outside of this (here path traversal) can be regarded as suspicious.
    This rule includes failed file open attempts.
  condition: (open_read or open_file_failed) and (etc_dir or user_ssh_directory or fd.name startswith /root/.ssh or fd.name contains "id_rsa") and directory_traversal and not proc.pname in (shell_binaries)
  enabled: true
  output: >
    Read monitored file via directory traversal (username=%user.name useruid=%user.uid user_loginuid=%user.loginuid program=%proc.name exe=%proc.exepath
    command=%proc.cmdline parent=%proc.pname file=%fd.name fileraw=%fd.nameraw parent=%proc.pname
    gparent=%proc.aname[2] container_id=%container.id image=%container.image.repository returncode=%evt.res cwd=%proc.cwd)
  priority: WARNING
  tags: [filesystem, mitre_discovery, mitre_exfiltration, mitre_credential_access]

```
# Rule概要
ディレクトリ・トラバーサル攻撃（公開ディレクトリから非公開ディレクトリへの移動）の試みを検知します。
Webアプリケーションは、Webアプリケーションのルートディレクトリ外のファイルへのアクセスを可能とするディレクトリ・トラバーサル攻撃（例：Arbitrary File Readバグ）に対して脆弱な場合があります。
また、/etc のようなシステムディレクトリは、通常、絶対パスでアクセスされるので、これ以外のアクセスパターン（ここではパストラバーサル）は疑わしいと見なすことができます。
このルールは、ファイルを開く試みに失敗した場合も含みます。

# Condition（条件）
`(open_read or open_file_failed) and`
ファイルの読み込みに成功、または失敗し、

` (etc_dir or user_ssh_directory or fd.name startswith /root/.ssh or fd.name contains "id_rsa") and`
/etcディレクトリ、もしくはユーザーSSHディレクトリ、またはファイル名が/root/.sshで始まるか、ファイル名が"id_rsa"を含む場合で、

`directory_traversal and`
ディレクトリトラバーサルを行っていて、

かつ

`not proc.pname in (shell_binaries)`
プロセス名がシェルバイナリではない場合

---
directory_traversalマクロの内容は以下となります。
```
- macro: directory_traversal
  condition: (fd.nameraw contains '../' and fd.nameraw glob '*../*../*')
```
`(fd.nameraw contains '../' and fd.nameraw glob '*../*../*')`
ファイル名が '../' を含み、globが '\*../\*../*' の場合

# Output（出力）
監視しているファイルをディレクトリトラバーサルで読み込みました

`%user.name`
ユーザー名

`%user.uid`
ユーザーのUID

`%user.loginuid`
ユーザーのログインUID

`%proc.name`
プロセス名

`%proc.exepath`
プロセスの実行パス

`%proc.cmdline`
コマンドライン

`%proc.pname`
親プロセス名

`%fd.name`
ファイル名

`%fd.nameraw`
RAWファイル名

`gparent=%proc.aname[2]`
2世代前の親プロセス名

`%container.id`
コンテナID

`%container.image.repository`
コンテナイメージリポジトリ

`%evt.res`
イベントリターン値

`%proc.cwd`
カレントワーキングディレクトリ
BERTで文の埋め込みを取得

# はじめに
学習済みのBERTを使って，文の埋め込みを取得しようと思っています．色々調べてみたら，こういうコードがなさそうので，一応共有しとく．

今回はBERTを使って，mean-pooling したベクトルを計算する．
環境はColab．


# Code

### 必要なライブラリをダウンロード

```python
import torch
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")

# GPU を利用する，GPUがなかった人はこのステップをスキップして
device = torch.device("cuda:0")
model = model.to(device)
```

### ベクトルを取得

```python
    # GPU を使わない人は.to(device)  を削除

def get_word_embedding(text:str):
    input_ids = torch.tensor(tokenizer.encode(text)).unsqueeze(0)  # Batch size 1
    input_ids = input_ids.to(device)

    outputs = model(input_ids)
    last_hidden_states = outputs[1]
    last_hidden_states = last_hidden_states.to(device)  
    # The last hidden-state is the first element of the output tuple
    return last_hidden_states[0].detach().to(device)

```

# 感想
私は，大規模テキストデータの文の埋め込みを取得しようと思った．最初はGPUを使わず，CPUを使ってた．そして，RAMが80GBのCPUはメモリオーバーしてしまった．GPUを使う場合，問題なく実行できた．そのため，大規模データの埋め込みを取得したい場合，GPUの利用が必要だ．
【K】kbd要素というものがある

知らなかったので共有。

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

## これは何？

- キーボードなどからの入力を表す要素
- 慣習的に等幅フォントで表示されることが多い

## kbd > kbd

`kbd`の中に`kbd`を入れることで実際のキー入力を表す用例が紹介されている。

```html
<p>
    選択部分のコピーは
    <kbd><kbd>Ctrl</kbd>+<kbd>C</kbd></kbd>
    でできるぞ
</p>
```

## CSSの例

単純なHTMLをいい感じに表示するなら、`kbd:not(:has(kbd))`に枠をつけると良さそう

```css
kbd:not(:has(kbd)) {
    border-radius: 4px;
    padding: 1px 2px;
    border: 1px solid black;
}
```

## ちなみに

Kから始まるHTMLの要素、たぶん`kbd`と`keygen`だけ
Workato：formula（関数）を利用して特定のキーの値を取得する

# はじめに

Workatoでは、ほとんどの場合においてはコネクタから提供されるOutput Schemaのデータピルを利用して目的の値を取得することが出来ますが、連携先アプリケーションの契約プランの違いによってスキーマが拡張されたり、カスタムフィールドの増減によってスキーマが動的に変化するようなケースなど、Output Schemaで定義された（コネクタ内部で事前定義された）スキーマとは異なるものがアプリケーション側から結果として返された場合、データピルを利用して目的の値を取得できない場合があります。

このような値を取得する方法はいくつかありますが、その１つであるformula（関数）を利用して、特定のキーの値を取得する方法についてご説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/ddb98a4d-b104-c748-0484-76e6e42a3f6a.png)



# 方法
## 特定のキーの値を取得したい

赤枠で囲んだ部分を取得したい場合、Workatoでは次のformulaを入力することで取得することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/2f4bca29-906d-6e28-8611-b05a19da897c.png)

### Formula
以下いずれかの方法で取得することが出来ます。 
`Step ? output` を指定した場合は、そのコネクタのルートを起点として記述します。
特定のデータピルを指定した場合は、指定されたデータピルを起点として記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/bb87aefe-c8c4-3942-e370-d2453bd9a9fd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/98a688b8-280a-6192-7014-f2f74c7befcb.png)


## リスト内のキーを取得したい

以下は、`blocks` というリストの中にある `type` というキーの値を取得したいケースになります。
もし取得したいリストのインデックスが決まっていれば、Formulaを次の通り入力することで目的の値を取得することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/aa6f49d5-f78d-9627-7278-800da2a36d34.png)

### Formula

例えば、0番目のインデックスに含まれるキーの値を取得する場合は、次の通り記述します。（いずれかの方法で対応します）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/6de6a3a4-849d-3972-345e-99fe4e9a9505.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c07cd951-a0c1-b141-9db9-f2135fd424dc.png)

なお、以上の方法では特定のインデックス内のキーの値は取得できますが、全てのインデックス内のキーの値を取得することはできません。この方法については次回にでもご説明します。
FreeBSDのカーネルバージョン

12.4Rも近いのでビルド流して焼いてみました。

https://dmesgd.nycbug.org/index.cgi?do=view&id=6804

この中のカーネルバージョンは以下のようになります。

```
FreeBSD 12.4-STABLE zrouter_yamori813-n234782-cc4215eab94a Nec_WR8175N mips
```

どういう意味が調べてみました。

この行はsys/conf/newvers.shからビルド時に作られます。

作業環境に合わせて作られるようになっています。

このビルドは以下のリポジトリのコードです。

https://github.com/ZRouter/freebsd-src/tree/cc4215eab94a1ce2469244b178e7240822fc826c

zrouter_yamori813はブランチ名でcc4215eab94aはリポジトリのhashです。

Nec_WR8175NはZRouterのboards由来のカーネルのコンフィグレーション名です。

mipsはCPUアーキテクチャです。

n234782は以下で生成されるようです。

```
% git rev-list --first-parent --count HEAD
```

git詳しくないので、よく分かりません。

このリポジトリは本家の12-STABLEをときどきマージしているですが、本家のどのコミット相当がマージされているか分かると嬉しいのですが。
Stable Diffusion 2.0を使ってみた

今年(2022年)にAI画像生成ツールがラーメンを手で食べる画像が出来ると有名になった

・stable diffusionとは
>Stable Diffusionは、2022年に公開されたディープラーニングのtext-to-imageモデルである。主にテキスト入力に基づく画像生成に使用されるが、他にもインペインティング、アウトペインティング、テキストプロンプトによって誘導される画像に基づく画像生成にも使用される。
　※[wikipediaより](https://ja.wikipedia.org/wiki/Stable_Diffusion)

絵のセンスが無い人でも、文字から画像生成出来るツールです。

・v1とv2の違い
>生成される画像のデフォルトの解像度が512×512ピクセルとなるモデルと、768×768ピクセルとなるモデルを提供
画像を入力すると4倍の大きさにアップスケール可能なモデル
入力された画像の深度を推測し、深度とプロンプトから新たな画像を生成可能なモデル
画像（および変更したい部分を示すマスク画像）とプロンプトを入力すると、画像の一部だけをプロンプトに応じて書き換えるモデル
※ [@IT atmarkit様より](https://atmarkit.itmedia.co.jp/ait/articles/2212/02/news021.html)

v1が512x512ピクセルだけだったので、解像度が大きくなり良くなった。
他にはv1だと画像の一部編集ができなかったのが、v2で部分編集が実現したのが良かった。

・Stable Diffusion 2.0
Google Colabが無料で環境依存が無いので、Google Colabで画像生成することにします。

コードも[npaka様](https://note.com/npaka/n/n5fd3d8ecf1e6)の作成を見て作ってみました。

`prompt = "a photo of an astronaut riding a horse on mars"`
上記のダブルクォーテーション内に、画像生成したい文字列を英語で入れて、プログラムを動かします。

↓↓私が実行した結果↓↓
![ダウンロード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2242640/3f5da5c4-5f08-d37e-a139-1083bc9e70d6.png)
SM調教師瞳、って作品を作る上で何かしらやったこと

任天堂非公認ソフトを作る上でやったことがあるものを紹介します。

詳しくはwikipediaにて

https://ja.wikipedia.org/wiki/SM%E8%AA%BF%E6%95%99%E5%B8%AB%E7%9E%B3

ちなみにBGM等は以下から聴くことができます
実機ではなくエミュレータからですが

https://www.nicovideo.jp/my/mylist/39733820

ライセンスとか政治的なお話は別として・・・

## あたしの担当は瞳2番外編～3＋りばーす☆きっずまで

### 瞳2 番外編

あたしにとっての処女作品となります。

完全にPSGチックなサウンドな 瞳2 より、より良いサウンドが得られるように

サンプルサウンドの波形だけを使って、より良い音になるようにしています。

お気に入りの組み合わせとしては

のこぎり波＋矩形波　で　バイオリンちっくな音です

まだ波形を作る技術がなかったので、


この時は完全にBGMだけの作成で、特にアセンブラソースはいじってなかったです

そのため、BGMドライバは純正サンプルドライバ（かんきちくん、って言います）をそのまま使用していたものです。

### 瞳3

瞳3のBGMには2バージョンあります。

容量を大量食いして（それでも8M ROM）、少しでも贅沢にしたもの

その後、汎用圧縮を利用して、容量をコンパクトにしたにも関わらず、ステレオ化したりと、より良くしたもの（4M ROM）

の2バージョンがあります。


この時のBGMドライバにもちょっとテコ入れしており、
何もステータスが見えない画面の中で、BGM用のアセンブラコードを
デバッグするのは、まるで夢見ながらデバッグしている感じでした。

また、BGMの音声的にも、ようやく波形をいじることができたので、
サンプリングした音声も使用しています

ちなみに初期バージョンのBGMはより多くの領域を必要としていたので、
バンク切り替えにてBGM用のCPUのエリアに対して、全転送を行っています。

:::note info
バンク切り替えは普通あるような技術ですが・・・
:::

### りばーす☆きっず

これが本来のBGMドライバではないかと思うのですが
ようやく割り込みにて効果音を出せるようにしてあります。

りばーす☆きっずは、まるで違う人が作ったかのように見えるようにするために
小容量ながらも大量のサンプリング音声を使用しています。

:::note info
割り込みでの効果音出力は普通あるような技術ですが・・・
:::

#### 24M ROM相当の広告？

単純にLZ系の圧縮をリバースエンジニアして、その解凍エンジンをスーファミ(65816)に移植した感じなのです。


### 開発環境

本来スーパーファミコンは、ソニー製のUNIXワークステーションが開発環境だったのですが、

https://ja.wikipedia.org/wiki/NEWS_(%E3%82%BD%E3%83%8B%E3%83%BC)

私たちはMS-DOS上の trasm とか、（SPC700のアセンブラは忘れた）・・
を使用していました。

スーパーファミコン側は、違法コピー機を使用し、
PCのプリンタポートと接続し、片方向通信を使用して、ROMイメージを転送し、実機で起動していました。

:::note info
まぁ、フロッピーディスクでも転送していましたが
:::

## おそらく、みなさんはここが気になるんではない？

瞳とかは、ジーコサッカーってよばれるほどなのですが
確かにジーコサッカーは大量の製造がされましたが、売れなかった作品です。

会社（正確には販売会社）の中では、３人体制で以下のようなことが行われていました

・ROM焼き
・（はんだごてで）ROM外し＆ROM取り付け
・カセットにシール貼り付け＆パッケージ組み立て

また、私は確認していないものの、ジーコサッカー以外の作品も
ROM（カセット）として使われているようです。
vmdk形式のファイルをHyper-Vへインポートする

# vmdk形式をHyper-Vへインポートしたい
vmwareのファイル形式であるvmdkをHyper-Vのファイル形式であるvhdxへコンバートしたい。

## エクスポートされたvmdkが分割されている場合
vmdkファイルが１ファイルにまとまっているのであれば、この手順は不要だが、もし複数のファイルに分割されているのであれば、結合しないといけない。
### vmware-vdiskmanager.exeを使う
VMWare Workstation (2022/12月現在 Version 17.0)をインストールすると、一緒にインストールされる。（Playerのほうには入っていなかった。）
インストールフォルダのvmware.exeと同じ場所にある、vmware-vdiskmanager.exeを使う。有志が開発したラッパーGUIもあるようだが、PowerShellで十分実行できた。
```PowerShell
vmware-vdiskmanager.exe -r Target-File-1.vmdk -t 0 Target-File.vmdk
```
Target-File-1.vmdk：分割されたvmdkファイルの先頭のファイルを指す。
Target-File.vmdk：結合後のファイル名を指す。

## vmdkファイル形式をvhdxファイル形式へ変換
### Microsoft Virtual Machine Converterを使う
既にMicrosoftの公式サイトからは入手できない？(2022/12月現在)
因みにインストーラのファイル名はmvmc_setup.msiだった。
インストールしたらGUIが起動できるが、GUIからはコンバート元のvmware等に接続することが求められるため、PowerShellで実行する。
まずは必要なモジュールをインポート
```PowerShell
Import-Module "D:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"
```
次に変換するコマンドを実行。パスの指定はフルパス推奨。
```PowerShell
ConvertTo-MvmcVhd -SourceLiteralPath 変換元.vmdk -DestinationLiteralPath 出力先.vhdx -VhdType DynamicHardDisk -VhdFormat Vhdx
```
このコマンドで
```
ConvertTo-MvmcVhd : The entry xx is not supported disk database entry for the descriptor.
```
とエラー表示が出た場合、次のツールで修正が必要となった。

### dsfokを使う
dsfokをDLし、入っているdsfo.exeをまず使う。
```
dsfo.exe 対象となる変換元.vmdk 512 1024 tmp.txt
```
そうすると、tmp.txtにvmdkの情報が出力されるので、エラーの「entry xx is」の「xx」に該当する行がないか探して、その行をコメントアウトする。
そして、そのtmp.exeを対象となるvmdkに再度埋め込むため、今度はdsfi.exeを使う。
```
dsfi.exe 対象となる変換元.vmdk 512 1024 tmp.txt
```
そして、ConvertTo-MvmcVhdコマンドを再度実行する。（エラーが出ればその度にtmp.txtの編集->dsfi.exeを繰り返す）

## Hyper-Vへインポート
これで無事にvhdx形式のファイルに変換できたら、Hyper-Vで新規マシンを作成し、ディスクを新規作成ではなく、変換したvhdxファイルを指定することで起動できる。
間違って削除したNew Relicダッシュボードを復元したい

New Relicが持っている沢山ある機能のうち、一番使用頻度が高いのはダッシュボードだと思います。また、無料のBasicユーザでもダッシュボードにアクセスや作成することができますので、使用するユーザ数もかなり多いと思います。

本記事は、使用頻度も使用者数も多いダッシュボード機能において、削除されたNew Relicダッシュボードを復元する方法を紹介したいと思います。

不要なダッシュボードを削除するつもりで、他の必要なダッシュボードを間違って削除してしまった！
他のユーザさんが間違って、自分のダッシュボードを削除してしまった！
など不測な状況に陥ってしまった場合を想定して、対応内容を本記事にまとめました。


## 復元したいダッシュボードのguidを特定する
guidを解らない場合は、New Relic管理者権限の持っているユーザにて下記NRQLを実行してください。

```
SELECT * from NrAuditEvent SINCE 1 day ago
```

上記の検索結果に、削除された日時を使って、対象ダッシュボードの削除記録を特定できます。
特定されたレコードのtargetId欄は対象ダッシュボードのguidになります。
そのIdを次のステップに使いますので、メモしておいてください。

:::note info
おすすめ
ダッシュボードを削除する前に、GUIDをメモしておくことをおすすめします。
万が一間違って削除した場合、簡単に復元できます。
:::

## NerdGraphQLにて復元スクリプトを実行する
上記ステップで特定したguid情報を入れ替えて、下記スクリプトを作成してください。

```
mutation {
  dashboardUndelete(guid: "GUIDSampleXxWSVp8REFTSEJPQVJEfGRhOjE2NjM3MjI") {
    errors {
      description
      type
    }
  }
}
```

以下のような結果が表示されましたら、上記スクリプトの実行が完了し、対象ダッシュボードの復元が成功したはずです。
```
{
  "data": {
    "dashboardUndelete": {
      "errors": null
    }
  }
}
``` 
本記事の解説内容は以上になります。

万が一やらかしてしまっても、本記事に従って落ち着いて対応していただければ復元はできますので、ぜひメモしておいてください。
Oracle Analytics Cloud：Usage Trackingデータでダッシュボードっぽいのを作る

# はじめに
Oracle Analytics Cloud（**OAC**）では、細やかなセキュリティを駆使したダッシュボードを作成することができます。
また、セルフサービスBI機能を使って使いやすいキャンバスを作成し、ダッシュボードとして利用することもできます。
今回は、セルフサービスBI機能によるダッシュボードを作ってみます。
新たに、ビジュアライゼーションに導入された「タイル」プロパティも紹介します。

# Usage Trackingデータを使う
[Oracle Analytics Cloud：利用状況を把握する ～準備編～](https://qiita.com/tyo38/items/5ed90689b69992bfbb6f)
で紹介した方法で、Usage Trakingデータを検索するための「接続」を作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/57e4c2ac-99bf-4f02-608f-f33c24a338bd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/53f8d428-7a20-ba8d-98a8-d73d916467f4.png)
「LOGICALQUERIES」表をドラッグ＆ドロップして選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d98706de-75a1-5f8b-50b7-2ae2ac4bff1e.png)
- 「QUERY_KEY」列は名前を「# of Query」に変更し、処理形式を「メジャー」「件数」にしました。
- 「SUCCESS_FLG」列は、処理形式を「属性」に変更しました。
- 「ROW_COUNT」列を複製し、「ROW_COUNT (AVG)」に変更し集計方法を「平均」にしました。
- 「TOTAL_TIME_SEC」列を複製し、「TOTAL_TIME_SEC (AVG)」に変更し集計方法を「平均」にしました。
- 「COMPILE_TIME_SEC」列を複製し、「COMPILE_TIME_SEC (AVG)」に変更し集計方法を「平均」にしました。
- 「COM_DB_TIME_SEC」列を複製し、「COM_DB_TIME_SEC (AVG)」に変更し集計方法を「平均」にしました。
- 「COM_NUM_DB_ROW」列を複製し、「COM_NUM_DB_ROW (AVG)」に変更し集計方法を「平均」にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/707bc3c0-932d-ced6-7b62-1cf28b8496a9.png)
名前を付けてデータセットを保存します。

# ワークブックを作成
保存したデータセットを使用して新規にワークブックを作成します。
時間帯別のクエリー数を横棒グラフにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f907a195-59dd-ac46-41b0-c9604a32a219.png)
「TOTAL_TIME_SEC (AVG)」列を「タイル」にドラッグ＆ドロップします。
横棒グラフに平均の実行時間（秒）が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/3d1b9a69-53cf-de3c-c9a5-ff319e202858.png)

# キャンバスの完成
同様の手順で、いくつかのビジュアライゼーションを配置したキャンバスが完成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/aaa514bf-e619-84e9-928c-6671f5d785e5.png)
Kinesis Advantage 360設定忘備録

この記事は[Ateam LifeDesign Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ateam-life-design)の6日目です。
キーボード沼に片足を突っ込んでいる筆者がKinesis社から出ているAdvatange360というキーボードを買ったのでそれの初期設定からキーマップの修正方法を忘備録として書き記そうと思います。

### はじめに
Advantage360とはどんなキーボードか？
Kinesis社が販売しているエルゴノミクスキーボードで2022夏より先行販売が開始されています。
従来機のAdvantage2とは異なり固定分割型から分離型に変更されています。
個人的に分離型の利点は肩こりや腕の痛みが軽減されることかなと思っています。個人差あり :cat: 
~~あと見た目がカッコいい~~

細かなオプションとかは是非公式ページをご参照ください。

https://kinesis-ergo.com/keyboards/advantage360/

エルゴノミクスキーボードの定義はこちら 
> 人間工学（エルゴノミックス）に基づいて設計されたコンピューター用のキーボード。長時間の作業でも疲労が少ないよう、形状や配列が最適化されたものを指す。エルゴノミクスキーボード。エルゴノミックスキーボード。

### 筆者環境
OS: Mac OS Monterey 12.4
keyborad: Kinesis Advantage 360 professional

### キーマップ修正方法
まず公式から出ているこちらのリポジトリをForkします。

https://github.com/KinesisCorporation/Adv360-Pro-ZMK

こちらのリポジトリがFork出来たらGitHub Actionsを有効化してください。
![スクリーンショット 2022-12-01 23.15.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257500/e50e0b89-b010-ca77-c56d-817f0653151a.png)
ここまで完了したら下記のGUIでキーマップが弄れるサイトにアクセスしてご自身のGitHubアカウントでログインをしてください。

https://kinesiscorporation.github.io/Adv360-Pro-GUI/

ログインをしたら先ほど自身でForkしたリポジトリを選択してください。

ログインをしたら下記のような画面が表示されると思いますのでお好きなキーマップを登録してください。

登録方法は変更したキーをクリックして差し替えたいキー名を入力するだけです。
![スクリーンショット 2022-12-01 20.52.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257500/3f7c134a-e01f-ab8f-3456-25b46665bf57.png)
登録が完了したら右下のCommit changeを押すと先ほど設定したGitHub Actionsが動きます。

※こんな感じ
![スクリーンショット 2022-12-01 23.16.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257500/cf38bcb3-451c-f0e5-f5ca-9cb542ef389d.png)
ビルドが完了するとActionsがFirmwareを書き出してくれますのでそのFirmwareをダウンロードしてください。
※ left.uf2 right.uf2的なファイルがダウンロード出来るはず
![スクリーンショット 2022-12-05 18.28.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257500/54aae3d5-378c-a2d6-a8d8-741253591cb5.png)
まず左のキーボードから設定を進めていきます。
内容物の付属ケーブルを左キーボード、PCとで接続してください。
添付画像にある通りキーの間にリセットボタンがありますので細長いものでダブルクリックしてください。

インジケーターのLEDが白く点滅した後、緑色の点滅に変わったら成功です！
変わってなかったら失敗なので根気強く頑張りましょう:smile: 
※個人的にはやりづらかったので周りのキーを外してやるのがオススメです。
![スクリーンショット 2022-12-05 18.45.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257500/e8294061-82da-d2fb-3212-9609720f7e3a.png)

:::note warn
注意
左右別々のバージョンがありますので間違ったキーボードモジュールにインストールすると上手く動作しませんのでお気をつけください。
:::

成功するとFinderにz'ADV360PRO'というリムーバブルドライバが表示されますのでそこに左用のFirmwareを入れましょう。
キーボードが自動的にファイルをインストールし、リムーバブルドライバを勝手に切り離してくれます。

:::note warn
注意
キーボードのLEDの点滅が終了するまではケーブルを抜かないようにしてください
:::

同じ作業を右のキーボードでやれば作業終了です！お疲れ様でした:cat:
※当然右のキーボードに入れるFirmwareは右用のものです。

### まとめ
正直かなりクセがあるキーボードで万人に勧められるものではないなぁと思いつつ個人的にはめちゃくちゃ買って良かったなと思うキーボードです！
クセがある故に最初はタイポとかも多かったですが自分は1日くらいで通常キーボードと同じくらいの速度に戻せたのでネットで言われているほど慣れるのに時間がかかるキーボードではないかなぁとも思っています。（記号は別）

現在日本で買えるものに関しては全て在庫切れになってしまっていますが(2022.12.06時点)すぐに再販します！とTwitterでツイートしていたので興味がある方は是非、日本の公式代理店様をフォローしてお待ちください　

https://twitter.com/JP_ergonomics/status/1597507634982432768?cxt=HHwWgMDR0dyuvqssAAAA

本記事が少しでも参考になれば幸いです。

### 追記
設定したPCとBluetooth接続が上手くいかなかった場合
Bluetoothクリアショートカット（Mod + LeftAltまたはMod + Right Windowsでリセット
青色で素早く点滅し再度ペアリング可能状態になるのでPCのBluetooth設定から再度際接続する

自分は何故か上手くいかなったのでキーボードの電源を落として再度やってみると成功した。
【VMware】vCSA6.7~7.0アップグレード中に起きたエラー

# はじめに
vCSAをアップグレードする際に起きたエラーについてまとめます

⇩アップグレードの手順については前回投稿しているので気になる方はぜひ。⇩
[vCenter Server Appliance 6.7~7.0へのアップグレード](https://qiita.com/kotori118/items/b73a086e24ac7e578f52)

# 環境
vCSA6.7 → 7.0へのアップグレード
ESXi6.7

# 起きたエラー

### エラー①
>**• Exception in invoking authentication handler user password expired
アプライアンス(OS)のrootパスワードが違います**

〈原因〉

vCSAのrootパスワードの有効期限切れ

〈対応〉
1. vCenter Server Appliance 管理インターフェイスに、rootではなく、
[administrator@domain_name]でログインする

2. SSH有効化・Bashシェル有効化をオンにする

3. Tera Termから[administrator@domain_name]でログインする

4. 以下のコマンドを入力し、パスワードを変更する
shell
sudo –i
shell
passwd


### エラー②

>**• Insufficient disk space on datastore ‘datastore_name’
→アップグレード-ステージ1 : vCenter Server のデプロイ**
0％でストップ

〈原因〉

ディスクの容量不足

〈対応〉

不要な仮想マシンを2台削除し、容量確保 (+120GB程)
残容量855GBでデプロイ成功

〈不明点〉
デプロイサイズ 「小」のストレージサイズ 694GB
今回使用したデータストアの残容量 734GB
デプロイするのに必要な容量はどのくらいなのか

### エラー③

>**• Unable to authenticate user
→ステージ2 : データ転送とvCenter Serverから
ターゲットvCenter Serverにコピー**
進行50%でストップ

〈原因〉

1.ブラウザが対応していなかった(IE使用)

2.一時IPアドレスのDNS登録ができていなかった

3.インストーラのバグ(画面上は50%で止まってしまうが裏では動いている)

〈対応〉

1.Chromeをインストールし、そこからvSphere Clientを開く

2.DNSに一時IPアドレスを登録する
→正引き・逆引き両方

3.vCenter Server管理インターフェイス(https://【IPアドレスorFQDN】:5480)
にログインし、インストール状況を確認する

### エラー④

>**• Task failed on server : Module ‘Monitor Loop’ power on failed
→ステージ1 : vCenter Serverのデプロイ**
80%でストップ

〈原因〉

ディスクの容量不足 (スワップファイルを作成するスペースが足りなかったと思われる)

〈対応〉

仮想マシンを1台、別のデータストアへ移動し、容量確保

〈不明点〉

今回デプロイ開始時の残容量845GB
余剰は151GBある
デプロイサイズ「小」の場合は160GBの余剰が必要？？

# さいごに
ディスクの容量は指定されている容量よりかなり多めに余剰分がないとエラーが起きてしまうことが分かった
ただ、一体どのくらいの余剰があればエラーが出ないのか正確な数字が調べてもわからず、、

一時IPアドレスの名前解決なんかは事前にしっかり確認していればもっとすんなりアップグレード作業を完了することができたなぁと反省。

インストーラが50%で止まる事象に関しては、過去にも何件かあったらしい
裏で動いているとはいえドキッとするので何とかしてほしいなと切に願います。
【J】「JavaScriptとJavaは別物」は全人類の共通認識ではない

全人類の認識になれと100億年前から言ってる

## 正しい認識

- JavaもJavaScriptも「プログラミング言語の名前」
- この2つは**別のプログラミング言語**
- **JavaScriptは「JavaのScript」ではない**

## Javaとは？

- 汎用プログラミング言語。
- "Javaが動く仮想マシン"で動作する仕組みなのでいろんな機械で共通のプログラムを動かせる
    - 例えば、Windows実行ファイルの.exeはMacでは基本的に動かないが、JavaのプログラムはWindowsで動くJavaの仮想マシン・Macで動くJavaの仮想マシンの両方で動くのでWindowsでもMacでも動くと言える
    - なんならカーナビとかでも動いた覚えがあるぞ？

## JavaScriptとは？

- webサイトでよく動いてるプログラミング言語。
- ブラウザ上で処理されるのでまあ「いろんな機械で共通のプログラムを動かせる」という共通点があるかもしれない。

## なんでJavaScriptに"Java"がついているの？

**Javaの勢いに乗じようとしたから**

- もともとJavaScriptは"LiveScript"という名前だった
- その頃、プログラミング業界では"Java"が注目の的だった
- その勢いに乗じようとして、なんの関係もないLiveScriptが"JavaScript"に改名した

まあ結果的に使われる言語になってるからいい……のか？

## 知っておいてほしい

『JavaScriptとJavaは別物！』
年末調整用のPDF

去年？からはじまった年末調整用のPDF編集に手間取ったので来年以降用にメモ

ブラウザでPDFを開いて編集　→　×（文字が見えない）
AcrobatPDFをインストールして編集→　〇（公式に書いてあったのでよく読む）

検索してもキーワードが悪いのかあんまり記事出てこなかったので来年の自分用にメモ

・給与所得者の扶養控除
・給与所得者の基礎控除申告書
・給与所得者の保険料控除
[Hubspot] 流入元からhiddenの項目に規定値を入れるフォームを作る

よくあるこういうフォーム
![qiita_form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108154/09bb4dae-d5bb-33fe-50b5-61b89c5e627b.png)


ユーザに見られない入力値を
POST値に含めたいことがあったりします
さらに流入元から規定値を渡したいという要望もあったりします

そういう要望がある場合のHubspotでのフォームの作り方を紹介します

# 作りかた
基本的な作り方は公式をどうぞ: [フォームを作成する
](https://knowledge.hubspot.com/ja/forms/create-forms)
## 非表示フィールドの項目を追加する
プロパティ項目をフォーム側にドラックして項目を増やします

![スクリーンショット 2022-12-06 9.18.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108154/740a520b-907a-8d09-49ff-d3e413eae6a2.png)

hiddenの項目にするには「このフィールドを非表示にする」をONにしておきます
![スクリーンショット 2022-12-06 9.24.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108154/b4f55a04-df5a-931c-a867-4d0121fb33db.png)

## URLに規定値をクエリパラメータで含める
`https://share.hsforms.com/xxxxxxxxxxxxxxxx?(プロパティ内部名)=(規定値)`

上記のようなクエリパラメータを付けることでhidden項目でも値を入れることができます。

※URLに含まれても問題ない値の場合に限ります


# まとめ
hidden項目かつ外部からの値入力という合わせ技を紹介しました

流入元ページのロジック(jsなど)で、規定値を変更することもできるので
ユーザの行動情報やステータスを合わせて渡せすことも可能です。
これにより問い合わせ時点でのユーザ状況を見ることができたりと
かなり柔軟な使い方ができるかと思います。

# 最後に
弊社では、一緒に働いてくれるエンジニアを募集しています。
↓最新技術や自社開発に興味のある方はこちらから↓
[Wantedly - スタジオアンビルト株式会社](https://www.wantedly.com/companies/studiounbuilt)

こんなWebサービスを作っています。
・[マドリー](https://madree.jp/)
・[Studio Unbuilt](https://www.studiounbuilt.com/)