OmniAICreator/Qiita-1.07M huggingface dataset:
iPaaSを使って推しメンのグッズを探しやすくしてみた

## Twitterでのグッズのトレード文化について
突然ですが、オタクには色々な種類の人がいます。
ひたすらアニメを見たりゲームをしたりする人もいれば、とにかくイベントに通うことを生きがいにしている人もいます。そして、自分の好きなジャンルや推しのグッズを収集することに命をかけている人もいます。

僕の友人の中にもアイドルのグッズを集めている人がいるのですが、自分で公式販売から購入するだけでなく、多くの種類があるにも関わらずランダムでしか購入できないブロマイドやトレーディングカード等のグッズは他の人とトレードすることがよくあるそうで、トレード相手は基本的にTwitterで探すとのこと。
新しいグッズが出るとひたすらTwitterの検索機能で対象のグッズを交換に出している人を探すものの、人気やレア度の高いものはすぐ交換相手が見つかってしまい、**ツイートされてからすぐにコンタクトをとらないとなかなかトレードしてもらえない**そうです。

そんな友人のために、今回は**iPaaS**の一つである**IFTTT**を使って、トレード相手を簡単に素早く見つけるためのサービスを作ってみました。

## トレード相手募集のツイートがされたら通知するサービス
作ったものはこちらになります。
↓のようにトレード相手募集のツイートがされると、、、
![ti.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607554/f8444002-1e81-3340-4985-08333dd09d2a.png)
IFTTTで検知してLINE Notifyで通知されます。
![linet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607554/776117f6-bebc-253e-f751-814742cf14d4.png)
これらの動作を図としてまとめると、以下のようになります。
![画像5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607554/fac99560-daff-e5bb-5f76-03f5609263c7.png)

## 環境
IFTTT
LINE Notify

## 実装
今回、IFTTTを使うことで完全ノーコードでのサービス実装が実現できています。
![iftttss.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607554/053a4f12-4f11-ce2c-5674-3b1a6fa759dc.png)
「Search for」という欄で、ツイートを検知するための検索ワードを設定しています。
※アンジュルムは友人が好きなグループ、ピンポスはピンナップポスターの略で友人が現在メインで集めているグッズになります。

## 使ってもらった感想
実際に友人にもLINEの通知が行くようにしたのですが、設定してから数時間で数件の通知が来ていました。普段は新しいグッズが発売されたり、イベントの時期が近づいてくるとTwitterと頻繁ににらめっこしているそうで、このように通知が来るようになるとその時間が省けて助かると大変好評をもらえました！

## あとがき
今回実装にかかった時間はものの5分程度なのですが、これまで時間がとられていた作業が簡単に効率化できたということで、その絶大な威力に衝撃を受けました。
今回はたまたま友人の困りごとがハマったのでそれをテーマに使ってみましたが、IFTTTには他にも様々なサービスと連携することができるようなので、もしいい題材が見つかったら今後も積極的に活用していきたいと思います。

また今回、同じようなiPaaSサービスの一つであるMakeを使って作成したサービスについての記事をもう一本投稿しているので、併せてお読みいただけると嬉しいです。

https://qiita.com/KendoLab/items/dd5ae3df04e142d3de98

以上、ここまでお読みいただきありがとうございました！
PHP7.4のクラス継承で注意すべきこと：バグなのか、仕様なのか？

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|---|

PHP7.4で継承を使っていると、アクセス修飾子でおかしな挙動がある。バグなのか、仕様なのか分からないが、注意が必要である。

## Userクラス単独でのテスト

まず、Userというクラスを定義してみる。idとnameを属性に持たせる。
```php
<?php
namespace samples;
class User {

  private $id;
  private $name;      // ここをprotected,publicに変えてテスト
  
  public function __construct(string $id, string $name) {
    $this->setId($id);
    $this->setName($name);
  }
  public function getId(): string { return $this->id; }
  public function getName(): string { return $this->name; }
  public function setId(string $id): void { $this->id = $id; }
  public function setName(string $name): void { $this->name = $name; }
}
```
以下のようなテストコードを実行してみる。name属性の変更を試みる。
```php
$user = new User('U001', 'Aさん');
$user->name = '山本さん';     // private,protectedだと、ここでエラー
$user->setName('池田さん');
var_dump($user);
```
すると、privateな属性に代入しようとしているのでエラーになる。これは正しい動作である。
```
Fatal error: Uncaught Error: Cannot access private property 
samples\User::$name in samples\User.php
```
ちなみに、宣言をprotectedに変えても同様なエラーが出る。そして、publicに変えると正常に動作して、以下のようなvar_dump()の結果が表示される。一旦、山本さんに変更され、その後で池田さんに上書きされる。正しい挙動である。
```
class samples\User#1 (2) {
  public $id =>
  string(4) "U001"
  public $name =>
  string(12) "池田さん"
}
```
ここまでは問題ない。

## Identifierを継承したUserクラスでのテスト

次に、Identifierというクラスとそれを継承したUserクラスで試してみる。
まず、Identifierというクラスを作る。前述のUserをリネームして、abstractを宣言したものである。
```php
<?php
namespace samples;

abstract class Identifier {

  private $id;
  private $name;
  
  public function __construct(string $id, string $name) {
    $this->setId($id);
    $this->setName($name);
  }
  public function getId(): string { return $this->id; }
  public function getName(): string { return $this->name; }
  public function setId(string $id): void { $this->id = $id; }
  public function setName(string $name): void { $this->name = $name; }
}
```
次に、Identifierを継承したUserクラスを作る。継承をイメージしやすいようにmail属性を追加してみる。
```php
<?php
namespace samples; 
require_once(__DIR__."/Identifier.php");

class User extends Identifier {

  private $mail;
  
  public function __construct(string $id, string $name, string $mail){
    parent::__construct($id, $name);
    $this->setMail($mail); 
  }
  public function getMail(): string { return $this->mail; }
  public function setMail(string $mail): void { $this->mail = $mail; }
}
```
この状況で、前述のテストコードと同等のことを行ってみる。
```php
$user = new User('U001', 'Aさん', "aaa@xxx.com");
$user->name = '山本さん';
$user->setName('池田さん');
var_dump($user);
```
結果は、以下のようになる。エラーにはならない。
```
class samples\User#1 (4) {
  private $mail =>
  string(11) "aaa@xxx.com"
  private $id =>
  string(4) "U001"
  private $name =>
  string(12) "池田さん"
  public $name =>
  string(12) "山本さん"
}
```
「`$user->name = '山本さん';`」の実行では、privateな属性なのでアクセスできないかと思えば、勝手に新たなpublicな`$name`という属性を追加しているのである。継承元を探索できていない。また、おそらく、PHPでのクラスの実装はarrayを使っていて、アクセス修飾子＋属性名で識別しているのだろう。PHPのバグなのか、仕様なのかは分からない。

PHPでクラスを扱うときは、アクセス修飾子を信用せずに、setter/getterをきちんと定義して使用しないと危険である。

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|---|
Azure Remote Rendering の REST API コールを Azure Logic Apps で自動化しよう！

※本記事は2022年6月17日時点の情報を元に書かれています。

# はじめに
本記事は完全に**備忘録**です！
Azure Logic Appsに詳しい方ならわざわざ記事にするまでもないと感じるかもしれませんが、一瞬でサクッと自動化ワークフローが作れたことに感動したので記事にすることを決めました。

Azure Remote Rendering(ARR)で [点群データサポート(Preview)](https://techcommunity.microsoft.com/t5/mixed-reality-blog/point-cloud-support-in-azure-remote-rendering/ba-p/3484253) が公開されたので早速試してみようと思ったのですが、3Dオブジェクトを表示するまでに少し面倒なプロセスが多いと感じたので、Logic Appsでワークフローを作りました。

本記事では、ARRへの3Dモデルの変換リクエストをするまでをLogic Appsで自動化する処理を紹介します。

# 成果物
ワークフローの全体像はこんな感じです！これでいちいちPostmanからコールすることなく、ファイルのアップロードだけでレンダリングができちゃいます。

1. Blob Storageの特定のコンテナに.ply, .xyz等のファイルがアップロードされることをトリガー
2. MRAccessトークンを取得するREST APIをGet
3. 返ってきたJSONをパース
4. トークンが長いので変数に代入
5. 3Dモデルの変換をリクエストするREST APIをPut
6. ワークフローが正常に流れたら何かしらで通知 (今回はOutlookメール)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267543/2ae9f0dc-8f30-8341-548f-f49f392a8fbc.png)

