OmniAICreator/Qiita-1.07M huggingface dataset:
mayaでハードエッジを抽出したい

ハードエッジを抽出したいなー

抽出した後にあれこれやりたいなー

とりあえず検索
--

- select > Use Constraints  で選択

よくつかいますねー
ただスクリプトで処理したいですねー

- polySelectConstraint を使う

https://help.autodesk.com/cloudhelp/2022/JPN/Maya-Tech-Docs/CommandsPython/polySelectConstraint.html

うん・・・・うーんなんかこう・・・・ちがう


APIでなんかあんじゃね？
--

いつもどおりほげーっとapiのリファレンスを眺めてみると

OpenMaya.MFnMesh.isEdgeSmooth()
isEdgeSmooth(edgeId) -> bool
Returns True if the edge is smooth, False if it is hard.

https://help.autodesk.com/view/MAYAUL/2022/JPN/?guid=Maya_SDK_py_ref_class_open_maya_1_1_m_fn_mesh_html

あ、これっぽいな。

とりあえず試す
--

あーこんな感じかなぁ

```python
import maya.api.OpenMaya as om
def getHardEdges(target):
    sellist = om.MGlobal.getSelectionListByName(target)
    dagPath = sellist.getDagPath(0)
    FnShape = om.MFnMesh(dagPath)        
    edgeNum = FnShape.numEdges

    hardIDs = []
    for edgeID in range(0,edgeNum):    
        if FnShape.isEdgeSmooth(edgeID)==False:
            hardIDs.append(target + ".e["+str(edgeID)+"]")

    return hardIDs
```

こんな玉を用意して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/0df550a7-9f52-5979-9570-2d24548a131a.png)

実行
```python
cmds.select(getHardEdges("pSphere1"),r =True)
```

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/e52ea234-bca2-1824-875a-941803b6ee9e.png)

お？問題なく動いたっぽいな


疑問
--
isSmoothってあるけど、smoothとhardの境目ってどこなんだろな
それはまたの機会に考えよう
Reactで星5段階評価のビュー作成。食べログみたいに0.5刻み

```index.tsx
import React, { useState } from 'react';
import classnames from 'classnames';
import style from './index.module.scss';

enum StarStatus {
  ACTIVE = 1,
  HALF_ACTIVE = 2,
  INACTIVE = 3,
}

const Star = (props: {
  maxScore: number;
  currentScore: number;
  updateScore: any;
}) => {
  const { maxScore, currentScore, updateScore } = props;

  const status = (() => {
    if (currentScore <= maxScore - 1) return StarStatus.INACTIVE;
    if (currentScore >= maxScore) return StarStatus.ACTIVE;
    if (currentScore === maxScore - 0.5) return StarStatus.HALF_ACTIVE;
  })();
  const isActive = status === StarStatus.ACTIVE;
  const isInactive = status === StarStatus.INACTIVE;
  const isHalfActive = status === StarStatus.HALF_ACTIVE;

  return (
    <div className={style['star-container']}>
      <div className={style['star-floating-container']}>
        <div
          className={style['star-floating-half-click-target']}
          onClick={() => {
            updateScore(maxScore - 0.5);
          }}
        />
        <div
          className={style['star-floating-half-click-target']}
          onClick={() => {
            updateScore(maxScore);
          }}
        />
      </div>
      <i
        className={classnames({
          'fa-star': true,
          [style['star']]: true,
          fas: isActive || isHalfActive,
          far: isInactive,
          'fa-star-half-alt': isHalfActive,
        })}
      />
    </div>
  );
};

export default () => {
  const initialScore = 3;
  const [currentScore, updateScore] = useState(initialScore);

  return (
    <div className={style['stars-container']}>
      {[1, 2, 3, 4, 5].map((score) => (
        <Star
          key={score}
          maxScore={score}
          currentScore={currentScore}
          updateScore={updateScore}
        />
      ))}
    </div>
  );
};

```

```index.module.scss
.stars-container {
  margin: 0 0 10px 0;
}

.star {
  color:#ffd700;
  font-size: 40px; // この値はfloatingエリアにも影響
  padding: 0 10px;

  &-container {
    display: inline-block;
    position: relative;
    color: inherit;
  }

  &-floating {
    &-container {
      display: inline-block;
      position: absolute;
      width: 65px; // 星のfont-size + 星のpadding * 2 + 不明の5px
      height: 40px; // 星のfont-size
    }

    &-half-click-target {
      display: inline-block;
      width: 50%;
      height: 100%;
    }
  }
}
```
Amazon Connect のクイック接続反映手順

ジャーニーマン( @beajourneyman )です。

Amazon Connect のクイック接続の反映手順です。

# 実施場面

新規エージェントを追加した後に、CCPの「クイック接続リスト」に対象エージェントが表示されない時に実施します。クイック接続の設定がされていない場合、設定はされているが、キューへの紐付けがされていない場合の手順を残します。

# 反映手順

## クイック接続への新規追加

Amazon Connect のコンソールに入ります。

左サイドバーのメニューから「Quick connect(クイック接続)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/4a097751-f35e-04b7-f09c-229dfa6732bc.png)

対象エージェントの名前を入力しクイック接続に登録されているか確認します。
　・登録されている場合はこの画面では何もしません。次節の「キューとの紐付け」に進みます。
　・登録されていない場合はエージェントの一覧の右上の「新規追加」を押下します。

最終行に入力できるようになるので、名前を入れ、タイプ＝エージェント、送信先＝エージェントID(追加したいエージェント)、問合せフロー＝追加したいフロー を選び、左下の「保存」を押下します。

事前準備は以上です。

## キューとの紐付け

左サイドバーのメニューから「Queues(キュー)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155285/d8ad8c71-3b27-f985-a37c-283d49aba80b.png)

対象エージェントが転送を受けたいキューを選択します。

該当キューの編集画面が起動するので、スクロールして「Settings」内の「Quick connects(クイック接続)」の箇所を表示しリストの「▼」をクリックします。

対象エージェントが「未チェック」状態になっているのでチェックをつけ、右上の「Save」を押下します。
※チェックしてSaveすると即時反映されます。

キューとの紐付けは以上です。

他のキューに追加したい場合は、同画面の右上の「Canncel」ボタンを押下して、キューの一覧に戻り、同様の手順で他の必要キューに追加します。

以上です。
Laravel_パスワード再設定用の"Gmai"アドレスを設定する

# Laravel_パスワード再設定用の"Gmail"アドレスを設定する
パスワード再設定用のメールを送信する。
※メールアドレスはGmailを使用する。

## 1.Googleアカウントで必要な設定をする
①Googleアカウント > セキュリティを開く。
②2段階認証を有効にする。
③アプリパスワードを設定する。
　1. 以下の"2段階プロセス"をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/3fc7a08e-d454-49d1-f380-5b362f3fae64.png)
　2. 以下の"アプリパスワード"をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/eab2701f-f4e5-4d37-075b-f51bed76882d.png)
　3. 以下のように設定する。
　アプリ：メール
　名前："その他"を選択し、作成しているアプリ名を入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/9ae025c6-7f5c-0123-6a91-7517d2f9ac2a.png)


## 2.Laravelにメールアドレスを設定する
①Larabelをダウンロードしたフォルダ直下の`.env`を、以下のように変更する。
```.env
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=メールを送りたいGmailアドレス
MAIL_PASSWORD=メールを送りたいGmailアドレスの"アプリパスワード"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=メールを送りたいGmailアドレス(""は消して良い)
```

②ブラウザで `localhost/Laravelをダウンロードしたフォルダ名(アプリのルートディレクトリ)/public`
にアクセスし、**アカウントを作成してから**ログインページを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/3fe5f13a-9d13-843d-a41a-55c02509be20.png)

③パスワードをお忘れですか？ をクリックし、メールアドレスを入力して送信ボタンをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/8bc7682d-85c0-cd74-b149-fcbb87f9c19f.png)

④Gmailを確認すると、以下のようなメールが届いている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323019/4dea4ea2-f7f5-a0a5-4cc3-650475a1fb27.png)


## メールの送受信の仕組み
参考サイト
https://business.ntt-east.co.jp/content/cloudsolution/column-220.html
[動画付き]ROS2プログラミングのためのc++入門（逐次更新）

