OmniAICreator/Qiita-1.07M huggingface dataset:
seaborn.relplot() でFacetごとに複数カテゴリ(色)をプロットする

# 複数のカテゴリをFacet内でひとまとめにする

Pythonのグラフ描画ライブラリseabornのメソッド`relplot()`の引数`col`や`raw`は
異なるカテゴリのプロットを表形式でまとめるられるのですが、
カテゴリ数 = Facet数が増えると幅が長くなりすぎるという問題があります。


![col_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268663/059ffa49-603f-e7ea-fe34-11495105a68c.png)

その対策として、この記事では画像の右の列のように
**1つのFacet内に複数カテゴリのプロットを実現する**方法を紹介します。


## 普通にやってみる

例として有名なirisデータセットをプロットしてみます。
`col` `hue` ともに species を選択すると以下の画像のようになります。
（この場合はhueで色分けする意味があまりないですが…）

```python
import seaborn as sns

df = sns.load_dataset('iris') # speciesは3種類

sns.relplot(
    data=df,
    x='sepal_length',
    y='sepal_width',
    col='species',
    hue='species'
    )
```

![col_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268663/a9efbd8f-e277-ed4b-0466-eb3f84a5ed91.png)


## カテゴリ(色)をまとめるための列を作成

本題に入ります。
speciesの違いは色分けすればわかるので
**versicolor**と**virginica**をひとまとめにすることを考えます。

そのために、df内に新しい列`col_facet`を置換辞書から生成しましょう。
すると`col_facet`に対応するspiecesがすべて1つのFacet内にプロットされるようになります。

なおFacetの順番は`col_order`で設定できます。


```python
# replace()でspecies列を L または R に置換した列を新規に作成
df['col_facet'] = df['species'].replace(
    {
        'setosa': 'L',
        'versicolor': 'R',
        'virginica': 'R'
    }
)

sns.relplot(
    data=df,
    x='sepal_length',
    y='sepal_width',
    col='col_facet',  #列を変更
    col_order=['L', 'R'],  #新規に指定
    hue='species'
    )
```

![col_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268663/f8d0983e-a3b0-920a-d8fc-7b54fbe5aa13.png)

うまくいっています。

余談ですが、まとめた後のFacet数も数がある場合は
置換辞書`d`の置換先に0以上の整数を指定して

```python
sns.relplot(
    col_order=list(range(max(d.values()))
)  #他の引数は省略
```
などとするとよいでしょう。

## 表題を削除

`col_facet`でまとめたカテゴリに特段の意味がない場合には
**col_facet = L**のような表題は必要ないと思います。

表題を一様に削除するには、
relplot()の戻り値である`FacetGrid`のメソッド`set_titles()`を以下のように設定します。

```python
g = sns.relplot(
    data=df,
    x='sepal_length',
    y='sepal_width',
    col='col_facet',
    col_order=['L', 'R'],
    hue='species'
    )
# 全タイトルを空文字列に設定
g.set_titles(col_template='')
```


![col_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268663/059ffa49-603f-e7ea-fe34-11495105a68c.png)

これで表題を消すことができました。

## 参考
https://wckdouglas.github.io/2016/12/seaborn_annoying_title

https://github.com/mwaskom/seaborn/issues/440
GPT-3を使って英語を添削してもらう

## 概要
- OpenAIのモデル「Text davinci」に英文添削をしてもらう
- 意外と使い物になる英文ができた。
## 動機
- 英語で何かを書かなくてはならないときによく詰んでしまう。  
- Grammarlyなどのサービスがあるが、無料版では文法間違いのみの指摘。
- ちょっとした英文のブラッシュアップをしたい。
## 🧠 Awesome ChatGPT Prompts
巷を沸かせているOpenAiのChatGPTですが、世界のすごい人が「呪文集」をまとめてくれています。  
[🧠 Awesome ChatGPT Prompts](https://github.com/f/awesome-chatgpt-prompts)  
その中に"Act as an English Translator and Improver"という面白いものがありました。  
これは、ChatGPTが英語教師に成り代わって文書推敲してくれるという願ったり叶ったりの呪文です。
> Act as an English Translator and Improver
    I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English. I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences. Keep the meaning same, but make them more literary. I want you to only reply the correction, the improvements and nothing else, do not write explanations. My first sentence is "istanbulu cok seviyom burada olmak cok guzel"

My first sentence is〜以下に任意の文章を流し込めば、文書を吐いてくれるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201341/b1f44106-efc8-820f-6708-bee4e87d5d25.png)

これは期待できそう...？

