OmniAICreator/Qiita-1.07M huggingface dataset:
【javascript】debuggerについて

# はじめに
あるシステムの開発中に既存のjavascriptコードの動きが理解できず苦しんでいました。console.logで変数の中身を確認していましたが、うーん...という感じでした。そこで、javascriptのデバッグ機能を調査した結果、debuggerの存在を知り実際に使ってみたら理解が進んだので、debuggerについてまとめていこうと思います。

# debuggerとは何か
[こちら](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/debugger)より抜粋します。
>debugger 文は、ブレークポイントの設定などの任意の利用可能なデバッグ機能を呼び出します

# debuggerの用途
私がどのように使ったかというと、debuggerを散らしてどこのコードが呼ばれているのか確認したり、debuggerで処理を止めて各変数の値を確認したりしました。debuggerで確認することで、自分が理解できていなかった処理の流れを確認することができ、既存のjavascirptコードの理解が進みました。

# debuggerで処理を止めれない件
debuggerを記載すると、chromeの開発者ツールを開いた状態でブラウザ操作することでdebuggerが呼ばれた時点で処理が止まるのですが、ある時処理が止まらず？？？となりました。開発者ツールを確認すると、丁度debuggerが呼ばれていたファイルに対してデバッグできないような設定が入っていました。その設定を解除したら無事処理が止まりました。（画像がなくて申し訳ございません...）

# おわりに
debuggerを使用することで既存コードの理解に繋がりました。まだまだ使いこなせていないため、色々探りを入れていこうと思います。また、debugger以外のデバッグ方法についても調べていけたらと思います。誤り等ありましたらご指摘いただけると助かります。

# 参考
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/debugger

https://qiita.com/a_ya_ka/items/b5160cd7d592931d7507
ファンサービスの”当たり判定”を知りたい【情報整理編】

## 背景：「ファンサって大事だなぁ」

最近，16年ぶりにライブに参加してきた．
今までリアルイベントに行くほど，何かのコンテンツを追うことをしてこなかったので，
ライブがどんな感じなのかすら知らない状態で行くことになった．

ライブ自体に関しての満足度は高かったが，それとは別に「**ファンサ(ファンサービスの略)って大事だなぁ**」と思った．

手を振る，指をさすなど様々なファンサ演出があったなぁと振り返っているうちに，疑問に思ったことがある．

### 「1度のファンサ演出において，最も多くの人がファンサを受けたと感じるファンサ演出は何か」

ファンサ演出の内容に対する評価は個人差があるかもしれないが，
より多くの人がファンサを受けることができれば、満足度が高まると思われる．

もし，受けた際に十分な嬉しさあり，1回でたくさんの人が受けれるファンサがあれば
それは

そこで，「ファンサービスの当たり判定」を明確にする方法を考える．

:::note  warn*
映像系のデータ収録を行う人にとって参考になればなと思います．
検討とつまずきがこの記事で役に立つかもしれません．
:::

## ファンサの当たり判定を可視化するまで

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3600683/1894a4e4-9dab-e487-80a6-67967c6787f0.png)

まずは，ファンサが「当たった」と言える概念・根拠に関して分析しなければならない．
その次は，その概念にあったファンサに対する主観評価の方法を考えなければならない．
ファンサの評価方法が分かったら，評価できる形に合わせたデータの収録を実施する．
おそらくこの，データの収録が最難関になる．
データを集めた後に，ファンサが含まれた動画を見て評価を行うことで，
最終的にファンサの届いたかどうかを明らかにすることができると考えられる．

## 定義の明確化

### ファンサが当たったとは

ファンサが観客に当たったと判断できる根拠は，「演者からの注目を感じたとき」になるのではないかと思う．
たとえば，指をさすことにより，観客が「自分に向けられたもの」だと実感した際にファンサが当たったといえるのではないかと思う．
ただ，「確実に向けられた」といえるものだったり「向けられている気がする」など判断が曖昧なものがあるはずなので、一概に2値で判断できるものではないはず．

### ファンサのアクションについて

ライブのファンサの中で、自分に向けられたものだと判断できる可能性のあるアクションは4つくらいだと思う．
1. 目線・視線
1. 手を振る
1. 指差し
1. マイクパフォーマンス

#### 目線・視線

日常のコミュニケーションにおいて，目を合わせて会話する・話していると， 「自分の話を聞いてもらえている」というような感情なることがある． ファンサも同様で，演者と目が合うと「自分に向けられたもの」という感情を得ることができる． ただ，対面で話している際に耳を見るだけでも目が合わなくなるので，指向性がとても強いと思われる． 

#### 手を振る 

日常で手を振る行為は，遠くにいる人に対して注目を向ける際に利用される． 例えば，人混みの中において手を振ることで，遠くにいる友達から注意を引くことができる． 動作が大きいため他の人も注目を引くことになるが，ファンサにおいてはより多くの人に向けることができると思われる． 

#### 指をさす 

日常で指をさす行為は，ある集団がいる中の一人を指し示す際に利用される． 例えば，授業中に寝ている生徒を教師が注意する際に，名前を呼びながら"あなたに向けているんです"という意思を表すことができる． 身振り手振りなので，遠くからでも見ることができ，かつ指向性が高いように思われる． 

#### マイクパフォーマンス 

ライブで観客に対して「盛り上がっているか」など問いかけをして，そのレスポンスにより会場全体を盛り上げるために利用される． 観客全体に対して問いかけることもあるが，アリーナの区画や観客のパーソナリティを指定することで，ある種の指向性を持たせることが可能である． ただ，声を使う特性上，歌詞にマイクパフォーマンスが含まれていない限り，間奏や曲と曲の間でしか行うことができない．


## 検証方法の検討

### 検証方法

ファンサの当たり判定を考えるにあたり，
どこまで届くのか，どれくらいの幅なのかを検証する必要がある．

そこで以下のような環境を用意する．

![演者マップ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3600683/4920297a-3716-3e46-70bc-e2c796760845.png)

演者がある一方向に向けてファンサを行い，
図で言う点線の範囲を可視化したい．
この点線の範囲こそがファンサの当たり判定である

次に，ファンサの当たったかどうかを判断する観客を考える．

![演者マップ(点群)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3600683/f2c4127a-b3e3-6951-07d9-b16343b46dbf.png)

実際のライブに近い環境で観客を配置して，
各自にアンケートを取ることで，点線相当が見えてくると考える．

### 検証方法の問題

ここで2つの問題が出てくる．
1. 各座標にいる観客の「ファンサが当たった」と思う感覚がそれぞれで異なる
1. 演者および大量の観客の用意

### 解決方法

「一人でやればいいじゃない」
演者は自分本人がやれば良い．
ファンサの評価はその地点で録画した映像の視聴により実施すれば良い.
同一人物による評価なので感覚も統一されている．
ファンサのターゲットはマネキンにすれば，全てが解決する．

必要なものは大勢の人からマネキンの己の体のみに変わった．


:::note warn
研究レベルで精密に実施する場合は，
人の準備まで計画に入れてください．
また、評価はn=1なので，評価者本人のファンサ感度になります．
:::

## まとめ

個々のファンサービス演出(ファンサ)において，
多くの人が受け取れるファンサが何かを明確にするため，ファンサの当たり判定の可視化方法について検討した．
具体的なファンサの定義や，それに関連するアクションについて考察し，検証方法を提案した．
一方、詳細な分析をするための課題は残っているが現状の方法で可能かどうか試す方針にする．

次回は実際に評価用のデータの収録をする．
あなたが釣りグミを食べるべき理由100選

こんにちは、661nosです。
突然ですが、以下に理由を100個挙げるので、釣りグミを食べてください。

# その1:釣りグミが何であるかを知ることができる
釣りグミとは何だ？と思っている方、コンビニに行ってください。お菓子コーナーにひっそりと、60円か70円でこのようなグミが置いてあることを見ることができると思います。
![IMG_2633.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3643775/fdc438bc-547d-25b4-8982-093d5c275448.jpeg)

これが釣りグミの外観です。

# その2:遊ぶことができる
釣りグミを開封すると、このようなものが出てきます。
![IMG_1925.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3643775/99832aa6-504d-c58d-3058-fe631883179c.jpeg)

この写真では1番上に持ち手となる部分がありますが、これを引っ張って台からグミを引きはがすのが主な遊び方になります。途中でちぎれてしまったらゲームオーバーです。