# ROS2プログラミングのためのc++入門（逐次更新）
研究室の学生に効率よく教えるために、c++の基礎とROS2のプログラミングに関する動画を撮りました。最終的には[Autoware（オープンソース自動運転ソフトウェア）](https://autowarefoundation.github.io/autoware-documentation/main/)をちゃんと読んでイジって評価できるようになろうねという目標のもとすすめていきます。
学生なので細かい決まりなどが欠けている場合がありますのでご注意ください。なにかご指摘があればコメントに書いていただけると幸いです。

## 環境
第二章以降
ubuntu22
ROS2 humble


# 第0章 gitの設定・使い方
[Youtube](https://youtu.be/VIzbeyoWZ5I)
gitを一通り学んでソースコードを管理できるようになりましょう。
（githubでのリポジトリの作成、localでのgit管理、リモートへのpush、branch、PR、merge）

SSH接続もやっておきましょう。
[gitのSSH接続初期設定](https://qiita.com/koki2022/items/2a056f1286b9c62bf614)


# 第一章　CMakeだけでBuildする(ROS2に依存しないパッケージ作成）
ROSから勉強し始めると、ROS1ではcatkin_make, ROS2ではcolcon buildなどでビルドすることが多い。
この記事のタイトルは"ROS2のための"と書いてあるが、まずはROS関係なしにCMakeだけで最小の記述でパッケージをつくれるようにします。（ROSで書かなくてもいいことはできるだけROSで書きたくない人も多いため）

## 第一回 c++ の基礎 build
[Youtube](https://www.youtube.com/watch?v=zeLprrFkSlM)
[git](https://github.com/KOKIAOKI/tutorial)
最小限のパッケージ構成を作ります。

## 第二回 c++ classの基礎　前編
[Youtube](https://youtu.be/82Y7b1UOiDI)
クラスの基礎をゲーム感覚で学びます。

## 第三回 c++ classの基礎　中編
[Youtube](https://youtu.be/nsOXGw7Rsm4)
もう少しバリエーションを豊かにします。

## 第四回 c++ classの基礎　後編
coming soon
クラスの継承やnamespaceなどをなんとか無理やり入れて解説します。
[git]()

# 第二章　ROS2の基礎 
私は主に点群処理をメインとしているので、PCL等を使った実装をメインに話していきます。
※すべてオープンなものを利用しています。
[見本：ros2bag_to_pcd.git](https://github.com/KOKIAOKI/ros2bag_to_pcd/tree/main)

## 第五回 ros2パッケージの作り方（ros2bagからpcdファイル保存）
[Youtube](https://youtu.be/NAnjM8-VY1I)
[git](https://github.com/KOKIAOKI/ros2bag_to_pcd/tree/output_pcd)
[sample ros2 bag file](https://drive.google.com/file/d/1UtiWzH_3hexLU00mcelWp8perIG_w-XR/view?usp=drive_link)
## 第六回 offlineでros2bagを読み込む方法
[Youtube](https://youtu.be/8kjTBpnCipE)
[git](https://github.com/KOKIAOKI/ros2bag_to_pcd/tree/offline)
[sample ros2 bag file](https://drive.google.com/file/d/1UtiWzH_3hexLU00mcelWp8perIG_w-XR/view?usp=drive_link)

## 第七回　シミュレーション環境(AWSIM)で取得したLiDAR点群を重ね合わせて、SLAMせずに点群地図を作ってみる
[Youtube](https://youtu.be/QSmNUtA2VK0)
[git](https://github.com/KOKIAOKI/ros2bag_to_pcd/tree/create_map)
[sample ros2 bag file (地図作成用の真値入り)](https://drive.google.com/file/d/1twrV4aJqACg9DM-HuRteQUIR0eKeSZGX/view?usp=drive_link)

TIER IVが公開している、自動運転向けシミュレーター
[AWSIM document](https://tier4.github.io/AWSIM/)
[AWSIM sample map](https://github.com/tier4/AWSIM/releases/download/v1.1.0/nishishinjuku_autoware_map.zip)

## 第八回 sub pubの基本　ros2 bagのtopic名やframe idを変えて出力する
coming soon

# 第三章 ツール
### ros2bagの中身を編集できるツール
https://github.com/tier4/ros2bag_extensions

### Localization評価のためのツール(python)
https://github.com/MapIV/localization_evaluation_toolkit

### rosbagのROS1→ROS2への変換方法
https://qiita.com/kurodashiryu/items/4d36e96b472180cd56d8

### Rviz2で点群を簡単に見る方法
https://qiita.com/200447087/items/1ae1efae15a827413f7f

### ros1bag_to_pcd
https://github.com/KOKIAOKI/ros1bag_to_pcd

## memo
python3でrosbagを読み込む
GPUプログラミング
mayaでカラーマネージメント結果があわない

maya2022にて

カラーマネージメントは面倒そう思っていた時期が僕にもありました。

今は　カラーマネージメントクソ面倒。

それを何とか乗り越えて、一応なんとかフローに乗せたつもりが
deadlineさんに渡したら　**なんか色違う感じで出てくる**　という

違う感じがわからん
--
違う感じってのがどーにもふんわりしてるので、数値的にどういうのが出てきてるのか確認したいので
まずはカラーマネージメントを今一度検証

aiFlatを使用したシーンにて、単色のテクスチャーを読ませて検証

それぞれの設定と結果の色(数値)をまとめる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/8de2369a-1c8d-27a8-3004-266e26e78032.png)

で、どうやらACESで結果が排出されている様子。


吐かせる
--
deadlineに投げるときにスクリプトを一緒につけて、カラーマネージメントの設定を吐かせてみる。

雑にこんな感じ
```python
import maya.cmds as cmds
import pprint
colorMngDict = {
            "cmEnabled":True,
            "viewTransformName":"Raw (sRGB)",
            "viewName":"Raw",
            "displayName":"sRGB",
            "workingSpaceName":"ACEScg",
            "defaultInputSpaceName":"",
            "outputTransformName":"Raw (sRGB)",            
            "playblastOutputTransformName":"Raw (sRGB)",
            "configFilePath":"<MAYA_RESOURCES>\\OCIO-configs\\Maya2022-default\\config.ocio",
            "outputTransformEnabled":False,
            "outputTransformUseColorConversion":False,
            "playblastOutputTransformUseColorConversion":False,
            "playblastOutputTransformEnabled":False,
            "outputUseViewTransform":True,
            "playblastOutputUseViewTransform":True
}
pprint.pprint("colorMngSetting------------------------------------------")
for key in list(colorMngDict.keys()):
  pprint.pprint(key + " " + str(cmds.getAttr("defaultColorMgtGlobals."+key)))

```

print結果を眺めると、特に問題はない。
でもレンダリング結果はやはりおかしい

違和感
--
スクリプトの結果を吐いた直後に一行何かいる
```
STDOUT: Changing OCIO Config File from <MAYA_RESOURCES>\OCIO-configs\Maya2022-default\config.ocio to <MAYA_RESOURCES>/OCIO-configs/Maya2022-default/config.ocio
```
あー？

あー・・・・（汗
これ、ここで設定リセットされてね？

\ を / に
--

シーンを構築する際に

```python
cmds.setAttr("defaultColorMgtGlobals.configFilePath","<MAYA_RESOURCES>\\OCIO-configs\\Maya2022-default\\config.ocio",type = "string")
```
こんな感じで設定入れてたのですが


```python
cmds.setAttr("defaultColorMgtGlobals.configFilePath","<MAYA_RESOURCES>/OCIO-configs/Maya2022-default/config.ocio",type = "string")
```

に変更してみました。

結果
--

うまくいったよ！
Data Lifecycle Managerを使ってみた

AMIの定期的な取得をする為「Data Lifecycle Manager」を使ってみた。

①「EC2」→「ライフサイクルマネージャー」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/6bda8859-6089-72c3-c781-8eeb314291c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/35a9b758-d31f-3182-1e6d-ab8d5bcc5432.png)

②「EBS-backed AMIポリシー」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/0347dfd7-550b-845e-25dd-8f4581eb74ed.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/be54de3c-7f96-c778-f890-b00b7a657d59.png)

③AMI取得なので「ターゲットリソースタイプ」に「インスタンス」を選択。「ターゲットリソースタグ」にバックアップ対象となるkey/valueを入力。（任意の値で良い。このタグが付いているインスタンスに対してAMIを取得するようになる）「説明」も適当に。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/df42f1c3-05b4-378c-5d81-cb128032dd08.png)

④「IAMロール」はデフォルトロールを選択。但し、事前に作成しておいたものを指定することも可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/786dfc9e-4756-e4e2-e9ea-35dab03961b8.png)

⑤「ポリシーのステータス」は「有効」にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/54a0cba1-0203-ab3b-3789-3f067f171a0e.png)

⑥スケジュールを入力する。毎週日曜日AM3:00に取得する。3世代保管する。
※UTCなので時間の設定は注意。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/ce4e8816-8531-d783-01b7-50d7c57e37d8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/85c25005-79ef-51a8-1993-bd5f67b10d16.png)

⑦設定内容を確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/07d7cda1-7ee1-d7b7-b834-408391a13f7b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/0b573dac-8070-faa8-38e3-9fa67956c7d0.png)

⑧ライフサイクルポリシーが作成された事を確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/41af8d18-196b-db3c-e4af-a1e9eb701343.png)

⑨AMIを取得するインスタンスに上記で設定したタグを追加して完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/261ca87c-fed2-6248-f6ae-c216e43d4e82.png)
mayaでレンダリング結果があわない

maya2022にて

renderSetupを使用したシーンをdeadlineに投げて処理していたある夏の日


**うーん　レンダリング結果がなんか揃わない**

('A)どゆこと?


具体的には
--

- あるPCでは問題なくレンダリング結果が排出される
- とあるPCではなんかやたらと明るくレンダリング結果が排出される

という現象が発生。

問題が発生しないPCのレンダービューで確認すると、やはり問題ない。

とりあえず無関係なmyPCのレンダービューで確認すると・・・・

やったら明るい。

シーンに内包されない設定がある？
--
完全に同じシーンを開いてテストしているので

- レンダー設定
- カラーマネージメント
- renderSetup
- aov

この辺は同一になっているはず。
だとすると一体・・・・・・・なにかプリファレンス的な・・・・？
ライトの強さとか？　デフォルトライトとか？

ここで、報告者が　あ！

そう言えばこれをoffにした記憶がある！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1484234/02a23e71-807b-cb1a-0d0a-b7be26fca1a8.png)
**include all lights in each render layer by default**
シーン内の全ライトを全レイヤーに入れときますねー (デフォルト on

('A)あー・・・・これっすねー・・・・
そしてこれ、シーン内に保存されないのでPC固有の設定。

deadlineのオプションにあったわ
--
そう言えばdeadlineのmayaプラグインのオプションに

**RenderSetupIncludeLights**

ってのがありましたわね。
なるほどこれをsubmitするときにちゃんと取得して渡せば問題なかったのか

各PCの環境設定
--
諸々相談して、デフォルトOFFで良いんではないだろうか？
という結論に至る。

してその方法は・・・・？

https://support.borndigital.co.jp/hc/ja/articles/4411368937241-%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%A7-%E8%A6%8F%E5%AE%9A%E3%81%A7%E5%90%84%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%83%AC%E3%82%A4%E3%83%A4%E3%81%AB%E5%85%A8%E3%81%A6%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%88%E3%82%92%E5%90%AB%E3%82%81%E3%82%8B-%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

**MAYA_RENDER_SETUP_INCLUDE_ALL_LIGHTS**
という環境変数を0 にsetして起動すれば完全に機能を殺せるご様子。
よし、これで。
【MySQL】基礎知識［データ操作 + トランザクション］

### 初学者向け兼個人向けのデータベース知②
+ MySQLの文法などの簡易的まとめ
+ 自分用のメモ(基本コマンドの備忘録）

## データ挿入
#### 全文挿入
全ての列に要素を挿入する
```sql:
INSERT INTO 表名 VALUES(101, 'name', NULL ...);
```
#### 特定列挿入
特定列にのみ要素を挿入する
表名の後ろに挿入する列名を指定し、指定していない列にはNULL値またはデフォルト値が挿入される
```sql:
INSERT INTO 表名(列名1,　列名２) VALUES(値１, 値２);
```
> NULL値を許容しない列に関しては必ずしてしなければエラーを吐く

#### 副問い合わせによる挿入
副問い合わせを用いて既存の列をコピー挿入することも可能である
```sql:
INSERT INTO 表名 SELECT ~~ FROM ~~ ;
```

## データの更新
#### UPDATE
```sql:
/*IDが１０の列を更新する際 */
UPDATE 表名　SET 列名 = 新しい値 Where id = 10;
/*デフォルト値もしくはNULL値に更新したい場合には */
       SET 列名 = DEFAULT/NULL
```


## データの削除
DELETE
> 条件を省くと全行削除になる
```sql:
DELETE FROM 表名 WHERE 条件 
```

## トランザクション
+ トランザクション：DBに対する一連の処理
#### トランザクションの開始
```sql:
START TRANSACTION;
BEGIN (WORK)
```
#### コミット
トランザクションが成功し、一連の処理が確定される
```sql:
COMMIT;
```
#### ロールバック
トランザクションが失敗、一連の処理が取り消される
また、セーブポイントを作成しておくことで任意のセーブポイントまで戻すことができる
```sql:
/* セーブポイントの作成 */
SAVEPOINT セーブポイント名;
/* ロールバックを行う */
ROLLBACK TO セーブポイント名;
```
> セーブポイント作成時に同じ名前のセーブポイントがあった場合前のセーブポイントは削除される。
自己紹介

## はじめに
はじめまして。ご閲覧いただきありがとうございます。
本記事では、どんな人がこの記事を書いているのかを知っていただきたいと思っています。
## 自己紹介
はじめまして! `Satuki_Ebihara`と申します。
新卒一年目のSEです！現在は主に`Vue`を使って画面等のフロントエンドを実装する仕事をしています。
プライベートでは`Java`や`OracleDB`について勉強していきたいと考えています。
## 最後に
経験が浅く、まだまだ知識不足なので、プログラミング学習や資格勉強も行っていきたいと考えています！
よろしくお願いします！
Unity Visual Scripting 自作ユニット内に変数をつくる (IGraphElementData)

## 導入
Visual Scripting で変数を扱うときはグラフ変数やオブジェクト変数を利用する。自作ユニット内のみで使用する変数が欲しいときに共有のものを使うわけにはいかないので、 `IGraphElementData` という形で扱うことができる。
```cs
public interface IGraphElementWithData {
    IGraphElementData CreateData();
}
public interface IGraphElementData { }
```
自作ユニットに `IGraphElementWithData` を実装して、自作 `IGraphElementData` クラスを変数のように扱うことができる。`GraphReference`、`GraphStack` もしくは `Flow` と `Unit` のインスタンスがあればアクセスすることができる。
## テスト
```cs
public class MyUnit : Unit, IGraphElementWithData {
    [DoNotSerialize]
    public ControlOutput Output;
    [DoNotSerialize]
    public ControlInput Input;  
    [DoNotSerialize]
    public int count = 0;
    public string unitid { get; } = Guid.NewGuid().ToString().Substring(0, 5);
    public class Data : IGraphElementData {
        public int count = 0;
    }
    public IGraphElementData CreateData() {
        Debug.Log($"{unitid}: CreateData()");
        return new Data();
    }
    protected override void Definition() {
        Input = ControlInput("Input", f => {
            // ここで変数を取得、インスタンスは勝手に作ってくれる
            var data = f.stack.ToReference().GetElementData<Data>(this);
            data.count++;
            this.count++;
            Debug.Log($"{unitid}: Instance ({count}), GraphElementData ({data.count})");
            return Output;
        });
        Output = ControlOutput("Output");
    }
}
```
![graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512900/eb094af4-23ab-1dab-056e-386e4f1a4b56.png)
テストとして上記のようなグラフを作成して、シーンにキューブ、スフィアを設置してそれぞれにグラフを取り付ける。実行して2回ずつクリックした結果が以下。
```cs
// Run
b73b3: CreateData()
0d8a5: CreateData()
b73b3: CreateData()
0d8a5: CreateData()
// Click Cube
b73b3: Instance (1), GraphElementData (1)
0d8a5: Instance (1), GraphElementData (1)
// Click Cube
b73b3: Instance (2), GraphElementData (2)
0d8a5: Instance (2), GraphElementData (2)
// Click Sphere
b73b3: Instance (3), GraphElementData (1)
0d8a5: Instance (3), GraphElementData (1)
// Click Sphere
b73b3: Instance (4), GraphElementData (2)
0d8a5: Instance (4), GraphElementData (2)
```
`GraphElementData` のスコープ範囲はグラフ変数かつユニットごとになる。
`Unit` のインスタンスはグラフに配置された数だけ存在する。
エンジニアが一応は知っておくべき転職前後のお金の話

こんにちはKaneyasuです。
本記事はお金の話です。
私は最近転職したのですが、転職前後のお金の動きが思ってたのと違ってました。
流石に生活に困ることはありませんでしたが、今時のエンジニアはよく転職されると思うので、転職前後のお金の話はある程度把握しておく必要があるなあと思って本記事を書きました。

なお、本記事は中小企業を中心としたお話しなので、大手企業だと当てはまらない可能性があります。

# すべての企業が「当月締の当月払い」とは限らない。

「当月締の当月払い」とは、労働者が働いた月の給料を、その月の給料日に支払われる方法を指します。
具体的には、労働者が4月に入社し、4月の給料日に4月の基本給が全額支給されることを意味します。

例えば、現職が「当月締の当月払い」だとします。

現職を3月末に辞めるとします。
現職は「当月締の当月払い」なので、3月分は3月に払われます。
4月はもう辞めてるので何か調整は発生するかもしれませんが、基本的にもう給料はもらえません。

この時、転職先も「当月締の当月払い」なら、4月に入社したら4月に基本給がもらえます。
このパターンなら、問題はありません。
しかし、転職先が「当月締の翌月払い」だとすると、**4月はほぼ無収入になります。**

そんなカツカツ状態の人は少ないかもしれませんが、入ると思っていたお金が入らないとかなりメンタルにキます。
一応、転職前は給与制度を確認しておいてください。

# 退職金は全額もらえるとは限らない

退職金のルールは会社ごとで異なるので絶対とは言い切れませんが、
転職＝自己都合退職の場合、退職金は定年退職や会社都合退職に比べてガクッと減る場合が多いです。
従って、大体思ったより少ない金額になります。

そして、これもまた会社によりますが3年目ぐらいまでは退職金は出ません。

なので、辞めた後の当面の生活費に退職金を当てにするのは危険です。
お金に不安があるなら失業保険も調べておく方がよいでしょう。

# 外部積立の退職金は給付まで時間がかかる

会社によっては社内の退職金とは別に、社外の退職金外部積立制度を利用しているところがあります。
中小のIT企業は結構そのパターンが多いのではないでしょうか？

外部積立の退職金は、会社を辞めた時にもらえるとは限りません。
外部積立の退職金を受け取るには、会社ではなく個人が外部の積立先に払い出しの申請を出す必要があります。
親切な会社は退職する人に確認してやってくれるかもしれませんが、優しくない会社はその辺のことは一切説明しないかもしれません。
（私は後者の会社にぶちあたり、外部積立の退職金の存在を辞めて10年後に知りましたw）
積立先に退職金の払い出しの申請を出しても、実際に振り込まれるまでには1〜２ヶ月かかります。
このことも頭に入れておかないと、お金の計算が狂って困ることになるかもしれません。

# 最近は退職金制度のない企業が多い

退職金制度を重要視するかどうかは人によりますが、転職の際は以下のこと頭の片隅に入れておいてください。

- 最近は退職金制度のない企業が多いこと
- 退職金制度がない会社は制度がないことをアピールしたりはしないこと

退職金制度がないけど、退職金のようなものはやっぱりあって欲しい場合は、確定拠出年金などを自分で用意することになるでしょう。
そうすると、その分の金額を差し引いて給料を見ないと実質賃金が前職より下がってしまうことになりかねません。

退職金制度について採用情報に載っていなければ、面接で聞く手があります。
個人的にはその質問はネガティブな質問ではなく、ちゃんと考えてる人だと感じるので大丈夫でしょう。
絶対とは言い切れませんが・・・大丈夫だと思います。

---

以上、エンジニアが一応は知っておくべき退職前後のお金の話でした。
【プロンプト】ChatGPTのCode Interpreterでスムーズにファイルを作ってもらうためのプロンプト【AI】

# 概要
Code Interpreterにファイル群を生成してもらう上での色々な無駄を省くためのプロンプト。
必要によりアレンジしてください。

# 方法
開幕下記プロンプトを送ること。

```
下記を前提として、次から送る依頼を実行してください。

前提
___
・あなたはCodeInterpreter機能により、ファイルの作成や、ファイルをダウンロードできる状態にすることができます
・ファイルを生成する場合、そのコードスニペットを返却しないでください
・ファイルを生成してリンクを作成する場合、こちらへの確認は求めずそのまま実行してください
```


メインプロンプトの例:
```
Laravelで下記処理を行うコードを書いてください。
複数ファイルが必要となるため、すべて生成後、zipファイルを提供してください。
___
毎日2時に実行される集計バッチ
・Purchasesテーブルのレコードのうち、created_atが前日0時～本日0時の間のレコードにおける、priceの合計値を取得
・Salesテーブルに、price=上記値、created_date=前日の日付、であるレコードを追加する
```


# 後書き
改善のための編集リクエストお待ちしています。
Reactでファイルのimportができない

Reactでマークダウン機能を作っている中、returnの内容が表示されなくなってしまったので
こちらに残しておきます。原因に気づくのに結構時間かかってしまって悔しい…

経緯
--------

https://zenn.dev/rinka/articles/b260e200cb5258 を参考に、「`ReactMarkDownEditor.js`」を作成し、`ReactMarkDown.js`に表示させるためにimport処理を行いました。
でも`ReactMarkDown.js`上では何も表示されない…

```:src\pages\ReactMarkDownEditor.js
export const MarkdownEditor = () => {
    const [markdownValue, setMarkdownValue] = useState("Intial value");

    const onChange = (valeu) => {
        setMarkdownValue(valeu);
    };

    return 
        <>
            <SimpleMde value={markdownValue} onChange={onChange} />;
            <div>
                <div dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(marked(markdownValue))}}></div>
            </div>
        </>
};
export default MarkdownEditor;
```
```:src\pages\ReactMarkDown.js
import MarkdownEditor from './ReactMarkDownEditor';

const ReactMarkDown = () => {
  return (<>
<MarkdownEditor />
</>)

// ブラウザ上で何も表示されない
```
原因
--------
`ReactMarkDown.js`でimport処理しているのになんでだろう？って思ったら
returnの部分の記述がおかしかったのが原因でした。

```:誤
    return 
        <>
            <SimpleMde value={markdownValue} onChange={onChange} />;
            <div>
                <div dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(marked(markdownValue))}}></div>
            </div>
        </>
```

```:正
    return( 
        <>
            <SimpleMde value={markdownValue} onChange={onChange} />;
            <div>
                <div dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(marked(markdownValue))}}></div>
            </div>
        </>
    )
```

returnは単一行を返す場合であれば、()の記述はなくても問題ないですが、
複数になる場合は必要になります。
【Ruby】繰り返し処理の制御構造 （で遊んでみた）

# はじめに
- 繰り返し処理の動作を変更するための制御構造について、遊びながら学んでみた
- 学習したことの備忘録

# 主な内容
- break
- redo
- catchとthrow

# break（ひたすらラーメンを完食していくコード）
`break`：繰り返し処理を脱出できる
```rb
ramens = ["豚骨ラーメン", "醤油ラーメン", "塩ラーメン"]
tastes = ["スープを飲む", "麺をすする", "完食！"]
ramens.each do |ramen|
  tastes.shuffle.each do |t|
    puts "#{ramen}, #{t}"
    break if t == "完食！"
  end
end
```
shuffleで、「スープを飲む」, 「麺をすする」, 「完食！」がランダムに入れ替わり、「完食！」でbreakする。それを、「豚骨ラーメン」,「醤油ラーメン」,「塩ラーメン」のそれぞれについて繰り返す。

```:実行結果例
とんこつラーメン, スープを飲む
とんこつラーメン, 麺をすする
とんこつラーメン, 完食！ 　# ここでbreak
醤油ラーメン, スープを飲む
醤油ラーメン, 完食！ 　# ここでbreak
塩ラーメン, 完食 　# ここでbreak
```

# redo（AさんがBさんに仕事を押し付けるコード）
`redo`：繰り返し処理の最初に戻る
>補足
「re：再び」「do：実行する」
```rb
questions = ["案件A", "案件B", "案件C"]
questions.each do |q|
  print "Aさん「#{q}を手伝ってもらえますか？」"
  answer = ["Bさん「今、手が離せないのです」","Bさん「他の方を頼ってください」", "Bさん「良いですよ！」"].sample
  puts answer
  redo unless answer == "Bさん「良いですよ！」"
  puts "Aさん「いや〜さすが！」"
end
```
「redo unless answer == "Bさん「良いですよ！」"」によって、answerが「良いですよ！」になるまで、「print "Aさん「#{q}を手伝ってもらえますか？」"」の部分が繰り返される。まさに地獄のような問答。

```:実行結果例
Aさん「案件Aを手伝ってもらえますか？」Bさん「他の方を頼ってください」
Aさん「案件Aを手伝ってもらえますか？」Bさん「他の方を頼ってください」
Aさん「案件Aを手伝ってもらえますか？」Bさん「今、手が離せないのです」
Aさん「案件Aを手伝ってもらえますか？」Bさん「良いですよ！」 # ここでredo解除
Aさん「いや〜さすが！」
Aさん「案件Bを手伝ってもらえますか？」Bさん「他の方を頼ってください」
Aさん「案件Bを手伝ってもらえますか？」Bさん「良いですよ！」　　# ここでredo解除
Aさん「いや〜さすが！」
Aさん「案件Cを手伝ってもらえますか？」Bさん「他の方を頼ってください」
Aさん「案件Cを手伝ってもらえますか？」Bさん「他の方を頼ってください」
Aさん「案件Cを手伝ってもらえますか？」Bさん「今、手が離せないのです」
Aさん「案件Cを手伝ってもらえますか？」Bさん「他の方を頼ってください」
Aさん「案件Cを手伝ってもらえますか？」Bさん「良いですよ！」　# ここでredo解除
Aさん「いや〜さすが！」
```

# catchとthrow（肉と魚料理を堪能し、デザートとコーヒーでしめるコード）
`catchとthrow`：大域脱出
> ```rb:書き方
>catch タグ do
>    #繰り返し処理
>    throw タグ
>end
>```

```rb
foods = ["お肉料理", "魚料理", "デザート"]
drinks = ["ビール", "ワイン", "コーヒー"]
catch :done do
  foods.shuffle.each do |f|
    drinks.shuffle.each do |d|
      puts "#{f}と#{d}"
      if f == "デザート" && d == "コーヒー"
        puts "お会計！"
        throw :done
      end
    end
  end
end
```
「catch :done do」が始まりの合図。「throw :done」で全ての繰り返し処理を脱出する。つまり、「if f == "デザート" && d == "コーヒー"」が真なら、「お会計！」となって処理が終了。

```:実行結果例
魚料理とビール
魚料理とコーヒー
魚料理とワイン
お肉料理とコーヒー
お肉料理とワイン
お肉料理とビール
デザートとビール
デザートとコーヒー # ここで脱出！
お会計！
```

# まとめ
- 楽しく学習できたので、たまにはこういうのも良いと思った
- 個人的にお気に入りは、redoかな・・・

⚠️学習4ヶ月目の初学者による投稿です。
⚠️間違いがあるかもしれません。ご容赦ください。
⚠️ご指導、ご教授いただけると幸いです。
7. レンダリング

# レンダリング
1. レンダリングなしの場合は赤の箇所を選択します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/571a79a4-deb4-592d-7490-8f618dc8acad.png)

1. 以下を選択するとEevee形式でのレンダリングがなされますが、光源等の細かい設定は反映されていないものになります。。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/e6b84461-bf79-44d6-0c82-c58c8b87564e.png)

1. 以下を選択すると光源を反映したレンダリングがなされます。光源が未設定なので、暗い状況です。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/5f2a89be-502a-a075-e7c6-870a683dafbf.png)

1. [Layout]→[追加]→[ライト]→[サン]を選択し、太陽を光源として追加します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/2b92e858-a35c-06f6-210a-33074f9ca627.png)

1. 光源の強さを適宜反映します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/b0c1b198-f0e2-b77d-bdb8-0ea3bf1bc4b6.png)

1. 光源が反映されると、光源を反映したレンダリングがなされます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/ef8a586f-fe53-eea3-3ef3-930ecceb02d3.png)

1. 次にレンダリング方式の変更を行います。デフォルトのレンダリング形式はEeveeとなっています。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/84d5534c-4799-bcb4-4599-ea74ddcd407e.png)

1. レンダリング形式をEeveeからCycleに変更します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/7f971331-e7aa-3bba-30e0-419a7b421cc8.png)

1. ビューポートの最大サンプル数、レンダーの最大サンプル数を適宜変更します。レンダリングの画質にかかる部分ですが、時間がかかるため、時間を短縮する場合や、光源が明るい場合は、サンプリング数を小さくし、高解像度や光源の光量が少ない場合は、大きくしてください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/725d119f-5fd2-9b47-5811-696449d68355.png)

1. ビューポートの最大サンプル数、レンダーの最大サンプル数を適宜変更します。レンダリングの画質にかかる部分ですが、時間がかかるため、時間を短縮する場合や、光源が明るい場合は、サンプリング数を小さくし、高解像度や光源の光量が少ない場合は、大きくしてください。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/d8cc6a3a-807b-35a1-c70f-8f91144550e8.png)
6. 計算結果の読み込み

# 【iRIC】iRICで計算結果を出力
1. iRICで計算が終了したのち、[ファイル]→[エクスポート]→[計算結果]を選択します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/dd70822f-8be7-374e-935e-92d91b770f08.png)

1. エクスポートで、形式を[CSVファイル]を選択します。出力フォルダは適宜指定します。プレフィックスは変更しないでください。タイムステップや間引き間隔も適宜設定します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/c0c2c440-3008-1d32-5eb1-fc6006779b5f.png)

