OmniAICreator/Qiita-1.07M huggingface dataset:
雀魂 観戦ロビーの肉球マークとPマーク

:::note warn
**スクリプトの利用は、自己責任でお願いします。**
:::

雀魂の観戦ロビーの「友人がいる対戦のみ表示」にチェックを入れたとき、認証マーク [^mark] の付いた雀士がいる対戦を含むようにするスクリプトです。開発者ツールで実行できます。

```JavaScript
uiscript.UI_Ob.Inst.onShowDataChange = function() {
    this.scrollview.reset();
    this.live_show_datas = !this.check_friend.visible
        ? this.live_datas
        : this.live_datas.filter(match => match.players.some(player =>
            game.FriendMgr.find(player.account_id) || player.verified
        ));
    this.noinfo.visible = !this.live_show_datas.length;
    this.scrollview.addItem(this.live_show_datas.length);
};
```

ゲームを再起動するか、次のコードを実行すると、元の状態に戻ります。

```JavaScript
delete uiscript.UI_Ob.Inst.onShowDataChange;
```

***

認証マークが付与されたアカウント一覧（非公式）を掲載します。

https://twitter.com/shaboten_toge/status/1568939834554863616

https://twitter.com/pearswatchover/status/1591718372043284481



[^mark]: にくきゅうま～く 🐾 と プロ雀士認証マーク **𝙋** です。
Java の Charset のバイトオーダーとBOM

（この記事は [地平線に行く](https://yujisoftware.hatenablog.com/entry/java_charset_byteorder) とのマルチポストです）

[Java のサポートされているエンコーディングの一覧](https://docs.oracle.com/javase/jp/18/intl/supported-encodings.htm)を見ていると、`UTF-16`, `UTF-16BE`, `UTF-16LE`, `x-UTF-16LE-BOM` とあって、なにが違うんだろうと思って調べてみました。

まとめると、読み・書き時のバイトオーダー (BO) [^bo] と書き込み時の BOM (Byte Order Mark) の違いでした。
* 読み込み時のバイトオーダー
    * BE / LE が付かないものは、BOM から自動的に判定
* 書き込み時のバイトオーダー
    * BE / LE が付かないものは、BIG バイトオーダー
* BOM の有無
    * UTF-8 に「BOM あり」で書き込むものはない[^bom]

[^bo]: バイトオーダー = エンディアン
[^bom]: バイトオーダーに関わらず同じ内容になるので、本来は UTF-8 に BOM (Byte Order Mark) は不要

|名称|読み込み時<br/>バイトオーダー|書き込み時<br/>バイトオーダー|書き込み時<br/>BOM|
|---|:---:|:---:|:---:|
|UTF-8|-|-|x|
|UTF-16|AUTO|BIG|o|
|UTF-16BE|BIG|BIG|x|
|UTF-16LE|LITTLE|LITTLE|x|
|x-UTF-16LE-BOM|AUTO|LITTLE|o|
|UTF-32|AUTO|BIG|x|
|UTF-32BE|BIG|BIG|x|
|X-UTF-32BE-BOM|BIG|BIG|o|
|UTF-32LE|LITTLE|LITTLE|x|
|X-UTF-32LE-BOM|LITTLE|LITTLE|o|
PowerAutomate: Office Scripts を使った正規表現。基本は MDN で。

# 背景
普通に使ってるけど、自分用にまとめてなかったな、と思い備忘録に

# 概要
Office Scripts の Regular Expression を利用して、Excel コネクター [スクリプトの実行:Run script](https://learn.microsoft.com/ja-jp/connectors/excelonlinebusiness/#%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E5%AE%9F%E8%A1%8C) で呼び出すだけ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/fcc8db84-d5bf-4bae-d499-868510a3f35c.png)

# 正規表現の Office Script 
## 保存場所
OneDrive の以下に自動生成されるので、*.osts ファイルをコピーしてきた場合は、自分でアップロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/2f18268f-7e54-9912-4c53-2e0bb43113d6.png)

Excel で作成する場合は、以下な感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/07977f35-a66e-c830-7fe6-bcfcaf9d65d7.png)


今回使ってる正規表現のコードは以下な感じで単純
必要に応じて、MDN を参考に実装すればよいだけ

https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

## 置換: Replace コード

```typescript: Replace
function main(
	workbook: ExcelScript.Workbook,
	originalText: string,
	expressionText: string,
	replacementText: string
): string {

	var expression = new RegExp(expressionText, 'g');
	var result = originalText.replace(expression, replacementText);
	return result;
}
```

## 一致取得: Matches - Extract コード

```typescript: Extract
function main(
	workbook: ExcelScript.Workbook,
	originalText: string,
	expressionText: string
): string {

	// originalText = "'<html><body></body></html>'";
	// expressionText = "<body[^>]*>([\\s\\S]*)<\/body>";
	// console.log(expressionText);

 	var expression = new RegExp(expressionText, 'g'); 
	var matches = originalText.match(expression);

	// console.log(matches);
	var result = matches ? matches[0] : null;

	// console.log(result);	// log 有効化したままだと、return がオブジェクトになって利用しづらいので最後は排除したほうが良い
	return result;
}
```

## 部分一致取得: Matches コード

```typescript: Matches
function main(
	workbook: ExcelScript.Workbook,
	originalText: string,
	expressionText: string
): string {
	var expression = new RegExp(expressionText);
	var matches = originalText.match(expression);
	var result: string = matches? matches[1] ?? "": ""
	return result;
}
```

# 利用例
## 事前確認は、mozilla で実施するのが一番簡単かな、と
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/55e5acd9-47c4-4502-ad46-ce7d2899b29e.png)

::: note info
\w のようにしてエスケープを重ねるのを忘れると、あれ？ってなり勝ち。
\w ⇒ \\\w 
:::

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/@@replace

## 置換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/3070129f-1b27-275a-ff92-88c9a9343af2.png)

## 一致取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/c23f6959-e9c0-5c36-e424-21a00172a23f.png)

## 部分一致
:construction: 

# あとがき
Power Automate で Web スクレイピングしようとしたら、正規表現は外せないなと思い、準備したところ

# keyword
how to use regular expression in power automate
ROS環境構築 <Part 1a> VirtualBoxのUbuntuにROS(melodic)をインストール

## はじめに
ROSの環境設定を行った際の忘備録です
VirtualBoxにUbuntuが導入済みの状態からを想定しています（下記別記事参照）
https://qiita.com/pez/items/a3ef1855f7e1e0ed3dfd

## 環境・バージョン
OS: Windows11 Pro (64bit)／Windows10 Pro (64bit) 　 (両方で確認済)
VirtualBox: 6.1.38 (Ubuntu18.04.3, GUI環境)
ROS: melodic

## VirtualBoxのネットワーク設定
WiFiに接続することを前提にしています

他のPCからIPアドレスを指定してVirtualBox内のUbuntuにアクセスできるようにするため下記を実施
 1.  VirtualBox起動，OSを選択して「設定」⇒ 「ネットワーク」
 2.  空いている適当なアダプターを選んで有効化チェック
 3.  割り当てを「ブリッジアタプター」にして「OK」

![networkb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/1c6632b1-8e3d-6f7a-7ae3-f686b7e5fc66.png)
 
・Ubuntu18.04を起動し, ifconfigでIPアドレスを確認
（いくつか出てくるがどれが今設定したやつかは・・・勘で判断）
　WiFiであれば大抵 192.168.~~~ となっていると思います
![ip_ex.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/753477a8-b6ad-5f1d-16dc-407eac119fd7.png)

・他のPC（同じネットワーク内）からpingが通るか試してみる
![図0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1962692/65d4af49-3f1d-4c98-6045-1a969a1264bd.png)


逆も試して相互に通ることを確認．

#### 通らなかった場合に疑うこと
・Windowsのファイヤーウォール
・IPアドレス間違い
・同じネットワーク内にない


## UbuntuへROSをインストール

#### 参考 : ROS Wiki
http://wiki.ros.org/melodic/Installation/Ubuntu

```ruby:aptへのROSのダウンロード先の登録
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```
```ruby:ダウンロードのための公開鍵の取得
$ sudo apt install curl
$ curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
```
```ruby:ROSのインストール
$ sudo apt update
$ sudo apt install ros-melodic-desktop-full
```
```ruby:環境変数の設定
$ cd
$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
```
```ruby:ROSのパッケージインストーラのインストール
$ sudo apt install python-rosinstall python-catkin-tools python-rosdep
```

```ruby:ROSの初期設定
$ sudo rosdep init
$ rosdep update
```

```ruby:ROSのワークスペースの作成とビルドテスト
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin build
```