なお遊び方については釣りグミの公式による案内があります。
[釣りグミ公式YouTube動画](https://youtu.be/faGqGstcabM?si=jCx1GSIrkJsW37S4)

# その10:繋げることができる
無事釣れた釣りグミは、繋げることができます。上の写真ではグミ中央に丸い穴が開いているのが見てとれますが、ここに取っ手を入れて別の釣りグミと繋げることが可能です。

![IMG_2055.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3643775/28c8f1bb-10d2-b239-8223-6a45ad45a162.jpeg)

この写真のように、同じ釣りグミの頭と尻を繋げることもできます(ウロボロス流)

# その11:食べることができる
釣りグミはグミなので食べることができます。味はまずまずだと思います。いろいろなフレーバーが出ています。

# その12:コラボもしている
釣りグミは現在、ポケモンやすみっこぐらしとコラボしています。それらのファンの方もぜひ食べてみてください。

![IMG_1768.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3643775/04637ad0-2847-4d63-e23e-fe3d360d6d31.jpeg)

釣られているトカゲ(かわいい)

# その20:ゼミの休憩に使える
この記事はPhysics Labのアドベントカレンダーであるので、数学・物理系の人にも訴求力のある理由を述べておきます。釣りグミをゼミの合間にすることで、親睦が深まることがあります。

![IMG_2081.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3643775/e01350f6-6a68-4b8b-c2c3-2dea8ed2cce6.jpeg)

ゼミの時間に釣りグミをし、ご満悦な [cosh](https://x.com/cosh_jp)。
元はといえば彼が釣りグミを教えてくれたので、彼は釣りグミの伝道師です。

# その21:釣りよりも簡単
釣りグミの難易度はそこまで高いものではないので、初心者であっても普通に釣ることができます。実際の釣りのようなハードルの高さはありません。お手軽アウトドアです。

# その22:失敗から学ぶことができる
しかしながら、釣りグミが常に成功するとは限りません。例えば、釣りグミを買ったことを忘れてポケットで温め続けていた場合など、台からセロハンをはがす段階で詰むことがあります。

![IMG_1839.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3643775/4b4cfe55-349f-abb4-a84a-ab0740668435.jpeg)

釣り以前の問題。このような失敗からも、グミ強度の温度依存性など、様々なことが学べます。

# その100:3進数について勉強できる
この記事は釣りグミを食べるべき理由100選というタイトルにしましたが、実際に100個も理由を思いつくことができなかったので、3進数表記で100個の理由を述べました。このように、釣りグミによって3進数を学ぶこともできます。

# まとめ
いかがでしたでしょうか。以下にこれまでに紹介した理由を再度列挙します。

- 1\. 釣りグミが何であるかを知ることができる
- 2\. 遊ぶことができる
- 10\. 繋げることができる
- 11\. 食べることができる
- 12\. コラボもしている
- 20\. ゼミの休憩に使える
- 21\. 釣りよりも簡単
- 22\. 失敗から学ぶことができる
- 100\. 3進数について勉強できる

これを機にみなさんが釣りグミをやってくれたら幸いです。

[釣りグミ公式ページ](https://www.bandai.co.jp/candy/brand/tsurigumi/)
Julia いろいろ--003--

## コマンドの実行結果を（改行コードを含む）文字列として捕捉



```julia
result = read(`ls -ltr`, String)
```




    "total 752944\n-rw-r--r--@   1 foo  staff       7790 Nov  9  2021 prop.testとchisq.test-jl.ipynb\n-rw-r--r--@   1 foo  staff      10746 Jun 15  2022 c1_test-jl.ipynb\n-rw-r--r--    1 foo  staff     310753 Jun 15  2022 gendat3-jl.ipynb\n-rw-r--r--    1 foo  staff       745" ⋯ 62702 bytes ⋯ "ynb\n-rw-r--r--@   1 foo  staff      30141 Dec 13 16:52 算額562-jl.ipynb\n-rw-r--r--@   1 foo  staff       4356 Dec 13 22:32 info001.ipynb\n-rw-r--r--@   1 foo  staff      14245 Dec 13 23:22 info002.ipynb\n-rw-r--r--    1 foo  staff      14245 Dec 13 23:28 info003.ipynb\n"



## 改行コードでスプリット


```julia
result2 = split(result, "\n")
```




    862-element Vector{SubString{String}}:
     "total 752944"

     "-rw-r--r--@   1 foo  staff      10746 Jun 15  2022 txt2.ipynb"
     "-rw-r--r--    1 foo  staff     310753 Jun 15  2022 txt3.ipynb"


## 例2

```julia
result2 = read(`cat txt5.ipynb`, String)
```

    "{\n \"cells\": [\n  {\n   \"cell_type\": \n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"




```julia
split(result2, "\n")
```

    364-element Vector{SubString{String}}:
     "{"
     ""
GitHubCopilotが学生だと無料で使えるらしいので使ってみた

# GitHub Copilotとは?
GitHub Copilot では、コーディング時にオートコンプリート スタイルの候補を提示する AI ペア プログラマーです。 使用するコードを書き始めるか、そのコードに何をさせたいかを自然言語のコメントで記述することで、GitHub Copilot から候補を取り入れることができます。 GitHub Copilot は、編集中のファイルや関連ファイルのコンテキストを分析し、テキスト エディター内から候補の提示を行います。 ([公式サイト](https://docs.github.com/ja/copilot/overview-of-github-copilot/about-github-copilot-individual)より)
要するにAIで補完してくれるロボットってことです。
**学生は無料で使用することができます。**
と言うわけで早速使っていこうと思います。
参考にさせて頂いた記事

https://qiita.com/SNQ-2001/items/796dc5e794ac3f57a945

:::note alert
GitHub Copilotを含めた**生成AI**の利用が許可されていないプログラミング(AtCoderなど)では絶対に使用しないでください(アイコンをクリックすることで有効化,無効化ができます)
:::
# 普通のコード補完と何が違うの？
GitHub Copilotは比喩ではなく"コード"を書けます。便利です。
しかも自分の作った過去のコードをもとに学習して提案してくれるのでめちゃくちゃストレスが減ります。
また、ほかの言語で書いたプログラムを翻訳してくれたりします。
![Screenshot_20231212_225141.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1861549/61430030-da6f-4b99-6707-f6342c320f5f.png)
(画像ではPythonをCに変換しています)
Visual Studio Codeなどのエディターに導入して使えます。ちなみにKateでは使えないっぽいです。残念
# 簡単な使い方
詳しい使い方についてすべて把握しているわけではないのですが、軽く説明します。
### 1.Githubのアカウントを作る。
[GitHub](https://github.com/)
![Screenshot_20231212_224947.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1861549/41611906-39d6-5a91-014e-b8a5cc122b67.png)
メールアドレスを入れて作ります
### 2.Educationに登録
次に[Github Education](https://education.github.com)に登録します。（学生の方以外は次のステップに行っていただいて大丈夫です)
このプロセスは結構大変です！頑張ってください！
準備物は以下の3点です
* 学生証
* 学生証を英訳したもの
* 学校のメールアドレス

まず、プロフィールに情報を記入します（学校名などです）これをしないとうまく行きませんでした（私の場合）[GitHub](https://github.com/)にアクセスし、自分のアイコンをクリックし、Your Profileというところを押してプロフィール画面へ飛びます。その後Edit Profileというボタンが左側にあると思うのでそこを押して、プロフィールを編集します。
続いて、Github Educationのページから申請を行います。
__ここから先の入力はすべて英語で行ってください__
写真がなくて申し訳ないのですが、[こちら](https://education.github.com/pack/offers)にアクセスして画面の指示通りに入力してください。（雑ですいません）ファイルをアップロードしたら3~4日で審査が終わると思います。この日程は人それぞれみたいです。
### 3.エディターに導入
ここでは申し訳ないんですけどVisual Studio Code(以下VSC)のみ解説します。ごめんなさい。
まず、VSCを開きます。
Ctrl+Shift+Xか左側のアイコンの4番目を開き、検索ボックスにGithub Copilotと入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1861549/4d230fd5-6a60-ccce-e56b-e8e3015aae43.png)
上2つをインストールしてください。ちなみにその下の２つもGithub Copilotの一つです。一番上がコードを生成してくれるもの、二番目はChat機能、その次が言語を変換するなどのいろいろな機能があるLabs、四番目はVoiceみたいです。
ログインを求められるので、そのタイミングで最初のgithubアカウントにログインしてください。
### 4.最後に
早速使いましょう。まず普通に使う時には"何もしなくていい"です。コードを書いていると候補がどんどんと出てきます。そのコードが間違っていなかったらTabで確定してください。また,Ctrl+Enterで様々な予測の候補を見ることができます。超便利です。また、無効化するときは下の方にあるアイコンをクリックして無効化できます。
# 使うときに思ったこと
* 生成されるコードの量が多い <-だいたいインデントごとくらいで生成してくれるっぽいのでうまいことやってちょこちょこ作らせたり、一気に作らせたりすると良さそう
* 自分でコードをほとんど書く必要がない<-ちょこちょこ忘れてしまうようになるので自分でたまには書いて忘れないようにしておきたいです。
* 日本語を認識してくれる<-ただただありがたいです。
* 言語の翻訳機能が思ったよりも便利でした。ただ、できることとできないことがあるのでそこは残念です。
* わからないことがあったら、エディターの中で完結する（エラーがある時、詳細をCopilotに解説をさせれる）のでブラウザをひらく手間が減りました。
# まとめ
Github Copilotはとても便利でした。まだ全然使いこなせていないので、使いこなせるように頑張りたいです。学生の方は無料なのでぜひぜひ入れてください。ここまで読んでいただきありがとうございました。
git clone が出来ないと嘆いた初心者の今日

◎この記事は、中年のおじさんが勉強をする中で気づいたことや失敗や解決した事を記載する、もしかしたら誰かの役に立てたらいいな・・的内容です。

■なんなのこれ？「git clonen」一括ダウンロードできないじゃん！！

githubを勉強しているんです。コツコツ勉強し、今日はmainのリモートレポジトリからこちらPCへダウンロードしたいんです。
そうなんです。「クローン」をしたいんです。

しかしできない。何回やっても落ちてこない。なぜ？　初心者のおじさんは考えてもわからない。

その時のエラーメッセージが下
→「fatal: destination path '　' already exists and is not an empty directory.」

？？？　よくわからないんだけど。💦

Webで見てもよくわからないし、苦手な英語だし。一生懸命検索して回答を探す。
→「cloneするときは空っぽのフォルダにしろ！」みたいな日本語記述のサイトを見かけたので・・
えいやっと！macのフォルダを再作成。
そして「git clone Https://git@github.com(レポジトリ名）.git フォルダ名」でEnter！

ああ、できた。ダウンロード完了。勉強完了できた。

なるほどフォルダも空でないとエラー出るんだ。一つ勉強になりました。難しいです。💦
【JointJS】ElementToolsを使ってElementを操作できるようにする

以前、[【JointJS】LinkToolsを使ってLinkを操作できるようにする](https://qiita.com/acnaman/items/aa0983ce2acd2fe77e5b)という記事を書きましたが、今回はそれのElement版になります。

## ElementToosとは

LinkToolsのElement版です。
LinkToolsがLinkにツールを表示する機能だったのに対して、ElementToolsはElementにツールを表示する機能です。

## 利用可能なElementToolsの例

### `Remove`

対象のElementを削除できるボタンを追加します。

![dadlink.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129526/c254ff8e-2bae-22fc-9338-af066c220fae.gif)

### `Control`

図形を操作するためのハンドラーを追加します。操作時の挙動は`getPosition`/`setPosition`等のメソッドでカスタマイズする必要があります。

以下は`getPosition`/`setPosition`で角丸を変化させるカスタマイズを行った場合の動作になります。

![dadlink.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129526/0c6d9c45-f662-b58c-07e5-d0b9d30056ec.gif)

### `Button`

LinkToolsと同様に、カスタムのボタンを追加します。カスタムの内容を

#### コード例

```js
const button = new joint.elementTools.Button({
  markup: [
    {
      tagName: 'rect',
      selector: 'button',
      attributes: {
        width: 50,
        height: 20,
        fill: '#001DFF',
        cursor: 'pointer'
      },
    },
    {
      tagName: 'text',
      selector: 'inner-text',
      attributes: {
        fill: '#FFF',
        x: 14,
        y: 13,
        'font-size': 8,
        cursor: 'pointer'
      },
      children: [
        'ボタン'
      ]
    },
  ],
  distance: -20,
  offset: -10,  
  action: function(evt) {
    this.model.attr('body/stroke', 'red');
  }
});

```

![dadlink.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129526/a5ac45de-9e9b-413d-b5f2-ab4da2c2907b.gif)


## 注意：ToolsViewは使いまわしできない

複数のElementに対して同じElementToolsを適用したい場合、ToolsViewに設定する全てのElementToolsをElementごとに生成し直して、別々のインスタンスを割り当てる必要があります。同じインスタンスを使いまわそうとした場合、最後に追加したElementのみにElementToolsが適用される仕様になっています。

```良い例.js
// ToolsViewのインスタンスを生成する
function createToolsView() {
  const removeButton = new joint.elementTools.Remove();
  const toolsView = new joint.dia.ToolsView({
      tools: [
        removeButton,
      ]
  });
  
  return toolsView;
}

// (中略)

// ElementごとにToolsViewのインスタンスを生成しているので、両方に表示される
rect1View.addTools(createToolsView());
rect2View.addTools(createToolsView());
```

```悪い例.js
const removeButton = new joint.elementTools.Remove();
const toolsView = new joint.dia.ToolsView({
  tools: [
    removeButton,
  ]
});

// (中略)

// 同じtoolsViewインスタンスを流用しているため片方にしかボタンが表示されないrect1View.addTools(toolsView);
rect2View.addTools(toolsView);
```

## 表示制御

ElementのViewから`showTools()`, `hideTools()`メソッドを呼び出すことで、ElementToolsの表示を制御できます。
例えば、イベントと組み合わせることで「ホバー時のみにElementToolsを表示する」といった制御も可能になります。

### コード例

```js
paper.on('element:mouseover', function(elementView) {
  elementView.showTools();
})

paper.on('element:mouseout', function(elementView) {
  elementView.hideTools();
})
```

### 実行結果

![dadlink.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129526/c2cea47c-16d4-de4e-6ea4-45f38a6762da.gif)

## まとめ

今回はElementを操作させるためのElementToolsを紹介しました。基本的にはLinkToolsの使い方と変わりません。リッチな操作感が求められるUIを作成する場合は導入を検討してみても良いのではないでしょうか。

※この記事は [JointJS Advent Calendar 2023](https://qiita.com/advent-calendar/2023/jointjs) の記事です。他の記事を読む場合はカレンダーのページを参照してください。

https://qiita.com/advent-calendar/2023/jointjs
AWS Amazon Lex機能と実装

# Amazon Lexの概要

Amazon Lexは、自然言語で対話するためのサービスです。AWSのクラウド環境で機械学習を用いて開発されており、ユーザーが音声やテキストで質問や注文をしたり、問題を解決したりするために使用されます。人工知能（AI）を応用した対話型のアプリケーションを簡単に構築することができます。

# Amazon Lexの機能

1. **音声認識（ASR）**: 音声入力をテキストに変換するための高度な音声認識技術を提供します。ユーザーは音声で質問や指示を行うことができます。

2. **自然言語理解（NLU）**: ユーザーの入力を理解するための自然言語処理技術を利用します。意図（intent）やスロット（slot）といった要素を抽出し、意図に基づいた応答を行います。

3. **対話マネジメント**: ユーザーとの対話を管理し、適切な応答を生成するための機能を提供します。状態マシンを使用して対話の流れを制御し、コンテキストを保持することができます。

4. **コンソールとAPI**: Amazon Lexはコンソールから直感的に設定することができます。また、APIを使用して他のアプリケーションと統合することも可能です。

# サンプルコード

## Java

```java
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.lexmodelbuilding.LexModelBuildingClient;
import software.amazon.awssdk.services.lexmodelbuilding.model.*;

public class LexSample {
    public static void main(String[] args) {
        Region region = Region.US_EAST_1;
        LexModelBuildingClient lexClient = LexModelBuildingClient.builder()
                .region(region)
                .build();

        GetBotsResponse response = lexClient.getBots(GetBotsRequest.builder().build());
        for (BotMetadata metadata : response.bots()) {
            System.out.println("Bot Name: " + metadata.name());
            System.out.println("Bot Version: " + metadata.version());
            System.out.println("--------");
        }
    }
}
```

## Go

```go
package main

import (
	"fmt"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/lexmodelbuilding"
)

func main() {
	sess := session.Must(session.NewSession())
	lexClient := lexmodelbuilding.New(sess)

	response, err := lexClient.GetBots(&lexmodelbuilding.GetBotsInput{})
	if err != nil {
		fmt.Println("Error retrieving bots:", err)
		return
	}

	for _, bot := range response.Bots {
		fmt.Println("Bot Name:", *bot.Name)
		fmt.Println("Bot Version:", *bot.Version)
		fmt.Println("--------")
	}
}
```

## C#

```csharp
using Amazon;
using Amazon.LexModelBuildingService;
using Amazon.LexModelBuildingService.Model;
using System;

class Program
{
    static void Main(string[] args)
    {
        RegionEndpoint region = RegionEndpoint.USEast1;
        AmazonLexModelBuildingClient lexClient = new AmazonLexModelBuildingClient(region);

        GetBotsRequest request = new GetBotsRequest();
        GetBotsResponse response = lexClient.GetBotsAsync(request).Result;

        foreach (BotMetadata metadata in response.Bots)
        {
            Console.WriteLine("Bot Name: " + metadata.Name);
            Console.WriteLine("Bot Version: " + metadata.Version);
            Console.WriteLine("--------");
        }
    }
}
```

このように、Java、Go、C#のそれぞれのコードを使用して、Amazon LexのAPIを利用してボットの情報を取得するサンプルを示しました。各コードではAWS SDKを使用しているため、事前に適切なSDKのインストールと認証情報の設定が必要です。
subcommandsで作るGo製cli

## Go製cliといえば
GoでCLIを作ると言えばglagや[cobra](https://github.com/spf13/cobra)が有名かと思います。ですが今回はあえてGoogle製の`subcommands`でcliを作ってみます。


## google/subcommands

https://github.com/google/subcommands

Google謹製のライブラリということで、使ってみるしかありません。
他のcliを作るライブラリよりも極めてシンプルなのがgihubから伺えます。
今回は引数に渡されたcsvファイルの中身を標準出力として表示するといったものを作成します。(catええやん...)


## インストール
```bash
 go get github.com/google/subcommands
```

### ファイル作成
```bash
$ touch main.go
$ mkdir cmd && touch cmd/open_csv.go
```

### コマンド本体
サブコマンドの設定や、処理の本体をここに書いています。
```go:open_csv.go
package cmd

import (
	"context"
	"encoding/csv"
	"flag"
	"fmt"
	"io"
	"os"
	"strings"

	"github.com/google/subcommands"
)

type ShowCSVContentCmd struct {
	show string
}

func (*ShowCSVContentCmd) Name() string     { return "show" } // サブコマンド名指定
func (*ShowCSVContentCmd) Synopsis() string { return "show args csv content to stdout." }
func (*ShowCSVContentCmd) Usage() string {
	return `show [-capitalize] <some text>:
	Show args csv content to stdout.
`
}

func (p *ShowCSVContentCmd) SetFlags(f *flag.FlagSet) {
}

func (p *ShowCSVContentCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
	for _, arg := range f.Args() {
		file, err := os.Open(arg)
		if err != nil {
			fmt.Printf("Failed to open file: %v\n", err)
			return subcommands.ExitFailure
		}
		defer file.Close()

		reader := csv.NewReader(file)
		for {
			record, err := reader.Read()
			if err == io.EOF {
				break
			}
			if err != nil {
				fmt.Printf("Failed to read CSV record: %v\n", err)
				return subcommands.ExitFailure
			}
			fmt.Println(strings.Join(record, ","))
		}
	}
	return subcommands.ExitSuccess
}
```

main関数です。
```golang:main.go
package main

import (
	"context"
	"flag"
	"os"

	"github.com/google/subcommands"
	"github.com/shuyaeer/golang-subcommands/cmd"
)

func main() {
  subcommands.Register(subcommands.HelpCommand(), "")
  subcommands.Register(subcommands.FlagsCommand(), "")
  subcommands.Register(subcommands.CommandsCommand(), "")
  subcommands.Register(&cmd.ShowCSVContentCmd{}, "")

  flag.Parse()
  ctx := context.Background()
  os.Exit(int(subcommands.Execute(ctx)))
}
```

## 実行してみる
```bash
$ go build -o gocsvcat . # ビルド
$ ./gocsvcat help
Usage: gocsvcat <flags> <subcommand> <subcommand args>

Subcommands:
	commands         list all command names
	flags            describe all known top-level flags
	help             describe subcommands and their syntax
	show             show args csv content to stdout.

```
csvファイルを用意します。
```csv:sample.csv
 Name,Age,City
Alice,25,New York
Bob,30,Los Angeles
Charlie,35,Chicago
```

```bash
$ ./gocsvcat show ./sample.csv
Name,Age,City
Alice,25,New York
Bob,30,Los Angeles
Charlie,35,Chicago
```

良さそうです。
あとは`./gocsvcat`をPATHが通っている`/usr/local/bin`などに配置すれば、どこからでもこのコマンドが使えるようになりますね。
Figma初心者がFigmaで2024年1月のカレンダーを作ってみた

# はじめに
こんにちは。Qiita株式会社で主に[Qiita Zine](https://zine.qiita.com/)の記事ディレクションを担当している丹羽です。Qiita Advent Calendar 2023ももう折り返し。ずっと「何か書こう」と思いながら、エンジニアでもデザイナーでもないので、どんな記事にしようかと悩んでいました。

何かを作るのが好きなので、とりあえず「何かを作ろう」と思い、使うツールや作るものを考えていました。すると「そういえばFigmaをまともに触ったことがないな」と気づいたので、触ってみることに。

この記事では、Figmaほぼ初心者がどのようにFigmaを触ってみたのかと、気づいたことを書いてみます。

# カレンダーを作った
冒頭から、完成したものを見せてしまいます。こちら。最初からこのようなカレンダーを作りたいと想像していました。ちなみにこのネコのイラストは、私の実家にいる子がモデル。iPadでProcreateを使って、写真をトレーシングして描いています。

![calendar202401.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/f6a4e6ef-6da0-d4bf-bed5-b7a87ed566ed.jpeg)

※ 今回の目的は「Figmaを触り、どのようなツールかを知る」なので、デザインについては「正方形の縦・横の幅を数字で指定する」とか「幅は等間隔で」など、初歩的なことに気を付けるだけにとどめています。また操作や作成順などについて、他に正しい／便利な方法があるかと思います。

# 作り方
## フレームなど、土台づくり
ネットの記事を参考にしながら。まずはフレームを選びます。左上の「井」みたいな部分を押すと、右にサイドバーが出ます。「iPhone」「Tablet」「Desktop」などいくつかのパターンがあるので、作成するものに合うサイズを選択。私は「Desktop」から選びました。

![figma01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/727923e6-a1f7-422d-28b6-b579558892f8.jpeg)

続いては、日付や曜日を入れるための四角を設置します。右上の四角からプルダウンで「Rectangle」を選択。サイドバーで幅と高さを指定します。

![figma02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/2f22afa1-ccc5-a08c-ed5a-200e02fec6a5.jpeg)

正方形を1つ作ったら、横7列 × 縦5行にします。コピペコピペで。

![figma03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/cf11b939-4235-f24e-8386-45caa89661ce.jpeg)

## 日付を入れる
（スクショの範囲を間違えてしまいましたが、）左上の「T」を押すと、テキストを打てるようになります。カレンダー用に設けた正方形の上に「1」と書き、まずは横1列入れ、サイズ・位置を整えたら、再度コピペコピペで下の行を埋めていきます。

1桁と2桁、また10の位と20の位では位置がずれてしまったので、都度調整。

![figma04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/a98feceb-cef9-c282-0a62-7b0c1e2d33d4.jpeg)


## イラスト・背景画像を入れる
イメージは、上部バーの一番左にあるFigmaマークの、「File」＞「Place Image」から使用したい画像を選び、画面の上でクリックすると挿入されます。サイズや位置を調整して、お好きな場所に。

![figma06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/78c11264-e8e7-3226-da87-edf6fbf0ca60.jpeg)

白背景ではなんだか寂しいので、画像も入れます。先ほどイラストを入れたときと同じように、「File」＞「Place Image」で挿入。

一番上の層に来てしまい、数字も何も見えない状態に。右クリックして「Send to back」を押せば背面へ移動しますが、なんせ正方形と数字がたくさん置かれているので、最背面へ持っていくには何度も「Send to back」をしないといけない...。

左側のバーを見ていると、どうやら上から下にいくにつれて、層が下にいくようだ。左バーで、背景画像を一番下に持っていくと...

![figma07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/0549e898-0a17-fd15-9edd-fa5434e5c743.jpeg)

簡単に綺麗に最背面へ移動できました🎉　微調整を加えて完成。

![figma08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003649/ad847203-4598-555a-7c85-11d6d53a4b72.jpeg)

# Figmaほぼ初心者がFigmaを使って気づいたこと
- 操作しやすい
    - 限られた画面（モニターなし、MacBookAirを使用）でも操作しやすい
        - サイドバーでサイズや位置の指定を細かく、かつパッとできるから
    - トラックパッドのピンチアウト・ピンチインで画面の縮小・拡大できるのが、直感的だと感じた
- 画面を広く使える
    - 特に画像を挿入するときに感じた
    - 画像置き場のようなスペースが設けられていないので、PCの画面いっぱいを編集のために使える
- 最初は複雑に感じた
    - 始めて使うツールなら何にでも言えるかもしれないですが、層がどうなっているのかとか、どうしたら思い通りにオブジェクトを選択できるの（数字を編集したいのに正方形を移動させてしまったり、誤って正方形やイラストを削除してしまったり）とか

## ひとことコメント
デザインにはもともと興味があったのと、今回Figmaを触ってみて好きだなと思ったので、今後も使ってみます。
Dynatrace OperatorのOpenshift vs. Kubernetesの違い

こんにちは。[Dynatrace](https://www.dynatrace.com/)井上です。

[Dynatrace Advent Calendar](https://qiita.com/advent-calendar/2023/dynatrace)から出張してまいりました。

Dynatraceのお客様でもKubernetesではなくOpenshiftやROSAクラスターにJavaやらNode.jsやらGolang製のアプリをデプロイして監視観測しているところがかなりいらっしゃいます。

Kubernetes,Openshift,ROSAユーザーの大半のお客様が使っているのが[Dynatrace Operator](https://github.com/Dynatrace/dynatrace-operator)です。KubernetesとOpenshiftで少し違うので違いをみてみます。

[Dynatraceドキュメント](https://docs.dynatrace.com/docs/shortlink/kubernetes-monitor-hub)でも何となく分かりますが今回はYAMLファイルの違いを見ます。

KubernetesのYAML manifestは以下で紹介した手順により分解してあります。

https://qiita.com/inoue_katsumi/items/2344edb13e4b6e85ef49

https://qiita.com/inoue_katsumi/items/e4636df81b4104cef29c

Openshift の方も以下のように同じように分解して一括mvします。

```terminal
$ mkdir Dynatrace_ocp
$ curl --silent --location \
  https://github.com/Dynatrace/dynatrace-operator/releases/download/v0.14.0/openshift.yaml \
 | csplit --silent --elide-empty-files --prefix Dynatrace_ocp/Operator140_ - '/^---$/' {*} 
$ cd Dynatrace_ocp
$ for i in *; do  mv $i $(yq '.kind += "_"|.kind += .metadata.name|.kind' $i).yaml; done
```

そして比較してみます。Openshiftの方がファイル数も多いし設定項目が多いのが分かります。
`Security Context Constraint(SCC)` の違いがメインですね。

```terminal
$ diff Dynatrace_{k8s,ocp}
Only in Dynatrace_ocp: ClusterRoleBinding_dynatrace-activegate.yaml
Only in Dynatrace_ocp: ClusterRoleBinding_dynatrace-dynakube-oneagent.yaml
Only in Dynatrace_ocp: ClusterRole_dynatrace-activegate.yaml
Only in Dynatrace_ocp: ClusterRole_dynatrace-dynakube-oneagent.yaml
diff Dynatrace_k8s/ClusterRole_dynatrace-kubernetes-monitoring.yaml Dynatrace_ocp/ClusterRole_dynatrace-kubernetes-monitoring.yaml
84a85,93
>   - apiGroups:
>       - security.openshift.io
>     resourceNames:
>       - privileged
>       - nonroot-v2
>     resources:
>       - securitycontextconstraints
>     verbs:
>       - use
diff Dynatrace_k8s/ClusterRole_dynatrace-operator.yaml Dynatrace_ocp/ClusterRole_dynatrace-operator.yaml
94a95,103
>   - apiGroups:
>       - security.openshift.io
>     resourceNames:
>       - privileged
>       - nonroot-v2
>     resources:
>       - securitycontextconstraints
>     verbs:
>       - use
diff Dynatrace_k8s/ClusterRole_dynatrace-webhook.yaml Dynatrace_ocp/ClusterRole_dynatrace-webhook.yaml
87a88,96
>   - apiGroups:
>       - security.openshift.io
>     resourceNames:
>       - privileged
>       - nonroot-v2
>     resources:
>       - securitycontextconstraints
>     verbs:
>       - use
diff Dynatrace_k8s/Deployment_dynatrace-operator.yaml Dynatrace_ocp/Deployment_dynatrace-operator.yaml
48c48
<           image: docker.io/dynatrace/dynatrace-operator:v0.14.0
---
>           image: registry.connect.redhat.com/dynatrace/dynatrace-operator:v0.14.0
diff Dynatrace_k8s/Deployment_dynatrace-webhook.yaml Dynatrace_ocp/Deployment_dynatrace-webhook.yaml
85c85
<           image: docker.io/dynatrace/dynatrace-operator:v0.14.0
---
>           image: registry.connect.redhat.com/dynatrace/dynatrace-operator:v0.14.0
```

予想通りの面白みのない結果になったかもしれませんがYAMLの比較方法の参考になればさいわいです。
Kali-Linux環境構築RTAに失敗した話

※本記事は情報セキュリティに関する教育や啓蒙を目的としています。

## 前書き
Kali-Linux環境を構築するのが面倒くさい、できれば秒速でインストールしたい。
↓の記事だと10分でできるらしい。

https://otomosa.com/linux/kali-linux_on_windows/

Kali-Linuxとは：ハッキングツールやペネトレーションテスト用ツールを搭載した闇のLinux
https://ja.wikipedia.org/wiki/Kali_Linux



## 実行環境
Windows 11 Home　22H2

## wslでディストリビューション指定してインストールを試みる。
PowerShellで下記を実行
```
wsl --install -d kali-linux
```
ストップウォッチを回していたが永遠に終わらない。
インストールが進んでいる気配がない。
事前調査時、windows11環境では不要と聞いていた設定をなんとなくやってみる。


## いらないって聞いてた作業
コントロールパネル>プログラムと機能>Windowsの機能の有効化または無効化>Linux用Windowsサブシステム のチェックボックスにチェックを入れてOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634081/056e34de-a0a0-57eb-7dd3-ac016b6cd6ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634081/3233b130-aed8-4762-d336-faf9ffe1e4db.png)

ここでPC再起動するとなんか勝手にウィンドウが出て勝手に閉じる⇒WSL有効化

もう一度インストールを試みる。
```
wsl --install -d kali-linux
```
よく分からないがサクサク終わった、ヨシ


再度PC再起動、本来ならこの時点でアプリとしてKali-linuxがインストール済となる。

今回はインストール済にはなったが、エラーが出て起動できなかったため、一旦夕食を食べに外出した。
RTA失敗(開始40分くらい)

<b>エラー画面のスクショを取り忘れた(痛恨のミス)</b>

## みんな大好きリセット復旧
やけくそでKali-linuxをアンインストールする。
WSLも念のため無効化したかったが、うまくいかなかったのでそのままもう一度PCを再起動した。


## kali-linux本体を再install
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634081/ec9a7443-86e2-f54e-1859-ec4511ed4fe6.png)
再度Microsoftストアからアプリとしてkali-linuxをインストール。
(スクショだと既に取得済みになってる)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634081/df272992-27e7-20ce-2486-f0395ed4679c.png)

## とりあえず起動してみる
<b>なぜか正常に起動できてしまったのでUsernameとpasswordを適当に設定</b>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634081/7e9cbaa4-5788-2eed-f7ca-ec6c49a5302b.png)


一応アップデートしておく。
```
sudo apt update
```
※upgradeもしたいが、唐揚げ定食を食べて満腹になっちゃったのでここまで

## 動作確認
とりあえずnmapを起動してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634081/1802e465-10c1-dd89-497d-a879328dd54c.png)
動かない、てか入ってない

## オチ
<b>ちゃんとツール導入までやらないとただのLinux</b>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br>

真面目に使いたかったらkali-win-kexとか入れよう

参考:https://qiita.com/rs_tukki/items/dc38b6efed5938f82a80
※↑の記事とは別のエラーだったことしか覚えてない

EC2でも提供があるので、そっちの方が手っ取り早いかも
3Dプリンターはいいぞ

## はじめに
### 誰？
底辺ロボコニスト、プロコン幽霊部員です。
### 記事の内容
この記事より100倍くらい良い記事があったので貼っておきます
https://qiita.com/zaurusu_aya/items/b518a30bf0e309825a55
3Dプリンターの必要コストと使い方について解説します

## 私の3Dプリンター
* Ender3 pro
ロボコンとして保有している3Dプリンタです。
非常にうるさいです。

## おすすめの3Dプリンター
* Ender-3 v3 se
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/f8e79904-7bb8-058e-50f4-850d7fbffe9a.png)
コスパが高い
初心者におすすめ
https://www.amazon.co.jp/Creality-V3-SE-%E5%8D%B0%E5%88%B7%E9%80%9F%E5%BA%A6250mm-3d%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E6%9C%AC%E4%BD%93/dp/B0CBWHJSQ9

* Ender-3 v3 ke
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/e1b11263-2e29-99f9-2e42-f4f393219a02.png)
購入を検討中
かなりスペックが高い
https://www.amazon.co.jp/%E3%80%90PSE%E8%AA%8D%E8%A8%BC%EF%BC%86%E6%97%A5%E6%9C%AC%E8%AA%9EOS%E3%80%91Creality-3D%E3%83%97%E3%83%AA%E3%83%B3%E3%82%BF%E3%83%BC-Sprite%E8%BF%91%E4%BD%8D%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AB%E3%83%BC%E3%83%80%E3%83%BC-4-3%E3%82%A4%E3%83%B3%E3%83%81%E3%82%BF%E3%83%83%E3%83%81%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3-240mm%E3%81%AE%E5%8D%B0%E5%88%B7%E3%82%B5%E3%82%A4%E3%82%BA/dp/B0CJ6RT5MH?th=1

* Creality k1
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/c3d3729c-95b4-1f17-4697-5969bb103b77.png)
購入を検討
最強
https://www.amazon.co.jp/%E3%80%90PSE%E8%AA%8D%E8%A8%BC%EF%BC%86%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%80%91Creality-K1-s%C2%B2%E3%81%BE%E3%81%A7%E3%81%AE%E5%8A%A0%E9%80%9F%E5%BA%A6-%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89Klipper%E3%83%95%E3%82%A1%E3%83%BC%E3%83%A0%E3%82%A6%E3%82%A7%E3%82%A2-%E3%81%BE%E3%81%A7%E3%81%AE%E9%AB%98%E6%B8%A9%E5%8D%B0%E5%88%B7%E5%AF%BE%E5%BF%9C/dp/B0C274H84H/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1RHTSLSHWWDVG&keywords=clearity+k1&qid=1702476162&s=electronics&sprefix=clearityk1

## 導入コスト
||金額|
|:-:|:-:|
|本体|30,000|
|フィラメント|2,000|
|スクレーパー|100|
|ステック糊|100|
|合計|32,200|

switch一台分の金額で割と何でも作れるので便利です。

## 運用コスト
電気代：親金
フィラメント：1kg2000円
ノズル:10個1000円

基本的にこれ以外交換するものは無いです。
フィラメントはPLAを使いましょう！！

## 実際の使用
### 印刷データの作成
SOLIDWORKSやFusion360で3Dモデルを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/f645de1e-9c1c-bb9c-ac8b-534fca061491.png)
今回はブラックフライデーに買ったRedmiSmartBand2の充電用台座を作成します。
ネットからSTLファイルを拾って来てもいいです。
### Gcodeの作成
STLというファイル形式にして保存してUltimaker CuraでGcodeに変換して印刷します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/c0c0d308-893c-25e6-7605-3c32d1b7081b.png)
今使っている設定はPLAで
ヘッド温度：210℃
ベッド温度：70℃
### 印刷
作成したGcodeファイルをSDカードに書き込んで印刷できます。
![PXL_20231123_021924865.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/ff3b9e44-a778-463d-a490-e65dcd6104a1.jpeg)
### 完成
![PXL_20231124_111747613.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/b8d52007-368a-5398-5d9f-95c6dab8a8c3.jpeg)
![PXL_20231124_112036658.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2065017/e9000904-5f77-2a8f-872e-cc3baf4abd1e.jpeg)
失敗作1個を経て完成しました。

## おわりに
ほかの人と比べてしょぼくなって申し訳ないです。
2023アドカレ14:ノーコードツールで入力補助アプリを作った話

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/2fa95ec7-5228-a6e5-63de-6e2c749acc0d.png" width=50%>

ボタンをぽちっとやるとクリップボードに文字列がコピーされます。
名付けて、コピペロウです。

# 何の記事？
この記事は、[ぐらだけアドカレ2023](https://qiita.com/advent-calendar/2023/c9h11o2)の14日目の記事です。

内容が変動する定型文をクリップボードにコピーする入力補助アプリをCELFで作りました。
同じようなことは他のノーコードアプリやExcelでも作れると思うので、どなたかの参考になれば幸いです。

# 誰向け？
- 今日を基準に変動する日付をファイル名につけることが多い人
- CELFでどんなことができるのか興味がある人
- CELFでコピペアプリを作りたい人
- CELFではないがノーコード開発をしていて、定型文アプリを作る参考にしたい人

# あらすじ
毎日、当日の日付を付けて保存していくファイルがあるのですが、その日付を毎度手打ちしていました。yyyy.m.d形式で。ドットも命名規則にある辺りが地味に面倒くさい……。
その他にも、決まった文章＋変動文章の組み合わせでチャットに送ることが多いものがいくつかあったため、定型文の入力補助アプリを作ってみました。

# 具体的に何を使ったか
### CELF
Excelライクで使えるノーコード開発アプリです。
あくまでも"ライク"であって、Excelではないため、使いたい関数が使えない場合、結構頭の体操になります。
# 何をやったか
### 1. 今日の日付をyyyy.m.dでコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/b54adb87-55e5-201f-8559-917bcf32b0ef.png)
1. `TODAY()`で今日の日付を`B2`に表示
1. `=YEAR(B2)&"."&MONTH(B2)&"."&DAY(B2)`でyyyy.m.dの文字列にする
1. 【該当セルをコピーして貼り付け】アクションを使う。貼り付けセルは空いている場所を適当に選択
1. ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/0ead2f08-a73e-45c5-3105-b520ff64d3ee.png)

1. クリップボードにコピーできているので、該当ファイルの名称にコピペして変更する

### 2. 先月末の日付をyyyy.m.dでコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/7852b1de-828f-d5b9-a17b-a1d21147921d.png)
1. `=date(year(TODAY()),month(TODAY()),0)`で先月末の日付を`B5`に表示
1. `=YEAR(B5)&"."&MONTH(B5)&"."&DAY(B5)`でyyyy.m.dの文字列にする
### 3. 電話取次文をコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/964152/6436d0d4-b615-dad0-fc7c-a4aab42a5432.png)

テンプレートに沿って入力した後、入力されたセルを一括で選択し、日付と同様にコピーするアクションでコピーする。
コピー後、社内チャットにそのままペースト＋送信。

### 4. 上記、定型文アプリをデスクトップからワンクリックで開けるようにする
CELFヘルプページにある手順を実行し、バッチファイルを作成する。

# 結果
とても……楽です……。特に先月末の日付をめちゃくちゃ打つ、請求書の処理の時に……。
請求書の名称も地味に楽ですね。なんだかんだ、全角/半角入力を切り替えながらタイピングするのはじれったかったので……。
こういった小技アプリをちょこちょこ増やせるのはノーコードRPAのいいところなのかもしれません。（まぁ、Excelでも同じようなことはできるというか、Excelの方が楽かもなって思ったけど……）

# 応用事例
### 一通り、チャットで多い発言をボタン化しておいてもいいかも
来年Teams導入が見えているので、おそらくはチャット機能に定型文がありそうなんですが、現状をしのぐ手段として、お疲れ様です＋名前とかは需要がありそうだなと思いました。

### 日付計算系
毎週月曜日……などの日付を一覧で出せると、伝票入力の時に楽ができる気がしました。
地味に効きそう……今度作ってみます。
ほら、カレンダーを見て人間が手入力だと、先月とか来月の日付見て入力する悲しい事故とかおきるんで……。

### 電話応対フローチャート
PCを開きながら電話を受けるので、チャートボタンと連動して質問項目を入力する式のものなど作って、最終的に入力された値を加工してチャット送信できると楽かな……と想像しました。
メンテナンスコストが高くなりそうなものは作ってもなんともですが。

# できなかったこと
### カンマ付数値を文字列としてコピーする
技術的には可能な気がするのですが、うまいやり方が思いつかず。
TEXT関数が使えれば解決しそうなのですが、CELFは使えないので、どうやったものかな……と頭をひねっています。

例：　`1000`円を`1,000`という文字列としてコピーしたい
1. `=RIGHT("000000000"&B7,10)`として、左側に0を詰めた文字列を作る
1. `=LEFT(C7,1)&","&MID(C7,2,3)&","&MID(C7,5,3)&","&RIGHT(C7,3)`として、3桁毎にカンマを挟んだ文字列にする
1. **前ゼロ削除　←　できなかったので、やり方調べ中**

違うアプローチからだとできるかもしれないので、色々と調べながらやり方を模索したいと思います。
【VSCode】pythonのシンタックスハイライトが適用されなくなったとき

# 【問題】
PythonをVSCodeで書いているとき、いつものシンタックスハイライトが急に適用されなくなった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2906464/0088f315-6090-0402-b797-8b248baae1cb.png)

# 【原因】
VSCodeの配色テーマをDark(Visual Studio)にしていたこと。

# 【解決方法】
配色テーマをそれ以外のものに変える。

個人的なおすすめは「ダークモダン」。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2906464/1fb15e34-3bfb-861c-d3e7-59cb129d1909.png)
Julia いろいろ--001--

# Julia のバージョン情報

現行の Julia のバージョン情報を得るには，`versioninfo()` を使用する。

## デフォルト

```julia
versioninfo()
```

    Julia Version 1.9.4
    Commit 8e5136fa297 (2023-11-14 08:46 UTC)
    Build Info:
      Official https://julialang.org/ release
    Platform Info:
      OS: macOS (arm64-apple-darwin22.4.0)
      CPU: 8 × Apple M1
      WORD_SIZE: 64
      LIBM: libopenlibm
      LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
      Threads: 2 on 4 virtual cores


## 詳細

```julia
versioninfo(verbose=true)
```

    Julia Version 1.9.4
    Commit 8e5136fa297 (2023-11-14 08:46 UTC)
    Build Info:
      Official https://julialang.org/ release
    Platform Info:
      OS: macOS (arm64-apple-darwin22.4.0)
      uname: Darwin 23.1.0 Darwin Kernel Version 23.1.0: Mon Oct  9 21:28:12 PDT 2023; root:xnu-10002.41.9~6/RELEASE_ARM64_T8103 arm64 arm
      CPU: Apple M1: 
                  speed         user         nice          sys         idle          irq
           #1  2400 MHz       3506 s          0 s       2631 s      38155 s          0 s
           #2  2400 MHz       3354 s          0 s       2571 s      38556 s          0 s
           #3  2400 MHz       2734 s          0 s       1948 s      39903 s          0 s
           #4  2400 MHz       2415 s          0 s       1574 s      40660 s          0 s
           #5  2400 MHz       1230 s          0 s        675 s      42873 s          0 s
           #6  2400 MHz        993 s          0 s        436 s      43384 s          0 s
           #7  2400 MHz        750 s          0 s        320 s      43757 s          0 s
           #8  2400 MHz        604 s          0 s        259 s      43971 s          0 s
      Memory: 8.0 GB (35.890625 MB free)
      Uptime: 4481.0 sec
      Load Avg:  5.416015625  3.44677734375  2.25537109375
      WORD_SIZE: 64
      LIBM: libopenlibm
      LLVM: libLLVM-14.0.6 (ORCJIT, apple-m1)
      Threads: 2 on 4 virtual cores
    Environment:
      PATH = /Applications/Julia-1.9.app/Contents/Resources/julia/bin:/Users/foo/Library/jupyterlab-desktop/jlab_server/bin:/Library/Frameworks/Python.framework/Versions/3.12/bin:/Library/Frameworks/Python.framework/Versions/3.11/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Library/Frameworks/Python.framework/Versions/3.10/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/X11/bin:/Library/Apple/usr/bin:/opt/ImageMagick/bin:/Library/TeX/texbin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/node_modules/.bin:/Applications/JupyterLab.app/Contents/MacOS:/Users/foo/Library/Python/3.10
      XPC_FLAGS = 0x0
      HOME = /Users/foo
マークダウン風の記号があるとき、リストの黒丸を表示するUserScript【UserScript】

# はじめに
私は普段、次のUserCSSでインデントの入った行のリストマーカー、つまり黒丸を「Hide dot」を押さなくても消えている状態にしています。
```setting.css
.line .dot {
	display: none !important;
}
```
しかし、場合によってはマーカーを表示させたいときもあります。たしかにUserCSSと任意の記号がついたリンクを使って、マーカーを表示することもできます。

例えば、`[-]`というリンクが行頭にあるときだけ、マーカーを表示したいなら次のコードで実現できます。これでは（ついでに）行頭文字を示す`[-]`を非表示にしました。
```setting.css
.indent-mark:has(~.indent>*:first-child a[href$='/-']) {
	display: block !important;
}
.line:not(.cursor-line) .indent>*:first-child a[href$='/-'] {
	display: none;
}
```
けれど、実際に使ってみるといちいちリンクを入力するのが面倒です……。

そこで、Markdown形式の表記でリストを示す記号と空欄が行頭にあるときだけ、マーカーを表示してくれるコードを作りました。

# 使い方
使い方は、マークダウン風に「リストを示す記号("-", "+", "*" のいずれか) + 半角空欄」を普通の文として行頭に入れるだけです。すると、その行のリストマーカーを表示します。

```txt
普通の文(マーカーが表示されない)
  	- マーカーが表示される
  	  	+ インデントがたくさん入っていてもOK
* この行にはマーカーが表示されない
```
ただし、行頭にインデントが入っていない場合はリストではない扱いとしています。


# ソースコード
``` script.js
 scrapbox.Project.script = {}// グローバル汚染回避用
 
 /* --- Show list markers like Markdown --- */
 scrapbox.Project.script.displayMarkers = function() {
  	const indexes = scrapbox.Page.lines.flatMap((line, index) => {
  		return /^\s+[-+*] +/.test(line.text) ? index : [];
  	}, []);
  	if(indexes.length === 0) return;
    
  	const lines = document.querySelectorAll(".lines .line");
  	lines.forEach((line, index) => {
  		const dot = line.querySelector(".dot");
  		if(!dot) return;
  		let value = (indexes.includes(index) && !line.classList.contains("number-list")) ? "block" : "none";
  		dot.style.setProperty("display", value, "important");
  	});
 }
 
 scrapbox.on("lines:changed", () => {
 	scrapbox.Project.script.displayMarkers();
 });
```

# 参考資料
- [チェックボックスになるタグ](https://scrapbox.io/scrasobox/%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%AB%E3%81%AA%E3%82%8B%E3%82%BF%E3%82%B0)
- [行頭のドットを消すUserCSS](https://scrapbox.io/ugo/Markdown%E3%82%92Scrapbox%E8%A8%98%E6%B3%95%E3%81%AB%E7%BD%AE%E6%8F%9B%E3%81%99%E3%82%8BUserScript)
- [scrapbox.on() について](https://scrapbox.io/scrapboxlab/scrapbox.on())
- [UserScript Events について](https://scrapbox.io/shokai/UserScript_Events)
- [他のprojectに移動したらUserScriptの後始末をする（event版）](https://scrapbox.io/shokai/%E4%BB%96%E3%81%AEproject%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%97%E3%81%9F%E3%82%89UserScript%E3%81%AE%E5%BE%8C%E5%A7%8B%E6%9C%AB%E3%82%92%E3%81%99%E3%82%8B%EF%BC%88event%E7%89%88%EF%BC%89)
hazamaでDAOの投票を行う

# A.投票を行う方法

投票する人の流れは、MATICの用意->コントラクトに参加->投票の流れです。
(コントラクトがガスレスの場合には、MATICを用意する必要はありません)
また、コントラクトのルールによって、投票を行うために、事前にトークンを保有しておく必要がある可能性があります。(ルールはコントラクト作成者に聞いてください)

## A-1.MATICをログインしたアカウントに送付しておく

![スクリーンショット 2023-12-13 21.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/70491074-6d34-4334-5e27-0a20b8fbb572.png)

## A-2.コントラクトに参加する

![スクリーンショット 2023-12-13 21.17.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/97d1207d-1306-3c97-8fe4-20d9c9e8d378.png)

## A-3.投票を行う

## (参考)アカウントに保有している残高が引かれていることを確認

![スクリーンショット 2023-12-13 21.18.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/a46075be-4b8c-7564-35cc-df3756736421.png)


# B.プロポーザルを行う方法

プロポーザルは、MATICの用意->コントラクトに参加->プロポーザルの流れです。また、コントラクトのルールによっては、プロポーザルを行うことができるのは、トークンを保有している人のみである可能性があります。

## B-1.提案の作成

![スクリーンショット 2023-12-13 21.09.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/d89e0a49-5ede-e7a2-2ad5-1beabb1ee948.png)

## B-2.提案の期間を設定

![スクリーンショット 2023-12-13 21.10.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/532b80e3-0ff5-39ff-98e8-06b7f1169787.png)

## B-3.選択肢を入力

![スクリーンショット 2023-12-13 21.10.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/2aeb6bd2-e59b-46f2-01c5-7a6e106dbadc.png)

## B-4.ガス代の支払い

![スクリーンショット 2023-12-13 21.10.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/16da6adc-b162-a7ff-8940-2364a3e4d88a.png)

## B-5.完了->提案ページへ

![スクリーンショット 2023-12-13 21.11.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/fcbe1c64-10bb-b88a-c901-e6cc64e89664.png)

# C.コントラクトの作成

## C-1.VOTEを選択

![スクリーンショット 2023-12-13 21.01.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/6599e4ab-e8d0-f6c6-11e2-acb77ba5e2b5.png)

## C-2.ガバナンストークンとなるコントラクトアドレスを入力

![スクリーンショット 2023-12-13 21.21.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/d63e174a-db1b-121d-f04d-68ae38cbe790.png)

## C-3.ガス代の支払い

![スクリーンショット 2023-12-13 21.04.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43766/38e8e75d-0d5c-771d-930f-7041f6aed6e6.png)
csmap-pyでCS立体図をつくる

# TL;DR

以下のコマンドでCS立体図を作成出来ます。

```sh
pip install csmap-py # インストール
csmap dem.tif csmap.tif # 処理実行
```

あまりよくテスト出来ていないので、フィードバックお待ちしております（[Issue](https://github.com/MIERUNE/csmap-py/issues)まで)。

# CS立体図

![Screenshot 2023-12-13 at 21.57.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/b35aef2b-43be-53a1-7687-905e2ef698a6.png)

CS立体図とは、DEMをもとにした地形判読のための地形表現図法です。以下の林野庁の資料が詳しいです。

https://www.rinya.maff.go.jp/j/seibi/sagyoudo/attach/pdf/romou-12.pdf

![Screenshot 2023-12-13 at 21.59.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/2cd3fda1-953e-040b-a6b4-5b3fb25b8f37.png)

- 赤い箇所は凸地形、青い箇所は凹地形
- 傾斜率が高いと、うっすら茶色っぽい

ざっくりこのような着色をしておくことで、平面上の図面でも地形判読が容易となります。

## CS立体図の作成方法

https://github.com/waigania13/CSMapMaker

CS立体図を作成するには、オープンなものだと上記のQGISプラグインに限られていると思われます（弊社代表の作品）。一方、こちらのツールはQGISに内蔵のSAGAに依存しており、そして最近のQGISはSAGAが内蔵されなくなったという問題がありました。なので新しく作りました。

# csmap-py

https://github.com/MIERUNE/csmap-py

- シンプルな依存関係（rasterioとnumpy）
- 高速
- 並列処理
- 省メモリ

## 使い方

```sh
pip install csmap-py # インストール
csmap dem.tif csmap.tif # 処理実行
csmap dem.vrt csmap.tif # 仮想ラスターや、GDALがサポートしているラスターを読める
csmap dem.tif csmap.tif --max_workers 4 # max_workersオプションで並列処理数を設定可能
csmap dem.tif csmap.tif --gf_size 3 --gf_sigma 1.0 --curvature_size 1 # CS立体図作成にまつわるパラメータを変更できる
```

## 仕様

- 入力のDEMに対し、外縁部の一定部分（＝ガウシアンフィルタの影響範囲）はトリミングされます
- No-Dataの部分はあまり気を使っておらず、一定の計算が実行されます
- 着色はCSMapMakerを参考にしていますが、厳密な再現はしていません
- パラメータのデフォルト値はCSMapMakerに準拠しています

## ベンチマーク

- 1mDEM, 解像度17602x6794, 10個のTIFFファイルから成る仮想ラスターを処理
- Macbook Air M2

```
time csmap merged.vrt csmap.tif --max_worker 1

real	0m29.345s
user	0m27.055s
sys	0m3.457s

time csmap merged.vrt csmap.tif --max_worker 16

real	0m10.848s
user	0m43.075s
sys	0m5.517s
```

# 謝辞

本ツールは、「SAGA依存しないでNumpyで書けばいいんじゃない、しらんけど（意訳）」というわたしの雑なSlack投稿を拾ってコア部分（SAGAでやってる処理のNumpy実装）を書いてくれた@ciscornさんとのゆるいコールアンドレスポンスにより出来ています、感謝。
第一世代　耳の補修の準備

「aibo ers-11x/210で遊ぶ Advent Calendar 2023」の14日目です。

ERS-110の耳はゴム部品でプラスチック部品を支えている構造になっていたのですが、ゴム部品が加水分解で劣化してしまうらしく、中古取引されているものはほとんどが耳がない状態です。
私が購入した機体もプラスチック部品は保存してあったものの、ゴム部品はぼそぼそ・べちゃべちゃの状態でした。

そのままでは見た目もかわいそうなので、ゴム部品の再作製の準備を行おうと思います。
歯切れが悪い表現になっているのは、キャプチャー、モデリング、3Dプリンタで出力まで完走してしまうと、知財的に何らかの問題が起きることを懸念したためです。

したがって今回はキャプチャーしてモデリングの準備まで行うことにしました。

:::note
業務外の個人的な検討活動です。
:::

#### 耳のプラスチック部品の様子
表面が黒一色で反射成分も多めです。しかも小さくて薄い。
キャプチャーは難しい被写体です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/4a7c803a-b243-8e87-e605-2dc30339e29d.png)

ここではiPhone12ProのLidarアプリや、一般的なフォトグラメトリアプリを使用した場合の結果を比較してみました。

#### Scaniverse
iPhoneの有名なLidarアプリです。
パッと見た目は良さそうですが、細かく見るとエッジが崩れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/132f09e2-81cf-d9a7-d9b2-5b1207bee01f.png)
拡大してみると、ピンやくぼみの部分など細かい形状は再現できていませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/aafc6123-ffbd-2683-dd6d-c9b53f23b807.png)

#### KIRI Engine
こちらもiPhoneの有名なLidarアプリで、Object Capture技術も導入しているとのことで本命と期待していました。
しかし校正用に敷いていた格子模様の板の表面に大きな穴が開いていたり部品のエッジが壊れていたり、残念な結果でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/3d75c7b3-daa1-d815-fff1-73f4797f27d1.png)

#### Reality Capture
PCアプリでもっとも有名といっても過言ではないフォトグラメトリ用のアプリです。
上記と同じiPhone12Proを使い撮影した画像をオフライン処理しました。
被写体と技術の相性を考えると穴馬的に考えていましたが、一番良い結果となりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/42a138f3-8feb-c377-e612-f162c3b8211f.png)
位置決め用のピンや小さいへこみも大部分が再構成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/1479e3f3-d07f-0d75-4ee0-c286d078edb1.png)

#### 個人的な利用における次の作業
Reality Captureで再構成したモデルをキャリブレーションしてエクスポートしたメッシュを3Dモデリングアプリに取り込んで、支えるゴム部品を手動で作成することになります。
ただ、ここから先は作業内容の公開も含めて個人的な利用にとどめた方が良いと判断し割愛します。

#### まとめ
今回は第一世代aiboの耳を修復するため、ゴム部品の作製を準備するためのキャプチャー作業について3種類のアプリの結果を比較しました。
iphone lidarのデータを出力できないので入力画像を揃えられず、正しい比較ではないですが、使用するアプリ選定のご参考になれば幸いです。
マナビDX Questに参加して得たもの（現在進行形…）

こんにちは！
Santhoshです。


マナビDX Quest2023は、
経済産業省が実施する
デジタル推進人材育成プログラムです。

https://journal.meti.go.jp/p/28132/

今年は全国から数千人が
参加しているようです。

私も、このマナビDX Quest2023 に参加しています。

私自身、普段からDX専門家として
中小企業を訪問してDX推進を行っていますが、
マナビDX Quest2023に参加した動機は、
主に次の2点です。

##### ①他の人たちのDXの視点を知る。
##### ②DXの仲間をつくる。

### ①他の人たちのDXの視点を知る。

普段、中小企業に派遣されて
DX推進のお手伝いをしていますが、
中小企業からの要望が多いのは
以下のようなものです。

・IoTによる生産工程の見える化
・紙帳票のデジタル化
・不良品検査
など

これらについては、
私の知っている知識を活用しながら
サポートの対応をしていますが、

「世の中の他の人たちが行っているDXはどんなものか？」

というのは常々頭の中で気にしていることでした。

マナビDX Quest2023は、
経済産業省が関わっているプロジェクトでもあり、
多くの人がさまざまな業種や立場で参加しています。

このようなプロジェクトに自分も参加することで、
自分以外の人たちのDXの考え方を知ることができる
と期待をして参加をしました。

結果として、
・Questの課題の取り組みを通して、課題を作成した人たちのDXの考え方を知ることができた。
・Questの課題に対する他の人の解き方、取り組み方、考え方から、さまざまなDXの考え方をしることができた。

というのは、私にとっての１つの成果です。

### ②DXの仲間をつくる。

マナビDX Questの参加の規約上、詳しくは書けないのですが、
参加者とオンライン、オフラインでのコミュニケーションをすることができています。

普段あまりDX関係の人たちとのつながりをつくる機会がなかったため、
マナビDX Questを通して、このようなつながりを新たに構築できているのも、私にとっての成果の１つです。



このマナビDX Quest2023ですが、
現在進行中で、来年の2月下旬まで続きます。

しっかりと取り組んで、
さらに多くの成果を得たいと思います。
法人向けの保守機材を入手した

# はじめに
これは筑波NSミライラボ2023アドベントカレンダーの記事です。
おうちサーバーのメンテナンスっぽい話です。

## なんのはなし
数カ月前に、[ラックマウントのNAS](https://www.iodata.jp/lib/product/h/4560.htm)を購入しました。1Uサイズ、Windows Storage Server 2012 R2搭載、RAID5などが特徴です。HDDなし中古で2000円でした。HDDを含めて7000円くらいでNASが完成して満足していました。
1Uにしては比較的静かなので現在も運用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626599/b2bbe884-b2ba-2e49-5394-105ea9683c12.png)

## ラックマウントの夢
1Uサイズということは、ラックにマウントできる、ということです。ただし、ラックマウントレールが必要になります。残念ながら中古ではレールがついてこなかったので、購入を検討し、IO-Dataのウェブサイトを漁っていましたが、保守部品としての販売はしていないようでした。
どうしても欲しくなったので、お問い合わせフォームにお問い合わせをすることにしました。

## お問合わせフォーム
法人向けのお問い合わせフォームを探し、必要事項を入力しました。会社名のところのポップアップが個人を想定していてだいぶ良かったです。
ラックマウントレールの購入がしたい旨を記載し、送信を押しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626599/31d7ff2e-d061-aedd-57eb-88ae974b0799.png)

その後、メールの返信があり、修理用の在庫を販売できる、ということになりました。サポート担当の方に大感謝です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626599/907c964e-d954-a05b-e7f0-3da694419532.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626599/3012dfee-d288-9ee6-971a-aa64a642f417.png)

## 届いた
佐川急便の着払いで届きました。修理扱いになったらしく、診断書がついてきました。本体はこんな感じです。グリスが塗ってあってぬめぬめしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3626599/05dfe0b8-a409-f2be-8846-ed28b6c1c276.png)

## そのあと
レールは届いたものの、実はラックがありません。レールはとりあえず箱に戻して封印し、ラックを探しています。ラックサーバーはもう一台あるのですが、こちらもレールがありません。ラックマウントレールもう一式とラックを購入したら、本当のラックマウントサーバーを拝むことができます。たぶん。

## おわり
IO-Dataのサポートは優しいので、個人が法人向け機材を購入することが十分に可能です。企業も鬼ではないので、とりあえず問い合わせてみると、買えるかもしれません。
おわり。