1. 出力すると指定したフォルダにCSVファイルが出力されていることが確認できます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/336990ad-fdbd-16f7-45fc-8b21d956eaee.png)

# 【Blender】iRiCの計算結果を読み込む（水深はカラーコンターを反映）
1. [iRIC2Blender_setting]→[コンターの水深の設定]を選択し、コンターの最大値（赤色）、コンターの最低値（青色）を設定します。今回はmax_depth=2.0、min_depth=0.01としてます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/f49411a5-3aef-04bd-5fcc-590ce84685b7.png)
   
1. [iRIC]→[3-1-1:Nays2dhの計算結果（水深/Color）の読み込み] を選択します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/07fc1700-d0d4-a4bc-4bd2-00ad2151b7a5.png)

1. iRICで出力した計算結果を保存したディレクトリを開きます。ファイルは指定せずに、読み込みを選択します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/9ab2286f-4114-cdde-f5f5-790e5a2d4c71.png)

1. 読み込みが完了すると、[Result_1]などのコレクションが作成されます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/c662d059-9ed2-47d7-41e8-9eb42a42eed8.png)


1. 赤丸箇所の再生ボタンを押すと、アニメーションが表示されます。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/0f666c0f-a6f6-5b4c-530f-1879be9a144f.png)

# 【Blender】iRiCの計算結果を読み込む（水深は水の色を反映）
1. [iRIC2Blender_setting]→[水の色の設定：]→[water_color]の右にある赤丸箇所を選択し、水の色を設定します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/b972175f-50be-8f99-d4ba-428c42eb2057.png)