(※中身の詳細を知りたい方は直接ご連絡ください)

# 最後に
これが正しい！というわけではありませんので、実運用に際しては検証等は欠かさずお願いします。(APIコールが失敗した場合の再試行処理はモニターと連携するなどが必要かもです。)

# 参考文献
ARRは触ったことがなかったので、@Futo_Horio さんの記事を参照し試してみました！Horioさんの記事と併せて本記事の内容に触れると、理解が深まるかと思います！

リンク: [Azure Remote Rendering REST API を使って Azure Blob Storage の3Dモデルを変換する方法](https://qiita.com/Futo_Horio/items/8714547ea7346f548cea#remote-rendering-rest-api-%E3%81%A7%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B)
書籍要約　「正義をふりかざす極端な人の正体」

# 何が書いてあるか
読んだ本の要約化で理解と記憶の定着化を目指します。
**あくまで個人のエッセンスの列挙になります。実際の内容はこの何十倍も示唆に含まれている素晴らしい書籍です。この素晴らしさを一人でも多くの方が知るキッカケになれば嬉しいです**

# 読んだ本
**[正義を振りかざす「極端な人」の正体](https://www.amazon.co.jp/%E6%AD%A3%E7%BE%A9%E3%82%92%E6%8C%AF%E3%82%8A%E3%81%8B%E3%81%96%E3%81%99%E3%80%8C%E6%A5%B5%E7%AB%AF%E3%81%AA%E4%BA%BA%E3%80%8D%E3%81%AE%E6%AD%A3%E4%BD%93-%E5%85%89%E6%96%87%E7%A4%BE%E6%96%B0%E6%9B%B8-%E5%B1%B1%E5%8F%A3%E7%9C%9F%E4%B8%80/dp/4334044956/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3J2TV6GJ4RCBP&keywords=%E6%AD%A3%E7%BE%A9%E3%82%92%E3%81%B5%E3%82%8A%E3%81%8B%E3%81%96%E3%81%99%E6%A5%B5%E7%AB%AF%E3%81%AA%E4%BA%BA%E3%81%AE%E6%AD%A3%E4%BD%93&qid=1655648038&sprefix=%2Caps%2C886&sr=8-1)**
山口真一著
2020年に出版された本です。

[<img width="150" alt=="41Gc-fraEML._SX306_BO1,204,203,200_.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83103/227d5056-9c4e-d2a1-9b1c-85d3e92f753f.jpeg">](https://www.amazon.co.jp/%E6%AD%A3%E7%BE%A9%E3%82%92%E6%8C%AF%E3%82%8A%E3%81%8B%E3%81%96%E3%81%99%E3%80%8C%E6%A5%B5%E7%AB%AF%E3%81%AA%E4%BA%BA%E3%80%8D%E3%81%AE%E6%AD%A3%E4%BD%93-%E5%85%89%E6%96%87%E7%A4%BE%E6%96%B0%E6%9B%B8-%E5%B1%B1%E5%8F%A3%E7%9C%9F%E4%B8%80/dp/4334044956/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3J2TV6GJ4RCBP&keywords=%E6%AD%A3%E7%BE%A9%E3%82%92%E3%81%B5%E3%82%8A%E3%81%8B%E3%81%96%E3%81%99%E6%A5%B5%E7%AB%AF%E3%81%AA%E4%BA%BA%E3%81%AE%E6%AD%A3%E4%BD%93&qid=1655648038&sprefix=%2Caps%2C886&sr=8-1)

# 出会ったきっかけ
Podcast番組「超相対性理論」で紹介されたと記憶しています。

# 本編（要約）

### はじめに
・メディアの罪は大きい。それを後押しした資本主義の構造も罪深い。

### 第１章「ネットに極端な人があふれる理由
・ネットには極端な発言を発する人しか残らない、生存者バイアスがある。
・能動的かつ一方的な発言ができる特殊な環境がネットである。
・ネットでは46%の意見が少数によって発信されている。
・サイバーカスケードやエコーチェンバーによる自己強化バイアス
・責任を希薄化させる因子がある。
・極端な人同士で自己強化する構造がある。

### 第２章「ネットだけでない極端な人」
・劣化したマスメディアが生き残りのために炎上商法を行っている。
・自粛警察は権威に乗っかったいじめである。
・消費者の地位や権利意識の歪んだ解釈が悲劇をもたらす。

### 第３章「極端な人の正体」
・年収が平均より高く肩書のある男性が極端な人になりやすい傾向があるらしい。社会に過剰適応させた歪がでているということ？
・書き込む人数は少ない。一人が大量に発言するのでそう見えるだけ。べき乗理論。
・正義中毒という生体反応を持つ人もいる。
・幸福は外的環境よりも主体的に掴み取ったものがもたらす。社会的承認レベルには関係ない。

### 第４章「極端な人が力を持つ社会でどう対処するか」
・匿名化は効果がないことが韓国の社会実験で出ている。発言自体が減るだけ。
・ネットへの法律制限は良い面も萎縮させてしまうので難しい。
・名誉毀損罪の非親告罪化は社会的なネガティブ・フィードバックも考えると難しい。
・クリーンハンズの原則、スリッパリースロープ、
・罰則は悪用され別な問題が発生する、オーバーブロッキングがあり単純強化は弊害がある。
・被害者に寄り添う、加害者に訴訟リスクを理解させる、少しでもハードルをあげる、コンテキストを踏まえたミュート機能の高機能化が効果的。

### 第５章「極端な人にならないための５箇条」
・情報の偏りを知る、極端な思考への陥りやすさに敏感になる、自分を客観視する、情報を鵜呑みにしない、他者を尊重することが大切。
・軍事革命、産業革命のときも黎明期はいろいろな問題があってそこから学んで発展してきた。情報革命もこれから良くなっていけるはずである。

### あとがき
・ネットは人の感情を増幅させ際立たせる装置に過ぎない。

### 感想
・ネットも道具にすぎない。どう活かすかは現代人の問題、そしてその現代人を定義する社会構造の問題と改めて認識。
常に変化すべき劣化した構造が、エスタブリッシュメントによって延命され、自己認識と社会の中で選択できる立ち位置のギャップに苦しんでいる、そういった人たちの負の動機が、ネットの自己強化構造によって増殖し誤謬を生み出していると解釈した。
・一人の人間が立ち向かってどうこうできる話ではないので、社会構造が変わるまでは、ネットの良いとこ取りできる範囲でお付き合いしていきたい。とはいってもQiitaのような信頼できる居場所が増えてきたので過ごしやすくなって嬉しい。

最後までお読みくださりありがとうございました。
ヒートグリッドの活用例：ダッシュボードギャラリー『シカゴ犯罪分析』

[Yellowfin ダッシュボードギャラリー](https://yellowfin.co.jp/analytics-best-practice/dashboard-gallery?dashboard=interactive-dashboards) の [『シカゴ市犯罪分析』 ダッシュボード]( https://yellowfin.co.jp/blog/dashboard_gallery/chicago-crime)では、ヒートグリッドを活用して、犯罪の発生頻度を曜日と時間帯の 2 軸と色の濃淡 (グラデーション) で可視化しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/14b622ba-21f3-1c19-2232-d3fb834d2e5e.png)

ヒートグリッドを作成するためには、2 つの軸と、1 つの集計値が必要です。
シカゴ犯罪分析の場合、下のテーブルから 4 つのヒートグリッドを作成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/a39e838e-3cf7-7c4c-5d40-b8393bc30ae9.png)

このテーブルから、例えば家庭内犯罪のチャートを作成する場合、下のように横軸に「曜日」、縦軸に「時間」、色に「家庭内暴力数」を配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/62204ed8-cc3c-1d49-9c9b-8d3142c01033.png)

シリーズの設定の中で、最小値と最大値の色を定義すれば、色のグラデーションで数値の大きさを視覚化するヒートグリッドが完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/1cf7c5a3-66fe-08cf-17a7-1e6b77716408.png)

ヒートグリッドを活用すれば、大枠の数値の傾向が把握できます。その結果、さらに詳細な分析を行いたい場合は、別の分析画面を準備する必要があります。[『シカゴ市犯罪分析』 ダッシュボード]( https://yellowfin.co.jp/blog/dashboard_gallery/chicago-crime)の場合、犯罪カテゴリごとにサブタブを作成して、分析を深堀できるような構成にしています。ダッシュボードギャラリーで御覧いただけるコンテンツには、この辺りのベストプラクティス要素も多く含まれます。是非、皆さんもアクセスしてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/32b5a3f4-d915-6e18-f015-4e3a72c51201.png)

では、良いデータ分析を! Cheers!
過密度 (Week Density) チャートを使って、時間単位の数値の変化を曜日毎に把握

## 1. 過密度チャートとは?
[Yellowfin](https://yellowfin.co.jp/) [BI](https://yellowfin.co.jp/blog/2019/11/21-blog2-summary-of-bi-tools) の過密度を使うことで、時間単位の数値の変化を、曜日毎に把握できます。過密度の原名 (英語名) は Week Density です。英語名の方が、チャートの特長を正確に表しているかもしれません。

## 2. データの準備
過密度を作成するためには、1 つの Timestamp 型の軸と、1 つの集計値が必要です。Timestamp 型のデータがあれば Yellowfin が自動で曜日単位にデータをまとめます。ログデータなどを加工せず、そのまま分析用途に用いたい場合などに便利です。
ダミーデータを[こちら](https://github.com/ChasingHH/ShareFiles/blob/Share/weekdensity.csv)に共有しました。以下手順と同じデータを試してみたい方は、是非ご利用ください。直接データベースに取り込む以外にも、[Yellowfin トランスフォーメーションフロー]( https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2293853)を活用することも可能です。

## 3. ビューの作成
以下の情報を参考に[ビュー](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2294284)を作成します。
|列名|フィールドタイプ|注記|
|---|---|---|
|time|ディメンション (軸)|Timestamp 型|
|message|メトリック (集計値)|整数|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/2766967e-24de-1f8a-f3b6-b0802aeea3bd.png)
## 4. グラフの作成
準備が整ったら、グラフの作成に手順を進めます。新規でレポートを作成し、以下の手順に従ってグラフを作成します。

#### 4-1. [データ] ステップ
ビューに設定した軸と集計値を全てテーブルに配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/458e4068-9282-31dc-3d65-47111f0c06c0.png)
#### 4-2. [グラフ] ステップ
[グラフの選択] > [特殊用途] から [過密度] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/022c096e-78dd-1d9b-d104-ccf2c4827513.png)
横軸に「time」、縦軸に「message」を配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/f597a4d8-672d-8cc2-1a56-c9bac315b98b.png)
これで作業は完了です。「公開」して動作を確認してみましょう。
## 5. 分析
数値の大きさが、四角の大きさで把握できます。細かな情報までは確認できませんが、大まかな傾向をつかむには適しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/9b1e1d4f-5a8d-f78a-0095-4e768fd95953.png)
ちなみに、過密度は原名が Week Density、つまり、曜日ごとの過密度を示すものです。そのため、各曜日での傾向を示す目的で用いるチャートであり、曜日をまたいだ比較には適しません。下記の例が示すように、日をまたいでしまうと、「2」「1,000」「30,000,000」と 8 桁の違いがある数字が同じサイズの四角で表示されてしまいます。チャートの機能性を十分に認識したうえで利用することが重要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/1fda932f-9c74-63d0-c5f2-7994822f5f5c.png)
## 7. 最後に
時間ごとの空腹具合や、眠さ具合を数値化できたら、この過密度チャートを使って、曜日ごとの自分のバイオリズムを可視化できるかもしれませんね。仕事のやる気を数値化したら、ずっと低い数値のまま一日中過ごしていることがばれてしまいそう。
何はともあれ、今日も頑張っていきましょう。では、皆様良いデータ分析を! Cheers!
イベントグラフでインベントの発生と数値の変化を分析