## OpenAIのpythonAPI
[https://beta.openai.com/docs/libraries/python-bindings](https://beta.openai.com/docs/libraries/python-bindings)
色々な先人が解説しているのでここではざっと流れだけ触れます。
- OpenAIのアカウントを作る
- ApiKeyを発行する
- `pip install openai`を叩いてライブラリをダウンロード
- python上で`import openai`してゴニョゴニョ

## 実装例
``` python:english_teacher.py
import os
import openai
OPEN_AI_KEY = "あなたのApikey"
openai.api_key = OPEN_AI_KEY
MAX_WORD = 500
revised_ans = ""

word = "I phoned her but she wasn’t there here." #ここに添削してほしい文書を入力
magic_word = f"I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English. I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences. Keep the meaning same, but make them more literary. I want you to only reply the correction, the improvements and nothing else, do not write explanations. My first sentence is '{word}'"

count_word = len(magic_word.split())
if count_word < MAX_WORD:
    response = openai.Completion.create(model="text-davinci-003", prompt=magic_word, temperature=0, max_tokens=1000)
    if response["choices"]:
        res = response["choices"][0]
        if res["finish_reason"] == "stop":
            revised_ans = res["text"]
else:
    print("Exceeded # of words.")

print(revised_ans)
```
どうやら注意点としては、
**ChatGPTはAPIでは直接叩けず、学習完成版のText Davinci 003モデルとなる**、ということでしょうか。
  両者の違いについては[こちら](https://www.reddit.com/r/OpenAI/comments/zdrnsf/comment/iz3kfui/?context=3)にざっくり書かれています。

## 出力例
``` bash
$ python english_teacher.py


I phoned her, yet she was not present.
```
んー、なんか洗練されている気がしますね（？）

## 考察
- 入力は標準入力や、txtファイル読み込みとかにしても面白いかもしれません。
- Promptsもいろいろな例が公開されているので、`magic_word`部分を変えても面白いと思います。(剽窃チェッカーやサッカー解説者モードとかもありますｗ)
【instaloder】PythonにてInstagramの情報を取得するライブラリ

## 前置き
Instagramでスクレイピングしようとしていませんか？
スクレイピングしようとしている方は、一度立ち止まってください！
スクレイピングは利用規約により禁止されています。絶対にやめてください。
そんなリスキーなことをするよりも簡単に情報収集できる方法があるので、紹介していきますね。
## インスタのスクレイピング対策はTOPレベル
ユーザーページへのアクセスで、数十回ユーザーページにアクセスしただけで本人確認画面に飛ばされるそうで、プロキシでアクセスしたりUA変更や人間らしい動きなどの対策をしても弾かれるようです。
## ライブラリ：Instaloader
海外の掲示板を周回していると面白いライブラリを見つけました。『Instaloader』という名前のライブラリでユーザーIDさえあればその人のプロフィールや投稿数、フォロワー、フォロー中の取得が数行で行えました。コンソール(cmd)で、
```:cmd
pip install instaloader
```
と入力すればインストールできます。

## できること
・特定のハッシュタグが付いた投稿の情報取得
・ストーリーや投稿画像のダウンロード
・投稿のいいね数
・プロフィール文やプロフィール画像、フォロワー数など取得
etc..

## プログラミング例
例を記載しておきますね👇
```Python:example.py
from instaloader import Instaloader, Profile

L = Instaloader()  # インスタンス化
id = 'watanabenaomi703'  # 渡辺直美さんのアカウントIDを入力しました
profile = Profile.from_username(L.context, id)  # プロファイル取得
UserName = profile.full_name  # ユーザー名取得
posts = profile.mediacount  # 投稿数取得
Follower = profile.followers  # フォロワー数取得
Follow = profile.followees  # フォロー中数取得
print(f'ユーザー名:{UserName}\n投稿数:{posts}\nフォロワー数:{Follower}\nフォロー中数:{Follow}')
```
```:出力結果 2022/01/07時点
ユーザー名: 渡辺直美　Naomi watanabe
投稿数:1055
フォロワー数:9,605,708
フォロー中数:752
```
## まとめ
このライブラリを使用することで、大量の件数を問題なく取得できました。
使用する際にはライブラリのリファレンスを一読してくださいね。
AWSの署名付きURLを生成するメモ

# AWSの署名付きURLを生成するメモ

S3の動画や静止画などにだれでも見られないように制限をつける。
AWSの署名付きURL機能を使うことで、鍵認証をとうして一定期限のみの閲覧可能の制限を設定することができます。

## 秘密鍵を生成する。

```
openssl genrsa -out private_key.pem 2048
openssl rsa -pubout -in private_key.pem -out public_key.pem
```

## 作成した暗号鍵をAWS CloudFrontのパブリックキーに登録する
![パブリックキー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99447/3c69e291-ac6b-2337-2f91-d297de6c499b.jpeg)

## 作成パブリックキーでキーグループを作成する。
![スクリーンショット 2022-12-26 1.04.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99447/ba4422d5-de9b-bcb5-a088-3b4f1aa1fd4b.png)

## S3バケットを作成する。
公開するファイルを保存するS3バケットを作成する。

### CloudFrontでディストリビューションを作成する。
オリジンの設定を行う
![オリジン設定.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99447/432f0905-024d-f215-163e-c8fd2f0634a8.jpeg)

「Legacy access identities」にチェックを入れる

## Cloudfrontのビヘイビアを編集
![ビヘイビア.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99447/015feb64-80bd-fa6c-99b4-25523e0a9cb8.jpeg)

## ビヘイビアのキーグループを作成したキーグループを設定する
![ビヘイビア-秘密鍵.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99447/170749b1-50a3-d2ee-4fab-1ac13bb3ddd2.jpeg)

ビヘイビア設定を保存する


## 署名付きURLの生成方法

### aws cliで作成する例
```
aws cloudfront sign \
--url https://cloudfrontのURL \
--key-pair-id キーペアID \
--private-key 秘密鍵ファイルパス \
--date-less-than 有効期限
```


以上になります。
React Native で OS判定 を実装する方法

## やりたいこと

React Native で OS判定 を行い  
iOS と Android で処理を出し分けたい

## 使用技術

- react : 18.1.0
- react-native : 0.70.2
- @types/react-native : 0.70.0
- typescript : 4.8.3

## 実現方法

[React Native Platform](https://reactnative.dev/docs/platform) を使用すれば  
iOS と Android で処理を分けることは実現可能

以下に、実際のサンプルコードを記載しておきます。

### iOS判定をしたい場合

`Platform.OS === 'ios'` で判定を行う

```tsx
import { Platform } from 'react-native';
const isIOS = Platform.OS === 'ios'
console.log(isIOS)
// expected output : iOSの場合`true`になる。Androidの場合`false`になる
```

### 確認方法

`yarn ios` で開発環境を起動したら`true`が出力されます  
`yarn android`で開発環境を起動したら`false`が出力されます

### Android判定をしたい場合

`Platform.OS === 'android'` で判定を行う

```tsx
import { Platform } from 'react-native';
const isAndroid = Platform.OS === 'android'
console.log(isAndroid)
// expected output : Androidの場合`true`になる。iOSの場合`false`になる
```

### 確認方法

`yarn ios` で開発環境を起動したら`false`が出力されます  
`yarn android`で開発環境を起動したら`true`が出力されます

## [おまけ] iPad判定をしたい場合

Platform を PlatformIOSStatic で型アサーションすると  
isPad にドット記法でアクセスできるようになるので以下のコードで実現可能。

```tsx
import { Platform, PlatformIOSStatic } from 'react-native'

if (Platform.OS === 'ios') {
  const platformIOS = Platform as PlatformIOSStatic
  console.log(platformIOS.isPad)
  // expected output : iPadの場合`true`になる。それ以外の場合`false`になる
}
```
VRChatガイドブック~ゼロからはじめるメタバース

本の紹介記事です。VRChatで遊ぼうと思っていた矢先に、人生の先輩からおすすめされた1冊です。

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599506/3f5a1ec5-19b5-97b9-2b08-de48cec27f9e.png)](https://www.amazon.co.jp/VRChat%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%A1%E3%82%BF%E3%83%90%E3%83%BC%E3%82%B9-%E5%B2%A9%E4%BD%90%E7%90%A2%E7%A3%A8/dp/4575316881)

# なぜ読んだのか

Quest2を使っていると変な目で見られるので、皆が寝静まってからコソコソ遊んでいました。ただ、本ならば日中堂々と読めます。冬休みにVRチャットへの理解を深めようと思って購入しました。
 
# 本の紹介

タイトルにあるように、まさにVRChatのガイドブック。[Shiftall](https://ja.shiftall.net/)の岩佐さん、まつゆうさんの書籍です。使い方だけでなく、文化や常識、時には自分の身を守る方法も記載されており、旅行先でのガイドブックのような書籍でした。普段ゲームをしない、初心者寄りの私でも読みやすい構成になってます。

詳しい知人がいるコミュニティに属していれば教えてもらえる内容かもしれません。ただ、観光地にガイドブックを持っていく感覚で、詳しい知人がいる人も、VRChat経験者も、持っておいて損はないと思いました。

# 気になった点
## VR酔いは当たり前
車で本読んだり、荒天で船に乗ったりしても、全く乗り物酔いしない私ですが、VRChatを1時間プレイしたら酔いました。衝撃でした。
「VR向いてないのかな～」と思っていたのですが、ビギナーは酔うのは当たり前、20~30時間したら克服できるとのこと。酔わないための設定も紹介されており、ありがたい情報でした。

## 文化の話

異国に行くときにはその国の文化や常識を知っておく必要があります。それと同じように、VRChatでの文化を知る必要を感じました。

VRChat（というかメタバース空間）は自由度が高く、現実に近い動きもできます。一方で、現実とは違い、匿名かつ顔も見えません。そのため、他人を不快にさせる行動もできてしまいます。
他人を不快にさせないために、また、他人から迷惑行為をされたときに自分の身を守るために、最低限の知識は身に着けておきたいと感じました。

また、リアリティが高いけど、リアルではありえないことが体験できるからこそ、Chapter2 以降で紹介されるような楽しみ方もできます。（だから、授乳カフェのような高度な遊びもあるんだな、と…。）

# さいごに（ポエム）

シンプルに楽しい。冬休みはバ美肉（バーチャル美少女受肉）して遊んでみます。

iPhoneのLiDARスキャンで生成した3DオブジェクトをVRChatに持っていけるようになり、VRと現実が近くなってきてます。ツールの使い方はもちろんですが、文化や風土になじめるかがポイントのような気がしました。
また、顔だけでなく全身自由に受肉して、名前も自由に設定できます。Twitterのような匿名での不特定多数との交流でのコミュ力があるとより楽しめそうです。コミュ力ってどこでも必要だよな～。
1次元セルオートマトンのシミュレータを作ってみた

# きっかけ 
大学の講義で1次元セルオートマトンについての話があり、実際に1次元セルオートマトンを作る課題が出たのでpythonで作ってみた。しかし、完成物をターミナルで実行するだけだといささか物足りなかったので、どうせならwebアプリとして作ってみようと思い立った。
# 完成品
ルール30で実行したらこんな感じになった
![2022-12-26 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2782784/9676bdcc-8ca4-fd3c-61f6-da31a2a0c996.png)

# 機能
フレームワークとしてpythonの軽量フレームワークflaskを使用した。

ユーザは
①セル数
②初期状態(ランダム,中心のみ1など全８種)
③ルール
④世代数
の四つのパラメータを調整していろんなパターンを生成できる

# 感想
１次元セルオートマトン自体はすぐ作れた。問題はそれをwebアプリとしてブラウザ上で実行できるようにする部分。そもそも知識がなさ過ぎてGET?POST?なにそれおいしいの？みたいな感じからスタートしたので大変だったが、あれこれ調べながら悪戦苦闘して作っていくうちに日ごろ感じていた「プログラミングへの苦手意識」が少し和らいだ気もする。今の良い感覚が残っているうちにいろいろ作ってみようと思う。
初めてPR出してみたら、とても良かった

# OSSに初めてPRを出してみたら、とても良かったはなし

この記事は、[初めてIssueをあげてみた](https://qiita.com/shihou-ono/items/88d9ebfa91291482f2e4)の続きです。

## 手短に語ると

- [前回記事](https://qiita.com/shihou-ono/items/88d9ebfa91291482f2e4)の通り、ansible/AWXで簡単な[issue](https://qiita.com/shihou-ono/items/88d9ebfa91291482f2e4)をあげてみました
- コメント下さった方にメールしたら、熱い返事をいただき、PRする決心を固めました
- 検証しました
- [PR](https://github.com/ansible/awx/pull/13362)出しました <-いまここ
- PRの行く末はどうなるかな?

## PR出そうと思った大きなきっかけ

前回の記事には書いてなかったのですが、今回PRを出そうという気持ちになった大きなきっかけがありました。  
ご本人にも了承をいただいたので、その話しもします。
[issueに真っ先にコメントを下さった](https://github.com/ansible/awx/issues/13287#issuecomment-1339815529)方が、私がよく読むBlogの筆者だったことは書きましたが、実はその[kurokobo](https://github.com/kurokobo)さんにメールでもお礼を出してました。
「コメントありがとうございます!いつもBlog読んでます!」って、私ミーハー以外のなんでもないですよね。
そんなメールにも丁寧かつ熱い返事を下さいました。

- 原因を特定して、ワークアラウンドまで考えて、第三者にわかりやすく書かれてますね
- contributorが増えると嬉しいです。興味があればPR出してみませんか?
- マージされるかは分からないけど、PR出すことがいい体験になると思います!

面識はない方からこのようなお誘いをいただくOSS communityならではの刺激とか、こうやってcommunityを盛り上げようという姿勢に畏敬の念を抱いたりとか、色々感じるところがありまして、よしやろう!!という気持ちに至りました。
激励いただいたことには、大感謝です。

## 会社のEM室にも協力を仰ぎました

issueを出す際にもレビューをしてくださった[横地](https://github.com/akira6592)さんは、社内でEngineering Mentor室(以下EM室)という部署を立ち上げて、エンジニアのアウトプットを応援することも一つのお仕事としてやってます。
EM室を横地さんが立ち上げた際の思いは[こちら](https://note.com/akira6592/n/nb9b761f72926)に綴られています。
個人としてではなくて、会社に部署を作ってエンジニアの援活動をしているということが、重要な意味を持っていると私は思ってます。
会社がこういう活動に肯定的だという表明でもあるし、協力を仰ぐ側としても業務上の実績になると思うと気軽に依頼できます(とはいえ実質ボランティアなのでは?という気も薄っすらしてますが)。
というわけで、EM室にも協力を仰ぎまして、技術面での補足やPRを初めて出すにあたっての注意点、その後の流れなどの手ほどきをしていただきました。
こちらも大感謝です。

## 検証をしました

そもそものissueの内容を軽く説明すると、pipをinstallするにあたって、RHEL8系では`dnf install python39-pip`、RHEL9系では`dnf install python3-pip`という差が有ります。
しかし、group_vars/all.ymlでは`python39-pip`でハードコードされているため、RHEL9系ではコケてしまうというのがissueの内容でした。
なので、対処方法としてternary filterを使って、8系9系を分岐させようという方向で検証を始めました。

今回はRocky8、9とFedora28、34をそれぞれDockerで用意して、ホスト側からAnsibleで該当のPlaybookを流しました。
実は各OSで動かしてみても、結局Playbook自体は最後までは通りませんでしたが、自分の修正箇所のtaskは問題ないことは確認できました。
ここでやっきになって最後まで通してやろうとすると、いつまでもPR出せないという気がしてきて、ある程度のところで諦める選択をしたのは、自分の中での成長ポイントですね。

反省点は、最初から面倒がらずにDocker-composeでそれぞれのコンテナを管理すればよかったということ。
きちんとした人には信じられないかもしれませんが、つまりOSごとにほぼ同じDockerfileをこさえて、docker runで立てては潰してをやり続けたわけです。
最後の方は一々コンテナのIPアドレスを調べることにフラストレーションを抱えてました。

## やっとPR出せました

そんなこんなで、検証も終わり、無事PR出せました。
issueを出してから結局2週間かかっちゃいました。

PR出すと[別の意見](https://github.com/ansible/awx/pull/13362#pullrequestreview-1226332300)も出てきまして、それも面白いところです。
当初はこれに似たことも考えていたので、まあみんな考えることは同じよなーと。

## おわりに

PRは出すことで終わりではなく、mergeされることが一つのゴールです。
が、却下されたり、別の方法で解決されてもそんなに気にならないくらいに、過程で得るものが大きかったです。
技術的な面もさることながら、主にマインド的な部分ですね。
最初はフリーライドへの後ろめたさというネガティブ寄りな気持ちスタートでしたが、こうやってOSS貢献に関わっていくことの純粋な楽しさに触れられたことが大収穫でした。

ここにとどまらず、今後も「手元でちゃっと直しちゃえばそれでいいじゃない」なことを放置せず、contributeしていこうと思います。
【Pyinstaller】Python exe化の様々なエラー解決策

## 前置き
この記事はPyinstallerのインストール方法やexe化について説明するものではありません。
Pyinstallerで発生するエラーを"解決するだけ為"の記事になります。
様々なエラーがありますので、早速説明していきたいと思います。


## Pyinstallerは複数インストールしている
### 原因
Pyinstallerが複数の環境にインストールされていると処理が正しく実行されない場合があります。
詳しい原因を調査しましたが、原因は判明しておりません。
### 解決策
コマンドプロンプト(cmd)を管理者権限で起動してください。
起動したら下記の様に入力してください。
```:cmd
>>where pyinstaller
```
パスが複数行表示された場合は多数の環境でインストールが行われています。
必要な環境の方だけPyinstallerを残し、他の環境のPyinstallerはpip uninstallでアンインストールしてください。

## exeファイルを実行後のエラーが「No such file or directory」
### 原因
エラー内容は「○○って名前のディレクトリはどこにもないよ」という感じのニュアンスです。
考えられる原因は下記の二つです。

・exeファイルを設置している場所が誤っている
・そもそもディレクトリが無い

### 解決策
ソースコードを再確認し、パスが誤っていないか確認を行ってください。
また、exe化したPythonファイルと同じ階層にexeファイルを設置し、再度実行してみてください。

## exe化時のエラーが 「No module named 〇〇」
### 原因
エラー内容は「○○って名前のモジュールが見つからないよ！」という感じのニュアンスです。
原因はライブラリの読み込みの失敗だそうです。
### 解決策
Pyinstaller実行時に生成される○○○.spec（○○○はexe化対象のPythonファイル名）というファイルを開いていただき、
```
hiddenimports=[],
```
この文字列を見つけてください。
そしてNo module named ○○というエラー文の○○の文字を
```:specファイル
hiddenimports=[’○○’],
```
と入力してください。同様のエラー文が複数ある場合は、
```:specファイル
hiddenimports=[’○○’, '××', '△△'],
```
と入力してください。
Pythonのリスト型のイメージです。
入力し終えたら上書き保存を行い、cmd等で下記の様に実行してください
```:cmd
pyinstaller 〇〇〇.spec 
```
※〇〇〇はファイル名に置き換えてください。また「--onfile」などのオプションも自由に追加してOKです

## exe化時のエラーが 「No module named PyInstaller」
他の記事で作成したのでこちらをご覧ください。

https://qiita.com/MOSO1409/items/7c942c3575ae009473df

## --onefileと--noconsoleの同時使用
### 原因
--onefile     | ライブラリ等をまとめてexeに格納させる
--noconsole   | exeファイルの実行時に出てくるコンソール(黒い画面)を非表示にする
Pyinstallerには上記の様な便利なオプションが用意されています。
二つとも便利なので両方使いたいですよね！
しかし、exeファイルの実行時にエラーが発生する場合が稀にあります。
これはPyinstaller特有のバグだそうです。

### 解決策
Pyinstallerのオプションである上記の2つは同時に入力してはいけません。
どちらかを選んでオプション付けして実行してください。

## まとめ
お読み頂きありがとうございました。
私も上記のエラーで1週間は潰したといっても過言ではありません。
他の方のお役に立てたらと思い、記事にしました。
何かご指摘等ございましたら、コメントをお願いいたします！
Deno 学習が捗る Deno チートシート

Deno アドベントカレンダー 22日目の記事です。

非常に良く出来た Deno チートシートの紹介です。

https://oscarotero.com/deno/

[![スクリーンショット 2022-12-26 0.54.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13825/a1a82e3d-1079-8fb4-ce2b-f044d142f3e1.png)](https://oscarotero.com/deno/)

Deno 用の静的サイトジェネレータ [Lume](https://lume.land/) の作者でもある Oscar Otero さんが作成・メンテナンスしている Deno のチートシートです (ページ自体も Lume で作成されています)。

Deno 本体のすべての API と、Deno 標準モジュールの API をカバーしています。

本体の API はさらに Deno 名前空間の API と、グローバルに定義されている Web 標準由来の API に分かれていて、非常に見通しが良いです。

Deno 公式から提供されている Deno で出来ることがほぼすべて網羅されているため、これから Deno で何か作りたい人におすすめです。
データベースの非機能要件項目どこに置く問題

# ◆データベースの非機能要件項目どこに置く問題
DB設計で、よくある問題
非機能要件の項目はどこに置くのかという問題（問題なのかな？）

# ◆非機能要件の項目とは？
名前とか誕生日とかアプリケーションに必要な項目を機能要件の項目といい、
アプリケーションに必要ない項目を非機能要件の項目といいます。
具体的には、レコードの作成時間や作成者IDや作成者IPアドレスなど実際には必要ない項目を
持たせることがあります。（主に、障害時に調査等に使う目的でつけていることが多いです）

# ◆どこに置いてもよいのでは？
よくあるのは最後尾につけます。
※ 型は適当です。

・ユーザテーブル
|Filed  |名前  |型  |
|---|---|---|
|id  | ID  | number  |
|name  | 名前  |text  |
|create  | 作成日時  | timestamp  |
|create_id | 作成者 | text|
|create_ip | 作成IPアドレス | text|
|update  | 最終更新日時  | timestamp  |
|update_id | 最終更新者 | text|
|update_ip | 最終更新IPアドレス | text|

こんな感じになります。
まぁ、何も問題ないですよね。
ユーザテーブルに誕生日を追加してみましょう

・追加後のユーザテーブル
|Filed  |名前  |型  |
|---|---|---|
|id  | ID  | number  |
|name  | 名前  |text  |
|create  | 作成日時  | timestamp  |
|create_id | 作成者 | text|
|create_ip | 作成IPアドレス | text|
|update  | 最終更新日時  | timestamp  |
|update_id | 最終更新者 | text|
|update_ip | 最終更新IPアドレス | text|
|birthday  | 誕生日  | timestamp  |

なんか非機能要件項目を挟んで機能要件項目があると見にくくない？

# ◆最後尾はやめて先頭においてみる

・ユーザテーブル
|Filed  |名前  |型  |
|---|---|---|
|create  | 作成日時  | timestamp  |
|create_id | 作成者 | text|
|create_ip | 作成IPアドレス | text|
|update  | 最終更新日時  | timestamp  |
|update_id | 最終更新者 | text|
|update_ip | 最終更新IPアドレス | text|
|id  | ID  | number  |
|name  | 名前  |text  |

こんな感じになります。
では、同じようにユーザテーブルに誕生日を追加してみましょう

・追加後のユーザテーブル
|Filed  |名前  |型  |
|---|---|---|
|create  | 作成日時  | timestamp  |
|create_id | 作成者 | text|
|create_ip | 作成IPアドレス | text|
|update  | 最終更新日時  | timestamp  |
|update_id | 最終更新者 | text|
|update_ip | 最終更新IPアドレス | text|
|id  | ID  | number  |
|name  | 名前  |text  |
|birthday  | 誕生日  | timestamp  |

慣れないと違和感ありますが、まぁ慣れれば運用しながら項目追加しても
機能要件項目が離れないので、良いかなと思います。
個人的アウトプットのコツ

# はじめに
2022 年は、前年に比べて、アウトプットの量が大きく増えた年でした。Qiita の記事でも 150 いいねを獲得したり、コントリビューションが 1000 を超えたり、まだまだ全然大した数字では無いのですが、自分にとっては大きな変化でした。

そんな中で、アウトプットに関して意識していたことを共有します。

# ハードルの低いアウトプット方法を用意しておく
初学者にとって、Qiita に投稿したり登壇したり、というのは相当大きなハードルに感じるものです。
その前に細かく段階を刻んだアウトプット方法を用意することで、アウトプットに対する心理的ハードルを下げる、ということをやっていました。

# まずは Slack の個人チャネルに投稿する
[ユニークビジョン株式会社](https://www.uniquevision.co.jp/recruit) では各個人ごとに分報と呼ばれる Slack チャネルがあるので、何か発見や学びがあったときはそこにメモのように記録を残します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/97d0f397-5bfd-3c44-e013-931f4abe02ae.png)

# 社内技術共有チャネルに投稿する
得られた知見や学びがあったもので、これは社内の人に共有したらすぐにでも役立つ！と思ったものに関しては、Slack の社内技術共有チャネルに投稿するようにしています。

社内向けなので、記事よりは雑な状態で、とにかく速さを優先して簡単にまとめて投稿します。

これが素案になって、Qiita 投稿につながったりもします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474068/f93726b8-eb58-742e-ae41-d93ba21024a6.png)

# Twitter に投稿する
ちょっと悩んでいて、ワンチャンだれか教えてくれる人いないかな～みたいな気持ちのときは、Twitter に投稿したりします。
個人的な作業ログなんかとしても使っています。たまに開発者が出てきて教えてくれる、みたいなこともあります。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">openapi-typescript で OpenAPI から型を生成し、<br>openapi-typescript-fetch でその型を利用して fetch する、ということができるが、id などを含む動的な URL にはうまいこと対応していないようだ。<br><br>OpenAPI で /items/{item_id} みたいなパスを設定していると、それをそのまま叩いてしまう。</p>&mdash; シライシ@UniqueVision (@punksy2) <a href="https://twitter.com/punksy2/status/1601253385688473600?ref_src=twsrc%5Etfw">December 9, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# Qiita に投稿する
前述した方法のどれかで、調べた内容を体系的にまとめたいときや、より深く理解しておきたいとき、あるいはネット上でなかなか見つけられなかった情報などは、記事にして投稿します。

記事にするときに意識していることをいくつか紹介します

### 単一責任の原則
すべての記事が当てはまるわけではないですが、基本的に１つの記事では１つのことを伝えるということを意識しています。
何かを伝えようとしたとき、本筋とは関係のないことをダラダラと説明して結局何が言いたいのかよく分からなくなることはよくあります。（その辺うまく伝えている記事も沢山あります！）
それよりは、説明したいことだけにフォーカスし、記事にしてしまったほうが速いし明確です。

次の記事はその典型です。

https://qiita.com/punkshiraishi/items/7ceb5649a477aaa9b1ac

### 検証しながら書く
色々調査が終わってから記事を書くよりも、検証しながら、その検証結果をそのまま記事にすると、早く、良くまとめることができます。
html や CSS に関することであれば、CodePen で書きながら本当に記事上で動きを見ることができるので便利です。

下記の記事は実際にそのような方法で書いたものです。

https://qiita.com/punkshiraishi/items/308f0f68ae682ee8608a

### めちゃくちゃ丁寧に書く
ここまでの方法とは全然異なるものですが、めちゃくちゃ丁寧に書いた記事は、多くの人が読んで理解してくれるので、自分は大変ですが、世の中にもたらす利益は多いです。丁寧に書いた分、自分の理解度は格段に上がりますし、**沢山いいねしてもらえるので嬉しい**です。大変なことばかりではありません。

下記の記事はそんな記事でした。

https://qiita.com/punkshiraishi/items/5eca74202f6445025650

# さいごに
**2023 年は 10000 コントリビューション目指します！！！**
KVMによる仮想環境について

●KVM（Kernel-based Virtual Machine）
Linuxカーネルの仮想化機能。

●KVMによる仮想化機能の有効化
完全仮想化を実現するため、仮想化支援機能を搭載したCPUが必要。仮想化支援機能とは仮想化ソフトウェアが行う処理の一部をCPUが分担することで処理を高速化する機能で、Intel VTやAMD-Vで実装。
CPUが仮想化支援機能をサポートしているかどうかを調べるには、lscpuコマンドや「/proc/cpuinfo」ファイルを確認。
lscpuコマンドでは「Virtualization」（日本語では「仮想化」）の値が"VT-x"（Intel VT）または"AMD-V"（AMD-V）と表示されればサポートしています。


「/proc/cpuinfo」ファイルでは「flags」において"vmx"（Intel VT）または"svm"（AMD-V）という値があるかどうかを確認。


また、仮想化支援機能を利用するために、カーネルモジュールkvm（kvm.ko）に加えて、以下のどちらかのカーネルモジュールをホストOSのカーネルにロードする必要がある。これらのモジュールはカーネルに組み込むことも可能。
・kvm_intel（kvm-intel.ko）...Intel VT-xを使用する場合
・kvm_amd（kvm-amd.ko）...AMD-Vを使用する場合



●KVMによる仮想環境の管理

KVMの特徴

・QEMUによるハードウェアエミュレーション
QEMUとはオープンソースのハードウェアエミュレータ。KVMでは、QEMUを利用して仮想マシンの作成、起動、停止などの基本動作を行う。QEMUで実行される仮想マシンはLinuxの1プロセスとして動作するので、他のプロセスと同様に管理できる。また、「/dev/kvm」というデバイスファイルを通じてKVMとやり取り。

・libvirtに対応
libvirtはオープンソースの仮想化管理用のソフトウェア。KVMではデフォルトの管理方法。
libvirtを利用するプログラムとしては、GUIの仮想マシン管理ソリューションであるvirt-managerや、CLIのvirshコマンドなど。

libvirtは数多くの仮想化ソフトウェアに対応。
Oracle VM VirtualBox、VMware ESX/GSXi/Workstation、 Microsoft Hyper-V など

libvirtを用いて仮想環境を管理するためにはlibvirtdデーモンが稼働している必要がある。


●ハイパーバイザー型の実現方法には更に「完全仮想化」と「準仮想化」がある。

■完全仮想化
完全仮想化（Full Virtualization）は、コンピュータのハードウェアをエミュレー卜（模倣）して仮想マシン上に完全な論理コンピュータを実現し、ゲストOSを無修正で動。そのため、ソースコードを自由に書き換えることができないWindowsをゲストOSとしてインストールすることが可能。

■準仮想化（PV：Paravirtualization）は、ハードウェアのエミュレーションが必要ないため、処理のオーバーヘッドが小さく、仮想化環境でも高いパフォーマンスを発揮。準仮想化はゲストOSを修正するか、仮想マシンに特化したデバイスドライバを使うことで実現。KVMやVirtualBoxでは、virtioという準仮想化用のドライバを利用することによって、仮想化環境でのI/Oパフォーマンスを高めることができます。
メタバースとは、何ぞや？

# メタバースとは、何ぞや？
～新しくも難しくもない、電子計算機空間～

## 最近よく聞きますよね、メタバース…
何だか美少女ばかりでキモイとか、特殊な機械が必要なんじゃないかとか、よくわからないけどイメージばかり先行しているのではないでしょうか。
今回はそんなあなたに、「メタバース」とは何なのか簡単に説明します。

## メタバースの定義
まず、「メタバース」は２０２２年８月現在登録商標となっておりません。
つまり普通名詞です。どこかの企業が展開するサービス名称ではありません。
「デパート」とか「テーマパーク」と同じです。

そしてそれは、メタバースという言葉の意味にも通じます。

では、メタバースとは「行楽地」なのか？
あながち間違っていませんが、中にはPRの仕事をしている人や商談をしている人もいます。

メタバースとは、「電子計算機内で人が交流する空間」です。
もう少し詳しく見ていきましょう。

## 「電子計算機内で人が交流する空間」とは？
現在メタバースと呼ばれるものへは、パソコンやスマートフォン、ゲーム機やVR機器を使用して接します。当然それらはインターネットに接続されている必要があります。
インターネットの先にはサーバという高性能電子計算機があり、そこに３Dで描かれた仮想空間があり、その中にいるキャラクターを動かして何かを見たり文字を入力して他のキャラクターと交流したりします。

これって、何かに似ていませんか？

画面の中でいろんな人と戦ったり、協力してボスを倒したりする。オンラインゲーム。

メタバースとは「ゲームを必須目的としないオンラインゲーム」でもあります。
もちろんメタバース内でゲームしても良いのですが、文字や音声で交流（チャットといいます）しておしゃべりに花を咲かせても良いのです。

## メタバースという言葉
メタバースという言葉自体、注目されるようになったのはつい最近のこと。
それ以前からコンピュータネットワークで交流するのは存在した。
言ってしまえば現在ビジネスで使用することが増えたslackやspetial chat、oViceなども十分メタバースと言える。必ずしも３Dである必要性はないと考える。
大切なのはこの「場」をどう活用し、人類の幸福に向けて進めていくかだろう。
メタバースに縛られる未来にならないよう、これからも注視し続けたい。
子オブジェクトを滑らかに回転させる [Unity2D]

親オブジェクトが急激に回転した場合に、滑らかにその回転を追従するようなスクリプトを作ります。

# 実装

```CS:SmoothRotator.cs
using UnityEngine;

public class SmoothRotator : MonoBehaviour
{
    public bool SmoothRotate = true;
    public float SmoothTime = 0.1f;

    [SerializeField] private Transform rotateTarget;

    // Read-only
    [SerializeField] private float prevAngle;
    // Read-only
    [SerializeField] private float smoothVel;

    private void Update()
    {
        if (SmoothRotate && rotateTarget.parent is { } parent)
        {
            var currentAngles = rotateTarget.eulerAngles;
            currentAngles.z = prevAngle;
            // 親の角度
            var targetAngle = parent.eulerAngles.z;
            currentAngles.z = Mathf.SmoothDampAngle(currentAngles.z, targetAngle, ref smoothVel, SmoothTime);
            rotateTarget.rotation = Quaternion.Euler(currentAngles);
            prevAngle = currentAngles.z;
        }
        else
        {
            prevAngle = rotateTarget.eulerAngles.z;
            smoothVel = 0f;
        }
    }
}
```

# 使い方
滑らかに回転させたいGameObjectにアタッチします。
![スクリーンショット 2022-12-26 0.14.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987563/bf3d0655-d845-9623-2eec-2c76540bece1.png)
こんな感じで親オブジェクトの回転に滑らかに追従するようになります。
![Rotate.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987563/5f41497a-e8d9-b595-5e09-4d84e56135ba.gif)
CSSの勉強の1つとしてPostCSS Preset Envを眺める

## この記事の概要

PostCSSのプラグインであるPostCSS Preset Envをご存知でしょうか。
"Use tomorrow’s CSS today!"というキャッチフレーズが示す通り、まだ正式な仕様になる前のCSSを色々と使うことができます。

CSS関連の勉強会などに登壇すると「普段どこからインプットしていますか？」と質問されることがあり、学ぶ先の1つとしてPostCSS Preset Envがあるので紹介してみます。

https://github.com/csstools/postcss-plugins/tree/main/plugin-packs/postcss-preset-env

## Features

CSSでは策定段階がStage 0から4まであります。
数字が高いほど仕様として固まっていて、低いほど変更や破棄になる可能性が高いです。

Stage 2でも「一部のブラウザでは使用できるけど、まだ動かないことも多い」くらいで、実用的と言えるのはStage 3からでしょうか。
そんな中でも、PostCSS Preset Envを使えばStage 0, 1, 2のものも使えるようになります。
未来の記法で書いたCSSを、現在でも動くように変換してくれるというわけです。

そして、PostCSS Preset Envで動かせるリストが以下のリンクから見れます。

https://preset-env.cssdb.org/features/

そうしょっちゅう更新されるものではありませんが、こういったリストを見て「最近実装に悩んだあの箇所、この書き方ができれば速かったかも」なんて思いを巡らせています。

## 試し方

リストの中から気になるものがあれば実際に試してみましょう。
`npm init`して適当なHTMLとCSSを用意した上で、依存関係をインストールします。

```shell
npm i -D postcss postcss-cli postcss-preset-env
```

`postcss.config.js`を作成し、試してみたいものを記載します。
ここでは、Sassを使わずともネストができるようになる`nesting-rules`を有効にしてみます。

```javascript
module.exports = {
  plugins: {
    "postcss-preset-env": {
      features: {
        "nesting-rules": true,
      },
    },
  },
};
```

npm scriptsを追加します。

```jsonc
{
//省略
  "scripts": {
    "css:watch": "postcss 変換前.css -o 変換後.css -w"
  },
}
```

あくまで変換後のCSSを適用しないとブラウザで表示できないので、HTMLでの指定は以下のようにしておきます。

```diff_html
  <!DOCTYPE html>
  <html lang="ja">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+   <link rel="stylesheet" href="path/to/変換後.css">
    <title>PostCSS Preset Envのテスト</title>
  </head>
```

あとは、変換前のCSSに新しい記法でスタイルを書けば、変換されてブラウザで表示されるようになります。
実戦投入はできないにしても、書き味を試す分には十分です。

## 最後に

新しく使えるようになったCSSを素振りしてみた記事は結構見かけるのですが、まだ使えないCSSを素振りするための記事は意外と見かけません（まだ使えないのだから当たり前と言えば当たり前ですが）。

Stageが上がるにつれ、プロパティ名などが変わっても、大まかな仕組みは変わらないことも多くある印象です。
早いうちに未来のCSSを見越しておけると運用も楽だと思います。
そうでなくても、ただなんとなく眺めているだけでも楽しいので一度見てみてください。

---

最後まで読んでくださってありがとうございます！
Twitterでも情報を発信しているので、良かったらフォローお願いします！

https://twitter.com/xrxoxcxox

Devトークでのお話してくださる方も募集中です！

https://jobs.qiita.com/employers/qiita-inc/dev_talks/489
はんだごてを IoTLT 公式ショップで売る話

:::note info
今回の記事は、「権威主義の終焉に伴うはんだごて教養主義、および IoTLT Youtube チャンネルでコミュニティ発ハードを売るプラットフォームを作る話」として書く予定でした。LT なら 5分に詰め込むのですが Qiita 記事であまり長い記事を書くと後ろの方が伝わらなくなってしまうので、前半、中編、後半を分け、こちらに後半を書きます。

(中編は年末に Qiita で、前半はコミケあたりで頒布?)
:::

IoTLT印のはんだごてを作ってみようかという話が、IoT縛りの勉強会! IoTLT vol.93 の懇親会であり、その後 IoTLT 主宰のひとりののびすけさんから、ぜひ! という声がありちゃんと考えてみることにしました。

既に、 AVTOKYO のイベント用にロゴをレーザーマーキングしたはんだごてを作っていました。

https://booth.pm/ja/items/3375007


このはんだごては、難しい鉛フリーはんだづけを初心者でもつまずかないうに道具でカバーするというコンセプトで作成したものです。
玄人にも評判が良く、ちょっと広めたいなとおもっていました。

レーザーマーキングした部品は2つ差し替えで特別ブランドを作ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/62cb1221-0b96-37e7-2f8b-58a1c02e4aa1.png)

# 商品を作ってみる


シールで雰囲気を作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a1e1c2b7-ab27-e4ed-e6a3-fd3ad5760d3f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/7fa4c58c-e46b-3a82-e1a3-f11e883d3742.png)


商品を作ってクリスマススペシャルとして提供したかったですが、深センは深刻なコロナで大変なことになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/aa6f01c2-6977-b26b-b14a-4388552eb452.png)

今回のオーダーも

> 就是不知道啥时候能发

ということでいつになるかわからないということになってしまいました。

とりあえず商品のページだけ作って、入荷次第販売しようかなと。

# IoTLT 公式ショップ

せっかくなので公式ショップつくて販売しようということになり、Youtubeと連携できるということで、Shopifyでお店を作りました。

Shopify の気になる利用費用は、ベーシックプランで $25 およびカード決済費用 3.25 〜4.15% ということでした。

今回、僕の提供で IoTLT ロゴをつけた商品を作りますが、IoTLT ファンの作成したガジェットとかを IoTLT ロゴをつけたりつけなかったりして 販売するプラットフォームにできるかもですね

のびすけさんの意向では、IoTLTのロゴのライセンスは

> 使用料?! 特にないです！

ということでした。

でも Shopify の運営費とか、懇親会のお金を捻出できるようにぐらいはしたいなということで、

- 自分のガジェットをIoTLT Shopify で委託する場合は 10%
- IoTLT ロゴをつけると 5% 上乗せ
- マージンは IoTLT の新年会費用とか gather のライセンス費用とかに使い、収支を公開

というあたりではじめることにしました。

# お店公開!

こんな感じで、はじめてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/c1040149-d1b4-4aad-013a-8b2feede8c31.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/0738e885-7b76-d3cc-431e-df024520a868.png)


こちらです! https://iotlt.myshopify.com/

IoTLTで発表したり、自分で作成した商品を販売できます。
IoTLT のロゴを入れたカスタム商品のアイデアもWelcome!
売ってみたいものがある方、委託を募集しています。
ショップの「お問い合わせ」からご連絡ください!

# 今後

Spotify はじめてみましたが、勝手がなかなかよくわからなくて今の状態はいろいろ使いづらいと思います。
はしりながrいろいろと試してどんどん変更していくつもりなので、混乱すると思いますがすみません。
web3.0について

# はじめに
この記事は[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)です。
このカレンダーでは、なんとなくわかった気になっている、Webの知識をおさらいするカレンダーです。
興味をもし持ってくださった方は、購読いただけると嬉しいです！

今回はweb3.0について説明します！

## web3.0とは
インターネットの新たな世代として提唱されており、分散型インターネットの総称です。

web3.0を理解するために、過去の世代を振り返ります。

web1.0の時代では、単方向で、一部の人がコンテンツを発信する時代
web2.0の時代では、双方向に誰もがコンテンツを発信する時代とされていました。

そしてweb3.0では、サーバーを管理する組織を介さずに、直接ユーザー同士が情報のやりとりをするようになると考えられています。

web3.0の特徴として、以下が挙げられます。

* 分散化: ユーザー自身がユーザー毎にデータを保持する。
* 情報の透明性: 誰が何を行ったかなど過去の履歴が全て記録されユーザーは追跡・閲覧ができる。
* 所有権: ユーザー自体がコンテンツの所有権を持つ
* インセンティブ: 自身が所有しているデータを収益化することができる。

### web3.0を支える技術
ブロックチェーン(分散型台帳)が基盤技術になっている。

[総務省](https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h30/html/nd133310.html)の説明によると下記とある。

> ブロックチェーン技術とは情報通信ネットワーク上にある端末同士を直接接続して、
> 取引記録を暗号技術を用いて分散的に処理・記録するデータベースの一種であり、
> 「ビットコイン」等の仮想通貨に用いられている基盤技術である

各端末がデータを管理することで、データの改竄が難しくなり、情報の透明性に繋がる。

### 応用例

* DeFi: 分散型の金融組織
* メタバース: バーチャル空間
* NFT: データ自体に唯一性を持たせるための技術
* SocialToken: 特定のコミュニティで使用できるデジタルの通貨
 
# おわりに
以上、web3.0について説明しました！

[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです！


## 参考文献
[The HEADLINE](https://www.theheadline.jp/articles/539)
Microsoft Sentinel分析ルールの紐解き（Authentication Method Changed for Privileged Account）

Microsoft Sentinelにおいてもともと準備されている分析ルールについてクエリの中身や注意点等を紐解いていく。

:::note warn
このルールは利用環境によっては過検知が多発するためチューニングが必要である。
特に多要素認証を必須としている場合、定期的に発生するためである。
例えば
- 条件付きアクセスで許可されたロケーションからの操作は検知除外する

である
::: 

# 1. ルール概要
|項目|説明|
|--|--|
|重大度|高|
|ルール名|Authentication Method Changed for Privileged Account|
|ルールの種類|Scheduled|
|ルールの頻度|2時間ごとにクエリを実行|
|ルールの期間|過去2時間のデータ|
|バージョン|1.0.1|
|説明|特権アカウントに対して変更された認証方法を識別します。これは、攻撃者が継続的なアクセスを可能にするために、アカウントに認証方法を追加していることを示す可能性があります。（by DeepL）|
|Ref|https://learn.microsoft.com/ja-jp/azure/active-directory/fundamentals/security-operations-privileged-accounts?WT.mc_id=Portal-fx#things-to-monitor-1|

# 2. 活用するテーブル
|テーブル名|概要|参考URL|
|--|--|--|
|IdentityInfo|UEBA機能によって設定されたユーザー ID 情報|<https://learn.microsoft.com/ja-jp/azure/azure-monitor/reference/tables/identityinfo>|
|AuditLogs|Azure ADの監査ログ|https://learn.microsoft.com/ja-jp/azure/azure-monitor/reference/tables/auditlogs|

# 3. クエリ解説
```Kusto:Authentication Method Changed for Privileged Account / version1.0.1
// VIPUsersという変数に管理者権限を有するユーザーを一覧として格納する
let VIPUsers = (IdentityInfo
// 付与された権限名にAdminという文字列が含まれているものに絞り込む
| where AssignedRoles contains "Admin"
// UPNの文字列を小文字化してリスト表示する
| summarize by tolower(AccountUPN));
// AzureADの監査ログを対象とする
AuditLogs
// 大文字小文字区別せずに CategoryフィールドがRoleManagementのものに絞り込む
| where Category =~ "UserManagement"
// アクティビティもしくは操作が認証方法の登録のものに絞り込む
| where ActivityDisplayName =~ "User registered security info"
// 大文字小文字区別せずにアクティビティを開始したサービスが認証方法サービスのものに絞り込む
| where LoggedByService =~ "Authentication Methods"
// アカウントエンティティフィールドに変更対象のUPNを、IPエンティティフィールドに変更時の通信元IPアドレスを格納する
| extend AccountCustomEntity = tostring(TargetResources[0].userPrincipalName), IPCustomEntity = tostring(parse_json(tostring(InitiatedBy.user)).ipAddress)
// 変更対象のUPNが管理者権限を有するユーザーのものに絞り込む
| where AccountCustomEntity in (VIPUsers)
```

# X. おまけ

|項目|説明|
|--|--|
|Azure ADの監査ログ（認証方法サービス）に関するアクティビティ一覧|<https://learn.microsoft.com/en-us/azure/active-directory/authentication/howto-registration-mfa-sspr-combined-troubleshoot>|
セマンティックWebについて

# はじめに
この記事は[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)です。
このカレンダーでは、なんとなくわかった気になっている、Webの知識をおさらいするカレンダーです。
興味をもし持ってくださった方は、購読いただけると嬉しいです！

今回はセマンティックWebについて説明します！
## セマンティックWebとは
コンピューター自身にWebページに記載されている情報の意味を理解させ、利便性を向上させるための構想です。
コンピュータによる自動的な情報の収集や分析へのアプローチがしやすくなるとして期待されています。

通常、HTMLで記述されたコンテンツは、システムからはどういった意味を持つコンテンツなのかの判別が難しいです。

例えば`<p>会社名: hogehoge株式会社</p>`とあっても、機械はこの要素からhogehoge株式会社というものがあるとの判別を行うのが難しいです。
なぜなら、pタグはあくまで文章を構成するタグで、中にある情報を一律、文字情報として認識してしまうためです。

機械に理解しやすくさせるために、データの説明をするデータ(メタデータ)を記述する必要があります。

メタデータを記述する仕組みとしてRDFといったデータ形式がある。
RSSで使用されている。

このメタデータを記述することで、実際に応用されている例としては
googleの検索結果で表示される、リッチリザルトなどがあります。

 
# おわりに
以上、セマンティックWebについて説明しました！

[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです！
KineFX Part3：SecondaryMotion



この記事はHoudini Apprentice Advent Calendar 25日目の記事です。
これまで、Part1、2とKineFXの基本とmotionClipについて取り上げてきました。

[Houdiniの新しいリギングとアニメーション：KineFX機能まとめ](https://qiita.com/jyouryuusui/items/cc4c7c529fed71f03df3)

[KineFX Part2：MotionClipアニメーション入門](https://qiita.com/jyouryuusui/items/1ba0c8844c4d51b9878e)


今回は、19移行での変更点やポイント。KineFXでのセカンダリーモーションについてまとめます。
後日、フェイシャルキャプチャ、ラグドールとの連携について追記します。

## 18.5実装時からの変化

KineFXはHoudini18.5で初めて実装された機能であり、今後も大きな変更が予想されます。
[ヘルプにKineFX v18.5からv19への移行というページ](https://www.sidefx.com/ja/docs/houdini/character/kinefx/compatibility.html)がある通り設計の変更には注視する必要があります。

### 名前の変更

Re-とついていた名前のノードからReが外されました。確かに再処理(re)ではなく、単にジョイントの向きや親子関係を作るので、名前として適切ではないと判断されたのでしょう。Configure Jointsはトランスフォームの回転角度制限という滅茶苦茶重要な機能を保有しているのに名前がわかりにくかったのが原因かFull Body IKの名称が除外されました。

|変更前|変更後|機能|
|--|--|--|
|Re-Orient Joints|Orient Joints|ターゲットスケルトンのジョイントの向きを変更する|
|Reparent Joints|Parent Joints|ターゲットスケルトンのジョイントを親子化します|
|Full Body IK Configure Joints SOP|Configure Joints|ローカルの重心やトランスフォーム制限といったジョイントプロパティを構成する|

### 機能の移行

ノード名とともに新しい種類のノードが作成されたり、完全に機能が置換されたりしました。
Bone Deformについては、Joint Deformの中に入ってもらう分かる通り何も変わってはいません。おそらくBone Deformは本来OBJのスケルトンパラメータが露出していたり、インプットのヘルプが十分ではないと判断されて必要な情報のみ見えるようにラップされたのだと思われます。

|変更前|変更後|機能|備考|
|--|--|--|--|
|Capture Layer Paint|Joint Capture Paint|キャプチャウェイトをジオメトリに直接ペイントする、新しいノードでは boneCapture アトリビュートのみを変更します|新しいノード|
|Attach Control Geometry|Attach Joint Geometry|KineFXリグ用のコントロールジオメトリを作成|廃止され新しいノードに置換|
|Bone Deform|Joint Deform|スキン変形を実行|廃止され新しいノードに置換|
|Bone Capture Proximity SOP|Joint Capture Proximity SOP|ポイントからジョイントまでの距離に基づいてそのポイントにキャプチャウェイトを割り当てる|廃止され新しいノードに置換|


## セカンダリーモーション

すでに[ヘルプ](https://www.sidefx.com/ja/docs/houdini/character/kinefx/secondarymotion.html)や[チュートリアル](https://www.youtube.com/watch?v=x_lnfniFXfA&t=186s)はありますが、19.0で実装されたKineFXには無くてはならない機能です。18.5の時代では、例えばしっぽをゆらゆらさせたい場合、別途Vellumなどでシミュレーションを行ってそれをRigVOPで追従させるという非常に面倒くさい方法を取るしかありませんでした。しかし、セカンダリーモーションSOPによってシミュレーションを作成する必要なく、KineFXのジョイントやスケルトンにOvershoot/Lag、Jiggle、Springといった3種類のセカンダリモーションエフェクトを作成することができるようになりました。
![purupuru.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/0d703b42-7b41-bc7a-e043-0cc739111cc3.gif)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/b90bd63c-f36b-114b-ab15-962f9c920e5e.png)

[hipファイル](https://drive.google.com/file/d/1NbCDzzrPhx2GYhzazEweTIT7mTdfMWbw/view?usp=share_link)

## ラグドール

ラグドールはこれまでクラウドなど群衆でしか利用できませんでしたが、ragdollcollisionshapesでKineFXのスケルトン自身に領域を持たせることができるようになり、mixamoで走るモーション→BOXで足がひっかかってコケる　というようなモーションが比較的簡単に作れるようになりました。
![bbb.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/9b4ef166-00af-b129-6310-f821a34a5b31.png)


![koke.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/5c166a23-48e8-3e6c-1992-a0fc15e5b000.gif)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151589/54c333eb-bd16-f4a9-a7ee-fc5dead13917.png)

[hipファイル](https://drive.google.com/file/d/1NbCDzzrPhx2GYhzazEweTIT7mTdfMWbw/view?usp=share_link)

細かい説明をしようとしていましたが、configurejointsの設定をしたにもかかわらず、体が雑巾みたいにひしゃげてしまう事象が解決できず、解決次第追記します。

## フェイシャルのウェイト

KineFXでの口の動き。眉毛の動きについて記載予定です。
年内までに追記予定です。
2022 年のイーサリアム・ブロックチェーン個人まとめ

2022 年は、ブロックチェーン業界良い意味でも悪い意味でも、相変わらず変化が激しい一年だった気がします。

## ネガティブの事件
- [仮想通貨の取引所FTXが経営破綻、創業者が逮捕](https://www.all-senmonka.jp/moneyizm/76916/)
    > 2022年11月11日に、FTXは日本の民事再生法にあたる米連邦破産法11条の適用を申請しました。FTXの経営破綻は、債権者数が100万人を超える可能性があり暗号資産業界で過去最大の規模とされています。
...
約130にのぼるグループ会社も適用対象で、顧客からの資金の引き出しは最大で80億ドル（約1兆1,000億円）不足していると言われています。
...
投資家が「FTXは詐欺的行為で経験の浅い投資家をだまし、米国の投資家に110億ドル（約1.5兆円）超の損害を与えた。著名人は宣伝に加担した」と11人の著名人を提訴した件では「広告をした有名人も罪に問われるのか」という点が注目されています。

    - 日本ではあんまり話題になってなかったのは、FTX Japan とは別なので、日本の利用ユーザーがすくなかったからです。
    - ここ数年間ブロックチェーン・暗号化通貨はアメリカではハッカー・geek だけではなくが普通の人にだいぶ広まって来ましたが、この事件のせいで、世間はまた冷たくなるでしょう。
- [米ConsenSys、批判集まるメタマスクのユーザーデータ取得について釈明](https://coinpost.jp/?p=410785)
    - メタマスクは、デフォルトのまま使う場合、ユーザーIPとウォレットアドレスを収集していることをプライバシーポリシーの更新で明らかになりました。
    > 前日にConsensysは自社のプライバシー ポリシーを更新し、MetaMaskユーザーにデフォルトのRPCプロバイダーとして「Infura」を指定したまま取引を行うと、IPアドレスとイーサリアム（ETH）ウォレットアドレスが（Infuraで）収集されていることを明記した。
...
「規制当局の問い合わせへの対応を目的としたものではない」と明言している。
また、「行き過ぎたデータ収集やデータ処理につながるものではない」と主張している。
    - web3 のユーザーに対して悲報ですね。

https://twitter.com/kuromasuo/status/1595892909299372032?t=2fQTXWAtuy8RFnLdpSjbZg&s=05

## ポジティブのニュース
- [岸田政権、Web3スタートアップ育成の環境整備に向けたロードマップ示す](https://coinpost.jp/?p=412115)
    > 11月28日に総理大臣官邸で第13回新しい資本主義実現会議が開催され、「スタートアップ育成5か年計画」の内容が決定した。ブロックチェーン技術とWeb3.0（分散型ウェブ）の税制を含む環境整備が含まれている。
岸田政権は「新しい資本主義」の実現に向けて取り組んでいる。6月に閣議決定した「骨太方針2022（経済財政運営と改革の基本方針2022）」ではスタートアップ育成の重要性を強調。2022年を「スタートアップ創出元年」と位置付け、スタートアップ担当大臣を設置してきた。
- [暗号資産の法人期末課税、特定条件で対象外へ](https://www.neweconomy.jp/posts/283753)
    - 令和5年度「与党税制改正大綱」を12月16日に発表され、「与党税制改正大綱」には暗号資産（仮想通貨）関連の税制が記載されていました
    > そして暗号資産の法人期末課税については、法人が事業年度末において有する暗号資産のうち時価評価により評価損益を計上するものの範囲から、特定の要件に該当する暗号資産を除外することとなった。特定の要件は次の通りである。
（1）自己が発行した暗号資産でその発行の時から継続して保有しているものであること。
（2）その暗号資産の発行の時から継続して次のいずれかにより譲渡制限が行われているものであること。
    - これで自社暗号資産を発行するスタートアップに対しては、税金面の懸念が１点改善されました

## まとめ
技術面では、rollup などの L2 の技術が発展してきて、イーサリアム 2.0 の実装のゴールもだんだん見えるようになってきました。
技術以外では、良い意味でも悪い意味でも、ブロックチェーン・暗号化通貨はだんだん一般的な人でも聞こえる様になってきました。
これからは、web 3.0 の技術者を増やして、どんどん新しいアイデアを実現して行きたいと期待しています。
AWS_IAMユーザーを作るのを自動化したい

## はじめに
この記事はAWSアドベントカレンダーの12/25の記事です。
https://qiita.com/advent-calendar/2022/aws

・今回使用しているAWSの画面コンソールやレイアウトは2022/12時点のものです。
　今後のアップデートにより変更される可能性があります。
・UiPathはCommunity Edition 2022.12を使用します。


# IAMユーザーを作る
AWSでは、ルートユーザーとIAMユーザーの2種類のユーザーアカウントが存在します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/6208e71e-118d-2e12-8ae4-6e527bcec027.png)
IAMユーザーを作成するときは、以下のステップを踏みます。
①ユーザー名の設定と認証関係の設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/5ee01d1f-925f-a863-7302-a47598aede7e.png)
②IAMグループの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/7f22d238-0725-26ab-f474-ebccbc892cde.png)
③タグの設定(ここは任意)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f00b4b00-4322-bc5c-ee44-2a12f5ec6580.png)
④確認画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/b7845bd1-251a-5ef5-b53e-4edb0e22f356.png)

これは、定型業務になりますね。はい。
面倒ではないが、もちょっとラクに作業ができれば...
これらの工程をRPAで自動化してくれるだろうか...


# RPA&UiPathとは(ざっくり説明)

RPAは「Robotic Process Automation」の略で、ロボットによる定型作業の自動化をするためのツールと考えてください。

そのRPAツールは多種多様な製品がありますが、その中でも<b>UiPath</b>はRPAツールで注目度が(個人的に)高い製品です。

UiPathで操作できることは多く、Excelでの読込・書込をはじめWebの操作や各種Webサービスやアプリケーションを自動化することができます。


# UiPathでIAMユーザーの作成を自動化できるのか？
では、UiPathでIAMアカウントのユーザーを作成しましょう。
作成するためには「アクティビティ」というものを使います。
アクティビティは、ざっくりいうとUiPathで自動化を行う際に必要な操作のことです。
アクティビティを組み合わせて、「フロー」という形にしていくわけです。
以下は、筆者が試しに作成したサンプルフローです。
(他のUiPath+AWS関連の記事を作成した時のフローが残っているため、その部分はコメントアウトしています)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/7b889763-4138-b508-ee73-e543d2aafe41.png)

まずAWSの操作を行うためには、「アマゾン ウェブ　サービス　スコープ」のアクティビティで各種設定を行う必要があります。
詳細は以下の記事で以前説明していますので、あわせてご覧ください。
★AWSをUiPathで動かしてみたい_第2話(AWSスコープのプロパティを調べる)
https://qiita.com/saosao885/items/ac5478b771c77dc26642
★AWSをUiPathで動かしてみたい_第3話(AWSスコープに変数を入れる)
https://qiita.com/saosao885/items/4865b1f8eec9f2209204

## IAMユーザーを作ってみた
今回メインとなる「ユーザーを作成」アクティビティを使用して、各種設定をします。
今回ユーザー名を「Qiita_sao]という名前で登録してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/a23c9528-bc33-51eb-461f-2300f2e6425d.png)
プロパティは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/7daf4c4c-149b-f80b-8b80-c3a6312c636d.png)

特に必要な項目は以下の通りです。
【アクセスキー】
・AWSアクセスキーを生成：これはユーザ設定の一つ目にあった「AWS認証情報タイプを選択」の「アクセスキー・プログラムによるアクセス」に該当する箇所
(規定値は"False"です)
ここは"True"または"False"で設定しますが、アクセスキーを作る場合は"True"にしましょう
【入力(Input)】
・パスワード：設定したいパスワードを入力します
・名前：設定したいユーザー名を入力しましょう
【出力(Output)】
・AWS アクセスキーID：アクセスキーのIDが出力されます
・AWS シークレットアクセスキー：シークレットアクセスキーが出力されます
・ユーザー：作成されたユーザー名が出力されます

実行してみると...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502614/f32fecaf-8fbe-6a82-5c27-555542f10987.png)
AWS側のユーザー名に登録されたことが確認できました！

# まとめ

AWSのアカウント作成についても操作を自動化できる点は面白いなと思いました。
筆者はAWSだけでなく、UiPathを使って自動化してみたのブログで紹介しているものもありますので、ぜひ挑戦してみてください。

【補足】
※パスワードについて：今回はテストの為プロパティへ直書きしていますが、取扱いにご注意ください。
React Native | fastlane コマンド実行時に README.md が自動生成されないようにしたい

## やりたいこと

ローカルPCから `fastlane` コマンドを実行したときに  
fastlaneディレクトリ配下に `README.md` が自動生成されないようにしたい

## なぜ、この作業をやりたいと考えたのか？

fastlaneディレクトリ配下の `README.md` を独自で編集していたので、fastlaneコマンドを実行するたびに `README.md` に Gitの差分が出るのが面倒だったから

## なぜ、毎回 README.md が作成されるのか？

デフォルトの設定では`fastlane`コマンドを実行時に  
`fastlane/README.md`が自動で作成される仕様だから

## 実現方法

`fastlaneディレクトリ` の Fastfile に `before_each` block を追加する

Android も iOS も追加する処理は同様の処理で問題ない。

### Android の場合

```ruby
# android / fastlane / Fastfile

default_platform(:android)

platform :android do
  # ここから ====================
  desc "before_each blocks are called before any lane is called"
  before_each do
    skip_docs()
  end
  # ここまでを追加する ====================
  
  lane :test do
    # 省略
  end

  ... 以下省略 ...
```

### iOS の場合

```ruby
# ios / fastlane / Fastfile

default_platform(:ios)

platform :ios do
  # ここから ====================
  desc "before_each blocks are called before any lane is called"
  before_each do
    skip_docs()
  end
  # ここまでを追加する ====================
  
  lane :test do
    # 省略
  end

  ... 以下省略 ...
```

## 参考文献

[fastlane action skip_docs](https://docs.fastlane.tools/actions/skip_docs/)
CMSについて


# はじめに
この記事は[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)です。
このカレンダーでは、なんとなくわかった気になっている、Webの知識をおさらいするカレンダーです。
興味をもし持ってくださった方は、購読いただけると嬉しいです！


## CMSとは
 CMS（Content Manegement System）とは、
Webサイトのコンテンツを構成するテキストや画像、デザイン・レイアウト情報（テンプレート）などを
一元的に保存・管理するシステムのことを指します。

### 利点
* サイトの更新に専門知識が必要ない
    * 文章だけを変更したい場合に、通常であれば直接HTMlやCSSを編集するなどの必要があるが、装飾なども含めてGUIで直感的に行える。
* サイト運用の分業化が可能
    * エンジニアがサイト更新の際に、関わる必要がない。
* 開発コストが低い。
    * 自社開発を行うよりもイニシャルコストを抑えられる。

### 代表的なCMS

* [WordPress](https://wordpress.com/ja/)
    * 一番有名なCMS。ブログ型のシステム作成。
* [shopify](https://www.shopify.com/jp)
    * ECサイトのCMSで一番有名なもの
* [wix](https://ja.wix.com/)
    * ホームページ作成用のCMS

# おわりに

[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです！
vSphereとIBMのObservability製品を連携する Instana編

# はじめに
今回の記事では我らがIBMの一押しObservability製品であるInstana と 
vSphereの連携方法、連携によって何が見えるのかという部分をご説明します。

# Instana とは
IBMが昨年買収した製品群の1つでAPM(Application Performance Management)の一種です
Instanaの特徴は下記の記事でも書いてありますが、主に3つとなります。

1.導入の容易さ

2.アプリからインフラまで1つのダッシュボードで管理

3.問題の根本原因をAIが自動解析

引用元記事:
https://qiita.com/M_Beach/items/37eb0eec0f9e2ab81ca8

Observability製品は様々なベンダーが持っていますが、作り込みが難しかったり、ベンダーごとの癖が強いところがあったりするのでその部分をうまく吸収してくれるツールとしてInstanaは非常に優秀です。

# 前提条件

・Instana バックエンドサーバが構築済みである
・vSphereを監視するためのVMが1つあり、そのVMにJDK 8U242以降がインストールされていること

https://www.ibm.com/docs/en/instana-observability/current?topic=instana-monitoring-vsphere

・用意したVMがvCenterおよび、Instana バックエンドサーバとIP Reachableであること
(vCenterが直接InstanaバックエンドサーバとIP Reachableである必要はありません)


＃ やり方

・用意したVMにInstana AgentをインストールするためのCurlコマンドを実行します.
Agentをインストールするための画面には左メニューMore -> Agentsで画面を出すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293016/00875fd6-49df-8b03-5400-7ab5faef816c.png)

・Agentがインストールされたあとに
<agent_install_dir>/etc/instana ディレクトリにあるconfiguration.yamlファイルに必要情報を書きます。

```yaml:configuration.yaml
com.instana.plugin.vsphere:
  host: https://<INSERT_VCENTER_URL_HERE>/sdk
  username: <INSERT_USERNAME_HERE>
  password: <INSERT_PASSWORD_HERE>
  enabled: true
  poll_rate: 20 # metrics poll rate in seconds
```

必要な情報は下記3つ
・vCenterのFQDN
・管理者ID
・管理者パスワード


ここに追加してしばらくするとInstana側にvCenterの情報が追加されていきます。

※画像取得中なので記事完成は今しばらくお待ちください
タブレットで横画面に固定する方法

# はじめに
初めまして。HITOTSU株式会社の大塚正樹です。[HITOTSUアドベントカレンダー](https://qiita.com/advent-calendar/2022/hitotsu)の10日目担当します！

タブレットを画面を回転させずに、横画面に固定する仕様を実装する機会がありました。これといった解決方法が見つからず、少し工夫をすることになりましたので、シェアします。

# 方法 1
一つ目は、`ScreenOrientation.lock()`を使う[方法](https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation/lock)です。

こちらが一番綺麗に実装できるかと思いますが、（2022年12月現在）iOSに対応していません。私たちは、この理由で断念しました。


# 方法 2
二つ目は、cssでtransform rotateを使う方法です。
```@media only screen and (orientation:portrait) {
  body {
    height: 100vw;
    transform: rotate(90deg);
  }
}
```
ユーザーが横画面から縦画面に回転した時、画面を横にrotateさせませす。無理やり感はありますが、現状全てのデバイスで対応可能な最適方法だと判断し、採用しました。

# まとめ
意外とこれといった方法がないことに驚きました。早くiOSもScreenOrientation.lock()対応してくれることを願います。
DBをお引越しした時にLooker側でやったこと

# これはなに
- Lookerで一度作った表やLooksのexploreの変更を行うための方法です。主な用途は下記
    - explore Aからexplore Bへ乗り換えたい（でも項目は一緒)
        - 環境の移行
    - ダッシュボードのURLは変えたくない

# このアプローチの限界
- 移行先に完全に対応するExploreを用意する必要がある
- 移行はLooks(Tile単位)
- LooksのURL変更は避けられない

# 手順
## exploreの用意
- 移行先ので参照するExploreを用意する
    - 用意するExploreは項目名も含めて互換性があるものにする

## 移行元のTileの「ここから探索」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/e5e5343f-ed51-e473-607a-bd3222d62672.png)


そうするとExploreの設定が出てくる。フィルターの設定と集計結果が表示されていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/29531eeb-66ed-8f81-1d93-b9cbbab12e32.png)


## 展開URLを取得する
- 歯車から共有を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/28d9b5e4-0372-c1b9-8d8b-b1d2d281cd05.png)


- すると二種類のURLが表示されるので展開URLをコピーします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/a9b8751c-4f8f-451a-13a0-3571b875c732.png)



## 新しいExploreの構成を作成する
- 一部を書き換える（書き換えるものは後述)
- 上記で取得したURLをブラウザに貼り付けてエンターをッターンする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/e9312c92-4675-19ed-022a-06cf0507f87d.png)

- するとあら不思議Exploreの設定が出てきます。しかもフィルターもかかっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/8ac1135b-d7d3-df5d-c9b5-adfae4b42c0c.png)



## ダッシュボードへ保存する
- 出てきたものをダッシュボード、あるいはLooksへ保存して移行完了。これを粛々と繰り返していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/983081d1-d6ed-61ce-9051-8a420dc6f413.png)




# なぜこれで行けるのか
コピったURLを見てみるとどうやらこうなっている模様。なるほど。。。
```
https://[サブドメイン].looker.com/explore/[model名]/[Explore]?fields=[view名].[dimention or mesure名]....
```

つまり、環境の違うExplore AからBへ移行する場合

これを
```
https://[サブドメイン].looker.com/explore/[環境A]/[Explore]?fields=[view名].[dimention or mesure名]....
```

こう書き換えてブラウザでExploreの設定を生成できるのでダッシュボードにTileとして保存したりLooksとして保存ができるというわけか
```
https://[サブドメイン].looker.com/explore/[環境B]/[Explore]?fields=[view名].[dimention or mesure名]....
```

# 参考
- https://cloud.google.com/looker/docs/best-practices/how-to-change-the-model-or-explore-of-a-look
(補足) Actions の構成について

[注文のキャンセル処理を追加する 〜セッション変数の使い方〜](https://qiita.com/yanagih/items/ea38bc109527a5127dc0)に関する補足記事です。

[Advent Calendar 2022](https://qiita.com/advent-calendar/2022/wanclcfc_enjoy)では、主に、アクションとセッション変数についてご紹介しました。
他にも紹介しきれていない内容がありますので、Actions に含まれる構成要素の概要をご紹介します。

# Actions
**Created by you** と **Set by Assistant** の 2 種類があります。
<img src="https://i.ibb.co/NF4nhSG/2022-12-25-23-12-21.png" alt="2022-12-25-23-12-21" border="0">

# Saved response
* 再利用目的で保存したステップ内の「ユーザーからの応答方法」が保管されている場所
* 保管されている「ユーザーからの応答方法」は元の「ユーザーからの応答方法」とリンクされているため、編集した場合は、その編集内容が、元の「ユーザーからの応答方法」や再利用先の「ユーザーからの応答方法」、全てに反映されます
* リンクを削除することで編集内容が反映されることを回避できます

# Variables (セッション変数)
**Created by you**, **Set by assistant**, **Set by integration** の 3 種類があります。
<img src="https://i.ibb.co/QN5j3V7/2022-12-25-23-14-53.png" alt="2022-12-25-23-14-53" border="0">

(補足説明)
* Variables (セッション変数)
    * セッションの有効期限内で保持される変数です
    * アクションをまたいで使用できる変数です
        * あるアクションにて入手した内容をセッション変数に保存することで、別のアクション内でも、条件やレスポンス内容としても使用できます

:::note info
ステップにて収集した情報は、自動的に保存され、条件やレスポンス内容として利用できます (そのアクション内でのみ有効) 
:::