1. 色の設定画面が表示されますが、赤丸箇所のペンのマークを選択します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/256617d3-f25e-3965-a4c2-154d990a277d.png)

1. ペンマークで選択した川の色を選択します。一番深い色を選択してください。選択すると、[water_color]の右の赤丸箇所のカラーパネルの色が反映されます。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/f41adf5f-633b-2304-c1ce-56cf56835e7a.png)

1. [iRIC]→[3-1-3:Nays2dhの計算結果[水深/Water]の読み込み]を選択します。
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/f71a29aa-1127-5374-417b-f459f2f40ebf.png)

1. iRICで出力した計算結果を保存したディレクトリを開きます。ファイルは指定せずに、読み込みを選択します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/1aae5708-ef53-2615-5545-7bea78e7bab7.png)

1. 読み込みが完了すると、[Result_1]などのコレクションが作成されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/57bb62e4-c20b-a389-efaf-16fd9d9c1151.png)

1. 赤丸箇所の再生ボタンを押すと、アニメーションが表示されます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3508676/3ecaecf9-cce5-614a-f5a4-377df72b0699.png)
プログラミング入門コース［web制作課題について］

<strong>プログラミング未経験者でもたった8週間でWeb開発可能！</strong>
おっさんでもこうなれるのか:bangbang:
という思いで5／29日（月）からスパルタコーディングクラブの
プログラミング入門コースにて学習を開始しました！
2期目となりますが頑張っていきます！