```ruby:自分のワークスペースをインストール環境に配置する
$ source devel/setup.bash
$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
```

## 動作確認
```
$ roscore
```
⇒ 一番下の行に
started core service [/rosout]
と表示されていれば成功

Ctrl + C で終了
凡人が2週間で統計検定2級に合格するには

# はじめに
**凡人が2週間で統計検定2級に合格できたのでその勉強法を書いていきます．**
![2級合格.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883466/25075dad-24f5-9dfa-3864-d45176774a5a.png)

# 筆者のスペック
- 偏差値50くらいの大学4年生
- 高校数学も結構あやふやでCとかPとかの公式は忘れていた
- 2年前に統計学の授業は取っていたがあまり覚えていなかった...

# やったこと
1. [統計WEB](https://bellcurve.jp/statistics/course/)を1周読む
1. 1つ過去問を解いてみる
1. [とけたろうさんの動画](https://www.youtube.com/watch?v=L3Kt-y15jSM)を見て，問題パターンを覚える
1. 残り期間で過去問を周回

**勉強時間は1日3時間程度，テスト3日前くらいから6時間程度やっていたので学習時間はおよそ50時間だと思います．**

# 使った書籍
**使った本はこの過去問集だけです．2021年6月の過去問は[こちら](https://www.toukei-kentei.jp/prepare/kakomon/)に載っていた(※2022年9月現在)ので2017~2019年の本にしました．**
- [統計検定 2級 公式問題集[2017〜2019年]](https://www.amazon.co.jp/dp/4788925524)
![2級表紙.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883466/8d1d8f9f-3642-1963-44b4-b0703f806abc.jpeg)


# 詳しい勉強方法について

### 1. [統計WEB](https://bellcurve.jp/statistics/course/)を1周読む
統計検定2級の必須知識が全部詰まってる[統計WEB](https://bellcurve.jp/statistics/course/)を1週間弱で読み終えました．完璧に理解しようとせず，「ふーん，こんなのがあるんだな〜」くらいで大丈夫だと思います．練習問題は，出来そうだが解くのが面倒(分散を計算しなさいとか)な問題は飛ばし，全然分からない問題だけ復習して次に進みました．

### 2. 1つ過去問を解いてみる
ここで一つ注意点があって**最初に2021年6月の過去問を解くのだけはおすすめしません**．2021年6月の過去問は難易度バケモンなので，ある程度知識がついてから挑戦することをおすすめします．
私は2019年6月の問題を解いて46%でした(11月のは少し解いてあったので6月の問題を解きました)．ここでは，試験の形式等を体験してみるという点が1番大きいので点数は気にしなくて大丈夫です．復習したら次のステップに進みましょう．

### 3. [とけたろうさんの動画](https://www.youtube.com/watch?v=L3Kt-y15jSM)を見て，問題パターンを覚える
とけたろうさんが最初に「この動画全部覚えたら2級受かるって聞いたんですけどマジっすか？」って言ってるんですが**マジです**．この動画，1時間もあるので全部見るの億劫になってしまう人がいると思うんですが，逆にこの動画に出てくることを全部覚えるだけで受かると言っても過言ではありません．例えば，母平均$\mu$の区間推定は3パターンに分類することができ，それさえ覚えれば間違えることはありません．
私は見ているだけでは覚えられなかったので動画を見ながら紙にまとめました．また，紙に書くだけではなく，それを暇なときに音読して暗記していました(結構おすすめの勉強法です)．

### 4. 残り期間で過去問を周回
3を終えたところで1週間が経過していたので発破を掛けるために1週間後に受験日を設定して過去問の周回に入りました．過去問の結果は以下の通りです．

- 2019年6月：46% (16/35)
- 2019年11月：65% (23/35)　　※最初の10問くらい解いてあったので点数高め
- 2018年11月：64% (22/34)
- 2018年6月：64% (22/34)
- 2017年11月：73% (25/34)
- 2017年6月：86% (30/35)

ここで重要なのが，**解いた日に必ず復習することです**．これをするとしないとでは**理解度が全然違うので絶対にしてください**．1周終わった時点で試験日3日前くらいだったので最終的には3周ほど解いたと思います．
余談ですが2017年まで解き終わり，復習も終わって暇だったので2021年6月の過去問に挑戦してみたのですが以下のような結果になりました．

- 2021年6月：68% (24/35)

2017年6月で86%取れていたので大丈夫だろうと思っていた私ですが，正直肝が冷えました．それくらい難易度が高い問題だったので最初に解くのはおすすめできないというわけです．

# CBT試験について

正直CBTだからと言って**過去問と難易度の差は感じませんでした**．過去問で平均6割を超えていれば大体受かるんじゃないかなといった所感です．PCの文字が若干読みずらくて問題の解読に少し手間取った印象はありますが，さほど影響はしないと思います．私が受験した会場では水性ペンとラミネート加工された計算用紙2枚が支給され，足りなくなったら交換してもらえるという方式だったので**交換する際は計算の見直し等が出来なくなる可能性があることには注意が必要かもしれないです**．

# まとめ
統計検定2級に合格できて良かったです．いつか準1級にも挑戦したいです．
お世話になった記事を以下に載せておきますので参考にしていただけると幸いです．

[追記] 準1級に合格しました。([記事](https://qiita.com/astrfo/items/44e1d386c1eac3e2d7aa))

### 参考

- [2週間で統計検定2級に合格した話](https://qiita.com/oki_kosuke/items/e06bb2e5c06875155652)
- [統計検定２級に楽に合格する方法](https://qiita.com/okoppe8/items/6caca7ab6509edf0c497)
- [統計検定2級チートシート](https://qiita.com/moriokumura/items/ed246efe11fc5d3fc760)
nuxt ( Vue ) で画面をリロードするとレイアウトが崩れてチラつく ( データのローディング中をテキストで表現する )

# コードの例

以下は解決後のコード。


`pages/single/_id.vue`

```vue
<template>
  <div>
    <h2>{{article.title || "Loading"}}</h2>
    <ul>
      <li>user id: {{article.userId || "Loading"}}</li>
      <li>post id: {{article.id || "Loading"}}</li>
    </ul>
    <div>
      <p>{{article.body || "Loading"}}</p>
    </div>
  </div>
</template>

<script>
import axios from 'axios';

const END_POINT = 'https://jsonplaceholder.typicode.com/posts';

export default {
  data() {
    return {
      article: {
        title: null,
        userId: null,
        body: null
      },
    }
  },
  async created() {
    try {
      let res = await axios.get(END_POINT + `/${this.$route.params.id}`);
      console.log(res.data);
      this.article = res.data;
    } catch (error) {
      console.log(`error: ${error}`);
    }
  }
}
</script>
```

# 問題

データが読み込める前と後ではレイアウトが変わってしまい、結果としてチラツキが発生していたみたいだ。


データが読み込める前の画面

![image](https://user-images.githubusercontent.com/13635059/193409975-011d7c20-7b73-40cb-99c4-94d6d411f1b8.png)

データが読み込めた後の画面

![image](https://user-images.githubusercontent.com/13635059/193409976-3b46e061-7c43-4ce9-ac3b-8db38b914b12.png)


# 簡易なテキストでローディングを表現する

何もデータが得られていない場合をてきとうに文字で埋めてしまえば、とりあえずレイアウト崩れは防げた。
もちろんCSSをちゃんと当てれば防げる問題だろうが。

![image](https://user-images.githubusercontent.com/13635059/193409979-9bcee366-60d1-4885-a69c-e4139cd5badf.png)

![image](https://user-images.githubusercontent.com/13635059/193409976-3b46e061-7c43-4ce9-ac3b-8db38b914b12.png)

# データ読込後に全体を表示する場合

v-if で表示エリア全体を囲めば良さそうだ。

```vue
<template>
  <div>
    <div v-if="article.title">
      <h2>{{article.title}}</h2>
      <ul>
        <li>user id: {{article.userId}}</li>
        <li>post id: {{article.id}}</li>
      </ul>
      <div>
        <p>{{article.body}}</p>
      </div>
    </div>
  </div>
</template>

```

# 参考

https://sushirice.pro/js-store/729/

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
Hakkobun

明の科挙における八股文は、「題前」と「正文」からなる。「題前」は序論にあたり「破題」「承題」「起講」「領題」という部分からなる。「正文」は本論にあたり「提比」「中比」「後比」「束比」からなる。これら8つの段落から構成されること、また「正文」は4つの部分それぞれ2つの比を対句として組み合わせて合計8つのあし（股）を持つことになることから、「八股文」と呼ばれた。

![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/OHwDhjffzDi6rJyb.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2FOHwDhjffzDi6rJyb.jpg?alt=media&token=7513a49a-0d97-4c8a-8f77-78cd0bd3ba40)

下記の絵には、⑧リリースがいれていない。
![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/XN43dtYZF2O3pPIg.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2FXN43dtYZF2O3pPIg.jpg?alt=media&token=9d528275-cd2e-48e6-909a-78e51ceaaa33)

9つの開発工程
![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/8bBGxs6N4oJFp0Z7.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2F8bBGxs6N4oJFp0Z7.jpg?alt=media&token=de56339c-f5ef-4eff-a839-8aa24e8690a3)

V字モデル
![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/sjnRma9WsTF4ukP5.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2FsjnRma9WsTF4ukP5.jpg?alt=media&token=c6ecbc12-7816-4cae-a92b-eaa9e465c180)

![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/b1un7oP3PciupXxg.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2Fb1un7oP3PciupXxg.jpg?alt=media&token=de3d3421-dac9-4267-b83e-a4933b9160db)

![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/96Gnh5sSFzRy0BCr.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2F96Gnh5sSFzRy0BCr.jpg?alt=media&token=f58dbd00-85c0-485a-aeed-831462e119ea)

![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/ZvXq1D7LeCW9HNdX.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2FZvXq1D7LeCW9HNdX.jpg?alt=media&token=60a06ff7-82bc-4c61-bdbd-803c3d7866e1)
Hakkobun

明の科挙における八股文は、「題前」と「正文」からなる。「題前」は序論にあたり「破題」「承題」「起講」「領題」という部分からなる。「正文」は本論にあたり「提比」「中比」「後比」「束比」からなる。これら8つの段落から構成されること、また「正文」は4つの部分それぞれ2つの比を対句として組み合わせて合計8つのあし（股）を持つことになることから、「八股文」と呼ばれた。

![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/OHwDhjffzDi6rJyb.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2FOHwDhjffzDi6rJyb.jpg?alt=media&token=7513a49a-0d97-4c8a-8f77-78cd0bd3ba40)

下記の絵には、⑧リリースがいれていない。
![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/XN43dtYZF2O3pPIg.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2FXN43dtYZF2O3pPIg.jpg?alt=media&token=9d528275-cd2e-48e6-909a-78e51ceaaa33)

9つの開発工程
![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/8bBGxs6N4oJFp0Z7.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2F8bBGxs6N4oJFp0Z7.jpg?alt=media&token=de56339c-f5ef-4eff-a839-8aa24e8690a3)

V字モデル
![6mMfkmBJhzTeFUzqrRoA8J4KaAY2/sjnRma9WsTF4ukP5.jpg](https://firebasestorage.googleapis.com:443/v0/b/type-c1c71.appspot.com/o/6mMfkmBJhzTeFUzqrRoA8J4KaAY2%2FsjnRma9WsTF4ukP5.jpg?alt=media&token=c6ecbc12-7816-4cae-a92b-eaa9e465c180)
[GIMP]画像の背景を切り抜いて透過画像を作る

# 概要
画像の背景を切り抜きたい時、最近ではオンラインツールでも出来る様になりました。
単色背景の場合は十分ですが、微調整したい時は画像編集ソフトが必要になることもあると思います。
今回、GIMPの練習を兼ねて画像の切り抜きをやってみたので、その手順をまとめておきます。
# 本文
## GIMPを起動してファイルを読み込む
GIMPを起動します。
![スクリーンショット 2022-10-01 20.29.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/664b8aa4-e242-400a-2aa9-c2b5f643a763.png)
ファイルを読み込みます
![スクリーンショット 2022-10-01 20.30.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/89badc34-4070-542d-c42c-38eb02c333d6.png)
![スクリーンショット 2022-10-01 20.32.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/764c433e-2b63-c11a-c23d-47dff6bdbaf9.png)
## 切り抜く

ファジー選択をクリックします（ショートカットはUキー）
![スクリーンショット 2022-10-01 20.44.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/9ddd2f27-776b-a91f-2b7d-6d15d19cfe2b.png)
背景を切り抜きたい場所でクリックすると背景が「選択状態」になります

:::note info
思った通りに選択出来ない時は上のスクショの「しきい値」の調整もしてみてください。
もしくは、背景をクリックした後にそのままドラッグする事でも「しきい値」が調整されて選択範囲が広がります。
:::

![スクリーンショット 2022-10-01 20.48.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/29bbf8ad-f9e2-799c-a04c-016cf08f3719.png)
右クリックメニューーから消去を選択すると
![スクリーンショット 2022-10-01 20.50.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/21ecf6dc-94f8-80a3-d4b7-58fbcd9ec2c7.png)
背景画像が透過されます
![スクリーンショット 2022-10-01 20.51.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/394607e7-ac91-b466-c3c7-5cc18faffd02.png)

:::note info
背景を消去しても、スクショのような「市松文様」が表示されない時は「アルファチャンネルの追加」で透明部分のレイヤーを追加する必要があります。その後もう一度消去をすると「市松模様」が表示されると思います。
:::

![スクリーンショット 2022-10-01 20.32.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/0cee1abe-b8ca-1072-48a8-2b83ccbb079a.png)
## 透過画像を保存
ファイル > 名前をつけてエクスポート（拡張子はpng形式になっていることを確認します）
![スクリーンショット 2022-10-01 20.57.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/16283c20-5d8e-6cec-9a37-0bddb6b2320e.png)
ポップアップ「画像をPNGでエクスポート」では設定そのままでエクスポートを押します。
![スクリーンショット 2022-10-01 20.58.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/25a0230d-0e03-3fac-04d4-6b17e4b3ba13.png)

## おまけ
「色域を選択」ツールを使えば色指定で選択することもできます（ショートカットはShift + Oキー）
![スクリーンショット 2022-10-08 18.00.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/2272d66b-487b-38be-c9f8-d28d687ef070.png)
背景の目的の色部分をクリックするだけで同じ色の箇所が選択されます。
（背景が構造物で区切られている時はこちらの方が便利です）
![スクリーンショット 2022-10-08 18.11.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/9bc13460-8540-8dfa-5520-c805ef52ffe7.png)
MaterialUIでTableRowの背景色よりTableCellの背景色が優先されてしまうためTableRowのhover設定が機能しない問題

# はじめに
`MaterialUI`のv4を使っています。
`TableRow`のhover設定をオンにした場合でも、`TableCell`の背景色が優先されてしまうため、hoverしても背景色が変わりません。
これを解決しました。

# コード
```sample.tsx
const useStyles = makeStyles({
  tableRow: {
    '&.MuiTableRow-hover': {
      '&:hover': {
        '& > .MuiTableCell-root': {
          backgroundColor: 'blue'
        }
      }
    }
  },
  tableCell: {
    backgroundColor: 'red'
  }
});

export const Table: React.FC<Props> = () => {
  const classes = useStyles();

  return (
    <Table>
      <TableHead>
        <TableRow>
          <HeaderCell/>
        </TableRow>
      </TableHead>
      <TableBody>
        {rowData.map((row, index) => (
          <TableRow hover key={index} className={classes.tableRow}>
            <TableCell className={classes.tableCell}/>
          </TableRow>
        ))}
      </TableBody>
    </Table>
  );
};
```
to_sqlメソッドでActiveRecord実行時のSQLを確認

## 1. `to_sql`を使用し、ActiveRecordのクエリを出力

```rb:sample.rb
target_members = Member.joins(:positions).where(positions: { position_status: 5 })
puts target_members.to_sql
```

- RSpecで任意のテストを実行すると、`putsメソッド`を使っているため標準出力に出力される

```terminal:Run
SELECT "members".* FROM "members" INNER JOIN "positions" ON "positions"."member_id" = "members"."id" WHERE "positions"."position_status" = 5
```

:::note warn
`pメソッド`で出力している際は出力結果に`"`（ダブルクォーテーション）のみならず`\`（バックスラッシュ）も含まれる
:::

## 2. エディタなどで置換
- 私はいつも`Visual Studio Code`で整えています
    - 任意のファイルに出力された結果を貼り付ける
    - `command + f`
    - `"`（ダブルクォーテーション）を全て置換し削除
 ![スクリーンショット 2022-10-01 19.42.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689074/d507b843-27cf-5a0f-e384-1e2610398044.png)

```SQL:整形後
SELECT members.* FROM members INNER JOIN positions ON positions.member_id = members.id WHERE positions.position_status = 5
```

## 3. SQL整形ツールを使用

https://atl2.net/webtool/sql%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%82%BF%E3%83%BCfor-web/

- 貼り付けて「整形する」ボタンを押下するだけでOK

```SQL:SQL
SELECT
    members.*
FROM
    members
    INNER JOIN
        positions
    ON  positions.member_id = members.id
WHERE
    positions.position_status = 5
```
【論文読み】説明可能AIにおける対話型の対比的説明につての一検討

## はじめに

こんにちは。論文を読んだ結果の紹介記事です。  
今回紹介するのは、「説明可能AIにおける対話型の対比的説明につての一検討」という論文です。  

- タイトル：【論文読み】説明可能AIにおける対話型の対比的説明につての一検討
- 出典：濱本鴻志、 et al.; 人工知能学会、 2021   
- URL：  https://www.jstage.jst.go.jp/article/pjsai/JSAI2021/0/JSAI2021_2C4OS9b02/_pdf/-char/ja


## 概要
局所的近似について、以下に示す。これに対して、「対比的な説明を提供する対話型の説明可能 AI」が目指すべき代替案としてある。

- 局所的・近似モデル
    - モデルが内的にどのように機能するかを説明しようとするものではなく、モデルがどのように振る舞うかを外的な観点から説明しようとする事後的な説明のうち、特定の領域に関してより単純なモデルを用いて問題のモデルの振る舞いを近似しようとするものである。
    - 想定されている変更後の入力が問題の範囲に収まっているかに関するユーザー側の知識が必要となる。

  
Miller は説明を「なぜの問いへの答え」と定式化した上で、個別的な事実に関する説明は、対比性・選択性・社会性の三つの要件を満たすことが要求されていると述べる。
  
- 対比性
    - 「なぜQではなくPという出来事が起こったのか」に答える説明。
    - リンゴの例でいえば、「リンゴを落としたせいで傷がついた」という因果言明は、「リンゴを落としていなかったら傷はつかなかっただろう」という反事実的条件文に言い換えられる。
- 選択性
    - 受け手の知識や関心に応じた選択は、受け手の求める情報を効率的に伝達するために本質的である。説明における情報の適切な取捨選択が関心依存性を持つことから、説明の選択においては「統計的重み」だけではなく、受け手の関心と期待が考慮される必要がある。
- 社会性
    - 効率的な情報伝達に本質的な説明の選択は、当の人間とモデルの間で共有された前提に基づいた双方向的な対話によってなされる必要がある。
  
説明の受け手の関心や知識を知るために情報交換を行い、次にそれに基づいて説明の受け手の関心にそった対比的説明を提供するAIが目指されるべきだとしている。
  
- 利点
    ユーザーの解釈が不要な点で、局所的近似の場合に比べ誤解を招くリスクが少なく望ましいと考えられる。
- 問題点
    説明者側が自身に都合の良いように説明の受け手を「ナッジ」する危険性。
    Mittelstadt らは、ナッジの問題に対しても説明の三要件の有用性を示唆している。単に情報交換を可能にするだけでなく、正当化についての論証や議論を可能にするような対比的・選択的・社会的説明を与えるメソッドを開発することでリスクを軽減できるかもしれないと述べている。

## 技術的特徴
- 説明可能 AI のニーズと対話の有効性
    - 説明可能 AI のニーズを「正当化のための説明」、「制御のための説明」、「改善のための説明」、「発見のための説明」の四つに分類。
    - 医師の側の関心による違いの例。
        - 「信頼してその AI を用いるために、その基準が問題的かを判断したい」（正当化ないし制御のための説明）
        - 「AI は十分に信頼しているが、今回与えたデータだけから私には風邪かインフルエンザか判別できないため、AIが学習している基準を知りたい」（発見のための説明）
        この場合に対話型の AI が応えられるだろう。
    - ユーザーの関心が十分に一様である場合には、説明可能 AI が対話型である必要性はそれほど高くないと考えられる。
    - 機械学習の専門家が精度の改善のために説明を欲している場合であれば、局所的近似モデルの提示の方が有用である可能性もある。

- 対比的説明に関する哲学的問題
    反事実的依存性分析には、単独で十分な原因が複数存在する、いわゆる多重決定 (overdetermination) の事例に関する問題が知られている。多重決定の問題は、少なくとも単純な反事実的依存性分析では必要とされる情報を捉えきれない場合があることを示している。


## 想定される適用例
- 予測結果の説明・解釈時の全般  


## 参考
- [説明可能AIにおける対話型の対比的説明につての一検討](https://www.jstage.jst.go.jp/article/pjsai/JSAI2021/0/JSAI2021_2C4OS9b02/_pdf/-char/ja)
Web 標準 API を使って Deno でファイルアップロードを受け取る

Deno でファイルアップロードを受け取るには、Request object の formData メソッドを使います。

```ts
Deno.serve(async (req) => {
  const data = await req.formData();
  const file = data.get("file");
  const bytes = await new Response(file).arrayBuffer();
  const size = bytes.byteLength;
  console.log("Received file", file.name);
  console.log("byte size =", size);
  return Response.json({ filename: file.name, size });
});
```

`await req.formData()` で Web 標準 API の [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) オブジェクトが取得出来ます。

`data.get("file")` 呼び出しで、[File](https://developer.mozilla.org/en-US/docs/Web/API/File) object が取得出来ます (この File も Web 標準 API の File になっています)。

`await new Response(file).arrayBuffer()` で File の中身を取り出しています。この バイト列 (Uint8Array型) がファイルの内容になっているので、これを使って、保存するなり加工するなり必要な処理を実装する事が出来ます。

上のサーバーを立ち上げた状態で、以下のような curl コマンドで挙動を確認する事が出来ます(`file.pdf` というファイルがカレントディレクトリにある想定です)。

```shell-session
$ curl -i http://localhost:8000 -F "file=@file.pdf"
HTTP/1.1 100 Continue

HTTP/1.1 200 OK
content-type: application/json
vary: Accept-Encoding
content-length: 37
date: Sat, 01 Oct 2022 11:22:15 GMT

{"filename":"file.pdf","size":375676}
```
IISで個別ユーザーのパーミッション設定をする

IIS上で特定のフォルダに対するユーザーごとのアクセス権限の設定方法について。
多分常識的すぎてググってもなかなかわからなかったので、備忘録的に書きます。


### 存在しているユーザー
Windows Serverにすでに以下のユーザーが存在しているとします。
パーミッションを設定したいのはuser3です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/f75167da-3a7e-e847-6341-a1d05eea336c.png)

### パーミッション設定をしたいフォルダ
画像内のincomingフォルダに対し、user3へ個別にパーミッション設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/2cf98b35-47c5-fd43-fffa-5580d0aaa8da.png)

### 操作手順
incomingフォルダを選択し、右クリック→EditPermissionsを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/7389c6ce-069f-6b79-f6d6-0e4c8d33a9d0.png)

フォルダのプロパティでSecurityタブ→Editボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/6fc9b634-7db7-c4ba-bd7c-79b712a5134b.png)

パーミッション画面でAddをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/f5d2de2b-5cd6-07ed-935e-722dd0f923a5.png)

Select Users or Group画面内の
Enter the object names to select欄で追加したいユーザー名を入力してOKボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/5744750c-3f4d-92e5-4788-fdaf599f1bc5.png)

そうするとパーミッション画面で個別のユーザーに対してパーミッションを設定することができるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1918417/9838be89-f1d8-c8d4-b826-230626823d90.png)
HTML基本知識

最近仕事でPHPファイル内にHTMLを書くことが多かったので、改めて復習しました。

# HTMLファイル基本構成
```
<!DOCTYPE> // DOCTYPE宣言
<html> // htmlタグ
  <head> // headタグ
  </head>
  <body>  //bodyタグ
  </body>
</html>
```
### DOCTYPE宣言
HTML文書がどんな仕様、バージョンで書かれているかをブラウザに伝えるために記載をする宣言。  
HTML文書の先頭で宣言を行う。  
※Document Type Definition  
#### 例  
HTML4.01 Transitional
```
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
```
HTML5以降のバージョン
```
<!DOCTYPE html>
```

### htmlタグ
ドキュメントがHTML文書であることを示すタグ。  
DOCTYPE宣言の後にhtml開始タグを記載し、文書の最後に終了タグを記述する。

### headタグ
ブラウザに向けた情報を記述するタグで、htmlタグの直下に一つだけ記載することができる。  
headタグ内ではtitleタグ、metaタグ、linkタグなどを使用する。  
基本的にWebページ訪問者からは見えない情報が多くあるが、SEOの観点からもheadタグを適切に記載することは大切。

### bodyタグ
Webページ訪問者から直接見える部分を記述する。



# HTMLタグ一覧
## headタグ内
| タグ名 | 内容 | 補足 |
| -- | -- | -- |
| meta charset | 文字コードの指定 | 基本的に文字コードは`utf-8`を使用 |
| title | ページタイトル | 終了タグあり |
| meta name="description" | ページの説明 | `content=""`で説明を記述 |
<!-- |  |  |  | -->

## bodyタグ内
| タグ名 | 内容 | 補足 |
| -- | -- | -- |
| h | 見出しの作成 | h1からh6まである |
| img | 画像の埋め込み | 終了タグがなく、[src属性](https://developer.mozilla.org/ja/docs/Web/HTML/Element/img#:~:text=src%20%E5%B1%9E%E6%80%A7%E3%81%AF%E5%BF%85%E9%A0%88%E3%81%A7%E3%80%81%E5%9F%8B%E3%82%81%E8%BE%BC%E3%81%BF%E3%81%9F%E3%81%84%E7%94%BB%E5%83%8F%E3%81%B8%E3%81%AE%E3%83%91%E3%82%B9%E3%82%92%E5%85%A5%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)を付与して画像の場所を指定する |
| ul | リストを作成 |  |
| li | リストの記述 | ulタグの中に1つずつ記述していく |
| br | 改行 | 終了タグなし |
| a | リンクの挿入 | 終了タグがなく、[href属性](https://developer.mozilla.org/ja/docs/Web/HTML/Element/a#attr-href)を付与してURLを指定する |
| p | 段落の作成 | 終了タグ後はbrよりも行間が大きく取られる |
| table | 表の作成 | [trタグ、thタグ、tdタグ](https://developer.mozilla.org/ja/docs/Web/HTML/Element/table)を使用して表を作成する |
| hr | 横線を引く |  |
<!-- |  |  |  | -->



# 参照
### HTML基本構成
- [HTML初心者のための使えるHTML基礎知識](https://makefri.jp/web/6286/)

### HTMLタグ
- [HTML要素リファレンス（MDN）](https://developer.mozilla.org/ja/docs/Web/HTML/Element)
- [href・doctype・src…？HTMLタグの読み方まとめ](https://ferret-plus.com/1462)
- [【2022年版】HTMLのheadタグの書き方を全て解説！](https://moshashugyo.com/media/html-head)

### その他
- [Markdown記法 サンプル集（Qiita）](https://qiita.com/tbpgr/items/989c6badefff69377da7)
【Mac】コマンドでブラウザで特定のURLを開く方法

## 方法
以下のように実行すると特定のURLを指定したブラウザで開けます。

```zsh
open -a 'ブラウザ名.app' <URL>
```
- ChoromeでURLを開く場合
```zsh
open -a 'Google Chrome.app' <URL>
```
- SafariでURLを開く場合
```zsh
open -a 'Safari.app' <URL>
```

## 具体例
- Chromeで https://github.com/ を開く
```zsh
open -a 'Google Chrome.app' "https://github.com/"
```

- Safariで https://qiita.com/ を開く
```zsh
open -a 'Safari.app' "https://qiita.com/"
```
preztoを入れたらzshのコマンドの出力結果が表示されない


# 困ったこと

↓のキャプチャのようにコマンドの結果が表示されない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684725/d29543bd-55b9-ac67-0c3b-f43360d189b5.png)


# 解決策

`vi ~/.zshrc`で以下のオプションを追記

```shell
setopt prompt_cr
setopt prompt_sp
```

# 根本原因

↑のオプションはデフォルトではオンになっているが、`prezto`の設定で上書きされてオフになっていることが原因だった。
netstatコマンドでApache Web Serverの接続数を確認する方法（メモ）

`netstat`コマンドで、Apache Web Serverの接続数を確認することができます。

以下のコマンドは、クライアントからHTTPS接続（443ポート）で、Apache Web Server（IPアドレス：192.168.0.10）への接続をカウントしています。

+ Apacheへの接続情報を表示するコマンド

```bash
netstat -antp | grep '192.168.0.10:443 '
```

+ Apacheへの接続数を状態ごとにカウントして表示するコマンド

```bash
netstat -antp | grep '192.168.0.10:443 ' | awk '{print $6}' | sort | uniq -c
```

+ Apacheへの接続数を状態ごとにカウントして表示するコマンド（5秒ごとに時間付きでファイルに出力）

```bash
nohup bash -c "while true; do netstat -antp | grep '192.168.0.10:443 ' | awk '{print \$6}' | sort | uniq -c | awk '{print strftime(\"%y/%m/%d %H:%M:%S\"), \$0}'; sleep 5;done" < /dev/null > out_$(date "+%Y%m%d_%H%M%S").log 2>&1 &
```

+ Apacheへの接続数を接続元のIPアドレスごとにカウントして表示するコマンド

```bash
netstat -antp | grep '192.168.0.10:443 ' | awk '{print $5}' | cut -d : -f1 | sort -n | uniq -c | sort -n
```

+ Apacheへの接続数を接続元のIPアドレスごとにカウントして表示するコマンド（5秒ごとに時間付きでファイルに出力）

```bash
nohup bash -c "while true; do netstat -antp | grep '192.168.0.10:443 ' | awk '{print \$5}' | cut -d : -f1 | sort -n | uniq -c | sort -n | awk '{print strftime(\"%y/%m/%d %H:%M:%S\"), \$0}'; sleep 5;done" < /dev/null > out_$(date "+%Y%m%d_%H%M%S").log 2>&1 &
```

---

以上
VSCodeのFlutterでフィンガープリントを取得する方法

## 読んでも読まなくてもいい前提
`com.google.android.gms.common.api.ApiException: 10`

[調べてみると](https://riscait.medium.com/apiexception-10-error-in-sign-in-with-google-using-firebase-auth-in-flutter-1be6a44a2086)、Debug用のフィンガープリントが必要とのこと。
でもフィンガープリントの取得方法が分からない

### 試してみてダメだった方法
- [Android Studioを使ってフィンガープリントを取得する方法](https://riscait.medium.com/apiexception-10-error-in-sign-in-with-google-using-firebase-auth-in-flutter-1be6a44a2086)
    - 敗因はバージョン関係の問題と思われる
- [.\gradlew signingReport](https://stackoverflow.com/questions/55496090/how-to-get-sha1-of-android-app-in-vs-code)を使う方法
    - 以下のエラーが出た
    - 解決する時間が惜しいので、別の方法を探す
```
ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.
```

## keytoolを使う方法で取得する

1. まず、JDKをインストールする。少し古いが[この記事](https://codeforfun.jp/how-to-install-java-jdk-on-windows-and-mac/)が詳しくてよかった。
現時点でこの記事と違った点は、**ログインが必要**だったことと、ちょっとしたUIの変更。
以下をインストールして、記事通りにパスを通す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528682/4d532aa9-0789-f5c6-a339-ceeba574a94e.png)

2. 以下のコマンドを実行
```
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore
```
`キーストアのパスワードを入力してください`という表示が出たら、`android`(初期パスワード)と打つ。パスワード入力画面なので、入力しても画面上には何の変化もない。

パスワードが通ると色々表示されるので、メモ帳か何かにコピペしておく。
この中に`SHA1`と`SHA256`がある。

参考記事:https://webmaking.rei-farms.jp/%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E5%88%B6%E4%BD%9C/7001/

フィンガープリントを取得するだけならここまででOK

## 取得したフィンガープリントをFirebaseに登録する
1. [Firebaseコンソールにログイン](https://console.firebase.google.com/u/0/)して、使うプロジェクト選択（プロジェクト名は塗りつぶして隠してます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528682/d5bc0454-7734-d108-5f47-229adf4daa34.png)

2. Androidを選択して、設定マークを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528682/1a8d5d2f-6ea0-9dd8-f160-0c0b7265bbc7.png)

3. `全般`の一番下に`フィンガープリントを追加`があるので、そこをクリックして、先ほど取得したフィンガープリントを貼る。スクショは追加後のもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528682/f6ad5fae-7cec-e76b-721b-61c6105add6d.png)


---
以上で`com.google.android.gms.common.api.ApiException: 10`のエラーは解消した。

### 追加でエラーが出た
`com.google.android.gms.common.api.ApiException: 12500: `

[この記事](https://minpro.net/sign_in_failed-apiexception-12500)にいくつか対処法があったが、私はサポートメールの設定でとりあえずこのエラーは出なくなった。
pluckメソッドの使い方と注意点

## pluckメソッド
引数に指定したカラムの値を配列で返してくれるメソッド。
使い方は下記の通り。

モデル名.pluck(:カラム名)

実際に使用してみる。
![20221001_ownersテーブルの画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829500/efa06978-4044-0920-470e-44eae6241826.png)


（nameカラムを指定したpluckメソッドを実行し、nameカラムの値を配列で取得する）

```
irb(main):011:0> Owner.pluck(:name)
   (0.2ms)  SELECT "owners"."name" FROM "owners"
=> ["田中", "伊藤", "高橋", "加藤"]
```

また、引数を「複数」設定することで、二次元配列で値を取得することができる。


例えば、テーブルが下記の内容であったとする。

![20221001_ownersテーブルとcatsテーブルの画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829500/f80f8ef4-95e0-e568-21c3-fd1dadab88e5.png)



Railsコンソールを叩き、以下のデータをそれぞれ取得。

```
引数に指定したカラムの値を配列として取得。
irb(main):002:0> Owner.pluck(:name)
   (0.2ms)  SELECT "owners"."name" FROM "owners"
=> ["田中", "伊藤", "高橋"]


上記コマンドと同じ内容
irb(main):003:0> Owner.all.map(&:name)
  Owner Load (0.4ms)  SELECT "owners".* FROM "owners"
=> ["田中", "伊藤", "高橋"]

引数に複数のカラムを指定し、二次元配列で取得


irb(main):004:0> Owner.pluck(:name, :id)
   (0.3ms)  SELECT "owners"."name", "owners"."id" FROM "owners"
=> [["田中", 1], ["伊藤", 2], ["高橋", 3]]


複数の引数の順番を入れ替えて、表示

irb(main):005:0> Owner.pluck(:id, :name)
   (0.3ms)  SELECT "owners"."id", "owners"."name" FROM "owners"
=> [[1, "田中"], [2, "伊藤"], [3, "高橋"]]
```

・pluckメソッドの注意点
①オーバーライドを行うモデルメソッドには使用することができない。
②pluckメソッドの後ろにメソッドチェーンをすることはできない。

今回は、②を実際に見てみる。
```
（まず、Ownerモデルの全レコードを取得）
irb(main):010:0> Owner.all (今回は画像で表記)
```
![20221001_ownersテーブルの画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/829500/9e624b65-86d1-e718-643e-b90fd50b960b.png)


（次に、Ownerモデルにnameカラムを指定したpluckメソッドをかけ、指定したカラムの値を配列で取得する。）
```
irb(main):011:0> Owner.pluck(:name)
   (0.2ms)  SELECT "owners"."name" FROM "owners"
=> ["田中", "伊藤", "高橋", "加藤"]
```

（さらに、limitメソッドでデータの３つのみ取得できるようにする。）
```
irb(main):012:0> Owner.pluck(:name).limit(3)
   (0.2ms)  SELECT "owners"."name" FROM "owners"
Traceback (most recent call last):
        1: from (irb):12
NoMethodError (undefined method `limit' for ["田中", "伊藤", "高橋", "加藤"]:Array)
```

↓ここでエラー発生。理由は、pluckメソッドは「配列」を返し、limitメソッドはActive::Relationオブジェクト（User.allやUser.where(name: “hoge”)などで返ってくるもの）に対してしか使用することができないため

そこで対応策としては、先にモデルに対して、ActiveRecordメソッドのlimitメソッドを実行し、その後pluckメソッドを実行し、指定したカラムの値の配列を取得する。

```
irb(main):013:0> Owner.limit(3).pluck(:name)
   (0.2ms)  SELECT "owners"."name" FROM "owners" LIMIT ?  [["LIMIT", 3]]
=> ["田中", "伊藤", "高橋"]
```

これで、Ownerモデルのデータにlimitメソッドでデータの数を制限し、pluckメソッドで指定したカラムの値の配列を取得することができた。
pluckメソッドを使用するときは、レシーバがActive::Relationオブジェクトなのか配列なのか注意する。
Nuxt リンク先のプリフェッチングをChromeDeveloperToolで確認する

# コード

pages/hello.vue

たくさんの改行の後にリンクがある

```vue
<template>
  <div>
    <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
    <NuxtLink to="/fun">Fun</NuxtLink>
  </div>
</template>
```

pages/fun.vue

テキストを表示するだけ

```vue
<template>
  <div>FUN FUN FUN!!!</div>
</template>
```



# Chrome

リンクのあるページにアクセスする。
だがリンクが見えていない状態だと何も起きていない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/492a8c6d-d5d1-891c-0185-28fdf0be8ce2.png)

ページを下にスクロールすると .js ファイルに対して通信がおこなわれ、その中にリンク先の内容が含まれているのが分かる。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/69235448-c33f-bba9-656d-c6473ad32f40.png)



# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
npxをアップデートする ( $ npm install -g npx )

```
npm install -g npx
```

または

```
npm install -g npx --force
```


# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
GPU付AzureVMの立ち上げにはドライバのインストールが必要

# 前提
インスタンス：VM NVv4
OS：Windows Server

# VMに接続
RDPでVMに接続しタスクマネージャーを確認すると、GPUが読み込まれていないことがわかる
=>GPUドライバのインストールが必要。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299912/30bc02f5-57ea-e2f3-7fdd-cb5d15734db1.png)


# ドライバのインストール
ドライバは公式ドキュメントによると
https://download.microsoft.com/download/f/1/6/f16e6275-a718-40cd-a366-9382739ebd39/AMD-Azure-NVv4-Driver-20Q4.exe
からインストールすればよいとのこと

# インストール後再びタスクマネージャーを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299912/0b92d30f-9dfc-e6d7-c8a5-f99edc1f6000.png)

これで読み込まれた。OK！！
Spresense SDK で LCD サンプルプログラムを動かしてみた その3(ほぼ完結編)

Spresense SDK のNXサンプル(LCDボード表示)をよく理解しないまま、
[Spresense SDK で LCD サンプルプログラムを動かしてみた その2(Configuration)](https://qiita.com/kaz19610303/items/52b0cbbc63081730322f)
[Spresense SDK で LCD サンプルプログラムを動かしてみた その1](https://qiita.com/kaz19610303/items/3f88b18c9182d163ea50)
の記事を書きましたが、ほんの少し理解が深まったので再度まとめます。

**やりたいこと**
Spresenseのメインボードで使えるLCD拡張ボードを作ったので、それを**Spresense SDK**から使いたい。
そもそも**Arduino IDE**では問題なく使えている
[Sony Spresense(IDE) で TFT LCD を動かしてみた](https://qiita.com/kaz19610303/items/7e18d34b29b8f6405916)
[Sony Spresense(IDE) で TFT LCD を動かしてみた 2](https://qiita.com/kaz19610303/items/92a5a2c708a8a5f2aa50)
メインボードでLCD表示器を使うボードは
[SONY Spresense用 TFT LCDドライバーボード](https://qiita.com/kaz19610303/items/883f3ee2c142b6f74ed8)
になります。

**はまっていたこと**
Nuttx のLCDとSPIに関するコンフィグレーションが良く分からない。
ほとんど情報無し(泣)

公式の
[Spresense SDK チュートリアルの 10. Graphics チュートリアル](https://developer.sony.com/develop/spresense/docs/sdk_tutorials_ja.html#_graphics_%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB)
ではサンプルがそのまま動いているっぽい。
ただし、***Nuttxでの LCDとSPIに関するコンフィグレーション*** に関しては言及無し。

このチュートリアルでは拡張ボードでLCDを動かすようになっていたので、
SPIのポートをMainボードのポートに変更して、LCDの制御線関係を合わせれば良いと勝手に解釈。

**勘違い(?)**
LCDコントローラーIC **ILI9341** は**CMD/DATA**の制御が必要なので
Nuttxのコンフィグレーションで この設定 を有効したら
**cxd56_spi3cmddata、cxd56_spi4cmddata、cxd56_spi5cmddata**　の関数が無いというエラーでコンパイルが通らない。
これに関しては
[Spresense SDK で LCD サンプルプログラムを動かしてみた その1](https://qiita.com/kaz19610303/items/3f88b18c9182d163ea50)
で対策を取って、動くようにはなっていましたが、そもそも**CMD/DATAの有効化は必要ない**みたいです。

CMD/DATAに関しては、他のボード用のNuttxでも「**関数が無いので作った**」みたいな情報を見かけたので
そのソースを基に関数を作っていました。
これに関しては正しい情報が欲しいところです(笑)
Spresense用だけがカスタマイズされている?

**結局これだけ設定すれば動く**
1. SPIのポートはMainボードのポート(**SPI5**)を使うように設定する。
![スクリーンショット 2022-10-01 15.18.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/137f07a4-ef8f-143e-887e-a1ccf6fb4c83.png)

2. LCDのRSTピンとDCピンを設定する
![スクリーンショット 2022-10-01 13.56.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/41d95b1b-9eee-1fae-c78d-705ca43d143a.png)

3. LCD Driver Support ページの設定はこれで大丈夫そう
![スクリーンショット 2022-10-01 14.42.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/eda8b845-fa86-4c76-49b3-43e693888a39.png)

**そして宿題**
とりあえず表示は出来たもののなんか変。
表裏逆?
公式のページに解説してある
10.1.4. Tips LCD画面のオリエンテーションの変更方法
これで直るのかな。
これは宿題に(笑)。
![IMG-0728.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/1a64952d-856f-74a8-fc53-555eb528947f.jpeg)

**補足**
LCDのドライバーチップを **ILI9341** に設定するとコンパイルでエラーとなる。
また、**ILI9340** のチェックを外すと、**LCD画面のオリエンテーションの変更**が出来なくなる。
![スクリーンショット 2022-10-01 18.05.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/e657bbe3-e285-fa89-3346-0256fee3b70f.png)
![スクリーンショット 2022-10-01 175722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99249/4afa4b1a-1552-beb0-8657-7d821ad0bc8d.png)
**ILI9340**と**ILI9341**の両方にチェックを入れるとコンパイルも通って動くけど
**ILI9340**だけをチェックした時との違いが分からない。

**最後に**
なんとかメインボードとLCDドライバーボードでLCDを制御できそうです。
カラーTFT LCDはずいぶん安くなっているので使わない手はないと思っています。
今まではOLEDを使っていましたがモノクロだったので、カラーになると表現力が格段に上がると思っています。
お金を稼ぎながらプログラミングしたい

- 本当に使うかどうか分からないプログラミング言語をプライベート時間で学習しているとお金は発生しない。お金が発生しないとどうにもやる気が起きない。仕事をしてお金を稼ぐのはゲームでポイントを稼ぐような楽しさがある。ポイントを稼げないのにゲームをするのは損をしてるような気分になる。こんなことを質問サービスのQuoraに投稿してみたら「あなたはその仕事に向いてないのでは？」なんてことを言われた。
- システム開発は面白いけどプログラミング単体だとそんなに面白くない。ボールをひとりで蹴っていても楽しくないだろう。
- お金をもらいながら開発をして分からないことがあれば覚える。つまりはこれが最強なのだ。学習効率においてもモチベーションにおいても楽しさにおいてもキャリアにおいてもエンジニアとしての評価においてももちろんお金においても。これに比べて本当に使うかどうか分からない分野の自己学習は得られる報酬が少なすぎてしんどい。どうすべきものか。
- まだ世の中にないもので自分がどうしても欲しいものを自分で開発するならモチベーションが湧くと思うのだが。そんなものはまるでないのだった。今の世の中はアプリケーションだらけではないか。
- プログラミングをしなくても死にはしない。しても死にはしないが。
- プログラミングの質問サイトTeratailで何か質問を見つけて回答しようとするがほとんどすでに他の人の回答がついている。質問の奪いに勝てそうにない。
- プログラミングの質問サイトでこちらが答えを探している間に質問者が自己解決していたりする。やり甲斐がない。
- 休日だ。プログラミングの勉強でもしよう。何時間勉強しようか？4時間ぐらいだろうか。そう考えた瞬間に4時間という数字がプレッシャーに感じられてげんなりする。ミニマルに。迷ったらミニマルに。
- プログラミング初心者はひとつのプログラミング言語やフレームワークをマスター可能なものだと思っているかもしれない。だがもちろんそんなことはない。「サッカーをマスターした」とか「英語をマスターした」とかいうことが決してないのと同じだ。だがそう考えるとそもそもマスターできる物事なんか世の中にひとつでもあるんだろうか。
- 僕には能力がある。あるはずだ。能力を発揮しないのは宝の持ち腐れだ。能力の発揮はそれそのものが人生の目的になるのではないだろうか。
- 人に利用されたという思いは悔しい。過去の人間関係を振り返ってみるとそうだ。「人に利用された」と自分が感じたケースが最も嫌な思い出になっていると思う。だから僕は人を利用しない。少なくとも意識的には利用していないと思う。人にはほとんどお願い事さえしない。人に借りを作っても返せる自信がないからだ。
- ある実験によると人は30分も何もせず椅子に座っていることさえ難しいと思う。だから座禅を30分も出来るようになった僕は平均よりも何もせずにいられる能力は高いかもしれない。とは言っても座禅の最中にも心はざわついて仕方がないのだが。



# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# Twitter

https://twitter.com/YumaInaura
HTML印刷時の白抜き文字の色について

HTMLの画面を印刷したい時に、あることに気が付いた

Chromeにて、
背景の印刷の項目にチェックを入れなければ、CSSにて「color:white」になっている白文字の要素は、グレーの文字になってしまう。
調べてみるとブラウザが勝手にしているようで他の人もそういった問題に悩まされているようだ。

お客様に提出する画面であれば、チェックを入れさせるというのはあまりしたくない

ふと、「color:white」を使わずに白抜き文字を使用できないか考えたところ、<br>

```
color: transparent;
text-shadow: 0 0 white;
```
にて印刷時も白抜き文字にできることが可能であった
確認バージョン：
chrome 106.0.5249.91（Official Build）
情報処理安全確保支援士　平成26年秋期　午後Ⅰ

■問2（難易度：易）
テーマ：社内のレガシー認証システムを現代のセキュリティ水準にするには？
【問われていること】
・暗号アルゴリズムの安全性
　NISTより、「セキュリティ強度」=「解読に必要な計算量を指標にして、同程度の耐性」（私の解釈）
　「Xビットの安全性」とは、解読に2のX乗の試行回数が必要ということ。Xが大きいほど安全。

・暗号化する鍵の種類とアルゴリズム
　アルゴリズムは最新のものだけ覚えておけば良いと思う、、
　共通鍵　　　：AES
　公開鍵　　　：RSA
　ハッシュ関数：SHA

・レガシー認証（ID、PW入力の知識情報）からセキュリティ強化
　従来：貸与PCから、社内システムにIDとPW入力してサインイン
　問題：IDとPW、つまり知識情報がばれれば、容易に不正アクセス可能
　課題：認証が１要素のみ。
　対策：多要素認証にする

本問題では多要素認証として、貸与PCにディジタル証明書を入れている。
知識情報のみ→知識情報＋所持という認証方式に変化している。
仮にIDとPWが流出しても、本人が所持している貸与PCからしかサインインできない。

※さらに認証強化するなら、貸与PCのカメラで顔認証にするとかがある。
　知識（ID+PW）+所持（貸与PCを持つ）+生体（本人の顔）の３要素になる。

・ディジタル証明書でなぜ本人確認できるか？
　詳細は割愛。　ググればいっぱい記事でてきます。
　①本人（貸与PC）しか持っていない秘密鍵で送るものを暗号化
　②平文と暗号化したものを相手に送る
　③相手は公開鍵で解号
　④平文と解号したものが合致すれば、改ざんなし、かつ、本人と判明する。

・どうやって運用していくか？　←実務の問題
　ディジタル証明書を申請して、配布して、終了というわけにはいかない。
　実際の世界では貸与PCを紛失することもあるし、従業員が不正をしようとすることもある。
　それをどうやって防ぐのか？が大事。

問題：貸与PCが紛失した
対策：端末管理者（例えばチームリーダ）がシステム管理者に申請して、ディジタル証明書を失効させる。
　　　失効させる権限を紛失した人ではなく、端末管理者にするのが大事。（無くした人が申請できることは稀だし）

問題：従業員が私用端末にディジタル証明書を入れる
対策：発行した証明書が貸与PCに入っているかを確認する。
　　　ダサいやり方はエクセルの管理簿で逐一、管理する。
　　　イケてるやり方はMDMとかでシステム→貸与PCにプッシュする。
　　　上記問題は貸与PC←システムというプル形式がよくない。

問題：利用停止したディジタル証明書を更新して新しいものを発行してしまう人的ミス。
対策：CRL(:Certificate Revocation List)、つまり、失効リストにあれば更新不可能にする。
　　　OSCP(:Online Status Certificate Protocol)で常に失効リストを確認しておくのが常套手段。
How AI Could Empower Any Business

今日はこの記事(動画？)を見ました。
Andrew Ng氏のTED

https://landing.ai/how-ai-could-empower-any-business/?utm_campaign=mv_blog_andrew_ted&utm_source=linkedin&utm_medium=organicsocial&utm_content=blog_andrew_ted

【要約】
・識字率の向上が社会の成長に貢献してきたように、AIの普及が社会の成長に繋がる。
・今はまだ、一部のビッグテック企業やAIエンジニアだけがAIを使いこなし、一般人は彼らのシステムを利用しているだけの状態。
・地元のお店や小さな企業は、過去のデータを十分に活用できていない。
・AIは適切なデータがあれば、パターンを見つけるのが得意
・簡単にAIシステムを構築できるようなプラットフォームが出始めているので、誰もが特定のニーズに合ったAIシステムを構築し利用できる世界が近づいてきている。

【感想】
　AIが流行りだしてしばらく経つが、結局まともにビジネスとして成立するレベルで利用できるのは一部のテック企業だけ、というのは肌感覚で感じていた。
　自分みたいな一般人にとっては、小規模な組織(少ないデータ)でどうやってAIを活用するかが重要なので、今回のようなテーマは興味があった。
　個人的には識字率の例えが面白かった。人々は読み書きが出来るようになり、簡単に情報を入手したり発信できるようになった一方で、情報過多の現代では人間の理解が追い付かなくなってきているので、やはりAIの使い方やCS/DSのスキルが重要になっていくと思った。
Firebase Firestore Flutterでの環境設定

`Firebase`のプロジェクトを作成したら、[Firebaseコンソール](https://console.firebase.google.com/?hl=ja)で`Cloud Firestore`に移動し、ワークフローに従って開始モードの選択(`テストモード`or`ロックモード`)→[ロケーションの設定](https://firebase.google.com/docs/firestore/locations?hl=ja#types)→`完了ボタン`の順に進めて頂いたら、

**1.**[FlutterとFirebaseの初期化と紐付け](https://qiita.com/ume-bar/items/fb5162b21d95e0c0bc42)
**2.プラグインのインストール**
```
flutter pub add cloud_firestore
```
**3.`flutter run`で再ビルド**
**4.`CocoaPods`が`1.9.1`以降にアップグレードされているか確認。**
```
gem install cocoapods
```
**5.**[パッケージの追加](https://pub.dev/packages/cloud_firestore)
```pubspec.yaml
dependencies:
  flutter:
    sdk: flutter

  cloud_firestore: ^X.X.X

```
**6.`iOS`のエラーが出ていなければインスタンスを初期化し使用可能。**
```dart
import 'package:cloud_firestore/cloud_firestore.dart';

final db = FirebaseFirestore.instance;
```
**それではいくつかメソッドを紹介していきます。**
![スクリーンショット 2022-09-30 16.39.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1134006/fdef73aa-0956-dda5-33b2-b0b87d07a151.png)
**こちらのボタンから`("dbs")`コレクションを作成し、**
## データを追加(`.add( )`)

```dart
import 'package:cloud_firestore/cloud_firestore.dart';
// Firestoreの("dbs")コレクションを参照
final db = FirebaseFirestore.instance.collection("dbs");

// 別で作成したStopWatchオブジェクトをもとにデータを入れ保存
Future<String> createTimer(String uid, StopWatch db) async {
  final timer = await db.add({
    "uid": uid,
    "category": db.category,
    "minutes": db.minutes,
    "startedAt": DateTime.now(),
  });
  return timer.id;
}
```
## 追加したデータを取り出す(`.get( )`)
```dart
Future<StopWatch?> findTimer(String id) async {
  final timer = await dbs.doc(id).get();
  if (!timer.exists) return null;
  return StopWatch(
      category: timer['category'],
      minutes: timer['minutes'],
      startedAt: (timer['startedAt'] as Timestamp).toDate());
}
```
## データの上書き(`.update( )`)
```dart
Future<void> updateTimer(
    String id, num minutes, DateTime startedAt, String category) async {
  await dbs.doc(id).update(
      {'category': category, 'minutes': minutes, 'startedAt': startedAt});
}
```
## データの削除(`.delete( )`)
```dart
Future<void> deleteTimer(String id) async {
  await dbs.doc(id).delete();
}
```
と、まだまだ[ドキュメント](https://firebase.google.com/docs/firestore/query-data/order-limit-data?hl=ja)を読むと色々な組み合わせで応用できます。
rex0220 計算式プラグイン ボタンクリックで日付設定

[計算式プラグイン](https://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)で、ボタンを表示して、ボタンクリックで日付項目を設定してみます。
追加・編集画面で、スペースエリアに設定ボタンとクリアボタンを表示します。

# 概要

計算式プラグインでヘッダー部・スペースエリアに計算式を指定して、ボタン表示できます。
レコード追加・編集画面でボタン表示されます。
今回は、日付項目に翌月末をセットとクリアするボタンを表示してみます。

![2022-10-01_16h17_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/7b2f4b62-424a-099b-4c2c-6706c088a561.png)

# ボタン操作例

![2022-10-01_17h00_20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/b5946939-96d7-513f-5a4f-9cd020cba651.gif)

# スペース項目の設定

フォーム設定画面で、スペース項目を２個追加し、要素ID （SP1, SP2）を設定
![2022-10-01_17h02_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/b87ad136-cc1e-f110-5b86-5a52ccb96270.png)


# 計算式プラグインの設定

スペース項目に、ボタン表示の計算式を設定
![2022-10-01_17h07_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/8e270e69-ba33-bfc0-6121-b1d3229ff0a5.png)

- SP1: 翌月末設定ボタン

```
BUTTON(
BOPT("TITLE","翌月末",
"CSS","{'color':'blue',
'background-color':'#ff9800',
'box-shadow':'inset 1px 1px 1px #c7bbaa',
'min-width':'auto'}"),
FSET(翌月末,
DATE_ENDOF(
DATE_ADD("TODAY",1,"month"),"month")))
```

「翌月末」をボタン表示
ボタンクリック時に、当日の翌月末を計算
CSS は、ボタンの色や大きさを調整

- SP2: 翌月末クリアボタン

```
BUTTON(
BOPT("TITLE","クリア",
"CSS","{'color':'blue',
'background-color':'lightgray',
'box-shadow':'inset 1px 1px 1px #d1cdcd',
'min-width':'auto'}"),
FSET(翌月末,""))
```

「クリア」をボタン表示
ボタンクリック時に、当日の翌月末をクリア

# ボタン設定の応用

日付項目だけでなく、いろいろなタイプの項目を設定できます。
またFSET 関数を並べることにより、一度に複数項目の設定もできます。
【PC】Windows10の管理者アカウントのパスワード変更


Microsoftアカウントに紐づいていたWindowsの管理者のパスワード変更は少しめんどいので、備忘として手順を記載します。

### 背景
自身のパソコンは管理者アカウントでログインして使っていましたが、未だにパスワード認証となっています。このままだとパスワードが漏れると第三者に容易に使われてしまうため、パスワード変更を行います。


Windowsのローカルアカウントのパスワードは、Microsoftのアカウント設定で、変更することができるのに対して、
管理者アカウント（Administrator）権限を要するユーザが、Microsoftのアカウント設定が入っている場合は、パスワード変更は変更できません。そのため一度ローカルにしてからMicrosoftアカウントを再設定するという手順を行います。

### 手順
* ローカルアカウントへの切り替え 画面
もともと管理者アカウントがMicrosoftアカウントと紐づいている場合は下記の通りローカルアカウントへの切り替えを行います。
    * コントロールパネル→ユーザアカウント→ユーザアカウントを選択し、「PC設定でアカウントを変更」を選択します。
    * 注意点の記載が出るので以下の点を確認したら「次へ」を選択します。
        * Microsoftアカウントのユーザ/パスワード等ログイン情報はあらかじめ把握している前提。
        * 個人用情報が表示されなくなる旨が表示されることを承知のうえ、「次へ」を選択します。
    * 現在の管理者アカウントのパスワードを入力し、「次へ」を選択します。
    * ローカルアカウントへの切り替えで、新しいパスワード入力が表示されるので、設定したいパスワードに変更します。必要があればパスワードのヒントも入れて、「次へ」を選択します。
    * 「サインアウトと完了」を選択し、管理者アカウントをサインアウトします。
* Microsoftアカウントを再関連づけ
    * Microsoftアカウントへの切り替えを行います。ここではログインしてから、設定したローカルアカウントのパスワードを入力するのみで設定が完了できます。

### あとがき
* Microsoftアカウントを関連づけしなくても、ローカルアカウントで管理者アカウントを使用することもできますが、Windowsストアアプリを使用できるうえ、ファミリー機能も使えるので、1つのPCを複数人で共用してWindowsを使用する場合に向いているかと思います。

参考：https://blog.treedown.net/entry/2020/06/23/010000