## 1. イベントとは?
[Yellowfin](https://yellowfin.co.jp/) [BI](https://yellowfin.co.jp/blog/2019/11/21-blog2-summary-of-bi-tools) のイベントチャートを使って、インベントの発生と数値の変化を分析してみます。
イベントチャートとは、イベントの発生と数値の変化を 1 つのチャート上にまとめて表示し、両者の関係を分析する目的に用いられます。キャンペーン活動が売上にどのような影響を与えるかを説明する時などに便利です。

## 2. データの準備
イベントグラフを作成するためには、1 つの日付軸、1 つの集計値、1 つ以上のバイナリデータ (イベント発生の有無を示すもの)が必要です。
今回は、[NHK 特設サイト新型コロナウィルス](https://www3.nhk.or.jp/news/special/coronavirus/data/)が日次で更新している、新型コロナ関連データを使って、沖縄県における蔓延防止等重点措置や緊急事態措置の発動と、1 日当たりの新規コロナ感染者数の関係を示してみようと思います。
上記データを加工したものを[こちら]( https://github.com/ChasingHH/ShareFiles/blob/Share/COVID_okinawa.csv)に共有しています。以下手順と同じデータを試してみたい方は、是非ご利用ください。直接データベースに取り込む以外にも、[Yellowfin トランスフォーメーションフロー]( https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2293853)を活用することも可能です。

## 3. ビューの作成
以下の情報を参考に[ビュー](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2294284)を作成します。
|列名|フィールドタイプ|注記|
|---|---|---|
|日付|ディメンション (軸)|日付型|
|感染者数|メトリック (集計値)|整数|
|まん延防止等重点措置|メトリック (集計値)| バイナリ (2 進数)|
|緊急事態措置|メトリック (集計値)| バイナリ (2 進数)|
|経過措置期間|メトリック (集計値)| バイナリ (2 進数)|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/5bee6c91-1c51-464e-8c39-7b57bb316058.png)

## 4. グラフの作成
準備が整ったら、グラフの作成に手順を進めます。新規でレポートを作成し、以下の手順に従ってグラフを作成します。

#### 4-1. [データ] ステップ
ビューに設定した軸と集計値を全てテーブルに配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/ccbc9337-9d5e-50c5-dfd6-43ec075cdfb9.png)

#### 4-2. [グラフ] ステップ
[グラフの選択] > [特殊用途] から [イベント] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/a20b49ad-6347-b1c8-c4c3-317be5b4be24.png)

横軸に「日付」、縦軸に「感染者数」、イベントに「まん延防止等重点措置」「緊急事態措置」「経過措置期間」を配置します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/742e545a-e65a-d7be-33ff-d4831ba7982b.png)
これで作業は完了です。「公開」して動作を確認してみましょう。

## 5. 分析
沖縄県における、各種措置の発動期間と、感染者数の推移が一目で把握できます。昨年5月から9月末にかけての緊急事態宣言により、数値が大きく低減された様子も分かります。その後、オミクロン株の影響で再び数値が上振れしていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/ae599d20-025d-7d13-b886-665f70e588c8.png)

## 7. 最後に
海に潜るのが大好きな私としては、これまで何度かダイビング目的で沖縄本島や離島を訪れています。ここ数年は、コロナの影響もあって、なかなか沖縄には行けていないです。そろそろ沖縄経済にお役に立てるように (？)、石垣島か久米島に行って潜り倒して、お金落としてこようかな。
何はともあれ、皆様良いデータ分析を! Cheers!
Task　オブジェクトのまとめ



+ [動タイムラインの ToDo に表示される項目のカスタマイズ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000077ioF9)

# トレイリヘッド

+ [today’s taskがない？](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007LTGgw)

:::note
Started doing in the new playground then realized, I should select create Home page layout not app layout.
:::

# できないこと

+ [タスクの再割り当ての電子メール通知-LIGHTNING](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDiPB)
+ [Emailing From Task Object](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000JdnqWSAR)
  画面ではできないので、Apexトリガーで実装する
+ [ToDoの「完了日時」は監査項目権限を付与しても設定できない](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007DwOgQ)

:::note
残念ながら更新できないようです。アイデアには上がっています。

Ability to set CompletedDateTime audit fields
https://ideas.salesforce.com/s/idea/a0B8W00000H5GHDUA3/ability-to-set-completeddatetime-audit-fields

Ability to set CompletedDateTime on Task object while loading tasks from data loader
https://salesforce.stackexchange.com/questions/337321/ability-to-set-completeddatetime-on-task-object-while-loading-tasks-from-data-lo
:::