:arrow_forward: [スパルタコーディングクラブ](https://www.japan.spartacodingclub.com/)
![スクリーンショット 2023-06-04 11.14.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470116/950cc799-f042-9a6f-9811-88ffb8ed7e60.png)

授業においついていない！課題もまだ提出できていない！
プログラミングノートも提出できていない！
というような状況ですが、5週目以降に行う
自主web制作課題について企画を考えました。

## web制作課題
■ webサイトテーマ
必要な情報を入れると、最適な提案をしてくれるサイト
今回はパソコンやデバイスを提案してくれるものを
作成したいと思います。
●入力条件から最適なパソコン・デバイスを紹介する

## 追加したい機能
●選択した項目から最適なデバイスをランキングで表示
下記がざっくりとしたサイトイメージとなります。
本当にやれるのか？？？？？

![Web サイト構築IMG.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470116/0e6bd60f-fe6e-70dd-adee-b059e86bf2ec.jpeg)
visionOSのUIをiOSで試してみる

# はじめに
Appleは、iOSやmacOSなどのApple製品のUIをFigmaで公開しています。その中には、WWDC2023で発表されたばかりのvisionOSのUIもあります。この記事では、「visionOSのUIをiOSで再現するとどうなるのか」という実験をこのFigmaファイルを参考にやってみます。

https://www.figma.com/community/file/1253443272911187215

# ツールバーボタン
visionOSのツールバーボタンは、視線移動により操作がしやすいように大きくなっています。このボタンをiOSで再現すると、このようになりました。

![IMG_CCAED4CB4968-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/4df403a9-52ef-98fe-0b77-98c78db6bda1.jpeg)

少し視認性は低いものの、意外と悪くないですね。ボタンをあまり目立たせず控えめなデザインにしたいときには良いかも知れません。また、単純に大きい分押しやすいこともわかりました。

# シートの角を丸くする
visionOSのUIは全体的に丸っこいです。シートやアラートの角も他のOSと比較してとても丸いです。これをiOSで再現すると、このようになりました。

![IMG_D4BC04AAD081-1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366249/86001772-9655-23c4-4d7c-947d266f9a5a.jpeg)

これはかなり良いですね。iOSでも、AirPodsと接続するときなどにはこのくらい丸いシートが出てくるので、あまり違和感はありませんね。

# まとめ
少し前からやってみたかった、visionOSのUIをiOSで再現する実験をしてみました。全体的に親しみやすいデザインになり、結構気に入りました。この記事が面白いと思った方はいいねとフォローしていただけると嬉しいです☺️
[React] props使い方

# props

> どんな時propsを使いますか？

<br/>


今h4のタグの中にlocationの**State**を使いたいんです。
```react
function App (){
  let [location, setLocation] = useState(['東京', '青森', '大阪']);
  return (
    <div>
      <Modal></Modal>
    </div>
  )
}

function Modal(){
  return (
    <div className="modal">
      <h4>ここ！！！！</h4>
    </div>
  )
}
```

<br/><br/>
普通に**State**を書いたら**エラー**が発生します。
```react
<h4>location[0]</h4> // エラー
```

この時**props**を使って**state**を**component**に渡します。


<br/><br/>

> step1. **タグにstateを渡す**

<br/>

新しい変数名={渡すStateの名}
普通は**同じ**にします。
```react
function App (){
  let [location, setLocation] = useState(['東京', '青森', '大阪']);
  return (
    <div>
      <Modal location={location}></Modal> //ここです!!!!!
    </div>
  )
}

function Modal(){
  return (
    <div className="modal">
      <h4></h4>
    </div>
  )
}
```

> step2. **渡したstateをcomponentでもらう**

<br/>

パラメータをpropsとしてもらって、
props.statenの名で使えます。
```react
function App (){
  let [location, setLocation] = useState(['東京', '青森', '大阪']);
  return (
    <div>
      <Modal location={location}></Modal> 
    </div>
  )
}

function Modal(props){ //ここです!!!!!
  return (
    <div className="modal">
      <h4>{props.location[0]}</h4> //ここです!!!!!
    </div>
  )
}
```
WebAPI（REST）について

お疲れ様です。Chamujiです。
今回はRESTAPIについて学習したことを備忘録として残そうかと思います。

# WebAPIについて
```
HTTP・HTTPS通信によってやり取りするAPIのこと

プログラミング言語が異なるアプリケーション同士であっても連携できる他、Webブラウザでも利用可能

```

## 思想設計
今回RESTAPIについて話をするが、私は最初RESTAPIという種類のAPIが存在するのだと思っていた。
実際はそうではなく、RESTはAPIの設計の思想であることが分かった。マジで赤面。

## REST API (RESTFul API)
- **REpresentational State Transfer**の略称
    - **REpresental： 具象化された**
    - **State：状態**
    - **Transfer：転送**

翻訳すると、**具象化された状態を転送するAPI**となる。。。。
余計わからなくなったのでもう少し深掘りする。

## RESTの4原則
- HTTPを設計した中心人物であるRoy Fielding氏が2000年に提唱したもので下記の4つがあげられる。

|      |            |  
| ---  | -----------|
| アドレス可能性<br/>(Addressablity)|全てのリソースが一意なURLを持っている<br/>（提供するリソースは全てURIで表現できる） |
| ステートレス性<br/>(Stateless)|セッション管理や状態管理などはしない<br/>（情報を保持せずやり取りは1回ごとに完結する） |
|接続性<br/>(Connectable)|やり取りされる情報に別のリンク（ハイパーリンク）を含めることができる<br/>１つのリンクから別の情報にリンク(接続)することができて、RESTfulなシステム同士なら円滑に情報連携を行うことができる|
|統一インターフェース<br/>(Uniform Interface)|リソースの操作（取得、作成、更新、削除）はHTTPメソッド（GET、POST、PUT、DELETE）を利用し、結果はXMLやHTML、JSONなどで返されるといったルールで値を返す|

上記4点を満たすものをRESTAPIやRESTFULAPIと呼んだりする。


![スクリーンショット 2023-07-17 18.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487318/d64cc4de-0f43-8457-f5fc-7f14bc2286e8.png)
引用:https://tech.012grp.co.jp/entry/rest_api_basics

## RESTのメリット
■ **モバイルアプリなどの他システムとの連携が容易になる**
HTTPリクエストに対し、JSON形式やXML形式といった、軽量のデータのみを返すため、加工が容易で、通信環境が悪い場所であっても「待機時間が長くなる」や「操作性が低くなる」といった不具合が起こりづらくなります。

■ **アプリケーションの中のリソースが容易にわかる**
アドレス欄に入力すれば、そのリソースを参照できるため、どのリソースを操作しようとしているかがひと目でわかる。

■ **標準的なAPIの提供**
RESTの思想に基づいたAPIを公開することで、標準的なデータフォーマットを使い、多様なアプリケーションを提供することができる。

## RESTのデメリット
■ **実装ルールの統一性がない**
実装ルールに統一性がないため、「十分に理解しないまま作られた、あやふやなRESTful APIが増えている」という弊害も生じる。

■ **仕様や定義に関する要素がない**
ドキュメントと実装したときの乖離が発生しやすくなり、外部プログラムが動作を読み取ったり、想定したりすることができないというデメリットが生じる場合がある。



## まとめ
次回はもう少しRESTについて説明を記載する。





## 参考文献

REST APIとは？ざっくりと理解してみる【初心者向け】
https://tech.012grp.co.jp/entry/rest_api_basics

API・Web API・REST APIの概要や違いについて整理する
https://mintaku-blog.net/api-difference/
【Linux】よく使うファイル操作系のコマンド集


よく使うファイル操作系のコマンドをまとめる

# mkdir コマンド
## ディレクトリを作成する

```
$ mkdir [オプション] <作成するディレクトリ例>
```

* コマンド例
  * work ディレクトリを作成する
```
$ mkdir work
```

### 深いディレクトリを一度に作成する場合

* -p オプションを指定する
```
$ mkdir -p 2023/06/work
```

# touchコマンド
## ファイルを作成する

```
$ touch <新しいファイル名1> <新しいファイル名2>
```

* コマンド例
  * file1 ファイルを作成する
```
$ touch file1
```

# rmとrmdirコマンド
## ファイル・ディレクトリを削除する

```
$ rm [オプション] <削除するファイル名1> <削除するファイル名2>
```

* コマンド例
  * file1 ファイルを削除する
```
$ rm file1
```
ベクトルタイルの魅力と実践：Raspberry PiとIPFSを活用したウェブ地図


今回はIPFSとRaspberry Piで運用されるベクトルタイルのウェブ地図についてお話しします。最近、私たち国連スマート地図グループでは、Raspberry PiとIPFS（InterPlanetary File System; 惑星間ファイルシステム）を活用してベクトルタイルの実践を行っています。最新の実践は、次のリンク先にあります。

https://smb.optgeo.org/ipfs/QmdPqXGTh1hLdkkPqjLdaJFG1rA8c3UEtUbx1e95pLvtTG/#12.06/-1.45158/-48.46963

このリンクは、Brave のような IPFS 対応済みのブラウザでアクセスすると「ipfs://bafybeig7wbc5gd7oty5l36643o66n75jmtbzv6rzre2kop232vhoynjm64/#12.06/-1.45158/-48.46963」のようにURLが書きかわり、ブラウザまでIPFS経由でタイルが届きます。かっこいいですね。この機会に、ベクトルタイルの魅力とRaspberry Pi、IPFSの役割について詳しくご紹介します。

ベクトルタイルは、地理空間情報をベクトル形式で表現することができるデータ形式です。その特徴としては、データの効率的な転送、柔軟なスタイリング、高品質なレンダリングなどがあります。ウェブ地図でベクトルタイルを利用することで、より滑らかで高速な地図表示やインタラクティブな操作が可能になります。

この実践では、Raspberry Piを利用してIPFSノードを構築し、ベクトルタイルデータをホストしています。Raspberry Piは省電力で手頃な価格ながら、ウェブ地図の小規模なホストには耐えられる処理能力を持っています。IPFSは分散型ファイルシステムであり、データを分散して保存することで高い信頼性と可用性を実現します。

具体的には、Raspberry Pi上で動作するIPFSノードによって、ベクトルタイルデータがホストされています。IPFSの分散ネットワークを通じて、地図データを効率的に配信し、ウェブ地図の表示を可能にしています。これにより、データのセキュリティやパフォーマンスが向上し、ユーザーはスムーズな地図体験を得ることができます。

また、この実践では、[Protomaps Basemaps](https://github.com/protomaps/basemaps)というベクトルタイルセットを利用しています。Protomaps Basemapsは、BSD 3-Clauseライセンスで提供されており、高品質な地図データを提供してくれます。このベクトルタイルセットは、Open Database Licenseのプロダクションワークとして配布されており、冒頭のデモサイトでそうしているように、OpenStreetMapの属性表記が必要です。

Raspberry PiとIPFSの価値は、この実践において大きいと考えています。Raspberry Piの低コストかつ高性能な性能は、ウェブ地図の実現において貴重な役割を果たしています。また、IPFSによる分散型ファイルシステムは、データの信頼性と可用性を高めることで、安定した地図配信を実現しています。

ベクトルタイルの魅力とRaspberry Pi、IPFSの活用によって、私たちはより効果的なウェブ地図の実現を追求しています。新しい技術とアイディアを組み合わせることで、地理空間情報の表現方法や利用体験を向上させることができるのです。

以上が、ベクトルタイルの魅力とRaspberry Pi、IPFSを活用したウェブ地図の実践についての説明です。この実践を通じて、より良い地図体験を提供し、地理空間情報の利活用に貢献していきましょう。ご意見やご質問がありましたら、お気軽にお知らせください。

国連スマート地図グループは常に新しい参加者を求めています。我々の活動には、https://github.com/unopengis/7/issues 等から参加いただくことができます。
APIについて

お疲れ様です。Chamujiです。
今回はAPIとについて学習したことを備忘録として残そうかと思います。

# APIとは
**Application Programming Interface**の頭文字をとった名称。
## なんすかそれ？
```
あるソフトウェアやプログラムが持つ情報を、別のプログラム上で利用できるように繋ぐ仕組みのことを指す。
```

**3点ほど身近に使われているAPIの例を挙げます。**

**※これらは後で紹介するWebAPIです。**
- **GoogleMapsAPI**
    - 個人のブログや企業のWebサイトにマップを表示しているのをよく見かけます。
- **TwitterAPI**
    - 国内人気ドラマの公式サイトなどでドラマの公式アカウントツイートが表示されるのを見かけます。
- **SquareAPI**
    - レベルの高いセキュリティを提供しているクレジットカード決済サービス。ECサイトなどの決済でよく見かけます。


## 何故APIを使うのか？

- APIを利用するメリットは３点ある。
    **1. ユーザーにUXを提供できる**
ECサイトの会社情報を作成する際に、住所をラベル表示して終わるよりも
地図を画面に表示するとユーザーに視覚的に理解してもやすいといったことが挙げられる。
    **2. 開発の生産性向上**
ECに決済機能が必要だが、APIがない場合、自社で1から作成が必要になり、人も時間も必要になる。
APIを利用すれば、決済機能の開発を簡略化する可能となり、開発コストの削減・業務効率化が可能。
    **3. セキュリティレベルを高くすることが可能**
決済サービスなどは、レベルの高いセキュリティの設計・開発を求められる。
自社で十分なセキュリティレベルを担保できない場合でもAPIを組み込めば、API側でセキュリティの高い運用が可能となる。



以上がAPIについての備忘録。
次にページでWebAPI（REST）について記載する。
GitHubへの登録

<h1>はじめに

<p>GitHub（GitHub Pages）にて、静的ページ（今回は、.html, .cssを自作したポートフォリオ）を公開する手順になります。
<br>本稿では、まずはGitHubへの登録方法を記載します。

<p>Qiitaベテランの諸先輩方には、無用の記事かと思いますが、備忘のため＆Qiita勉強ということで温かく見守っていただければ幸いです。


<h1>1. GitHubにアクセス

<p>登録するため、GitHubにアクセスします。

▶[**GitHub**](https://github.com/)

<p>次に、右上の【Sign up】（サインアップ; 登録）をクリックします。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512773/a8b14d7e-165e-edcf-bc1f-7540ae0ea4c4.png)


:::note warn
上記のスクリーンショットは、2023-07-17時点のデザインです。
大幅に変わることがありますので、ご留意ください。
（デザインが変わった場合でも、Sign upのボタンをクリックすれば問題ありません）
:::

<h1>2. 情報を入力

<p>登録情報を入力します。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512773/78978e87-4800-f871-34dc-7b24264c35d5.png)

:::note info
上記のスクリーンショットは、全て情報の入力が終わった後の画面です。
実際には、メールアドレス、パスワード、ユーザー名の入力と、順番に（画面ごと）に進んでゆきます。
:::

:::note alert
ユーザー名（username）は、GitHub Pagesでのサイト公開時にURLの一部となります。
ポートフォリオサイトとして公開するURLに含まれることを念頭において、ユーザー名を決めてください。
:::

<h1>3. 認証コードを入力

<p>情報の登録後に登録メールアドレスへ送られる、認証コードを入力します。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512773/e4b960ce-d69e-cad9-2946-c5f0ec16128e.png)

