OmniAICreator/Qiita-1.07M huggingface dataset:
【ServiceNow】あれ？なんだっけあのシステムプロパティ個人的まとめ

本記事は、Qiita ServiceNow アドベントカレンダーの参加記事2日目です。
[ServiceNowのカレンダー | Advent Calendar 2023 - Qiita](https://qiita.com/advent-calendar/2023/servicenow)


おはこんばんにちは、にぼしです。
ServiceNowにちゃんと関わるようになって2年ほどです。
運用保守案件におりまして、「これってどこで設定してるの？そもそも自分で設定変えられるんだっけ？」みたいなことがまあありまして、自分用メモみたいなところはありますが、自分的に痒い所に手が届きそうなシステムプロパティをまとめてみました。
## そもそもシステムプロパティってどのテーブルやねーん

テーブルはシステムプロパティ[sys_properties]です。
アプリケーションごとにシステムプロパティフォーム（専用ページ的なもの）から設定も可能ですが、あまり使用されないプロパティ（誰基準であまり使用されないんだろう…）は、上記テーブルからのみ使用できるようです。
お気に入りにいれておくと便利です。
一覧は下記ページを参照してください。
https://docs.servicenow.com/ja-JP/bundle/vancouver-platform-administration/page/administer/reference-pages/reference/r_AvailableSystemProperties.html
このコミュニティ投稿もめっちゃ助かりました（古いですが
https://www.servicenow.com/community/developer-forum/i-would-like-to-know-the-checking-mechanism-when-the-user-tries/m-p/2106246

## 超個人的かゆいところに手が届くシステムプロパティ
|やりたいこと|システムプロパティ名|説明|タイプ|デフォルト値|
|:----|:----|:----|:----|:----|
|ServiceNowに添付できるファイルの最大サイズを変えたい|com.glide.attachment.max_size|最大添付ファイルサイズをMB単位で設定可能。このフィールドの値が空の場合、最大 1 KBまでの添付ファイルを使用可能|整数|1024|
|ServiceNowに添付できるファイルの拡張子を変更したい|glide.attachment.extensions|添付可能なファイル拡張子のリスト (カンマ区切り)。値を指定しない場合は、制限なしになる。|文字列|なし|
|バナー画像を押した時の遷移先を変えたい|glide.banner.image.url|バナー画像のクリック時に使用する URL。|文字列|home.do|
|文字数カウント(カウンタ)表示させたい。何文字入力したのか表示させたい|glide.ui.textarea.character_counter|[true] にすることでジャーナルフィールドや複数行テキストのフィールドに使用可能な文字数が表示可能。|true/false|false|
|Next ExperienceUIより前の、昔のUIを懐かしみたい|glide.ui.polaris.experience|Next Experience ユーザーインターフェイス、ランディングページ、および統一ナビゲーションを有効にする。このプロパティは、Next Experience コンポーネントなど、ワークスペース内のものには影響しない。|true/false|新しいインスタンスの場合は true、Tokyo 以前からのアップグレードの場合は falseなのでfalseにすると懐かしめる。|
|ナレッジ検索に必要な最小文字数をかえたい|glide.knowman.search_character_limit|ナレッジ検索に必要な最小文字数。検索用語がこの文字数よりも少ない場合は、結果を返さない。|整数|3|
|xlsでもファイルエクスポートしたい|glide.legacy.excel.export|Excel ファイルにエクスポートするときに、XLS 形式へのエクスポートを有効 (true) または無効 (false) にする。デフォルトでは、XLSX エクスポートのみが有効。このプロパティは、Excel Web Service には影響しない。このプロパティを [true] に設定すると、ユーザーは Easy Import テンプレート形式として XLS または XLSX を選択することもできるようになる。|true/false|false|
|エクセルエクスポートのセルの最大値を変えたい|glide.excel.max_cells|Excel エクスポートのセルの最大数を設定する。|整数|500000|
|CSVエクスポート時に表示値でなく生の値が欲しい|glide.export.csv.raw.value|[true] の場合は、CSV にエクスポートすると、表示値ではなく生のデータベース値がエクスポートされる。false の場合は、表示値がエクスポートされる。|true/false|false|
|応答時間インジケーター消してやる！|glide.ui.response_time|ページ下部に応答時間インジケーターを表示する。Falseにすると非表示になる。|true/false|true|
|ナレッジベースにユーザーの設定言語以外の記事も表示させるんじゃ！|glide.knowman.enable_multi_language_search|デフォルトはユーザーが設定した言語の記事しか表示されないが、trueにすることでユーザーが設定した言語以外の記事も表示させることができる。|true/false　　　　　　　　　　　　　|false|　　　　　　　　　　　　　　　　


お勧めのシステムプロパティがあったら教えてください🐟💨
Power Automate Desktopで一部同じファイル名毎に仕分けする

## Power Automate DesktopでExcelファイルを仕分けする様子
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">PADを使い、一部同じファイル名毎にExcelファイルを仕分けしました！会社名毎にフォルダが自動作成できてスッキリしました！<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/%E6%A5%AD%E5%8B%99%E5%8A%B9%E7%8E%87%E5%8C%96?src=hash&amp;ref_src=twsrc%5Etfw">#業務効率化</a> <a href="https://twitter.com/hashtag/PowerAutomateDesktop?src=hash&amp;ref_src=twsrc%5Etfw">#PowerAutomateDesktop</a> <a href="https://twitter.com/hashtag/%E8%87%AA%E5%8B%95%E5%8C%96?src=hash&amp;ref_src=twsrc%5Etfw">#自動化</a> <a href="https://twitter.com/hashtag/RPA?src=hash&amp;ref_src=twsrc%5Etfw">#RPA</a> <a href="https://t.co/4RId24THk7">pic.twitter.com/4RId24THk7</a></p>&mdash; 宮部光博 (@MitsuhiroM82423) <a href="https://twitter.com/MitsuhiroM82423/status/1727968504996151502?ref_src=twsrc%5Etfw">November 24, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

みなさん、こんにちは。
紙、印鑑、手作業に埋もれて業務をしている昭和男子の会社員です。

毎月、**請求書を大量に発行**し、メール送信している業務を行っています。
請求書は、自動でExcelファイルが作成されるシステムを使用していますが、**請求書が複数**ある取引先も多くあり、メール添付を間違えないように取引先ごとに**Excelファイルを仕分け**しています。
この作業をPowerAutomateDesktopで**仕分け作業の自動化**をしてみたいと思います。
## 使用するもの
・Power Automate Desktop
・Excel
## Power Automate Desktopの設定
![2023-11-24 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288463/7531720e-b552-0ea9-c3d8-cee84b0bd24c.png)

**フローのソースコード**
```ruby:Excelの一部同じファイル名毎に仕分けする
Folder.GetFiles Folder: $'''\\\\mvssmain\\共有\\05_商品\\専用\\11_契約関連\\02_リベート契約\\2023年度\\割り戻し計算確認書自動作成用\\メール送信用フォルダ作成''' FileFilter: $'''*''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
LOOP FOREACH CurrentItem IN Files
    SET NewVar TO CurrentItem.Name
    Text.CropText.CropTextBetweenFlags Text: NewVar FromFlag: $'''_''' ToFlag: $'''.xlsx''' IgnoreCase: False CroppedText=> CroppedText IsFlagFound=> IsFlagFound
    IF (Folder.IfFolderExists.DoesNotExist Path: $'''\\\\mvssmain\\共有\\05_商品\\専用\\11_契約関連\\02_リベート契約\\2023年度\\割り戻し計算確認書自動作成用\\メール送信用フォルダ作成\\%CroppedText%''') THEN
        Folder.Create FolderPath: $'''\\\\mvssmain\\共有\\05_商品\\専用\\11_契約関連\\02_リベート契約\\2023年度\\割り戻し計算確認書自動作成用\\メール送信用フォルダ作成''' FolderName: CroppedText Folder=> NewFolder
    END
    File.Move Files: CurrentItem Destination: $'''\\\\mvssmain\\共有\\05_商品\\専用\\11_契約関連\\02_リベート契約\\2023年度\\割り戻し計算確認書自動作成用\\メール送信用フォルダ作成\\%CroppedText%''' IfFileExists: File.IfExists.DoNothing MovedFiles=> MovedFiles
END
```
## メール送信自動化にむけての一歩！
**メールの自動送信**をしたいのですが、**添付ファイルが複数**あると作るの難しそう～と思い、フォルダ毎にまとめることにしました。
自動メール送信は、これから作成ですが、できるまでの間、**手作業で送信**するにしてもフォルダ毎にきれいにまとまっていれば、**添付間違いも発生しにくい**ので良いと思います。
**ファイル名で仕分けできるフロー**なので、いろいろと応用できると思います。ぜひ、使ってみてくださ～い:ok_hand:
社畜エンジニアがBronze DBA Oracle DBを1ヶ月で取得した話


# はじめ　:pencil2:
本記事について、Bronze DBA Oracle Database Fundamentalsを1ヶ月で取得した記事になります。
※資格取得が目的であり実務的にはあまり不向きです


### 結論から　:bulb:	
記者は、Oracle Database の「Bronze」は暗記で合格できました。
問題によっては少し考ることはありますが、大半は暗記ゲームです。
Server資格やNW資格と違いあまり参考情報をネット上では少なかったです。
暗記系が苦手は人はきついかも....　:sob:	


とりあえず勉強方法及び実施したことは下記になります
・[オラクルマスター教科書 Bronze DBA Oracle Database Fundamentals　※通称黒本](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E6%95%99%E7%A7%91%E6%9B%B8-Bronze-Oracle-Database-Fundamentals/dp/4798166367)
・[PingT(WEB問題サイト)](https://ping-t.com)をひたすらやる
※基本的には上記のこれだけしかしていなくて、たまにPing-Tの合格体験談を見ていました。


### ほんで君だれすか？　:boy_tone1:
関西の大学21卒の文系であり、未経験でインフラ会社に就職した新参者の社畜エンジニアです。
大学卒業前はIT関連は未知の世界くらいわけ訳が分からなかった。
タイピングはデスノートのLなみに遅い。※1分間ではかったとき20文字だったかな？
なぜ意味がないWord2013　Excel2013取得した。。。
なぜかクラウドだけ触ったことあるが、NWやserverってなに？ってレベル。（プログラミング不可）

# ①勉強方法　:book:
使用サイト及び参考書については以下の通り。
・[オラクルマスター教科書 Bronze DBA Oracle Database Fundamentals](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E6%95%99%E7%A7%91%E6%9B%B8-Bronze-Oracle-Database-Fundamentals/dp/4798166367)
・[PingT(WEB問題サイト)](https://ping-t.com)


一つ目のLinux資格のLPICでも使用される参考書で、いわゆる「<font color="red">**黒本**</font>」です。
この参考書は細かい部分が明記されいるので、とても勉強にります。
基本わからない部分や意味不明な部分があればググるか無理やり暗記するかしてました。
(<font color="red">**記者の場合は無理やり単語を付け加えました**</font>)
またSQLも覚える必要があるので、途中頭が混乱しますが頑張って覚えましょう。
※ほかにもDB系を勉強するのであれば必須になります。

二つ目のPing-Tです。
これはネット上で有料で提供されている<font color="red">**WEB問題集**</font>です。
このサイトを使用しなければ合格できなかったですし、とりあえずこれ使っとけば何とかなるスタイルで問題ないくらいです。（笑）
記者の場合は、絶対に試験落ちたくなったので、Ping-Tのレベルを半分くらいまで上げて試験に挑みました。
合格体験談をみれば、あまりレベルを気にしてない人の方が多そうに見えました。

# ②実際の試験について　:book:
試験後の感想としては、意外と黒本及びPing-Tに近い問題にが出題されているように感じた。
だが、たまに変に難しい日本語が出てくる時があり、CiscoのNW資格試験の問題に似ていたように思う。
（あそこまでひどくはない）
また、内容としても、全体的に広く出題されましたが、そこまで詳細についての問題はあまり少なかったようにも感じます。
※ひっかけ問題や少し深堀した問題等
上記のようなことを感じつつ、試験終了後にPASSが表示され、無事合格できました。

# さいご　:pencil2:
最後に、Oracle Databaseの資格は暗記で十分合格できると思います。
ただ、暗記したところで、実務的な部分は正直全然ですので、プラスαで実際にDBを構築した方がより良いと思います。
※取得が目的であれば、この方法でよいかも。
この記事を見ている人は恐らく今から試験を受けるか、どんな資格なのかを調べている人だと思います。
なので、今後資格を受験する方はや勉強しようと考えている方がいれば様々な記事をみて参考にしてみたください。
闘魂Elixir ── AtCoder Beginner Contest 330のB問題をElixirで楽しむ

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>

<b><font color="red">$\huge{闘魂とは己に打ち克つこと。}$</font></b>
<b><font color="red">$\huge{そして闘いを通じて己の魂を磨いていく}$</font></b>
<b><font color="red">$\huge{ことだと思います}$</font></b>


https://qiita.com/advent-calendar/2023/elixir


# はじめに

[Elixir](https://elixir-lang.org/)で、[トヨタシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 330)](https://atcoder.jp/contests/abc330)の問題を解いてみます。

https://atcoder.jp/contests/abc330

[AtCoder](https://atcoder.jp/home)とは、世界最高峰の競技プログラミングサイトです。

[Elixir](https://elixir-lang.org/)で解く際には、私が書いた「[AtCoderをElixirでやってみる](https://zenn.dev/torifukukaiou/articles/ac84c87736ceebf4da01)」という記事がとても参考になるとおもいます。自画自賛です。

# What is [Elixir](https://elixir-lang.org/) ?

[Elixir](https://elixir-lang.org/)という素敵なプログラミング言語があるのですね。
その素敵具合は「[Elixir Saves Pinterest $2 Million a Year In Server Costs](https://paraxial.io/blog/elixir-savings)」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 **$2 Million/年の節約ですってよ！、奥さん。**

https://paraxial.io/blog/elixir-savings

# [B - Minimize Abs 1](https://atcoder.jp/contests/abc330/tasks/abc330_b)問題

今回は、[B - Minimize Abs 1](https://atcoder.jp/contests/abc330/tasks/abc330_b)を解いてみます。
問題はリンク先をご参照ください。

## 私の答え

私の答えです。
折りたたんでおきます。
▶を押して開いてください。

---

<details><summary>私の答え</summary>

```elixir
defmodule Main do
  def main do
    [_n, l, r] =
      IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    list = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)

    solve(list, l, r)
    |> IO.puts()
  end
  
  def solve(list, l, r) do
    list
    |> Enum.map(fn a -> do_solve(a, l, r) end)
    |> Enum.join(" ")
  end
  
  defp do_solve(a, l, _r) when a <= l, do: l
  defp do_solve(a, _l, r) when a >= r, do: r
  defp do_solve(a, _l, _r) , do: a
end
```

</details>


# さいごに

[トヨタシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 330)](https://atcoder.jp/contests/abc330)のB問題を解いてみました。
[AtCoder](https://atcoder.jp/home)は己との闘い、つまり闘魂です。

人類は不老不死の霊薬を意味する素敵なプログラミング言語[Elixir](https://elixir-lang.org/)を手に入れました。並行処理を他のプログラミング言語よりも比較的容易に書くことができます。それはきっとコンピュータ資源を有効活用できることにつながるでしょう。巡り巡って世界平和に貢献できることでしょう。

さあ、そこのあなたも[Elixir](https://elixir-lang.org/)の世界へようこそ。
_手始めに[エリクサーチ](https://elixir-lang.info/)なんていかがでしょうか。私のオススメです。_

---

**闘魂**とは、  **「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」** との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
**アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。**

---

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>
<b><font color="red">$\huge{１、２、３ ぁっダァー！}$</font></b>
【JavaScript】文字列のバイト数を取得する方法

以下のように記述することで文字列のバイト数を取得できます。

```ts
function getStringByteCount(str: string) {
  return new Blob([str]).size
}
```

https://developer.mozilla.org/ja/docs/Web/API/Blob

https://developer.mozilla.org/ja/docs/Web/API/Blob/size
闘魂Elixir ── AtCoder Beginner Contest 330のA問題をElixirで楽しむ

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>

<b><font color="red">$\huge{闘魂とは己に打ち克つこと。}$</font></b>
<b><font color="red">$\huge{そして闘いを通じて己の魂を磨いていく}$</font></b>
<b><font color="red">$\huge{ことだと思います}$</font></b>


https://qiita.com/advent-calendar/2023/elixir


# はじめに

[Elixir](https://elixir-lang.org/)で、[トヨタシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 330)](https://atcoder.jp/contests/abc330)の問題を解いてみます。

https://atcoder.jp/contests/abc330

[AtCoder](https://atcoder.jp/home)とは、世界最高峰の競技プログラミングサイトです。

[Elixir](https://elixir-lang.org/)で解く際には、私が書いた「[AtCoderをElixirでやってみる](https://zenn.dev/torifukukaiou/articles/ac84c87736ceebf4da01)」という記事がとても参考になるとおもいます。自画自賛です。

# What is [Elixir](https://elixir-lang.org/) ?

[Elixir](https://elixir-lang.org/)という素敵なプログラミング言語があるのですね。
その素敵具合は「[Elixir Saves Pinterest $2 Million a Year In Server Costs](https://paraxial.io/blog/elixir-savings)」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 **$2 Million/年の節約ですってよ！、奥さん。**

https://paraxial.io/blog/elixir-savings

# [A - Counting Passes](https://atcoder.jp/contests/abc330/tasks/abc330_a)問題

今回は、[A - Counting Passes](https://atcoder.jp/contests/abc330/tasks/abc330_a)を解いてみます。
問題はリンク先をご参照ください。

## 私の答え

私の答えです。
折りたたんでおきます。
▶を押して開いてください。

---

<details><summary>私の答え</summary>

```elixir
defmodule Main do
  def main do
    [_n, l] =
      IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
      
    list = IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)

    solve(list, l)
    |> IO.puts()
  end
  
  def solve(list, l) do
    list
    |> Enum.filter(& &1 >= l)
    |> Enum.count()
  end
end
```

</details>


# さいごに

[トヨタシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 330)](https://atcoder.jp/contests/abc330)のA問題を解いてみました。
[AtCoder](https://atcoder.jp/home)は己との闘い、つまり闘魂です。

人類は不老不死の霊薬を意味する素敵なプログラミング言語[Elixir](https://elixir-lang.org/)を手に入れました。並行処理を他のプログラミング言語よりも比較的容易に書くことができます。それはきっとコンピュータ資源を有効活用できることにつながるでしょう。巡り巡って世界平和に貢献できることでしょう。

さあ、そこのあなたも[Elixir](https://elixir-lang.org/)の世界へようこそ。
_手始めに[エリクサーチ](https://elixir-lang.info/)なんていかがでしょうか。私のオススメです。_

---

**闘魂**とは、  **「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」** との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
**アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。**

---

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>
<b><font color="red">$\huge{１、２、３ ぁっダァー！}$</font></b>
娘のために「２歳 ！」の指練習ができるアプリを作ってみた #機械学習 #Webアプリ

## 2歳の娘、「にさい！:v:」の練習してます
子どもを連れていると、たまにマダムに話しかけられます
**「あらぁ～、お嬢ちゃん、いくつ～？」**
人見知りの娘は黙って私の後ろに隠れます。

ただ、おうちに帰ってきて再度「何歳？」ときくと
「にさい！」とポーズ付きで答えてくれます。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569867/aa4e4841-2446-194c-35d5-74120510b07e.jpeg" width=50%>
　ん？　お、もう一回やってみよ？


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569867/3e0ea7bc-92e8-68a1-44ac-d31ac470b8b9.jpeg" width=50%>　んん？うーーん

**惜しい！！** （でもかわいい！）

**よっしゃ、母ちゃんが:v:を練習できるアプリを作ったろう！**

## 作ったものがこちら（動画）
**アプリ名「自分でできるもん！」**  (最近の娘の口癖）
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">2歳✌️！の練習用アプリ。<br>精度は微妙なんですが、、<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://t.co/Uy7W8kgHzI">pic.twitter.com/Uy7W8kgHzI</a></p>&mdash; そってぃ (@sotan115) <a href="https://twitter.com/sotan115/status/1729147712296407489?ref_src=twsrc%5Etfw">November 27, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

※娘が使った動画を撮りたかったのですが、
絶賛イヤイヤ期のため、お願いするのは無理でした・・・

### 使い方
① おしえる！ボタンを押す。
② カメラが起動する。（学習モデルの読み込みに時間がかかるためしばし待機）
③ 指をカメラにうつすと、カメラ上部の吹き出しに検出結果が出てくる。
④ 「2歳:v:」ができたら上手だね！とマダムがほめてくれる。


## アプリはこちらから試せます
https://6564a35609319d4fa840af59--legendary-salmiakki-2904eb.netlify.app/

※今回作ったアプリは **「2歳」** 用なので、他の年齢で使用する場合は
アプリの改修が必要になります。

### 使ったもの
* CodePen
* Bootstrap
* Teachable Machine
* ml5.js
* anime.js
--以下使用言語--
* HTML
* CSS
* JavaScript

### コード
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="BaMVvNK" data-user="sotan115" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/sotan115/pen/BaMVvNK">
  [</a> by sotan115 (<a href="https://codepen.io/sotan115">@sotan115</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

### 機械学習について
Teachable Machineの画像プロジェクトで指の本数の学習モデルを作りました。
大体100～200枚くらいのサンプルを取得。
背景などによって、誤差が出てしまうので精度は微妙な結果に。
今回はml5.jsのImageClassifierとの連携になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3569867/310687b0-2f07-4e41-550e-9c0f29ba16b9.png)


※こちらもイヤイヤさんにお願いするのは無理ゲーなので自分の指で撮影

### 他、使用技術の補足

* Bootstrapはボタンの見た目をおしゃれするのに使用しました。
* anime.jsはタイトル部分に使用しました。これもおしゃれ目的。

## 先生・・星を出したいんです・・

「2歳:v:！」が出来たら、星:star2:とか花:cherry_blossom:とかが飛び出てくるエフェクトを入れたかったです。
小さな子どもでも、「出来た！」感が分かるように・・
色々なライブラリなど調べましたが、理解不足スキル不足でした。
**母ちゃん悔しいよ・・。**

## さいごに
今回も学びたての機械学習でWebアプリ作ってみました。
TeachableMachine便利すぎる。初心者でも簡単に導入できるの良いですね。


最近、ちょっとずつ「:v:」に近づいている娘。
成長が嬉しい反面、寂しさを感じちゃう親心・・。
ちょっと大きくなった時、こんなアプリ作ってたんだよって教えてみたいです。
[メモ]Ubuntu22.04へのCusorインストール方法

## はじめに
友人におすすめされたので今流行り？のCursorを入れてみた。
困ったのでメモを残す

## Cursorとは
AIを利用したエディターらしい

## インストール手順
1. https://cursor.sh/ でダウンロードする。
1. AppImageファイルがダウンロードされるので、`chmod a+x ./〇〇.AppImage`　で実行権限を付与する。
1. CursorではFUSEが必要なので、```sudo add-apt-repository universe
sudo apt install libfuse2```でレポジトリ追加アンドFUSEをインストールする。
1. `./〇〇.AppImage`でAppImageを実行
1. 完了
Unity ECS(DOTS)を使って音ゲーのシステムを作って公開した話

# はじめに
背景なので飛ばしてもらって構いません。

作るに至った経緯としては今作っている音ゲーの問題点として音ゲー中に動的に譜面をロードするのですがその際に致命的なスパイクが発生しプレイに大きな支障がでます。
これを解決するためにEntityComponentSystemに目を付けて作成しました。
これが今作っている音ゲーです。
https://ddrive-develop.fanbox.cc/posts/6451393

そしてせっかく作るからには公開してしまおうと考えて今に至ります。

# Github
作ったものはここで公開しています。
[EntitiesRhythmGameSystem](https://github.com/Blood421/EntitiesRhythmGameSystem)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281232/7b7ec0f6-dd9a-3836-ad0f-b57dd149b644.png)

動作動画は[こちら](https://x.com/bloody_sweets/status/1729149852620292410?s=20)

# 環境

## 制作環境
- Windows10
- Unity 2022.3.7f1

## 必須ライブラリ

以下ライブラリに依存しているため使用時は入れてください。

- [UniRx](https://assetstore.unity.com/packages/tools/integration/unirx-reactive-extensions-for-unity-17276?locale=ja-JP)
- [UniTask](https://github.com/Cysharp/UniTask)
- [Entities 1.0.16](https://docs.unity3d.com/Packages/com.unity.entities@1.0/manual/index.html)
- [Entities Graphics 1.0.16](https://docs.unity3d.com/Packages/com.unity.entities.graphics@1.0/manual/index.html)
- [Input System](https://docs.unity3d.com/Packages/com.unity.inputsystem@1.7/manual/index.html)

# 準備
1. Githubからunitypackageをダウンロード後上記ライブラリを導入後にインポート
2. GeneratorのDJBM(独自形式の譜面ファイル)Pathをフルパスに変更
3. 再生

# 仕様
ざっくりシステムの流れはこうなっています。
Monoは通常のUnity側,ECSはEntities側としています。
詳しいドキュメントはGithubのDocumentsフォルダ内にあるhtmlを見てください。
![音ゲーざっくり.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281232/fd916ea9-1de5-47d8-7a11-993d61fe4243.png)

## 音ゲー

レーンは2レーン(変更可)
判定はMiss,Good,Perfectの三種類(変更可)
変更する場合はGameSettings.csを変更しプログラムの修正をしてください。

ノーツはシングルノーツとロングノーツのみ
ロングノーツは終点判定アリ

## 入力
DFJKキーがそれぞれ左から1,2,3,4レーンで使えます。
押し入力と離し入力を拾っています。
オート設定アリ

## 譜面読み込み
現在は独自形式の譜面を読み込んでいます。そのまま使う人はサンプルを真似して使ってください。
記述方法はサンプルファイルにあります。

# 最後に
初めてECSで作ったシステムのため拙い部分はあると思いますが作ることができてよかったです。
何か質問等があれば気軽にどうぞ！
VSCodeでCSVを編集してみた。

# VSCodeでCSVを編集
CSV形式のデータをスプレッドシートみたいな形で編集したい、しかもそれをテキストエディタで操作したいという衝動に駆られ、今回は以下の拡張機能をVSCodeに入れてみた。（余談だが色々調べる中で、約1年前にatomの開発が終了しているのを今更知った。プラグインをインストールしようと思ったらもうできなくなってた笑）
* Edit CSV
* Rainbow CSV
# Edit CSV
導入方法は、VSCodeを開いて左側のツールバーから拡張機能を選択→edit csvと検索し以下の拡張機能をインストール。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/0d9fed9c-ff3f-4a17-9d61-0d63d8aa0bd7.png)

手元にあった気象庁ホームページからダウンロードした草津の積雪のデータで、使用してみたいと思う。まずVSCodeでCSVを開いてみると以下のように右上にEdit csvとあるのでクリックする。

![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/ab17e6c6-b587-4220-0aae-23da7271cd5c.png)

すると、以下のようにスプレッドシート形式で編集が可能となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/add42c99-6b8d-bb99-acd5-3c6f8202a291.png)

また、左上にある　＞　をクリックすると、選択したセルの数や数値の合計などを計算する機能もある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/16607a97-178b-deb7-7952-26608993ae39.png)

**できること**
*　行や列の追加、削除
*　範囲を選択して同じシートの中でのコピーアンドペースト
*　範囲を選択して別のシートからのコピーアンドペースト
*　一番上の行をヘッダーとして表示
*　列を選択して昇順、降順でソート（他の行も連動して入れ替わる）
*　変更内容をファイルへ反映。（反映するだけで保存しないも可）
*　セルの個数や数値の合計の計算
等々

**できなかったこと**
*　特定の列のみを選択して昇順、降順でソート
*　フィルター機能（列の中で特定の文字列を含むものなどを抽出）

# Rainbow CSV
同様に以下のRainbow CSVをインストールしてみる。この拡張機能はRBQLというSQLに似たクエリを使用してCSVを操作できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/a3efcdcb-e19d-08c4-db7c-334345a193f2.png)

https://rbql.org/

この拡張機能をインストールすると以下のようにCSVファイルを開いたときに左下にQueryという文字が表示されるので、これをクリックしてクエリを入力するコンソールを開くことができる。

![名称未設定2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/ebaa52ab-eb29-032f-5e5c-4a9981312399.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/a316c00e-00e6-e83b-eb16-d1e084cb7c58.png)

今回は以下のように、1990年2月および3月のデータを取得するクエリを入力して実行してみる。
```
SELECT * WHERE like(a1,'1990/2/%') || like(a1,'1990/3/%')
```
どうやらうまく取得できているようだ。
このようにクエリを組み合わせて使用することにより上述のEdit CSVで対応できなかったフィルター機能を補完することが可能といえる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2449886/016fd4a6-990d-b1df-f142-36e43f46ff23.png)


以上、二種類のCSV編集用のVSCode拡張機能を使用してみた。現状、このような拡張機能は種類が多くないが、これら二つを組み合わせて使用することにより、エクセル等で可能な操作のある程度は扱えるのではなかろうか。
どれを使う？ 平均値/中央値/最頻値

# はじめに
毎週1本様々な技術に関する記事を投稿しています。
もし興味のある方は下のリンクから他の記事も見ていただければ幸いです。
 [@7_inai_](https://qiita.com/7_inai_)

# 平均値/中央値/最頻値
統計学では、データを要約するときの代表的な指標として「平均値」「中央値」「最頻値」という3つの値があります。
最もよく使用される値が平均値ですが、中央値、最頻値との違いはなんでしょうか？
これら3つの値の特徴と使用方法の違いについて解説します。

### ■平均値（Mean）
`平均値は、データセットの値の合計をデータの数で割った値`です。
平均値はデータ全体の中心的な傾向を示す指標として利用されます。
[例]
データセット：10,20,30,40,50,50,60,60,60
平均値：合計値/データの数 ->　380/9 = 42.2

### ■中央値（Median）
`中央値は、データセットを小さい順に並べた際に真ん中に位置する値`です。
データ数が奇数の場合は、中央にある値が中央値になります。偶数の場合は、中央に近い2つの値の平均が中央値となります。中央値は外れ値の影響を受けにくいため、データの中心的な傾向を示す際に有用です。
[例]
データセット：10,20,30,40,50,50,60,60,60
中央値：50（9個あるデータセットの内、5番目にあるデータ）

### ■最頻値（Mode）
`最頻値は、データセット内で最も頻繁に現れる値`です。データの中で最も多く出現する値が最頻値となります。最頻値は、データセット内の特定の傾向や傾向の強さを把握するための重要な指標です
[例]
データセット：10,20,30,40,50,50,60,60,60
最頻値：60（60が3回で最多）

# それぞれの使い所

### ■平均値
データの __全体的な傾向を把握__ するのに有用です。そのデータセットの典型的な値を知ることができますが、__外れ値(極端に大小に偏った値)の値を受けやすい__ という欠点があります。

### ■中央値
外れ値の影響を受けづらいため、__データに外れ値が含まれている場合やデータが歪んでいる場合に最適__ です。

### ■最頻値
データセット内で最も頻繁に現れる値を知ることができます。そのため、アンケートの回答の集計等に有用です。また、__データが複数のピークを持っている場合にも、それぞれのピークの位置を把握__ するために最頻値を利用することができます。

# 終わりに
同じデータセットでも、どの代表値を使用するかでデータから得た結論が変わってきます。そのため、これらの指標を適切に選択し、データの特性や解析の目的に応じて、より正確な洞察を得ることが非常に重要です。

最後までお付き合いくださりありがとうございました。
超欲張りな(そして挫折必至な)スマホアプリ開発

## Android iOSを同時進行でマスターしたい
今までスマホアプリ開発はやってこなかった筆者でしたが、この度スマホアプリの開発を行うことになりました。開発と言ってもスクラムのプロダクトオーナーとしての立場で、プログラムを直接つくるわけではありません。ただ、作った中身がわかるように、スマホアプリについて学ぼうと思ったのがきっかけです。
Andorid(Andorid Studio:Kotlin)、iOS(Xcode:Swift)
の環境はすでにあり、そこでイチから学んでいこうと思っています。
## どうせならFlutterもやってやれ
個人的興味もあり、併せてFlutterにもチャレンジしてみようと開発環境まで作りました。
## やってきたことを記録に残す
ただ学習してもフィードバックできなければ意味はないですので、何らかの記録に残したいと思っています。例えばブログやnoteでもいいですし、Qiitaでもいいかもしれない。そのなかでQiitaは有力な候補なので今後も活用したい。
## You Tubeの動画で見直すのもありだな
ものを覚えるには、他人に教えるのが一番だというのがあります。しかし、教える相手がいません。なので、You Tubeで動画として残そうと考えました。しかし、顔出しはちょっとというのがあってさてどうしたものかと思ったところ・・・
## ゆっくり霊夢です
**ゆっくり霊夢です、ゆっくり魔理沙だぜ**で有名なゆっくり動画というのを見つけました。これでシナリオ作って、AI音声に解説させるといいんじゃないかと思いました。ついでにゆっくり動画の勉強もしてやる。ただ、霊夢・魔理沙はライセンス料がかかるし、You Tube見るといたるところでずんだもんを見るので、[COEIROINK]https://coeiroink.com/ のキャラクターを使わせていただこうと思います。
## 台本作るのは
一番難解だったのが台本作りですがここはChatGPTにお任せです。指示書を作って台本を作ってと頼めば、一時間考えても全然思い浮かばなかった会話が数秒で出てきます。そんな感じで出来上がったのがこちらです。
<iframe width="560" height="315" src="https://www.youtube.com/embed/ybp2G9OlrgM?si=RjIa5r2WYA0Oqa0s" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
Andorid StudioとXcodeは仕事でやるので続くでしょうが、FlutterとYou Tube動画は手間が合うかわからないですが、やれるところまでやってみようと思います。
Pandasのread_csv()で小数点がつく要因と対応策

# はじめに
本記事では、Pandasライブラリの関数`read_csv()`で数値データを読み込んだ時、「.0」のように少数点がついてしまう要因とその対応策について記載します。

# 要因について
数値と空を含むデータを読み込んだ時、発生します。

## サンプルデータ
| No | 名前 | 都道府県 | 注文ID |
| ---- | ---- | ---- | ---- |
| 1 | 名前1 | 埼玉県 | |
| 2 | 名前2 | 栃木県 | 3002 |
| 3 | 名前3 | 岡山県 | 7601 |
| 4 | 名前4 | 大阪府 | |
| 5 | 名前5 | 富山県 | 3507 |

## read_csv()実行後のデータ
| No | 名前 | 都道府県 | 注文ID |
| ---- | ---- | ---- | ---- |
| 1 | 名前1 | 埼玉県 | NaN |
| 2 | 名前2 | 栃木県 | 3002.0 |
| 3 | 名前3 | 岡山県 | 7601.0 |
| 4 | 名前4 | 大阪府 | NaN |
| 5 | 名前5 | 富山県 | 3507.0 |

上記のように「.0」が入ったデータが出力されてしまいます。
数値データだけの場合、int型で出力されますが、数値と空を含む場合、float型で出力されてしまい、「.0」がついてしまいます。
（int型にはNaNを含むことができないため、自動でNaNを入れることのできるfloat型になる）

# 対応策について
`read_csv()`の引数に`dtype="object"`をつけて、float型ではなくobject型で出力されるようにします。

```python
import pandas as pd

df = pd.read_csv("サンプルデータ.csv", index_col=0, dtype="object")
```

`dtype="object"`を付けて実行すると、サンプルデータは以下のように「.0」無しで出力されます。

| No | 名前 | 都道府県 | 注文ID |
| ---- | ---- | ---- | ---- |
| 1 | 名前1 | 埼玉県 | NaN |
| 2 | 名前2 | 栃木県 | 3002 |
| 3 | 名前3 | 岡山県 | 7601 |
| 4 | 名前4 | 大阪府 | NaN |
| 5 | 名前5 | 富山県 | 3507 |


# 終わりに

今回は`read_csv()`で数値データを読み込んだ時、少数点がついてしまう要因とその対応策を記載しました。ID等に「.0」が入ってしまうと、意味合いが変わってしまったり、DBに更新をかける時にエラーが発生してしまう可能性があったりするため、この仕様は覚えておこうと思いました。
"Cannot find module '@nestjs/config"への対応


## 発生した事象

Nest.jsからTypeORMを使用したく導入を進めていました。
以下のようにConfigModuleとConfigServiceを使いたくimportしようとしたのですが、
"Cannot find module '@nestjs/config' "というエラーが出ており
importできませんでした。

```ts
import { ConfigModule, ConfigService } from '@nestjs/config';
```

`@nestjs/config`モジュールがないということなので
node_modulesディレクトリを確認すると、
`@nestjs/config`モジュールがディレクトリ内に存在していませんでした。

## 解決方法

`@nestjs/config`がインストールされていなかったため
以下のコマンドでインストールをしたら解決しました。

```terminal
npm install @nestjs/config
```

## 原因

`@nestjs/config`がインストールされていなかった原因は分かりませんでした。
nestjsをインストールした際にコマンドや設定で何か漏れていたのかもしれません。

もしわかる方いらっしゃれば教えていただけますと幸いです！
boostorg boostがインストールできなかったときの対処法

```
[!] Error installing boost
[!] /usr/bin/curl -f -L -o /var/folders/21/q_fk4gmj3lq1n0l8wyfmhkrw0000gn/T/d20231127-7401-wjkrzv/file.tbz https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2 --create-dirs --netrc-optional --retry 2 -A 'CocoaPods/1.12.1 cocoapods-downloader/1.6.3'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to boostorg.jfrog.io port 443 after 877 ms: Couldn't connect to server

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
```
と出た時はgithubから直接ビルドする

https://github.com/boostorg/boost
SSHのログインがとにかく遅い

SSHのログインがとにかく遅い。
よくある解消方法を羅列しておく。


## 名前解決が遅い

名前解決が出来ていない。
逆引きの必要なければ `/etc/ssh/sshd_config`の設定を`UseDNS no`に修正してsshを再起動すればよい。


## GSSAPI認証が悪さをしている
GSSAPI認証をリトライして遅いパターンがある。
必要なければ`/etc/ssh/sshd_config`の設定を`GSSAPIAuthentication no`に修正してsshを再起動。


## pam_systemd(sshd:session): Failed to create session: Connection timed out

こんなエラーログがある場合は `/etc/pam.d` の`pam_systemd.so`エントリをこまめに直す。
もしくは安易に対応するなら`/lib/systemd/system/systemd-logind.service` の`IPAddressDeny`をコメントアウト。

```
$ sudo vim /lib/systemd/system/systemd-logind.service
#IPAddressDeny=any
```

systemdをリロードする。

```
$ sudo systemctl daemon-reload
```

* 参考
  * https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1774417



## お約束

すべてお決まりの問題だと決めつけずに地道に `/var/log/secure`, `/var/log/auth.log`, `/var/log/message` などのログをみつつ、分からなければデバッギングすること。

サーバー側で別ポートを指定しつつデバッグモードで起動する。

```
$ /usr/sbin/sshd -ddd -p 22222
```

クライアントでもデバッグモード`-vvv`とポートを指定して`-p` アクセスしてふるまいを確認する。

```
$ ssh -vvv myuser@myhost -p 22222
```

configが正しく読まれているかどうか確認するには`-G`を使う。

```
$ ssh -G myuser@myhost
```
【VSCode】かっこいいスクショを撮ろう！

※この記事は[四工大アドベントカレンダー 2023](https://qiita.com/advent-calendar/2023/yonko_univ)の参加記事です。

## 背景

こんにちは、[うだい](https://twitter.com/yudai1204)です。
[昨日の記事](https://qiita.com/yudai1204/private/ce0449660cbc8e937bb1)に引き続いてVSCodeの話をします。
今回はVSCodeで**かっこいいスクリーンショット**を撮るお話です。

## 「Polacode」

早速ですが、VSCodeには「[**Polacode**](https://marketplace.visualstudio.com/items?itemName=pnp.polacode)」という拡張機能があります。

https://github.com/octref/polacode

この拡張機能を使うと以下のようなきれいなスクリーンショット(より正確に言うとコードのスナップショット)が撮れます。

![code.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449776/0d419884-b4a4-8200-4a08-46c57449e7bd.png)

この拡張機能は120万を超える圧倒的なダウンロード数を誇りますが、いくつかのUX的な**問題を抱えています**。

- 2020年に開発・サポートが終了している
- 背景色が完全な白(`#ffffff`)ではない
- 背景を透明にできない
- 影をオフにできない
- 撮影するのにVSCodeのコマンドパレットを開きコマンドを打ち込む必要がある

そのためこのプロジェクトは多くのフォークを生み出しており、VSCodeの拡張機能検索画面で「Polacode」と入力すると多くの類似拡張機能を発見できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449776/e52a44b4-93b6-788d-6572-2e62190375fd.png)

## ベストな選択

そこで私は上記の問題を解決するために2つの拡張機能を組み合わせることで対処をしています。

**Polacode-2022**

https://marketplace.visualstudio.com/items?itemName=jeff-hykin.polacode-2019

**polacode-button**

https://marketplace.visualstudio.com/items?itemName=yudai1204.polacode-button


## Polacode-2022

「[**Polacode-2022**](https://marketplace.visualstudio.com/items?itemName=jeff-hykin.polacode-2019)」は [jeff-hykin](https://github.com/jeff-hykin/polacode)氏によるPolacodeのフォークです。
標準の機能に加え、

- 背景色の変更
- 背景の透明化オンオフ
- 影のオンオフ

の機能があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449776/2db38a61-9e7b-13b3-2bba-e8953ebe5e61.png)

## polacode-button

「[**polacode-button**](https://marketplace.visualstudio.com/items?itemName=yudai1204.polacode-button)」は私が自作した拡張機能です。
この拡張機能自体はスクリーンショットを撮影する機能を持たず、VSCode最下部のステータスバーにPolacodeを開くためのボタンを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449776/b8785df7-b4f6-1212-fea8-8a00d35ccb12.png)

VSCodeの拡張機能アクティベーションは、コマンドさえわかれば他の拡張機能から発火させることが簡単にできます。

https://github.com/yudai1204/polacode-button

## まとめ

これらの拡張機能によってパッと簡単にコードのスクリーンショット(スナップショット)を撮影してスライドなどに埋め込むことができるようになりました。
また、VSCodeの拡張機能開発は非常に敷居が低いのでぜひ物足りなさを感じたら作ってみてくださいね。
auth0認証後、IDトークンはどうやって取得する？

## @auth0/auth0-vue auth0認証後、IDトークンはいったいどこにあるのか？
どうやら下のようにやると取得できるみたい
`auth0.idTokenClaims.value.__raw`

 ```Sample.vue
 <template>
    <div class="grid">
        <div class="col-12 md:col-6">
            <div class="card p-fluid">
                <div class="field">
                    <h1>Vue 3 Axios Example with</h1>
                    <button @click="fetchData">Fetch Data</button>
                    <pre>{{ configrationDocument }}</pre>
                </div>
            </div>
        </div>
    </div>
</template>

<script setup>
import { ref } from 'vue';
import axios from 'axios';
import { useAuth0 } from '@auth0/auth0-vue';

// 非同期の関数を定義
const auth0 = useAuth0();
const data = ref(null);
const fetchData = async () => {
  try {
    // axiosを使ってデータを取得する例
    const params = new URLSearchParams();
    params.append('id_token', auth0.idTokenClaims.value.__raw);
    axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
    axios.defaults.headers.post['Access-Control-Allow-Origin'] = 'https://localhost:3000';
    const response = await axios.post('https://localhost:44363/sample', params);

    // レスポンスからデータを取り出す
    data.value = response.data;
  } catch (error) {
    console.error('データの取得に失敗しました:', error);
  }
};
</script>

 ```
 ## auth0のIDトークンの仕組み的な保存場所はこちら
 何もしなかったらインメモリに保存されるみたい
 https://mizumotok.hatenablog.jp/entry/2021/08/04/114431

 ## まとめ
 どうやったらIDトークン取得できるのか右往左往してた
Godot(C#)実行時にCollisionShapeの形状を変更する(小ネタ)

## 要約
実行時にCollisionShapeの形状を変更する方法がちょっと見当たらないので調べました。


## はじめに
　CollisionShape2Dはメンバー変数にShape2DクラスのShapeを持ちますが、このクラスは抽象基底クラスのため具体的なパラメータを持っていません。Shape2Dから派生した先の何れか（この場合CircleShape2D)にダウンキャストする事で、半径相当のRadiusにアクセス可能になります。

https://docs.godotengine.org/ja/4.x/classes/class_collisionshape2d.html#properties

https://docs.godotengine.org/ja/4.x/classes/class_shape2d.html#class-shape2d

https://docs.godotengine.org/ja/4.x/classes/class_circleshape2d.html#properties


環境：Godot4.1＋ C#(.Net Framework6.0)


## サンプルノード

<img width="200" alt="scene" src="https://pbs.twimg.com/media/F_8a23jakAA_JwL?format=png&name=360x360">
<img width="300" alt="scene" src="https://pbs.twimg.com/media/F_8bBdgbQAAnM47?format=png&name=small">




## サンプルコード
　_collisionShapeは_Ready()でキャッシュしたCollisionShape2Dノードです。LevelUp()で円形の衝突形状の半径を変更しています。
 
```
	private CollisionShape2D _collisionShape;

	public override void _Ready()
	{
		_collisionShape = GetNode("CollisionShape2D") as CollisionShape2D;
	}
 
    public void LevelUp()
	{
		_level++;
		CircleShape2D circle = _collisionShape.Shape as CircleShape2D;
		circle.Radius = getRadius(_level);
	}

	private int getRadius(int level)
	{
		return level * 4 + 4;// lv1 = 8, lv2 = 12, lv3 = 16
	}

```

## 動かしてみた
　Collison表示を有効にしました。実行時に大きさが変わっている事が分かります。

https://x.com/cabbagestole/status/1725479197840466363?s=20
[JavaScript]今日と一致する日付かどうかを判定する方法

Dateオブジェクトでは`<`や`>`などの比較演算子を使って日付を直接比較することができますが、一方で`===`や`==`での等値比較はできません。
今回は、**今日と一致する日付かどうか**を判定する方法を2つ紹介します。

## 判定したいDateオブジェクト

```js
const date = new Date(); // 現在の日付と時刻を生成
const targetDate = new Date(2023, 10, 30); // 2023年11月30日0時0分を生成
```
前提として、**判定したいのは「日付」のみ**であり、経過時刻は加味しないこととします。


## 方法①：`.toDateString()`を使う　🌟おすすめ🌟

```js
console.log(date.toDateString());
// => "Thu Nov 30 2023"
console.log(targetDate.toDateString());
// => "Thu Nov 30 2023"

console.log(date.toDateString() === targetDate.toDateString());
// => true
```
比較だけしたいのであれば、最もスマートなのでおすすめの方法です。

## 方法②：Dateオブジェクトの年・月・日を取得する

```js
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();

const dateToStr = `${year}${month}${day}`;

console.log(dateToStr);
// => "20231130"

const targetYear = targetDate.getFullYear();
const targetMonth = targetDate.getMonth() + 1;
const targetDay = targetDate.getDate();

const targetDateToStr = `${targetYear}${targetMonth}${targetDay}`;

console.log(targetDateToStr);
// => "20231130"

console.log(dateToStr === targetDateToStr);
// => true
```
年・月・日の文字列を入れた変数を後のコードで使うなら、こちらの方法でも良いと思います。

## 補足： `getTime()`について

「js 日付 一致」などの検索でよく出てくる`getTime()`ですが、今回のように`new Date()`でDateオブジェクトを生成した場合、等値を判定するのは難しいです。

なぜなら、このメソッドによる返り値が**1970年1月1日0時からの経過ミリ秒数**であるためです。

そのため今回の条件では、以下のように等値比較は`false`となります。

```js
console.log(date.getTime());
// => 例） 1701054000000
console.log(targetDate.getTime());
// => 1701270000000

console.log(date.getTime() === targetDate.getTime());
// => false
```

## 参考記事
[MDN Web Docs:「Date.prototype.toDateString()」](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/toDateString)
[MDN Web Docs:「Date.prototype.getTime()」](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime)
Reactアプリ100本ノックやってみた 「01 Hello World」

# はじめに
フロントエンドに苦手意識のある私が、@Sicut_studyさんの【Reactアプリ100本ノック】をやってみました。
変なところがあれば教えていただきたいです。


今回の課題

https://qiita.com/Sicut_study/items/3c5cd798313854a471a0

# やってみる
```App.tsx
import styled from "styled-components";

const SDiv = styled.div`
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
`;


const App = () => {
  return (
    <SDiv>
      <p>Hello World</p>
    </SDiv>
  );
};

export default App;
```



# 完成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621123/b1b5f648-5f6e-0023-b4bf-a2c154df4694.png)



# おわりに
フロントエンド相当苦手なのか、「画面中央ってどうやるんだ…」とさっぱりわからなかったです。私のような初心者の方の励みになったらうれしいです。一緒に頑張りましょう。
ユニバーサルロボットのダッシュボードサーバのコマンド一覧

備忘録として、よく使うと思われるコマンドとその機能を一覧にまとめます。

|コマンド|機能|
|:---|:---|
|load <program.urp> | プログラムファイルのロード |
play|	プログラム実行
stop|	プログラム停止
pause|	プログラム一時停止
quit|	ロボットとの接続遮断
shutdown|	シャットダウン
running	|プログラム実行状態
robotmode|	ロボットの起動状態
get loaded program|	ロードされたプログラムファイル名
popup <text>|	ポップアップ表示
close popup	|ポップアップをクローズ
programState|	プログラム実行状態
power on|	パワーオン
power off|	パワーオフ
brake release	|ブレーキ解除
safetystatus	|セーフティ状態
unlock protective stop	|保護停止状態を解除
close safety popup|	安全ポップアップをクローズ
restart safety|	安全再起動
管理者権限がないwindowsアカウントでUS配列のキーボードを使う方法（win10）

同じような記事がいくつもあるが、完全に対応しているものはないので。
## 手順
レジストリ HKEY_CURRENT_USER\Keyboard Layout\Substitutes （代替キーボードレイアウト）で、エントリ "00000411" (REG_SZ 文字列) を作り、値 "00000409" を設定して再起動する。
## 結論
管理者権限はほしい
【これだけ覚えてCLF-02】AmazonCloudPractitioner単語帳 #3VS編

# 概要
英語編、ニホンゴ編に続く終章、VS編。
VS編って何だよ。なんでこれだけ箇条書きなんだよ。とか言いつつ、当日の電車で一番役に立ったのはこれだったりする。
AWSサービスは似たようなものが多いし、容赦なく択肢に両方載せてくる。
「こっちがこういうサービスで、あっちがああいうサービス」という切り分けをしておくだけでも当日からでも60%台を70%台に持ち上げたりできる。
- #1英語編: https://qiita.com/azuki-monaka/items/65287ed8345f2c698108
- #2ニホンゴ編: https://qiita.com/azuki-monaka/items/4866ae8897d861ecd37d
- #3VS編(本記事): https://qiita.com/azuki-monaka/items/ac9ce1153b04d4b40bb7

# 単語帳_VS編
## IAM vs Organizaiton
  - IAM: AWSアカウント内部の権限設定(ユーザAはEC2にアクセスできるけどCloudWatchにはアクセスできないようにする)
  - Organization: アカウント単位の権限設定(基盤TだけCloudTrailを閲覧できる)。
## SQS vs SNS
  - SQS: 大量のメッセージを効率的にキューイングする
  - SNS: 多くのサブスクライバー(客)に対してリアルタイムでメッセージを配信
## ゲートウェイ
  - インターネットゲートウェイ: VPC内に配置されたインスタンスからインターネットへの通信を可能にするVPCコンポーネント
  - 仮想プライベートゲートウェイ: BPCがDirectConnectやVPNと接続するためのゲートウェイ
  - NATゲートウェイ: プライベートNWからインターネット接続。インターネットからはインスタンスに直接通信できない
  - カスタマーゲートウェイ: VPCとオンプレの接続アンカー
## Config vs SystemsManager vs Organization
  - Config: AWSリソース設定の評価
  - SystemManager: アプリの運用実態
  - Organization: アカウントの統合管理
## パブリックIP vs Elastic IP
  - インスタンス起動時に自動的に割り当てられるグローバルIPアドレス。再起動すると変動する
  - 固定のグローバルIPアドレス。Firewallなど通信先を固定する場合に有用
## MemoryDB for Redis vs DynamoDB
  - 両方NoSQL・高速
  - MemoryDB for Redisはリアルタイム
  - DynamoDBはセッション系
## WAF vs Sheild vs GuardDuty
  - WAFはWEBアプリケーションまたはAPIを保護するウェブアプリケーションファイアウォール
  - SheildはCloudFrontやRoute53に接続する。DDoSに強い
  - GuardDutyはAWS環境やAWSアカウントに対するDDoS攻撃以外のネットワークに対する不正アクセス
## Config vs Inspector
  - 診断個所の違い
  - Config: AWSリソース構成とそのアクセスに対するモニタリング
  - Inspector: EC2インスタンスにデプロイされたアプリケーションの脆弱性のモニタリング
## Elastic Beanstalk vs OpsWorks
  - Elastic Beanstalk: アプリケーションのデプロイ自動化
  - OpsWorks: インフラの設定自動化
## Budgets vs Cost Explorer
  - コストを
  - Budgets: 管理
  - Cost Explorer: 分析
## Key Management Service(KMS) vs Secrets Manager
  - 認証情報に関する機能
  - KMS: 暗号化キーを簡単に作成して管理
  - Secrets Manager: シークレットとして保存・取得する仕組み
## Computer Optimizer vs SageMaker
  - 機械学習の使用目的
  - Computer Optimizer: 構成側。EC2インスタンスやLambdaなどの最適化
  - SageMaker: アプリケーション側。機械学習モデルの迅速な構築、トレーニング、デプロイの支援
## Lightsail vs Fargate
  - Lightsail: コンテナなどのクラウドリソース用の仮想プライベートサーバー(VPS)
  - Fargate: ECSとEKSの両方で動作する、コンテナ向けサーバーレスコンピューティングエンジン
## キーペア vs アクセスキー
  - キーペア: 秘密鍵と公開鍵のこと。RDPとかEC2インスタンスにPC端末から接続する際に必要となる認証キー
  - アクセスキー/シークレットアクセスキー: AWSアカウントやCLI認証でAWSマネコン経由で使用する認証方法
## re:Post vs IQ
  - rePost: よくあるQAフォーラム
  - IQ: サードパーティーの支援
Windowsでアプリごとの音量調節

# やり方

スピーカーマーク右クリック ⇒ 『音量ミキサーを開く』
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/af0490e2-c4ce-c23c-1027-5582f44be09c.png)

こんな感じ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/8ea6c53c-5aa6-ac5b-56dd-b056873dcd41.png)

タスクバーにピン留めも可。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706116/5025879c-45cc-8106-16bf-028136756f05.png)

# 参考サイトさん

https://support.matsui.co.jp/faq/show/1024?category_id=135&site_domain=faq#:~:text=%E8%AA%BF%E7%AF%80%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-,%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%90%E3%83%BC%E5%8F%B3%E5%81%B4%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%82%B9%E3%83%94%E3%83%BC%E3%82%AB%E3%83%BC%E3%82%A2%E3%82%A4%E3%82%B3%E3%83%B3%E3%82%92,%E9%9F%B3%E9%87%8F%E3%82%92%E8%AA%BF%E7%AF%80%E3%81%97%E3%81%BE%E3%81%99%E3%80%82&text=%E3%80%8C%E9%9F%B3%E9%87%8F%E3%83%9F%E3%82%AD%E3%82%B5%E3%83%BC%E3%80%8D%E7%94%BB%E9%9D%A2%E3%81%A7%E3%81%AF%E3%80%81,%E9%9F%B3%E9%87%8F%E3%82%92%E8%AA%BF%E7%AF%80%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

# バージョン

Microsoft Windows [Version 10.0.19045.3693]
【Django】プロジェクト名を変更するプログラム

# はじめに
djangoでプロジェクトを作成後プロジェクト名を変えることがあった（普通はないと思うのですが...）ので、[こちら](https://qiita.com/meklick/items/ae2fbd01516f8e5a44cc)を参考に修正したのですが、（普通はないと思いますが）またプロジェクト名を変更するようなときに同じことをやりたいくない&コードを書く練習になりそう、ということでプロジェクト名を変更してくれるプログラムを作成しました。

# コード
rename_django_project.pyという名前でコードを作成しました。
以下、コード全体
```python:rename_django_project.py
# プロジェクトディレクトリに移動してから実行する

import glob, re, os

# 現在のプロジェクト名を取得する
old_project_name = glob.glob("./*/settings.py")[0].split("/")[1]
new_project_name = input()

old_projectdir_path = "./"+old_project_name
new_projectdir_path = "./"+new_project_name 
os.rename(old_projectdir_path, new_projectdir_path)

project_name_in_manage_or_wsgi    = 'os.environ.setdefault.*DJANGO_SETTINGS_MODULE.,\s.*.settings.*'
project_name_in_settings          = 'ROOT_URLCONF\s=\s.*|WSGI_APPLICATION\s=\s.*'

def modify_project_name_in_file(file_path, regex):
    with open(file_path, "r") as file:
    
        # old_project_nameをnew_project_nameに変更する
        code        = file.read()
        old_names    = re.findall(regex,code)
        for old_name in old_names:
            #old_name    = f"{old_name.group()}"
            new_name    = old_name.replace(old_project_name, new_project_name)
            code        = code.replace(old_name,new_name)
            print(code)


    with open(file_path, "w") as file:
        file.write(code)

modify_project_name_in_file("./manage.py", project_name_in_manage_or_wsgi)
modify_project_name_in_file(new_projectdir_path + "/wsgi.py", project_name_in_manage_or_wsgi)
modify_project_name_in_file(new_projectdir_path + "/settings.py", project_name_in_settings)
```

このコードをホームディレクトリの適当な場所に配置してaliasを登録しておけば気軽にプロジェクト名の変更ができます。

# 作成してみて
正規表現の書き方やpythonでのファイルの読み書きがよくわかってないなと再認識したので機会があるときはこういうコードを書いて練習してみようと思いました。

# 参考文献
[[Django]プロジェクト名を変更する](https://qiita.com/meklick/items/ae2fbd01516f8e5a44cc)
【これだけ覚えてCLF-02】AmazonCloudPractitioner単語帳 #2ニホンゴ編

# 概要
前回の続き。意外と英単語以外も多かったので別でまとめてみた。
横文字が多すぎてしんどくなったら気分転換しよう。
- #1英語編: https://qiita.com/azuki-monaka/items/65287ed8345f2c698108
- #2ニホンゴ編(本記事): https://qiita.com/azuki-monaka/items/4866ae8897d861ecd37d
- #3VS編: https://qiita.com/azuki-monaka/items/ac9ce1153b04d4b40bb7


# 単語帳_英単語編
|略称|要点|
|-----|-----|
|アクセスキー/シークレットアクセスキー|AWSアカウントやCLI認証で使用する認証方法|
|インスタンスストア|EC2インスタンスの一時的なデータを保持するストレージ|
|VPCエンドポイント|AWSのバックボーンインフラを利用して、VPCとサービス間の接続を行う|
|キーペア|・EC2インスタンスにPC端末から接続する際に必要となる認証キー<br>・秘密鍵と公開鍵のセット|
|責任共有モデル|・AWSサービスに対してユーザー側で実施するべきセキュリティ対応<br>・SSL/TLS通信暗号化やユーザアクセスログなど、AWSインフラより上に構築されたサービスについてはユーザ側で実施する。|
|コンシェルジュチーム|AWSユーザの請求やアカウントに関する問い合わせに24時間365日対応するチーム|
|プロビジョニング(provision)|必要に応じてネットワークやコンピュータの設備などのリソースを提供できるよう予測し準備しておくこと|
|AWSプロフェッショナルサービス|AWSパートナーによるサポートサービス|
|AWSマーケットプレイス|AWS上で利用可能なソフトウェアを見つけて、購入することができる3rdパーティのオンラインストア|
|マネージド型|・メンテナンス・バックアップ・スケーリングをAWS管理に任せてソフトウェア設定のみユーザ側が行う<br>・RDSやDynamoDBなど|
|アンマネージド型|・メンテナンス・バックアップ・スケーリング・ソフトウェア設定をユーザ側が行う<br>・EC2を利用したDB|
|リージョナルエッジキャッシュ|エッジロケーションとオリジンの間に存在する一段容量の大きいキャッシュサーバ郡を保持したロケーション|
|リソースグループ|各フェーズに応じたカスタムコンソール|
|リードレプリカ|読取専用のDBインスタンスの複製|
|リザーブドインスタンス|秒単位|
UMD版Hexabase JavaScript SDKができました

[Hexabase（ヘキサベース）](https://www.hexabase.com/)は企業においても安心して利用できるBaaS（Backend as a Service）を提供しています。多くのBaaSがそうであるように、主にフロントエンド開発者に利用してもらいたいと考えています。そこで現在、TypeScript SDKの開発が進められています。

元々TypeScriptで作られていることもあって、Next.jsやVue.jsなどでimportして利用することができます。しかし、もっと普通のWebアプリケーションなどで使う際には、CDN経由で利用したいと考える方もいるでしょう。そこで、UMD版Hexabase JavaScript SDKを作成しました。

## インストール

インストールは下記のように行います。

```html
<script src="https://cdn.jsdelivr.net/npm/@hexabase/hexabase-js@latest/dist/umd/hexabase.min.js"></script>
```

バージョン指定する場合は、以下のようになります。メジャーバージョンが上がらない限りはlatest指定をお勧めします。

```html
<script src="https://cdn.jsdelivr.net/npm/@hexabase/hexabase-js@2.0.6/dist/umd/hexabase.min.js"></script>
```

モジュールとして使う場合には、以下のようになります。

```html
<script type="module">
import hexabase from 'https://cdn.jsdelivr.net/npm/@hexabase/hexabase-js@latest/+esm'
</script>
```

## 使い方

JavaScriptタグを読み込むと、 `hexabase` というグローバル変数が定義されます。これを使ってHexabaseにアクセスします。

```js
const { HexabaseClient } = hexabase;
const client = new HexabaseClient();
```

後は[Hexabaseとは？開発に役立つ使い方、トレンド記事やtips \- Qiita](https://qiita.com/tags/hexabase)以下にある記事を参考にしてください。TypeScript SDKと使い方は同じです。

## まとめ

UMD版Hexabase JavaScript SDKを作成しました。これで、Hexabaseを使う際にCDN経由で利用することができます。Hexabaseを使って、業務アプリケーションを開発してみてください。

[Hexabase \| 新規事業向け開発・競争領域でのDX実現をサポート](https://www.hexabase.com/)
【Python】dictionaryを使う前に、超便利メソッドを知ってくれ！エラーハンドリングはもうしなくていい！

どうも。ちょっぴり便利なコードを1000年集め続ける、おたくの[フリーレン](https://frieren-anime.jp/)です。
[東大GDSC](https://twitter.com/GDSCut)アドベントカレンダーへの寄稿です

## よくないね
辞書型でデータを管理しているとき、こんなコード書いていませんか？
```python: よくないね.py
try:
    #keyが存在しなかったらエラーが出る！！！
    nanka_tsukau(dictio[key])
except KeyError:
    #key無し？？？（nanka_tsukau()のエラーの可能性も）
    nanka_tsukau(0)
```

要するに、`key`が`dictio`に登録されているかもしれないし、登録されていないかもしれない。だから`key`がないときのエラーをハンドリングして、0を明示的に記述した方のコードを書く。

こんな面倒なこと、もうやめませんか？

## いいね
### 良いメソッドを紹介しましょう
#### 取得
`get(キー)`メソッドが便利です。
**キーに対応する値を返すだけでなく、存在しない場合は`None`を返します。エラー出さずに！！！**

```python:get使用例.py
dictio = {1: 334, 2:226}

#dictio[1]と同じ
print(dictio.get(1))    #存在するもの
#334

print(dictio.get(1000))   #存在しないもの
#None (エラーなし！）
```

---

しかし、みなさんが欲しいのはこっちのはずです。
**Noneじゃなくて何か値を出してほしい場合は、`get(キー, デフォルト値)`で実現**

```python:get使用例.py
dictio = {1: 334, 2:226}

#dictio[1]と同じ
print(dictio.get(1, -1))    #存在するもの
#334

print(dictio.get(1000, -1))   #存在しないもの
#-1 (エラーなし！）
```

#### 初期化
使うか分かりませんが、 **キーがないときだけデフォルト値代入** もあります
その名は `setdefault(キー, デフォルト値)`

```python:setdefault使用例.py
dictio = {1: 334, 2:226}

#dictio[1]と同じ
dictio.setdefault(1, -1)    #存在するもの
print(dictio[1])
#334

dictio.setdefault(1000, -1)   #存在しないもの
print(dictio[1000])
#-1 (デフォルト値！エラーなし！）
```


### 使用例
#### 種類別数え上げ
種類別に個数を数えるとき、dictionaryを使うこともあるでしょう。
こうすることができます。

```python:数え上げ.py
#数え上げ
for number in numbers_list:
    #エラーハンドリングも、`in key`もなく、一行で書ける！！
    counter_dictio[number] = counter_dictio.get(number, 0) + 1
```

のように書けます

## 最後に
`get()`使いましょう

:::note
いいね頂けるとなきながら喜びます><
:::
gradleでMETA-INF/services generator

# Java 標準の Service Locator パターン

今は Spring などの DI コンテナが使用されることが多いですが、Java 標準でも疎結合を実現するために、インターフェースに合致するクラスを見つけるサービスロケーターパターンを実装したサービスプロバイダーフレームワークがありました。`META-INF/services/` にクラス名を記述したプロバイダ構成ファイルを配置します。現在でも、この仕組みを使用したライブラリがあります。

# gradle での設定方法

こないだ、このファイル自分で書かなあかんの？ との話があったので、確認したところ、Jenkins で有名な kohsuke さんが、やっぱり？ [META-INF/services generator](https://metainf-services.kohsuke.org/) っていうのを作ってました。さすが。クラスに `@MetaInfServices` アノテーションを付けることで、`META-INF/services/` にファイルが自動生成されます。でも、コピペできる gradle の設定が見つかんなかったので、書き残しておきます。

```gradle:build.gradle
plugins {
	id 'java'
	id 'eclipse'
	// gradlew cleanEclipse eclipse で Eclipse ファクトリー・パス設定に追加される
 	// 生成先は bin/default/META-INF/services
	id 'com.diffplug.eclipse.apt' version '3.43.0'
}

sourceCompatibility = 17
tasks.withType(JavaCompile) {options.encoding = 'UTF-8'}
repositories.mavenCentral()

dependencies {
	// @MetaInfServices アノテーション
	compileOnly 'org.kohsuke.metainf-services:metainf-services:1.11'
	// アノテーション処理: gradlew build 用
 	// 生成先は build/classes/java/main/META-INF/services
	annotationProcessor 'org.kohsuke.metainf-services:metainf-services:1.11'
}
```

# Maven リポジトリ
最新版は下記を確認してください。

* META INF/services Generator
https://mvnrepository.com/artifact/org.kohsuke.metainf-services/metainf-services

* Diffplug Eclipse APT Gradle Plugin
https://mvnrepository.com/artifact/com.diffplug.eclipse.apt/com.diffplug.eclipse.apt.gradle.plugin