# エラー

+ [タスク レコード タイプの無効化](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JgSjrSAF)

Task オブジェクトには、何年も使用されていないレコード タイプがいくつかあり、ユーザーはそれらにアクセスできません。しかし、それらを非アクティブ化すると、ユーザーはタスクを編集できなくなり、エラー メッセージが表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d64a008b-443c-216a-ed64-6a24300b1fdc.png)

:::note alert
No access to field RecordTypeId. Either the field was removed from the entity or access to this field was removed.
:::

:::note
I think this is due to browser caching somehow? I was able to replicate it in a Salesforce developer org to rule out any customizations I may have been missing. I created a task record type, deactivated it, and then I wasn't able to update some of the tasks I had set up ahead of the test. I don't know why it was only some of them. I tried an incognito window and that worked, though - I could update the task.
:::

レコードタイプを非アクティブ化してアクティブに戻した直後にはキャッシュに何らかの情報が残っているのかもしれない。

+ [salesforce  you can transfer this record, the new owner needs Read permission on it and related records. ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007FUroe)
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/fbdde5ee-7661-c9f2-982d-bbe47ffb8232.png)

:::note
Please check this article. 

https://help.salesforce.com/s/articleView?id=000385661&type=1
:::


# 設定

+ [プレイグラウンドでオブジェクト内のルックアップ関係フィールドを登録しようとしています。それをタスク オブジェクトに関連付けたいのですが、リストに表示されません。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007JCzGH)

:::note
In order for a Custom Object to show in the 'Related To' Lookup list for an Event or Task, the 'Allow Activities' (Track Activities) check-box must be checked in the Custom Object Definition. 

Add a custom object to the 'Related To' lookup for an Event or Task
https://help.salesforce.com/s/articleView?id=000385007&type=1
:::
【IFTTT】インスタグラム画像投稿→Twitterにも自動投稿する方法【自動化】

## 2回同じことをするなら1回で済ませたい
自分はインスタグラムの開設をしたとき、既にTwitterも使っていたので、インスタグラムに画像投稿したら自動で連携したら便利だなと思っていました。
インスタグラムに投稿したあと、Twitterにも同じような写真を投稿するのは面倒くさくないですか？

「インスタグラムにも自動投稿する機能あるじゃん」という人いるかもしれませんし、私も自動投稿したことはあるのですが、画像が小さくてイマイチです。
（後の投稿と重複するのでもう削除してます。）
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/727eb6f2-09b7-aa8e-e1d0-2cb6b4aaccb1.png">

ということで、
インスタグラムに写真を投稿したあと、Twitterにも同じように投稿出来る機能をIFTTTで構築しました。
面倒くさがりさんは是非お試しあれ！

## 完成作品
こういうことです。写真も大きいし、これでインスタでちょっと加工した写真の見栄えも良くなりました。

https://twitter.com/longtail6666/status/1538493111600615425

## 参考
IFTTTで雨雲が近づいたらLINE通知で受け取る仕組みも作ってみたので、こちらもどうぞ。

https://qiita.com/long66tail/items/680fdfe04ec20e6a7f7f


## IFTTT
SNS等を連携させるサービス。
今回はインスタグラムとTwitterを連携させます。

アカウント登録はしておきましょう。

### 1.instagramでトリガー作成
*Create*から新規作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/d22c55af-ae0b-72a1-7aef-d442d4b29e76.png)

*If This*=もし～だったら
*Then That*=～する
という意味なので、
*If This*=instagramに画像を投稿したら
*Then That*=～Twitterに投稿する
という感じです。*If This*からやっていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/a8d24f5c-a04c-33a3-db43-11070a45915c.png)

検索窓から「instagram」で検索。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/253e6974-4dbb-ae8a-52b8-831573e5082a.png)
*Any new photo by you*で、新規画像投稿したときをトリガーにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/478ac26d-962a-e0b6-3564-665c019086b4.png)

instagramのアカウントと紐づける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/d45f2dd6-15f0-3de0-3f96-2a7fc420c55c.png)

これで、*If This*=instagramに画像を投稿したら～というトリガーが出来ました。

### 2.Twitterと繋ぐ
同様に、*Then That*を選択後、検索窓で「Twitter」で検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/beaf1fde-ca93-20da-9a29-f8adf681a3ee.png)

*Post a tweet with image*で画像セットで投稿することにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/733423d2-ffac-73d5-f6f9-d69163d3aab3.png)

※既に済ませてしまったから表示されないが、Twitterと紐づける作業があるはず。

Tweet textでどのようなツイートをするか。
`Caption`は投稿内容をそのままコピペしてくれる。
`Url`があれば、インスタグラムに飛んでもらうことが出来る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/15552c64-149c-6097-014a-6f6776fd3bfe.png)

これで出来上がり。

最後にタイトルを決めてFinish
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607557/af87b336-116c-68c6-0d9d-5e965a70636e.png)



## 注意
文字数が異なるため注意。
Twitter方が文字数に上限数が少ないため、合わせること。
気になる人は、文字数カウントしてくれるサイトを利用すればOK
| instagram | Twitter |
|:-:|:-:|
|2,200文字|全角140文字／半角280文字|

## 自動化が出来るなら自動化してしまえ
やってることとしては、インスタグラムに画像投稿をしているだけなのに、Twitterのフォロワも増えるというありがたい効果が出てます。

まったく同じ内容で投稿するのであれば、勝手に同時に投稿してくれた方がよっぽど楽。
自分みたいに面倒くさがりだったり、そうじゃなくても同じ内容ならまとめて投稿できる方がいいって人もいると思います。
洗濯機だって、食器洗いだって、床の掃除だって負担を減らそうと自動化出来ている時代だし（こじつけ？）、SNS投稿も負担を減らして自動化してしまいましょう。
はじめてのGit

```
___________          __                   
\_   _____/         |  | _______    ____  
 |    __)_   ______ |  |/ /\__  \  /    \ 
 |        \ /_____/ |    <  / __ \|   |  \
/_______  /         |__|_ \(____  /___|  /
        \/               \/     \/     \/ 
```

こんにちは。E-kan株式会社の畠山です。
今更かもしれませんが最近`Git`を使うようになったのでよく使う言葉やコマンドなどを備忘録です。
`gitbash`でのコマンドラインの操作での気になった部分を軽くまとめているので雰囲気を伝えるメモレベルです。

# リモートリポジトリーとローカルリポジトリー
**リモートリポジトリー**：みんなのリポジトリー、push時緊張。
**ローカルリポジトリー**：自分だけのローカルのリポジトリー、結構好きに出来る。戻すのも簡単。

# addとcommit
**add**　 ：変更したファイルをコミットできる状態にする。
**commit**：addした情報を`ローカルリポジトリー`に反映する。オプションでコメントを入れることもできるようです。入れないとvimが立ち上がります。

ファイル修正をしていたのは`ローカルリポジトリー`ではなかった。`commit`することでローカルに反映できるようです。`リモートリポジトリー`にはまだ反映できていません。

# pullとpush
**pull**：`リモートリポジトリー`から`ローカルリポジトリー`に反映する
**push**：`ローカルリポジトリー`から`リモートリポジトリー`に反映する

使い始めた頃は（今も）どちらがどちらだったかわからなくなりました。引くと押すの和訳で考えると整理しやすいかもです。コピペで使うときは間違えやすいので注意。

# 番外編：変更作業中に同じプロジェクトの別のブランチの修正をするとき
変更を一時退避したいそんな時には`stash`を使用します。オプションによって退避や変更の確認、退避データの復元が出来ます。
```
//一時退避
git stash -u
//復元
git stash apply stash@{0}
```


SVNばかり使っていたGit初心者の備忘録が誰かのお役に立てれば幸いです。
iRICの格子生成アルゴリズム 2次元円弧形水路格子生成ツール "2d arc grid generator"について

:::note
本テキストは公開されている資料や開発者様から提供頂いたソースコードを基に@starfieldKtが作成しています。
そのため開発者様が意図していることと異なる部分がある可能性があることをご注意ください。
また、本テキストに関することを開発者様へお問い合わせ頂かないようお願い申し上げます。
:::