:::note warn
認証コードは即時に送られるように思います。
送られてこない場合は、迷惑メールフォルダをご確認ください。
見当たらない場合は、メールアドレスが間違っていないか確認してください。
:::

<h1>4. アンケート回答、プランの選択

<p>認証コード入力後、パーソナライズ（アンケート回答）と、プラン（無料 or 有料）の選択を行います。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512773/822579df-6126-6a8b-2b68-e42f1fb9253f.png)

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512773/defeccdb-000b-4d50-e695-9c021547b232.png)

<h1>5. アカウント作成、ログインの完了

<p>プラン選択後、Dashboard（ダッシュボード；おそらく白い画面です）が表示されたら、アカウント作成が完了です。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3512773/f4517247-31d3-d388-3381-71b2b7a7630a.png)

:::note info
これで、アカウント作成が完了です。
お疲れ様でした。
:::

<h1>おわりに

<p>以上で、GitHub（GitHub Pages）にて、ページを公開する前段階である、GitHubへの登録が完了しました。

<p>次稿では、実際のページの公開手順をご紹介しようと思います。
割込みの種類

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/9e37b4bc-3114-2569-b1a9-31258687c36e.png)
１：割り込みとは
　イベントが発生したことをCPUに通知するための合図です。割込みが発生すると、CPUは、現在実行中のプログラムを一旦停止して、割り込みの対応をします。割込みの対応が終わると、一旦停止したプログラムを再開します。割込みが発生した時に実行するプログラムを「割込みプログラム」と言います。割込みを使えば、CPUが何をしていたとしても、,ただちに割込プログラムを実行させつことができるのです。