その他格子生成ツールについては[こちら](https://qiita.com/starfieldKt/items/fcc0d0261bdfc169696c)

# 2次元円弧形水路格子生成ツール *"2d arc grid generator"*

|項目|内容|
|:- |:- |
|名称|*2d arc grid generator*<br>2次元円弧形水路格子生成ツール|
|開発者|清水康行|
|説明|円弧形水路生成ツール．水路長は円周の角度で与え，直線の流入部と流出部を加えることが出来る．水路の縦断形は一定勾配，横断形は長方形，内岸固定砂州形，放物線形を選ぶことが出来る．|



## 概要
このアルゴリズムでは、`半径`、`角度`、`水路幅`、`格子サイズ`、`勾配`（断面形状が固定砂州の場合は`砂州波高`、放物線の場合は`中央部深`も必要となる）を与えることにより円弧型の水路の格子を作成することができる。また、追加で流入部及び流出部に直線水路を設定することも可能。

## 格子生成条件
### 水路形状（基本設定）
格子生成に必要な基本条件はこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/371dc11e-d2b2-214c-202d-e25799c2a803.png)
各条件のイメージはこのようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/e327e67a-f042-2603-4a63-8f62542f9c24.png)
断面形状は`平坦`、`固定砂州`、`放物線`から選択可能でそれぞれ以下のような断面形状となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/cadd15e3-4307-6cae-9f0e-15ae7c1bfbb4.png)


この時、`固定砂州`での断面形状について横断方向の右岸端からの距離を$x$、地盤高を$y$、水路中央の地盤高を$y_0$、砂州波高を$h$、水路幅を$w$とした場合、断面形は次の数式で示すことができる。

```math
y=y_0+h\cos(\frac{x}{w}\pi)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/8f0a37d6-ad0f-f133-209e-00437e07dac1.png)




`放物線`の場合、$y$を地盤高、水路中央の地盤高を$y_0$、横断方向の水路中心線からの距離を$x$（右岸側を正、左岸側を負とする）、中央部深を$h$、水路幅を$w$とすると断面形は$-\frac{w}{2}	\leq x 	\leq \frac{w}{2}$の範囲での次式で示すことができる。


```math
y=y_0+\frac{4h}{w^2}x^2
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/fa078d28-1e91-8ba4-e97f-0638b04a52fd.png)



### 水路形状（追加）
追加設定をすることで流入、流出部に直線水路を接続させることも可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/92fb6ccf-d8ad-763c-b7a3-fe1d82d004e0.png)
直線水路のイメージ図はこのようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/d33fe6a9-a1e1-5146-c848-b70aedbe32df.png)

## 格子作成例
90°曲がる水路
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/aa2feaab-c999-d4ed-db28-2333022da347.png)

360°円形水路
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/6a29a1a4-9ed6-67aa-cf5b-04f712b45949.png)

U字型水路
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/3eb095c5-58ba-a1d8-2ca7-abb3b41695c0.png)
iRICソフトウェアで使用できる格子生成アルゴリズムについて

:::note
本テキストは公開されている資料や開発者様から提供頂いたソースコードを基に@starfieldKtが作成しています。
そのため開発者様が意図していることと異なる部分がある可能性があることをご注意ください。
また、本テキストに関することを開発者様へお問い合わせ頂かないようお願い申し上げます。
:::


# はじめに
iRICソフトウェアで使用できる格子生成アルゴリズムは大きく分けて以下の3つに分けられる。

1. 標準で搭載されているアルゴリズム
2. インストーラーまたはiRIC Maintainanceを用いてユーザーが選択してインストールするもの
3. ユーザーが作成したもの