２：割込みの種類
①内部割り込み：プログラムを実行した結果として発生する割込みです。したがて、プログラムを実行していなければ内部割込みが発生することはありません。

　・SVC割込み：OSのシステムコール命令の一種であるSVC（スーパバイザコール）の実行によって発生する。システムコールシステム命令とは、OSが提供する機能を呼び出す命令である。

・プログラム割込み：０除算、オーバフローなどのプログラムのエラーで発生する。

・ページフォルト：要求したページが主記憶上に存在しない時に発生する。

②外部割込み： CPUに接続されている周辺装置の状況に応じて発生させる割込みです。プログラムの実行と関係なく発生します。

・入出力割込み：入出力動作の完了時（キーボードを押した時など）に発生する。

・タイマ割込み：指定した時間が経過した時に発生する。

・機械チェック割込み：ハードウェアの異常時に発生する。
postgresqlその①　インストールと簡単なセットアップ

色々データベースを学習しようとして
postgresqlに手を出してみた。

yumでインストール

```
yum install postgresql*
```


インストール後に起動するがエラー。。。。
おいおいいきなりかよ

```
[root@XXXX postgresql-setup]# systemctl start postgresql
Job for postgresql.service failed because the control process exited with error code.
See "systemctl status postgresql.service" and "journalctl -xe" for details.
```

調べたらすぐに解決

https://ameblo.jp/yukozutakeshizu/entry-12491123170.html


```
postgresql-setup initdb
```

あとは以下のサイトを参考にセットアップ

https://www.server-world.info/query?os=CentOS_7&p=postgresql&f=1

## 再度サービスを起動

```
systemctl start postgresql
systemctl status postgresql

```


## ではログイン方法

```
su - postgres
psql
```

## ユーザ情報取得

```
select usename from pg_user;
select * from pg_user;
SELECT * FROM pg_shadow;
```

https://db.just4fun.biz/?PostgreSQL/PostgreSQL%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E4%B8%80%E8%A6%A7%E6%83%85%E5%A0%B1%E3%82%92%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95

## データベース情報
```
\l
```

## ログアウト

```
\q
```


https://www.javadrive.jp/postgresql/