格子生成アルゴリズム開発手順については今回は触れない、詳しく知りたい場合は[こちら(iRIC ver3)](https://iric-solver-dev-manual-jp.readthedocs.io/ja/latest/04_how_to_dev_gridgenerator.html)か[こちら(iRIC ver4)](https://iric-solver-dev-manual.readthedocs.io/ja/v4_jp/04_how_to_dev_gridgenerator.html)

## 標準搭載のアルゴリズム
iRIC ver.3においては標準で搭載されているアルゴリズムは以下のものがある。
これらについては[『iRIC v3 ユーザマニュアル』の格子のページ](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_grid_creating_functions.html)に詳しい解説が載っている。

* [折れ線と格子幅から生成](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_02_polygonal_line_and_width.html)
* [横断測量データから生成](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_03_riv_data_2d.html)
* [矩形領域の格子を作成](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_05_rectangular_region.html)
* [矩形領域の格子を作成（緯度・経度）](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_05_rectangular_region.html)
* [複断面格子を生成](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_06_compound_channel.html)
* [ポアソン方程式を解いて格子を生成](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_07_poisson.html)
* [汎用格子生成ツール](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_07_laplace.html)
* [ポリゴン形状から作成](https://iric-gui-user-manual-jp.readthedocs.io/ja/latest/04/05/01_08_polygon.html)

## ユーザーが選択してインストールするアルゴリズム
ユーザーが選択してインストールするアルゴリズムには記事作成時点（2022/6/13)で以下のものが用意されている。
これらについては格子生成アルゴリズム選択画面で大まかな説明はあるが、実際にどのような事ができるかはあまり整理されておらず、似たような機能のものも存在する。
そこで今回はユーザーが選択してインストールできる格子生成アルゴリズムをどのように使うかとどのような格子を作成できるかをリンク先の記事で整理する。（随時記事作成中です。）

* [2次元円弧形水路格子生成ツール *2d arc grid generator*](https://qiita.com/starfieldKt/items/ff577d99f46e20988e5d)
* [2次元円弧形水路格子生成ツール（複断面対応版）*2d arc grid generator （Compound Channel）*](https://qiita.com/starfieldKt/items/0f17a023094511a22a98)
* Nays2dv用格子生成ツール *Grid Generator for Nays2dv*
* Nays3dv用格子生成ツール *Grid Generator for Nays3dv*
* U字型水路生成ツール *U-shape channel generator*
* Nays3dv対応U字型水路格子作成ツール *u-shape grid generator for Nays3dv*
* [簡易直線・蛇行水路生成ツール *Simple Straight and Meandering Channel Creator*](https://qiita.com/starfieldKt/items/62f440074cdbce59a023)
* [*Simple Grid Generator*](https://qiita.com/starfieldKt/items/d006e7856b887706aa66)
* [多機能格子生成ツール *Multifunction Grid Genarator*](https://qiita.com/starfieldKt/items/05971e2679613e2c30ae)
* Cartesian Grid for NaysEddy x64
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/32476428-7709-a05e-9653-7a174687a8c2.png)
FlexプラグインTips（発信時の録音）

:::note alert
2023年5月1日を持ちまして、株式会社KDDIウェブコミュニケーションズのTwilioリセール事業が終了したため、本記事に記載されている内容は正確ではないことを予めご了承ください。
:::

# はじめに

みなさん、こんにちは。
KDDIウェブコミュニケーションズ、Twilioエバンジェリストの高橋です。

今回は、Flex のアウトバウンド時に録音する方法について解説します。
着信時の録音については、こちらの以下を参考に設定をすることで実現が可能です。しかし、発信時の録音についてはプラグインを作成するしかありません。

https://www.twilio.com/docs/flex/developer/insights/enable-dual-channel-recordings

## プラグインの作成

Flexプラグインの作成方法については、以下の記事を参考にしてください。

https://qiita.com/mobilebiz/items/eeca1ce20bb5b561b515

## 発信時録音のプラグイン

プラグイン自体はとても簡単です。以下が発信時の録音をするプラグインのコードになります。

```javascript:OutboundRecordingPlugin.js
import React from 'react';
import { FlexPlugin } from '@twilio/flex-plugin';

const PLUGIN_NAME = 'OutboundRecordingPlugin';

export default class OutboundRecordingPlugin extends FlexPlugin {
  constructor() {
    super(PLUGIN_NAME);
  }

  /**
   * This code is run when your plugin is being started
   * Use this to modify any UI components or attach to the actions framework
   *
   * @param flex { typeof import('@twilio/flex-ui') }
   * @param manager { import('@twilio/flex-ui').Manager }
   */
  async init(flex, manager) {
    flex.Actions.addListener('beforeAcceptTask', (payload) => {
      if (payload.task.attributes.direction === 'outbound')
        payload.conferenceOptions.conferenceRecord = 'true';
    });
  }

}
```

## 解説

Action Framework を利用して、タスクを許諾する前に`ConferenceOption`の`conferenceRecord`を`true`にすることでカンファレンスが録音されるようになります。
[こちら](https://support.twilio.com/hc/en-us/articles/360010785673-Call-Recording-with-Twilio-Flex)の記事にも同様の記載がありますが、パラメータが間違っているので注意が必要です。

:::note warn
この方法は Conference の録音を使うため、Dual での録音はできません。
:::

# デュアルチャンネルで録音

やはり録音はデュアルチャンネルでやりたいし、録音データは Flex Insights でも確認したいよねー。
ということで、そちらに対応したプラグインも作成しました。たぶん、こっちの方が現実的だと思います。

詳しくは以下の GitHub で参考にしてください（解説は英語なのでわかりにくくてすみません）。

https://github.com/mobilebiz/plugin-outbound-recording


---
### Twilio（トゥイリオ）とは

https://cloudapi.kddi-web.com
Twilio は音声通話、メッセージング（SMS /チャット）、ビデオなどの 様々なコミュニケーション手段をアプリケーションやビジネスへ容易に組み込むことのできるクラウド API サービスです。初期費用不要な従量課金制で、各種開発言語に対応しているため、多くのハッカソンイベントやスタートアップなどにも、ご利用いただいております。

Twilioに関するご相談などがございましたら、ぜひ毎週水曜日の午後に開催しております相談会をご利用ください。
[Twilio相談会（毎週水曜日）](https://cloudapi.kddi-web.com/contact/consultation?hsLang=ja-jp)

自己紹介|　
:--|:--
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86046/b51a8b88-abd5-ce5e-195a-de3564ba2ae6.png" height='200' width='150'/>|高橋克己（Katsumi Takahashi） 自称「<font color='red'>赤い芸人</font>」<br />グローバル・インターネット・ジャパン株式会社　代表取締役<br />株式会社KDDIウェブコミュニケーションズ　Twilio事業部エバンジェリスト<br /><br />2001年より大手通信事業者の法人サービスの教育に携わり、企業における電話のしくみや重要性を研究。2016年よりTwilio事業部にジョインし、Twilioを使ったスマートコミュニケーションの普及活動を精力的に行っている。<br />2015 Hall of Doers<br />2019 Twilio Champions
４K画質のAR

# iOSで４K画質のARコンテンツを作れる

従来ARKitでキャプチャできるカメラ画質は1920*1080が最高でした。
しかし、もっと高画質でキャプチャしたいケースもあります。

# ４K画質が使えるようになった

2022年のiOS16から、ARKitで４K画質が使えるようになりました。

# 使い方

recommendedVideoFormatFor4KResolutionがサポートされていることを確認し（nilを返さない）、videoFormatに指定します。
iPhone11以降、M1 iPadで使えます。

```swift
let config = ARWorldTrackingConfiguration()
if let hiResFormat = ARWorldTrackingConfiguration.recommendedVideoFormatFor4KResolution {
    config.videoFormat = hiResFormat
}
```

違いが出るかわかりませんが、スクショ載せておきます。

1920*1080
<img src=https://user-images.githubusercontent.com/23278992/174505740-cc18d418-0f74-43ae-835e-c3f0676282a2.PNG>

3840*2160
<img src=https://user-images.githubusercontent.com/23278992/174505741-89be1df0-b9b3-4c4f-b604-1a3cee4df094.PNG>

４Kモードの場合フレームレートが30fpsになります。（HDだと60fps）
ARKitのセンサーを使用して画像をキャプチャしたい場合などに、便利ですね。

🐣
****
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLやARKitを使ったアプリを作っています。
機械学習／AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)
TailwindCSS環境構築

## はじめに
TailwindCSSはここ数年でversion upを繰り返しており、古い情報が溢れている気がする。
かくいう私も、古い情報に惑わされた。
2022. 6.20 時点でのセットアップ方法を紹介しようと思う

まず公式HP
.jpと.comの2種類があるが、絶対.comを参考にして欲しい。
.jpは情報が圧倒的に古い そもそもまだ更新されてるのかあれ？
私は運悪く.jpを最初に引いてしまい、古いversionの情報を眺めて時間を無駄にしてしまった。

https://tailwindcss.com/

## 環境
M1 Macbook Air
VS code

## セットアップ手順
1. npmを初期化する
`npm ini -y`
2. 必要なパッケージをインストール
`npm install -D tailwindcss postcss-cli autoprefixer`
3. post cssとtailwindCSSの設定ファイルを生成
`npx tailwindcss init -p`
4. ビルドする
`npm run dev` *設定ファイルを全て記述した後に行う*

## 事前知識
### PostCSS
tailwindCSSはpostcssを使って使用することを推奨している。
post cssがわからない方は下記を参照

https://qiita.com/morishitter/items/4a04eb144abf49f41d7d

簡単にまとめると、PostCSSという大枠を用意して、他はそのプラグインとして使用することができる
今回の場合`tailwindcss`と`autoprefixer`の2つがプラグインとして存在することになる

### npm
tailswindCSSを使いたいと思い至った皆様ならないと思うが、npmを使ったことがない人は下記を参照

ちょっと情報量が多い+古い記事なのでざっと眺めてください

https://qiita.com/maitake9116/items/7825d90c09f3e2f87dea

その後私の記事をみて、必要最低限なコマンドの知識を再確認してください

https://qiita.com/kandalog/items/17b39aca5f1c7905d945

## 設定ファイル

```js:postcss.config.js
// postcssの設定ファイル
// インストールしたプラグインで、使用したいものを記述する
// 基本的にファイル生成時に自動でインストールしたプラグインが列挙される
// 後から追加する場合は手動で記入する必要がある
module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
}
```

```js:tailwind.config.js
// tailwindcssの設定ファイル
// tailwindcssを使用するhtmlファイルのpathを記述
content: ["./index.html"],
```
```js:package.json
// buildタスクを設定

// 対象のpath -o 出力先のpath watchモード
"dev": "postcss style.css -o dist.css -w",
```

## css
```css:css
@tailwind base;
@tailwind components;
@tailwind utilities;
```

## html
適当に下記のclassでtailwindcssが動くか確認
dist.cssを読み込んでくださいね
```html:index.html
<h1 class="text-6xl text-blue-700 font-bold">TailwindCSS</h1>
```

## 拡張機能
@tailwind base; 等に構文エラーが表示されると思います。 下記拡張機能で解決しましょう

https://marketplace.visualstudio.com/items?itemName=csstools.postcss

htmlにclassを明記する際保管してくれる拡張機能は下記

https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss

## 終わりに
Tailwindcssの利用にはnpmやpostCSSの知識が少し必要です。
初めにそちらの知識を蓄えてから挑戦した方がスムーズに理解できるかと思います。
100日後くらいに個人開発するぞ！day048

## 今日は自分で作ったWebページをインターネット上に公開してみた！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/4e098be8-9f2c-a79a-ed02-09b60668f908.png)

## Githubでアカウント開設
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/7636cc06-e872-8e9a-f15c-ce14799e6411.png)

## GithubでHTMLとCSSをアップロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/8cd4ed7d-7510-48ac-dbcd-0ebc9a454584.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/a728d2ca-02a0-31c4-3267-aba317a93c3f.png)

## Webページ公開

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/033bb9c3-8fff-04ce-b23d-86a37297ac03.png)

https://prog-8.github.io/
よく分からんTrailheadでないけど、何か問題が出ている？？


+ [How to update a formula field before a validation rule is executed](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HleSgSAJ)

```
Ride__r.Booked_Seats__c - IF(ISNEW(), 0,PRIORVALUE(Number_Of_Adult_Seats__c)) + Number_Of_Adult_Seats__c - IF(ISNEW(),0,PRIORVALUE(Number_Of_Child_Seats__c)) + Number_Of_Child_Seats__c > Ride__r.Total_Seats__c
```

+ [Here is what we were not able to verify: Unable to insert rides](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HlfYc)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/eeb42c16-262a-ac66-fcd4-89027d93f161.png)

# 30%割引きのお題

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/b12de157-e4bd-eadc-7160-659cae5eb986.png)


+ [Getting Error on Saleforce Days Challenge(Build a Park Management App)](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HmPfQSAV)
+ [after approval the discount which is more than 30% is applied. however through Verify Challenge](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Hmeg4SAB)
+ [Getting Error on Salesforce Days Challenge(Build a Park Management App) Ticket Cost Post Discount Calculated incorrectly](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDsPmSAL)

#

+ [Getting Error on Saleforce Days Challenge(Build a Park Management App](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HDeBLSA1)
最大値と最小値の確認



```python
# check max
df['Claim Qty'].max()
 
# check min.
df['Claim Qty'].min()
 
# 統計量確認
df['Claim Qty'].describe()
 
# 分布確認
df['Claim Qty'].hist()

```

![750 1000 1250 1500 1750 2000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1811258/f4f1f540-e6ae-b9bd-817a-02c8fce225bd.png)
￼
色々なマップライブラリのスターターをVite対応してみた

![img](https://day-journal.com/memo/images/try-090_01.gif)
![img](https://day-journal.com/memo/images/try-090_02.png)

<br>

### 色々なマップライブラリのスターターをVite対応してみました :tada:  

今まで[webpack](https://webpack.js.org)で公開していたマップライブラリのスターターを、[Vite](https://vitejs.dev/)に変更してみました。Viteに変更したことで、ビルド速度が大幅に向上し設定ファイルもシンプルになりました。TypeScriptにも対応しました。

手軽にマップライブラリをためしてみたいかたぜひご利用ください！

<br>

## Amazon Location Service & MapLibre GL JS & AWS Amplify

![img](https://day-journal.com/memo/images/try-090_03.png)  

https://github.com/dayjournal/amazon-location-service-starter

<br>

## Turf.js & MapLibre GL JS

![img](https://day-journal.com/memo/images/try-090_04.png)  

https://github.com/dayjournal/turfjs-starter

<br>

## MapLibre GL JS

![img](https://day-journal.com/memo/images/try-090_05.png)  

https://github.com/dayjournal/maplibregljs-starter

<br>

## Leaflet

![img](https://day-journal.com/memo/images/try-090_06.png)  

https://github.com/dayjournal/leaflet-starter

<br>

## OpenLayers

![img](https://day-journal.com/memo/images/try-090_07.png)  

https://github.com/dayjournal/openlayers-starter

<br>

## Cesium

![img](https://day-journal.com/memo/images/try-090_08.png)  

https://github.com/dayjournal/cesium-starter

<br>

## Mapbox GL JS

![img](https://day-journal.com/memo/images/try-090_09.png)  

https://github.com/dayjournal/mapboxgljs-starter

<br>
<br>
<br>

各マップライブラリについて、他にも記事を書いています。よろしければぜひ。
<a href="https://day-journal.com/memo/tags/Amazon-Location-Service" target="_blank">tags - Amazon Location Service</a>  
<a href="hhttps://day-journal.com/memo/tags/Turf-js" target="_blank">tags - Turf.js</a>  
<a href="https://day-journal.com/memo/tags/MapLibreGLJS" target="_blank">tags - MapLibre GL JS</a>  
<a href="https://day-journal.com/memo/tags/Leaflet" target="_blank">tags - Leaflet</a>  
<a href="https://day-journal.com/memo/tags/OpenLayers" target="_blank">tags - OpenLayers</a>  
<a href="https://day-journal.com/memo/tags/Cesium" target="_blank">tags - Cesium</a>  
<a href="https://day-journal.com/memo/tags/MapboxGLJS" target="_blank">tags - Mapbox GL JS</a>  

やってみたシリーズ :grinning:
<a href="https://day-journal.com/memo/tags/Try" target="_blank">tags - Try</a>

https://qiita.com/dayjournal/items/3c6637779133bce44fdb

https://qiita.com/dayjournal/items/8fe865169e89c8bad343

https://qiita.com/dayjournal/items/86e1ca065e03ea88e0fb

https://qiita.com/dayjournal/items/2200ce37472c3b4cd6f3

https://qiita.com/dayjournal/items/0214b498b2f70a44a762

<br>
<br>

<a href="https://dayjournal.booth.pm" target="_blank"><img src="https://day-journal.com/memo/images/etc/book.png" alt="book"></a>
correlation


```python
df2.plot.scatter(x="WorkHrTotal", y= "ValueTotal２")
￼
```
![1150000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1811258/cc2686a3-6902-fccb-8313-3d015cc7f5fb.png)
￼
```python
df2.plot.scatter(x="InspTotalQty", y= "WorkHrTotal")￼
```
![WorkHrTotal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1811258/c7f12840-ea39-0cdf-c354-f09d5badc6fd.png)
令和最新版CircleCIでSSH踏み台でSSHする


# 例

```yaml
version: 2.1
jobs:
  job-deploy:
    docker:
      - image: cimg/base:stable
    steps:
      - add_ssh_keys:
          fingerprints:
          - ${RELAY_FINGERPRINT}
      - run:
          command: "ssh -o StrictHostKeyChecking=no ${RELAY_USER}@${RELAY_HOST} -p ${RELAY_SSH_PORT} \
          \"ssh ${REMOTE_HOST} \
          'cd ~/Git/TempKeeper && git pull && sudo systemctl restart TempKeeper.service'\""
          no_output_timeout: 10m
workflows:
  version: 2
  job-deploy:
    jobs:
      - deploy:
          filters:
            branches:
              only: main
```


リモートで実行される任意のコマンドをシングルクォーテーションで囲う

```sh
'git -C /var/myrepo pull && sudo systemctl restart MyRepo.service'
```



# 環境変数

| 変数名 | 内容 |
| - | - |
| RELAY_FINGERPRINT | 踏み台サーバのフィンガープリント※1 |
| RELAY_USER | 踏み台サーバのユーザ |
| RELAY_HOST | 踏み台サーバのホスト |
| RELAY_SSH_PORT | 踏み台サーバのポート |
| REMOTE_HOST | デプロイ対象のホスト |


※1 Project Setting -> SSH Keys -> Additional SSH Keys -> Add SSH Key より秘密鍵を登録した際に生成されるフィンガープリントを Environment Variables (環境変数)へ追加する

![スクリーンショット 2022-06-20 7.32.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149815/3e87a980-8e04-d915-20f1-bd47b538b020.png)

# 参照元ドキュメント

- [環境変数の使用 - CircleCI](https://circleci.com/docs/ja/2.0/env-vars)
- [CircleCI に SSH キーを登録する - CircleCI](https://circleci.com/docs/ja/2.0/add-ssh-key)
Windowsで負荷テスト（CPU負荷）

Microsoft Sysinternals
https://docs.microsoft.com/ja-jp/sysinternals/

CpuStres v2.0
https://docs.microsoft.com/ja-jp/sysinternals/downloads/cpustres

CPUスレッドごとに負荷をかけられツールです。
使い方のみです。

:::note warn
警告
すべてのCPUプロセスに高負荷を設定するなど、設定内容により通常の操作ができなくなる可能性がありますので注意してください。
:::

デフォルトで4スレッドが用意されていますが、Activeにするまでは何もしません。
Ideal CPUは、負荷を掛けるスレッドのCPUプロセス
Affinity は、使用するCPUスレッド
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189864/bfc2f10f-8b6c-773f-281e-395943c0b6f3.png)
スレッドごとの設定は、対象のスレッドを右クリックして変更できます。
負荷レベルの設定は、25%ごとに設定できます。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189864/01acffc2-91e4-0522-2c47-1825c6d070fb.png)
Affinity 使用するCPUプロセスを指定します。
Ideal以外を指定すると負荷が分散するため、Ideal だけ指定しています。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189864/9e5bbb01-effb-7016-e08b-7fec055eff84.png)
Priority は、5段階の他に、Ide(-Sat)とTime Critical(+Sat) が指定できます。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189864/3e161303-bcda-baaf-ef8a-685c7239c865.png)
CPUプロセス #1 を Active にしました。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189864/ee6c8a41-0bb6-05d7-65dd-d651c6d232b1.png)
予想通りの結果で、CPU #1 は 100%負荷となっています。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189864/f736d857-806d-8dd1-0186-ec013362f445.png)
節電対応

政府の節電要請に基づき、おうちモニターに当日の電気の使用状況を追加してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/ead011ac-8890-0bbf-29b8-417af03e176f.png)

sqlite3からデータを拾ってjson作るスクリプトは以下のようにしました。

```ruby:todaysm.rb
#!/usr/local/bin/mruby

def utc2jst(h)
  tmo = 0
  if tmo == 0 && h >= 15
    h = h - 15
    hs = "0" + h.to_s
  elsif h == 0
    hs = "09"
    tmo = 1
  else
    h = h + 9
    hs = h.to_s
  end
  hs
end

db = SQLite3::Database.new("/tmp/ouchi.db")

time = Array.new
val = Array.new

ago = 0

yday = (Time.now - 60*60*24*(ago + 1)).to_s[0, 10]
tday = (Time.now - 60*60*24*ago).to_s[0, 10]

i = 0
# get yesterday last recode by JST
sel = "select time, power from sm"
whe = " where (time < '15:00:00' and date=?) order by time desc limit 1"

db.execute(sel + whe, yday) do |row, fields|
time[i] = row[0]
val[i] = row[1]
i = i + 1
end

# no yesterday recode then get today first recode
if i == 0 then
sel = "select time, power from sm"
whe = " where (time>='15:00:00' and date=?) or (time<'15:10:00' and date=?) order by time asc, date asc limit 1"

db.execute(sel + whe, yday, tday) do |row, fields|
time[i] = row[0]
val[i] = row[1]
end
end

# get last recode by JST
sel = "select time, power from sm"
whe = " where (time>='15:00:00' and date=?) or (time<'15:10:00' and date=?) order by date desc, time desc limit 1"

db.execute(sel + whe, yday, tday) do |row, fields|
time[i] = row[0]
val[i] = row[1]
end

# convert to JST from UTC
h = time[i][0, 2].to_i
print "{ \"a\": "
print "\"" + utc2jst(h) + time[i][2, 3] + "\", "
print "\"b\": { \"c\": \"" + (val[i] - val[0]).round(1).to_s + " kWh"
print "\"} }"
```

グラフ用のcgiをベースに作ってみました。

タグが意味不明ですがGridagramのサンプルのなごりです。

スマートメーターからは10分おきにデータを拾っていてたまに失敗していますが、ほぼほぼ10分くらいの遅延で表示できます。

Magic-Grid便利です。

電力会社の本音は実入りがへるので、節電して欲しくないんだと思います。

本来Aルートでもいろいろできるのですが、電力会社はやる気がないので、Bルートの利用がもう少し普及するといいのですが。

昼の12時の時点で半分くらいになるので、目安にはなるようです。

無理して節電して死なないようにしてくださいね。
curlコマンドでPOSTするのに必要だったオプションを調べる

### はじめに
curlコマンドで「どうやってコマンドを書けばPOSTできるんだろう」となり色々調べてPostできたのでまとめておく。

curlコマンドのオプションを知ることで、curlをより使いこなせるようになると思うので、便利そうだと思ったオプションについてもいくつか書いておく。

### curlコマンドとは
まず初めにcurlコマンドは、データを転送するためのコマンドで、FTPやHTTP、Telnet,SMTP,HTTPSなどのさまざまな通信プロトコルに対応している。

apiに触る機会があると手軽にレスポンスを確認できるので重宝しているコマンド。

### 実際に書いたコマンド
```curl
$ curl -L -X POST 'https://api~' \-H 'Authorization: Bearer hogehoge' \-H 'Content-Type: application/json' \--data-raw '{"product": {"name": "string",  "sales_price": 1600}' | jq
```

様々なオプションがついているが、どれもPOSTするのに必要なものなので一つ一つの意味を整理していく。

#### -X(--request)
HTTPメソッドの指定をするオプション。`--request`でも同じ意味を持つ。


#### -L(--location)
curlは、デフォルトではリダイレクトを追跡しないので、リダイレクトも追跡できるようにするオプション。


#### -H（-header）
HTTPヘッダーの指定ができるオプション。
リクエスト時に認証が必要だったので、Authorizationを指定して必要な値を付与した。

#### --data-raw

POSTリクエストでデータを指定することができる.

リクエスト時にはContent-Typeはデフォルトで`application / x-www-form-urlencoded`が指定される。

同じようなオプションで`--data`がある。dataだとファイルをデータとして扱いたい場合は`@<file>`という形で指定できるが、`--data-raw`だと`@<file>`を使うことはできない。

### 他に便利そうなオプション
#### -o(-output ファイル名)

ファイル名を指定してダウンロードしたい時に使う。

もし対象のディレクトリがない場合は

`--create-dirs`のコマンドをつけてあげると、ディレクトリの作成まで行ってくれる。

ディレクトリの作成は毎回行なっていたので、このコマンドを早く知れていれば...という気持ち

#### -O(--remote-name)

指定した URL の内容をそのままファイルとしてダウンロードすることができる。

#### -s(-silent)

実行中のメッセージを表示しないようにする。

#### -sS(--show-error)

実行中のメッセージは表示されないがエラーは表示するようにする。

#### -f(--fail)

実行中に失敗してもエラーメッセージが表示されないようになる。

#### -4(--ipv4)

IPv4しか指定できない

#### -6(--ipv6)

IPv4しか指定できない


### 参考文献

https://qiita.com/takayukioda/items/edf371b3566bea64d046

https://smile-jsp.hateblo.jp/entry/2020/10/05/093106
【TypeScript】オブジェクト型

## object
```ts
// objectでは内容が変更されてもエラーは発生しない
let profile1: object = { name: "田中" }
profile1 = { birthYear: 3000 }

// 以下のように指定することで内容にも型を指定することができる
let profile2: { name: string } = { name: "田中" }
// profile2 = { birthYear: 3000 }
// error TS2322: Type '{ birthYear: number; }' is not assignable to type '{ name: string; }'.
// Object literal may only specify known properties, and 'birthYear' does not exist in type '{   name: string; }'.
```
2022/6/20主にITとかセキュリティの記事

海外拠点　格好の標的…低い保安意識　対策業者任せ(6/18)
https://www.yomiuri.co.jp/national/20220618-OYT1T50092/

ロシアの大規模ボットネット「RSocks」、米英独蘭が解体(6/18)
https://news.nicovideo.jp/watch/nw11059673

Telegramにクレジット情報を流すコードがEコマースサイトに埋め込まれる(6/18)
https://news.mynavi.jp/techplus/article/20220618-2370921/

増加するネット詐欺ランキング　1位は「ワンクリック詐欺」シニア男性が被害に(6/18)
https://www.moneypost.jp/917324

AirTag悪用した殺人事件発生　米国で(6/18)
https://www.zaikei.co.jp/article/20220618/677187.html

PCのデータを一度もバックアップを取ったことがない人は20％(6/18)
https://news.mynavi.jp/techplus/article/20220618-2370943/

shell（シェル）とは？特徴やメリット・活用方法を解説(6/17)
https://and-engineer.com/articles/Yo7EkBEAACMAUYBO

「iPhone」でスパムメッセージをフィルタリングするには(6/18)
https://japan.zdnet.com/article/35189063/
EC2で立てたサーバにsshする際にエラーが発生してしまう 

## 問題
EC2で立てた踏み台サーバからEC2サーバに対して、ipアドレスでsshする場合は問題なくできるが、ホスト名を指定する場合はエラーが発生してしまう
```
$ ssh -A ip-xx-xx-xx-xx.ap-northeast-1.compute.internal

ssh: Could not resolve hostname  ホスト名 : Name or service not known
```

## 原因
VPCのDNSホスト名の設定が『無効』になっていた
## 解決策
#### DNSホスト名を編集をクリック
![スクリーンショット 2022-06-13 3.29.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2685760/cbfd5308-290b-dbf2-0522-54e4be8078d8.png)
#### 有効化をチェック
![スクリーンショット_2022-06-13_3_11_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2685760/257a141a-1752-1aba-48ce-57e2aaaab6a3.png)
#### DNSホスト名が有効になっていることを確認
![スクリーンショット_2022-06-13_2_35_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2685760/72993820-0696-7bd7-b8b5-d09501c42942.png)

```
$ ssh -A ip-xx-xx-xx-xx.ap-northeast-1.compute.internal

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

```

## まとめ
ホスト名なしのipのみでsshコマンドを実行した場合は接続に成功していたので解決に時間がかかってしまった

DNSホスト名の設定はデフォルトだと「有効」になっているはずなので、何かのタイミングで無効にしてしまっていたのかもしれない

## 参考にしたwebページ
- https://qiita.com/fumiya-konno/items/f94ed3e3c114793c898a