https://www.javadrive.jp/postgresql/database/index1.html
RubyでAtCoder ABC293(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC293のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A - Order Something Else
https://atcoder.jp/contests/abc310/tasks/abc310_a
```ruby:a-293.rb
n, a, b = gets.split.map(&:to_i)
d = gets.split.map(&:to_i).sort

discounted_price = d[0] + b
puts a <= discounted_price ? a : discounted_price
```

# B - Strictly Superior
https://atcoder.jp/contests/abc310/tasks/abc310_b
```ruby:b-293.rb
n, _ = gets.split.map(&:to_i)
array = Array.new(n){ gets.split.map(&:to_i) }

array.permutation(2) do |pi, pj|
  next if pi[0] < pj[0]
  next if (pi[2..] - pj[2..]).size > 0

  if pi[0] > pj[0] || (pj[2..] - pi[2..]).size > 0
    puts "Yes"
    exit
  end 
end
puts "No"
```
## 解説
３つの条件について全探索することで判定することができます。

# C - Reversible
https://atcoder.jp/contests/abc310/tasks/abc310_c
```ruby:c-293.rb
n = gets.to_i
array = Array.new(n){ gets.chomp.chars }.uniq

hash = {}
array.each do
  next if hash[_1] || hash[_1.reverse]
  hash[_1] = true
end
puts hash.size
```
## 解説
連想配列を用意して、`array`の各要素についてその前までにそれ自身または反転させたものがあったかどうかを判定し、その結果で適宜要素を`hash`に追加していくことで答えが求まります。

※ `combination`メソッドと`count`メソッドを使ってもいけるか試しましたが、２つTLEしてしまいました...

https://qiita.com/shoya15/items/50fd17e37d7c64f2b166
Hyper-Vの仮想ハードディスクとは

## 仮想ハードディスクとは
物理ハードドライブと同等の機能を持ちます
主に Hyper-V 仮想マシンで使用するように設計されたディスクイメージファイルの形式です
仮想ハードディスクは仮想マシンにマウントして使用することができます
仮想ハードディスクは1ファイルとしてその他のファイルと同様に物理的なストレージ上に配置して管理することが可能です
既存の仮想ハードディスクから仮想マシンを作成することが可能です

## .vhd, .vhdx形式
.vhd は Virtual Hard Disk の略で、仮想ハードディスクのファイル拡張子です
.vhdx は .vhd の後継として開発されたファイル形式です
.vhdx ファイルからは Windows のネイティブブートが可能となります
(参考：[VHDX (ネイティブ ブート) による Windows の展開](https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/deploy-windows-on-a-vhd--native-boot?view=windows-11))

## 参考文献
- Microsoft. [仮想ハード ディスク (VHD) の管理](https://learn.microsoft.com/ja-jp/windows-server/storage/disk-management/manage-virtual-hard-disks).
- Microsoft. [VHDX (ネイティブ ブート) による Windows の展開](https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/deploy-windows-on-a-vhd--native-boot?view=windows-11).
# 大規模言語モデルと知識グラフの併用・相乗効果

## 大規模言語モデルと知識グラフについて

今回は、最近読んだ論文の中で印象に残ったものを紹介します。
あくまで、大まかなイメージをつかむもので詳細には踏み込みませんが、大規模言語モデルの長所と欠点、知識グラフの長所と欠点をそれぞれ説明した上で、お互いに補い合いながら事実に基づいた質問応答や推論などの言語タスクをこなしていく上での課題を取り上げたものになります。

まず査読前論文のarxivで共有されている[Unifying Large Language Models and Knowledge Graphs: A Roadmap](https://arxiv.org/abs/2306.08302)へのリンクを掲載します。

著作権の観点から、論文を読んだ上で私が理解したことや感じたことを中心に紹介していきますが、一部簡単な図などを引用する箇所もあります。
もし著作権者様やその関係者が問題だと感じられた場合は、お伝え頂ければ謹んで当該箇所を取り下げさせていただきます（今回引用した図は、そのままのものではなく私が作成した２次的な図になります）。


まず、現状における大規模言語モデルの長所と短所についてです。

## 大規模言語モデルの長所・短所

## 長所：

### ・一般的な知識

### ・言語処理

### ・汎化性能

## 短所：

#### ・暗黙知

#### ・幻覚現象（言語モデルが事実とは異なる内容を創作する現象）

#### ・非決定論的な性質（入力が同じでも必ずしも結果が同じにならない確率論的な性質）

#### ・ブラックボックス

#### ・特定ないしは固有の領域における詳細もしくは新たな知識の欠如

上記に挙げたような大規模言語モデルの持つ性質は、結果が重大な損失をもたらしうるようなミッションクリティカルな分野での大規模言語モデルの信頼性を大きく損なうものです。

大規模言語モデルは、自己アテンション機構を用いたトランスフォーマー型のニューラルネットワークを使用しているという性質から、出力される文章はあくまでも第一に確率統計学的に尤もらしい文章である事が最優先されるため、出力された文章が事実であるかどうかには、そもそも主眼が置かれていないという理由があります。

とはいえ無論、大規模言語モデルは学習の過程で事実を含む大量のテキストから学習しているため、その結果として事実を含む内容を生成することもまた事実で、この事が近年大規模言語モデル、例えばChatGPTやBERT、RoBERTA、T5、PaLM2といった大規模言語モデルが注目を浴びるようになった原因でもあります。

一方で古くからある分野として、構造化された知識を体系立てて組み立てる「知識グラフ」というものがあります。


## 知識グラフ（Knowledge Graphs）の長所・短所としては以下のようなものが挙げられます

知識グラフは大規模言語モデルほど近年注目を浴びるようになったものではなく、従来から存在した概念で、情報を整理し、関連性を明確にするためのデータ構造をイメージするといいでしょう。

それらは「事実」や「概念」といった「ノード」と呼ばれるものと、それらの間の関連を示す「エッジ」により構成されます。

### 知識グラフの長所と欠点

## 長所

#### ・構造化された知識

#### ・正確性

#### ・決定論的な性質

#### ・（人間にとって）解釈が可能な性質

#### ・特定ないしは固有の領域における詳細もしくは新たな知識を持つこと

#### ・進化する知識（時間の移り変わりと共に内容が変化していく性質のこと。常に新しい知識を持つ性質）

## 短所

#### ・不完全性

#### ・言語理解の欠如
##### 特定の表現でのみ表され、人間にとって言い換え可能な他の表現でも同様に正しいのかどうか分かりにくい性質

#### ・推論によって自明な事実
##### これは直接文章には書かれていないものの推論によって導く事が出来る新たな事実を、自動的に捉える能力に限りがあるという意味になります。


# ここまでの要約
この大規模言語モデルと知識グラフの長所と短所は相互補完的であり、この２つを有意義に組み合わせるもしくは相乗効果を得るような使い方をすることで、大規模言語モデルの長所を最大限に活かし、知識グラフの持つ解釈可能性や正確性を担保しつつ、柔軟な言葉の言い回しを用いても質問に正確に答えられるようになるという将来の研究のロードマップを示したものが本論文の要旨になります。

![LLMs&KGs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70882/4e114012-6ec0-77a6-33d1-d037786ae2f9.png)

この２つの技術をどのように組み合わせるのがよいかというのは、学者の間でも意見が分かれるところで完璧な解決策への道は示されていませんが本論文では主に、

#### "KG-enhanced LLMs" 「知識グラフにより強化された大規模言語モデル」

#### "LLM-augumented KGs" 「大規模言語モデル拡張型知識グラフ」

#### "Synergized LLMs + KGs"　「相乗効果型・大規模言語モデルと知識グラフ」

の３つを軸にして将来の研究のフォワードルッキングな展望を示しているものとなります。

上記の３つのうち比較的実用化が進みつつある（ないしは最も実用化が進んでいる）ものが、知識グラフの情報を拡張する「LLMs-augmented KGs」で、関連性のある文章を大規模言語モデルに提示して、提示した文章に記載された事実から、質問者の質問に応答するいわゆる検索（リトリーブ）といわれる分野になります。

大規模言語モデルと知識グラフの相互補完性については興味深い点もあるため、また機会があったら触れようかと思います（正確さを目指すあまり、身構えてしまって新規記事の掲載がなかなか進まないのは最新技術で解決出来ないものでしょうか💧）
伝習：理念・実演・説明のバランス


国連スマート地図グループでは、「伝習」によって実践コミュニティを拡大していきたいと思っています。「伝習」のプロセスで重要な要素と思われる①理念、②実演、③説明のバランスについて、このエントリーでは考えてみたいと思います。私たちは、ウェブ地図の知識やスキルを伝え合う「伝習」を実践するためには、これらの要素のバランスを取ることが重要だと考えています。

我々の国連スマート地図グループは、理念として「より良い世界のためにウェブ地図を開かれたものに保つ」というビジョンを持っています。また地理空間情報の運用において、未来を見据え新技術を試みるというミッションを定義しています。私たちは伝習を通じてこの理念を実現し、拡大しようとしています。

実演（デモンストレーション）は伝習をインパクトある形で具体化する重要な手段であると思っています。実際の場面で行動や手法を示すことで、学習者は直感的な理解を得ることができます。しかし、実演だけでは学びは困難です。説明する気がないならば、実演の成果が広く伝わるということはありません。実演者も、自分が何を実演したのか早々に忘れてしまうことでしょう。実演には、説明が随伴するべきでした。

説明は実演の背後にある理論や原則を明確にし、より深い理解を促進することができるはずです。学習者がなぜその行動や手法が有効なのかを知ることで、より広範な応用力を身につけることができます。また、実演者も、自分の行動や手法を振り返ることができ、さらに高いレベルの応用力を身につけることができるでしょう。実演者と学習者がそれぞれのレベルにおいて成長を遂げることにより、伝習が成立し、実践コミュニティがその存在価値を持ち、それによって持続することになります。

私自身は説明をするよりも次の実演に移りたい性格が強いので、これまで説明が十分ではなかったと反省しています。そこで、説明を効率的に作り出すために、実演の振り返りを熱いうちに大規模言語モデルに入力していくことで、説明を生成してみるというアイディアを取り入れることにしました。これにより、実演から得たフィードバックや洞察を高速に言語化し、より具体的な説明を学習者に提供できる可能性があると思っています。実際には、生成した説明に大幅に手を入れて、それをさらに大規模言語モデルに校正してもらう、といった対話的なプロセスを用いることになると思います。

これまで行ってきた数々の実演を反省する中で、私は説明の不足が伝習の失敗と実践コミュニティの不完全さに繋がっているという仮説を持つことができました。実演の振り返りを通じて得られるフィードバックや経験を大規模言語モデルに入力し、適切な説明を生成してみたいと思います。これによって、実演の意図や背景をより明確にし、学習者に深い洞察を提供することができるのではないかと思います。

伝習の道の中で、理念・実演・説明のバランスを保つことが重要であると思います。私たちは伝習を通じて知識やスキルを伝え合う際に、このバランスを意識し続けたいと思います。我々の理念に基づき、実演を通じて学びを具体化し、大規模言語モデルを活用して実演の振り返りから説明を生成し、技術の進歩につながる洞察を得ることができるのではないかと思います。

未来の地理空間情報運用のために、国連スマート地図グループは新技術に積極的に挑戦し、学びを進化させていきたいと思います。自己の学びのプロセスにおいて、理念・実演・説明のバランスを取りながら、より開かれたウェブ地図の実現に貢献しましょう。

国連スマート地図グループは常に新しい参加者を求めています。我々の活動には、https://github.com/unopengis/7/issues 等から参加いただくことができます。

追伸：最近の実演例です。

https://smb.optgeo.org/ipfs/QmdPqXGTh1hLdkkPqjLdaJFG1rA8c3UEtUbx1e95pLvtTG/#12.06/-1.4501/-48.46749
Raspberry Pi 4B上のIPFSノードに全世界をカバーしたベクトルタイルをホストして分散ウェブ技術でウェブ地図を実現しています。今後、これについて説明を生成することを考えると良いのだろうと思っています。