OmniAICreator/Qiita-1.07M huggingface dataset:
Flutter（retrofit/freezed）$flutter pub run build_runner build時のエラー

# 概要
タイトルにある通りです。
FlutterでAPIからデータをとってきたかったので、モデルファイルなど自動生成できる
[retrofit](https://pub.dev/packages/retrofit) / [freezed](https://pub.dev/packages/freezed)などのパッケージを使おうとしましたが、retrofit側で依存関係のエラーが発生するので備忘録として記載しておきます。


## 環境
MacOS Monterey 12.4
Flutter 3.0.2
Dart 12.7.5

## バグの発生条件
### 対象パッケージ
```pubspec.yaml
dependencies:
  json_annotation:
  retrofit:
  dio:
  freezed: <- 対象


dev_dependencies:
  build_runner:
  json_serializable:
  freezed_annotation:
  retrofit_generator: <-対象
```

### 発生するエラー
自動生成するコマンド`flutter pub run build_runner build`を実行したら以下エラーが発生します。
```
[INFO] Generating build script...
[INFO] Generating build script completed, took 174ms
[INFO] Initializing inputs
[INFO] Reading cached asset graph...
[WARNING] Throwing away cached asset graph because the language version of some package(s) changed. This would most commonly happen when updating dependencies or changing your min sdk constraint.
[INFO] Cleaning up outputs from previous builds....
[INFO] Cleaning up outputs from previous builds. completed, took 6ms
[INFO] Generating build script...
[INFO] Generating build script completed, took 34ms
[WARNING] Invalidated precompiled build script due to missing asset graph.
[INFO] Precompiling build script......
[WARNING] ../../.pub-cache/hosted/pub.dartlang.org/freezed-2.0.4/lib/src/tools/type.dart:27:16: Error: The getter 'imports' isn't defined for the class 'PrefixElement'.
 - 'PrefixElement' is from 'package:analyzer/dart/element/element.dart' ('../../.pub-cache/hosted/pub.dartlang.org/analyzer-3.4.1/lib/dart/element/element.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'imports'.
      return e.imports.any((l) {
               ^^^^^^^
[INFO] Precompiling build script... completed, took 557ms
[SEVERE] Failed to precompile build script .dart_tool/build/entrypoint/build.dart.
This is likely caused by a misconfigured builder definition.
```

### 推定される原因
それぞれ登場するパッケージが依存している、[analyzer](https://pub.dev/packages/analyzer)パッケージのバージョンが揃わないことが原因と推測されます。

### 解決法
`pubspec.yaml`に以下を追記
```pubspec.yaml
dependencies:
  analyzer: 4.2.0

dependency_overrides:
  analyzer: ">=4.2.0 <5.0.0"
```

### 参考Issue
https://github.com/rrousselGit/freezed/issues/700

以上です。
Flutterのバージョンが3になったばかりなので少しこういう不具合は継続するかもしれません。
qiitaの記事作成について調査

これからqiitaにて記事を投稿していくため、記事の作成方法についてまとめておく。

# 見出しの作り方
見出しにしたい文字列の前に#と半角スペースをつける

```
# 見出し
```

# コードの載せ方
バッククォーテーション３つでくくる
```
　```
　コード
　```
```

# 画像の載せ方
```
### ![画像](url)
```

# リンクの載せ方
```
### [リンク](url)
```

# 注釈の付け方
```
注釈にしたい単語[^1]
[^1]: 単語の説明
```
例
注釈にしたい単語[^1]
[^1]: 単語の説明


# 引用の仕方
　>
を記述することで引用。
　>>
と二つ書くことで二重引用。

# ボールド体
**ボールド**
```
**ボールド**
```

# イタリック体
_イタリック_
```
_イタリック_
```

# 打ち消し線
~~打ち消し線~~
```
~~打ち消し線~~
```

# 色コード（RGB16進数表記）
`#FFFFFF`
```
`#FFFFFF`
```
Laravel の vite の css から public/assets を絶対パス参照させる 

## やりたいこと
laravel的な環境で `app.scss` から `/assets/logo.jpg` を絶対パス参照したい
```:ディレクトリ構成
www/
  public/
    assets/
      logo.jpg
  resouces/
    css/
      app.scss
  vite.config.js
```

## こうしました
rootに assets をシンボリックリンクしました。

```bash
$ cd www
$ ln -s public/assets
```

これで `npm run dev` 時も、`npm run build`時も、画像を参照できます。
```css:app.scss
div {
  background: url("/assets/logo.jpg")
}
```

## これは避けた

```js:vite.config.js
resolve: {
    alias: {
        "@": `${__dirname}/public/`, // url("@/assets/logo.jpg")で参照する
    },
}
```
こんな感じに参照しようとすると、build時に、参照画像を public/build/ 内にcopyしちゃいます。これはやだったので、やめました。

もっとよいやりかた、どなたか教えてください！！
Babylon.jsのImportMesh備忘録

# PlayGroundで外部のglbをimportする場合

PlayGroundを用いるとき外部のAssetデータの取得は、corsの設定により特定のドメインから出ないとできないようになっている。
その解決の一例として、GithubにAssetデータを置き、取得する方法を考える。

## 参考資料
- https://doc.babylonjs.com/toolsAndResources/tools/playground/externalPGAssets

## 【解決策】 github.comから使う場合、using raw.githubusercontent.comを用いる

**手順**

- Githubのレポジトリが **public** であることを確認
- 例えば `https://github.com/BabylonJS/MeshesLibrary/blob/master/PBR_Spheres.glb` にアップロードしたとする
- ここからImport用のURLを生成する
    - `/blob/` 部分を取り残し、
    - `https://github.com`を`https://raw.githubusercontent.com`に書き換える
- `https://raw.githubusercontent.com/BabylonJS/MeshesLibrary/master/PBR_Spheres.glb`で完成

使い方

```javascript
BABYLON.SceneLoader.ImportMesh("", "https://raw.githubusercontent.com/BabylonJS/MeshesLibrary/master/", "PBR_Spheres.glb", scene);
```
Windows wsl2でSailを使ってLaravelをインストール後、BreezeでReactの導入をした時のエラー

# 経緯
これに従ってLaravelをインストールし、
https://laravel.com/docs/9.x/installation#getting-started-on-windows

これに従ってReactをインストールし、
https://laravel.com/docs/9.x/starter-kits#laravel-breeze

`npm run dev`実行後、[http:localhost](http:localhost)にアクセスすると真っ白の画面となり、コンソールには
`Failed to load resource: net::ERR_ADDRESS_INVALID 0.0.0.0:5173/@vite/client:1`
というエラーが出ていました。自分用のメモ程度ですが、解決策を示しておきます。

# 解決策

原因は、Githubのissueの中で見つかりました。https://github.com/laravel/vite-plugin/issues/28

こちらに従って、`npm run dev`実行後、public/hotのファイルの`0.0.0.0`
を`localhost`に変更することで解決しました。

こちらLaravel9自体のバグらしく、次のアップデートで解決されるようです。
https://github.com/laravel/vite-plugin/pull/42
保存している.emlファイルから添付ファイルを取り出す

## 概要
MailBoxから取り出している最中に添付ファイルを取り出す方法はネット上にありましたが、
保存している.emlファイルからの手順がなかなか見つからなかったので書いときます。

```vb:VB.NET
Imports MimeKit 'NugetでInstall-Package MimeKit -Version 3.3.0

        Dim folderName As String = "C:\temp\INBOX\"
        Dim infileName As String = "hoge.eml"

        Dim message As MimeKit.MimeMessage = MimeMessage.Load(System.IO.Path.Combine(folderName, infileName))

        For Each attachment In Message.Attachments
            'MimePartにある添付ファイルを取り出す
            Dim part As MimeKit.MimePart = CType(attachment, MimePart)
            Dim fileName = part.FileName

            'ファイルへ書き出す
            Using stream = File.Create(System.IO.Path.Combine(folderName, fileName))
                part.Content.DecodeTo(stream)
            End Using
        Next

```
転職に向けての学習マップ

# これからの学習について

WEBエンジニアになるための基礎学習

# 現在のスキル
【資格】
　・JavaGold
　・基本情報技術者
【会社での経験】
　・ウォーターフォール開発/マスタメンテナンス/人材マッチング（要件定義外部設計・内部設計・コーディング・単体テスト・現新チェック）
　　　・要件定義（機能要件・非機能要件（可用性：冗長化など））
     ・外部設計（画面遷移図・CRUD図・画面モックアップ（マイグレーション作業））
　　　・内部設計（コンポーネント定義書・詳細設計書・結合項目定義書・クラス仕様書・サービス定義書）
　　　・コーディング（Angular・Java・Typescript・HTML・SCSS）
　　　・単体テスト（MAURA・Ant）
　　　・現新チェック（現：VBA、新：Angular・Java・javascript・HTML・CSS）
　・GITによる共同開発（コミット・プッシュ・プール・マージ・プルリク）
　・機械学習/チャットボット開発（データクレンジング「Knime」/形態素解析エンジン「MeCab」/機械学習アルゴリズム「Doc2Vec」/分析ツール「KHCoder」/可視化ツール「TensorBoard」）
　・WEBアプリ開発（Java・サーブレット/Jsp/tomcat）
【個人での経験】
　・SQL（ORACLE MASTER Oracle Database 12c）
　・スッキリわかるシリーズ（入門・実践・サーブレット・pythonによる機械学習）
【経験言語】
　・Typescript
　・Java
　・HTML/CSS
　・Angular（フレームワーク）

# 学習予定のスキル
学習の心構えとして、基礎をきちんと理解することを重視していきたい。これは自らの経験で大学受験の際、基礎を重視して勉強することで1年で偏差値を２５上げることができたからである。しかし、大学受験と比べるとITの分野は膨大であるため、ある程度学習範囲を絞って学習していく。
【Linux】
　・Linux標準教科書
　・Udemy
【javascript】
　・youtubeを参考にアプリ開発（todoアプリ・へびゲーム）
【python】
　・youtubeを参考にアプリ開発（業務効率化・機械学習・データスクレイピング）
【フレームワーク】
　・Django
【セキュリティ】
　・徳丸本
【テスト自動化】
　・CICD
【インフラ】
　・AWS
　・heroku
【管理ツール】
　・Docker
IEEE754の形式例とバイアス値

浮動小数点数の形式のもう一つの表現がある。
一桁部分が１になるようにする。
バイアスという補正を使い、指数にマイナスが出ないようにする。
(大小関係をわかりやすくするために)

### 例　0.011の場合
これを```1.1^-2```(基数は２)にする。

これをIEEE754の形式で表現すると
* 仮数部の符号は```正```なので```0```
* 指数部は```-2```なのでこれにバイアス(127)をかけて１２５にする。２進数に直して```01111101```にする。
* 仮数部は１なので```100...000```にする。

以上によって```001111101100...000```(32ビット)になる。

```-5.625```を８ビット２進数で表せ。
```-0.5625^1```になる。
* 符号は```負```なので```1```
* 指数部は
```
* irb(main):252:0> 2*0.5625
=> 1.125
irb(main):253:0> 2*0.125
=> 0.25
irb(main):254:0> 2*0.25
=> 0.5
irb(main):255:0> 2*0.5
=> 1.0
```
指数部は```1001```
```1```
* 仮数部は
.
.
.
わからない

## 解説を見た。
```-5.625```２進数で表示させる。
５を```1001```
0.625を```101```
指数はないので```0```
符号をつけて全てを足すと```10011010```になる。

## 0.25を正規化し、浮動小数点型式で表示させよ。
符号は正なので０
仮数は２５なので01
指数は−１なので1111

```0111110...0```になる
これは正解した。
VirtualBox上のWebサーバにつながらないときに調べること

VirtualBox上にCentOSを入れてApacheを起動させてWebシステムの開発をおこなっているのですが、時々ちょっとサーバの設定を変えると親マシンから接続できなくなることがあります。

いつも、問題点を洗い出すのに苦労するので調査すべきポイントをメモしておこうと思います。

# Apacheの状況を確認する
まず疑うべきは子マシンでのApacheの稼働と設定の問題です。
Apacheに問題がないならば、子マシン内からは正常にアクセスできるはずです。
VirtualBoxで子マシンの画面を開いてFirefoxでアクセスして問題ないかをまずは確認します。
子マシンでもうまく画面表示されないなら、以下を確認します。

* Apache自体は稼働しているか？
```
$ service httpd restart
```

* /etc/httpd/conf/httpd.confなど設定ファイルに誤りがないか？

* Apacheのアクセスログ、エラーログ(/etc/httpd/logs/)を確認

# 親マシンと子マシン間のネットワークの問題
Apacheに問題ないとなると次に疑うべきはネットワーク周りです。
ping,dig,ipconfigなど使えるツールはいろいろありますが、私はnmapをインストールして調べています。
nmapコマンドで目的のポートが空いているかどうかを確認します。

```
$ nmap [子マシンのIPアドレス]
```

通常であれば、80ポートが開いていればnmapにより"80/tcp   open  http"と表示されるはずです。
表示されないようであればネットワーク周辺の設定がおかしい可能性が高いです。
以下を調査します。
* SELinuxでブロックされていないか？
CentOSではデフォルトでSELinuxが有効になっているので、試しに無効にしてアクセスできるようになるかを確認します。
```
$ setenforce 0
```

* firewall-cmdを確認
次に子マシンのFirewallの設定を確認し、80ポートがブロックされているようであれば開放します。
```
$ firewall-cmd --list-all
```

* 親マシンでVirtualBoxのポートフォワーディング設定を確認
親マシンのVirtualBox上で子マシンの「設定」->「ネットワーク」でNATを設定しているネットワークを開き、「ポートフォワーディング」を確認します。
私は基本的に80 -> 80ポートのポートフォワーディングをおこなっています。

# CentOSの再起動
これらを調べてみて問題ないようであれば、一度CentOS自身を再起動してみましょう。
私はこれで治ったことがあります。
個人開発で２つウェブサービスをリリースしたので少しだけ宣伝

**@kenmaro**です。
普段は主に**秘密計算、準同型暗号などの記事について投稿しています**。
秘密計算に関連するまとめの記事に関しては以下をご覧ください。

> - [秘密計算エンジニアを始めて２年半が経った。](https://qiita.com/kenmaro/items/48059dd60f79e80f5ef8)
> - [秘密計算エンジニアを始めて3年が経った。](https://qiita.com/kenmaro/items/a1d90a074d552b7bf886)

## 概要

今回は、個人開発として２つウェブサイトをリリースしましたので、
それについて少しだけ宣伝しようと思っています。

リリースしたのは、

- ブログプラットフォーム「Protohub」

https://protohub.tech

- ダイビングスポット口コミプラットフォーム「ダイビングイクンゴ」

https://diving-ikungo.com

です。

## システム構成

https://qiita.com/kenmaro/items/748abcc61e2b1a1e732f

システム構成については、以前記事を書きました。
今回はVercelについてもとっぱらい、全てECSで運用するようにしました。

## それぞれのサービスへの想い

「Protohub」については、

https://qiita.com/kenmaro/items/368d3c597ec418c7d987

こちらに記事を書かせていただきました。


「ダイビングイクンゴ」については、
口コミサイトについて作ってみたかったので作ってみました。
こちらについてはモバイルでのレイアウトには対応していないので、ぼちぼちやろうかと思っています。



## まとめ

今回は、個人開発のリリースについてただ書いてみました。

これからも何かを作って世の中にとりあえず出してみる、
みたいなところは継続していきたいと思っています。
個人開発まあ頑張ろうと思います。


今回はこの辺で。


@kenmaro
Material / Material3 テーマ デフォルトカラーの色味を AndroidStudio で確認する


記述によっては、エディタの左側に表示されませんね。

![スクリーンショット 2022-07-11 11.28.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/6d007b8c-556a-800b-5097-3492e97350c1.png)

地道な作業で整理して書いて色目を見ます。

![スクリーンショット 2022-07-11 12.08.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/45813309-5f4a-ebfb-0dc1-10389d653c09.png)

![スクリーンショット 2022-07-11 12.17.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/b3495b90-e70b-d241-3f5a-d5ca72e44d0e.png)

色って視覚的に記憶するの難しくないですか?
<a href="https://android.benigumo.com/20220711/default-theme-color/" target="_blank" rel="noopener">👉 テーマデフォルトの色 (baseline palette) を確認する【AndroidStudio】&nbsp;<img src="https://b.hatena.ne.jp/entry/image/https://android.benigumo.com/20220711/default-theme-color/" alt="hatena-bookmark" /></a>
【MacOSX Montorey】C言語で構造体を引数に渡す際の質問への回答と僕の趣味

# 環境
使用しているIDEは、VSCodeで、コンパイルに用いているのは、以下のものです。

```
%gcc --version
Apple clang version 13.1.6 (clang-1316.0.21.2.5)
Target: arm64-apple-darwin21.5.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
```

では、本編行きましょう！

# Q質問
些細な質問なんですけど、関数の中身で構造体の要素の一つしか使っていない場合の関数の引数は、構造体そのものを渡す方がいいですか？それとも構造体の要素だけを渡す方がいいですか？

# A回答
値渡し（コピー）かポインタ渡し（先頭アドレス）かによって変わってくるような気がしますが、
要素の1つだけなら値渡し（コピー）でもポインタ渡し（先頭アドレス）でもあまり変わらないような気がします、という結論からお伝えしておきますねー。


# C言語の構造体を引数に渡す際の僕の趣味
僕の趣味は、構造体の先頭アドレスを渡す方法が好きですね（え、聞いてない）。関数の中身で構造体の要素の一つしか使っていない場合とはかけはなれた場合の話になってしまいますが・・・。

# 【理由】
関数に行数制限がある場合、処理の途中で分割することがあります。

構造体の先頭アドレスを渡しておいて、なおかつ構造体の要素にwhileループ用のインデックス変数（例i,j,kなど）を含めておけば、例えばwhile２重ループの中で関数を分割して、分割した関数に構造体のアドレスだけ渡しておけば、引き続き、インデックスを反映させた処理を行えますね。

# 【注意点】
ただし、注意としては、分割した関数の中でインデックスを初期化しちゃうとバグになるという欠点がありましたね。なのでもしかしたら、インデックスは構造体に含めず、ちゃんと引数に記述したほうがバグが起こりにくいかもしれません。

しかし、構造体だけ引数にかけば全部引き継がれるのがすごくきれいでシンプルで「楽」で僕は好きです。

長ったらしくごめんなさい。ここまで読んでくれてありがとうございます！

以下、参考サイトと引用。
https://9cguide.appspot.com/16-02.html
>普通に渡すことができる構造体を、ポインタ変数として渡す理由の
1つ目は、普通のポインタ変数と同じく、関数内で値を変更できるようにするためです。
ここでは試していませんが、関数内で値を変えると呼び出し元の変数の中身も変わります。

>2つ目は、関数呼び出しの高速化のためです。
構造体を渡す時、その中身はすべてコピーされます。
構造体の中に、大きな配列があれば、その中身までまるごとコピーされます。
これは、当然ながらそれなりに時間のかかる処理となります。
しかし、ポインタのアドレス値を渡すだけなら、非常に高速です。

>しかし、現代のコンピュータはとても高速なので、値渡しであっても、それほど問題にはなりません。
慣れないうちは、値渡しのほうが扱いやすいため、値渡しで行うことをおすすめします。
バージョン管理に入れるものについて話そうとした時に描いた図

バージョン管理システムには、ソースコードやビルドセットは格納するけれど、バイナリやデータは格納したくない旨を説明する時に描いた図です。
パラメーターの発生源が不確かなので、もう少し精査する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2210265/215d334a-3aaa-2593-92a4-f8b953f07f37.png)
Octave で符号検定

# Octave で符号検定

対応のある 2 標本の代表値の差の検定である。

    usage:
     [pval, b, n]  = sign_test (x, y, alt)
    
    x, y はデータベクトル
    alt はデフォルトで両側検定 "!="，片側検定は，帰無仮説が「y > x の確率が 0.5 より大きい」なら ">", その逆なら "<" で指定
    戻り値を指定しない場合は p 値のみを表示する



```matlab
pkg load statistics   % statistics が必要
format long           % 表示精度を高くする（任意）
```


```matlab
x = [49.6; 52.5; 48.3; 50.6; 56.7; 32.8; 51.6; 46.1; 54.6; 52.0; 39.3; 49.5; 45.1; 37.1; 63.9;
     48.3; 37.4; 33.4; 37.8; 51.2; 63.0; 74.3; 54.4; 60.1; 55.6; 61.2];
y = [48.7; 36.8; 51.9; 65.5; 62.6; 57.3; 43.3; 57.7; 61.4; 69.8; 48.0; 37.1; 29.8; 53.6; 49.3;
     50.2; 46.1; 50.6; 51.4; 61.0; 50.8; 51.7; 52.4; 57.3; 55.4; 62.6];
median(x), median(y)
```

    ans = 50.90000000000001
    ans = 51.80000000000000



```matlab
sign_test(x, y);
```

      pval: 0.557197



```matlab
[pval, b, n] = sign_test(x, y);
printf("b = %.5g,  n = %d,  p value = %.5g\n", b, n, pval)
```

    b = 11,  n = 26,  p value = 0.5572



```matlab
[pval, b, n] = sign_test(x, y, "<");
printf("b = %.5g,  n = %d,  p value = %.5g\n", b, n, pval)
```

    b = 11,  n = 26,  p value = 0.7214



```matlab
[pval, b, n] = sign_test(x, y, ">");
printf("b = %.5g,  n = %d,  p value = %.5g\n", b, n, pval)
```

    b = 11,  n = 26,  p value = 0.2786
AlibabaCloud（中国サイト）でWindowsServerとSQLServerのライセンスをBYOLで利用する

# 1.Cloudに持ち込みたいWindowServerのライセンス  
Select Plus
・WinSvrSTDCore 2022 SNGL
・SQLSVrStd 2019 SNGL
・SQLCAL 2019 SNGL MVL UsrCAL

# 2.阿里云のレギュレーション

前提としてAlibabaCloudのECSで利用するWindowsServerのライセンス料金は無料です。

微软许可证与软件保障
https://help.aliyun.com/document_detail/425603.html

ドキュメントを見るとどうやらSA「Software Assurance」のオプションが無いライセンスは
利用できないようです。

Microsoft Select Plusは標準でSAが付いていないので、追加する必要があります。

# 3.ベアメタルサーバーでの利用
どんなライセンスでもベアメタルサーバーであれば利用可能、と記載がありますが
注意書きに「2019年10月1日以前に購入したものに限る」と書いてあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263462/d3c86ea1-ee3d-e29e-bd96-3ad3de584e7e.png)
新しく購入したものは利用できないようです。

# 4.ライセンスモビリティー申請
BYOLのライセンスを持ち込んだ後に、以下を申請する必要があります。

申请许可移动性
https://help.aliyun.com/document_detail/425604.htm?spm=a2c4g.11186623.0.0.42c25ab2qyLAJo#task-2198043

AlibabaCloudはMSのライセンスモビリティーパートナーに認定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/263462/7ed81d15-9d1b-a242-7e74-66cb2b267ade.png)

https://download.microsoft.com/download/7/9/b/79bd917e-760b-48b6-a266-796b3e47c47a/authorized_mobility_partners.pdf 

そもそもこのライセンスモビリティーパートナーの運営するプラットフォームにWindowsServer、Windows10、Officeなどのライセンスは持ち込めないようです。

WindowsServerについてはモビリティパートナーから提供されるライセンスもしくはSPLAをご利用ください。
【Azure Automation】Runbook の実行時エラー「RunAsAccount not found. To create this RunAsAccount...」の対処方法

# 前置き

Azure VM の自動起動を設定したく、Azure Automation アカウントを作成しました。
Runbook はギャラリーから「Start Azure V2 VMs」を参照しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23789/38051276-c82e-1aad-a76f-0e8f3c767b4e.png)

# 現象

`Automation > Runbook の編集 > テストウィンドウ > 開始`を行うと以下のようなエラーが発生しました。

```
RunAsAccount not found. To create this RunAsAccount,   
navigate to the RunAsAccount blade and create a RunAsAccount.   
Refer doc for more details (https://docs.microsoft.com/azure/automation/create-runas-account)
```

Azure Automation では現在`マネージドID`を使用してロールを設定する方法が推奨されていて、  
それに従い Automation アカウントではマネージドIDを使用をONにしたのですが…  
RunAsAccount = 実行アカウントを作成しろとはどういうことでしょうか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23789/2dcda970-7b53-9295-b94e-eb227a3f81f2.png)

# 解決

調べたところ、「Start Azure V2 VMs」が マネージドIDを使用するスクリプトになっていなかったようです。  
そのため、Automation の実行アカウントを参照しようとするが未作成のためエラーになっていたということでした。

今回はリポジトリで「Uses Managed Identity instead of RunAs Accounts」と明記していた
「[Simple-Azure-VM-Start-Stop](https://github.com/diecknet/Simple-Azure-VM-Start-Stop)」という Runbook を使用することにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23789/21170251-d66d-5067-0669-2418e14f4930.png)

# 参考

https://docs.microsoft.com/en-us/answers/questions/851073/receiving-39runasaccount-not-found39-with-managed.html
Field Service の基本 > Field Service の有効化とサービスリソースの作成

[Field Service の有効化とサービスリソースの作成](https://trailhead.salesforce.com/ja/content/learn/modules/field_service_basics/field_service_basics_enable)


英語版を見ていると東部標準時間がバラバラに何でいるので探せない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/bb079622-ff62-d87b-a9e4-ba2639ee5705.png)

やっと見つけました。？　 Eastern Daylight Time 　ちがう。夏時間じゃん。でも見つからん。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7c100034-7dfb-a9cf-ce44-49082b2a69e9.png)


# ここまでセットして取りあえず検証ボタンをクリックする

**Jane Cando hasn't been created properly. Be sure to spell her first and last names correctly and select the 'Salesforce' user license and 'Standard' user profile.**

# フィールドサービスリソースの作成 まで実行して取りあえず検証ボタンをクリックする

**Jane Cando hasn't been created properly. Be sure to spell her first and last names correctly and select the 'Salesforce' user license and 'Standard' user profile.**

変わらん。

# ユーザだけ追加してみた。

**Jane Cando isn't tagged as an active Technician. Make sure to select 'Technician' and check 'Active.'**

# お遊び　Service Cloud Userを外してみた。

**Jane Cando isn't tagged as an active Technician. Make sure to select 'Technician' and check 'Active.'**

変わらん。チェックロジックは何を見ているのか？

# サービスリソースを有効化しないで作成。さっきService Cloudを外したからエラーになっている模様

**Jane Cando is not a 'Service Cloud' and 'Knowledge' user. Make sure you've selected both options.**

# まだアクティブにしてないよ。

**Jane Cando isn't tagged as an active Technician. Make sure to select 'Technician' and check 'Active.'**

アクティブにすると完了しました。

-------------------------------------------------------------


[サービスのテリトリーと業務時間の設定](https://trailhead.salesforce.com/ja/content/learn/modules/field_service_basics/field_service_basics_set)


# とりあえず設定途中で検証ボタンをクリックします。

**Could not find Operating Hours of 'Mon-Fri 8am-5pm (West)'.**

# サービスリソースの稼働時間の管理で説明にないスタート時間が必須項目になっているようです？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ce1f1d77-592b-ce94-c8dc-b5ca6c48c61a.png)

# 課題の前にチェック

**Could not find Operating Hours of 'Mon-Fri 8am-5pm (West)'.**

# あれぇ、サクッと設定したらエラーになった。

**Could not find 'Jane Cando' as a territory member of a service territory named 'San Francisco Area'.**

姓と名が逆か？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8dba56d3-1e98-ad23-51d6-a01b226e1cd6.png)

ビンゴでした。逆にしたら無事にクリアーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/c3d45456-060d-f5c3-315d-823f5b8ae460.png)
VSCodeのhtmlのひな形を作成するショートカット「！」がアップデートで使えなくなったぽい

7月のVSCodeのアップデートで「！」で本体ならひな形を作成できるけど使えなくなっていた。

![html071103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525780/4f40b445-af27-da84-25ed-a1ddd3a3dd42.png)
（本来ならショートカット候補がでてき）

<h1>解決方法

![html071101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2525780/c3e30631-8893-1137-ec0c-9161c7d62fff.png)

"html"と打って候補に挙がった"html:5"を選択すればひな形の出来上がり

VSCodeのパッチをざつーに探してみたが見当たらなかった

https://code.visualstudio.com/updates/v1_69


(結構便利だったのになぜ消してしまったのか...)
Octave で独立 2 標本の等分散の検定

# Octave で独立 2 標本の等分散の検定

独立 2 標本の平均値の差の検定の前段階として等分散の検定が行われることがあるが，検定の多重性の問題もあるので，等分散の検定を行わず常に**Welch の方法による t 検定を行うことを推奨する**。

    usage:
    [pval, f, df_num, df_den] = var_test (x, y, alt)
    
    x, y はデータベクトル
    alt はデフォルトで両側検定 "!="，片側検定は，帰無仮説が「x の母分散が y の母分散より小さい」なら "<", その逆なら ">" で指定
    戻り値を指定しない場合は p 値のみを表示する



```matlab
pkg load statistics   % statistics が必要
format long           % 表示精度を高くする（任意）
```


```matlab
x = [49.6; 52.5; 48.3; 50.6; 56.7; 32.8; 51.6; 46.1; 54.6; 52.0; 39.3; 49.5; 45.1; 37.1; 63.9;
     48.3; 37.4; 33.4; 37.8; 51.2; 63.0; 74.3; 54.4; 60.1; 55.6; 49.3; 57.4; 40.4; 57.8; 60.9];
y = [48.7; 36.8; 51.9; 65.5; 62.6; 57.3; 43.3; 57.7; 61.4; 69.8; 48.0; 37.1; 29.8; 53.6; 49.3;
     50.2; 46.1; 50.6; 51.4; 61.0; 50.8; 51.7; 52.4; 57.3; 55.4];
var(x), var(y)
```

    ans = 93.60091954022991
    ans = 82.55943333333333



```matlab
var_test(x, y);
```

    pval: 0.759952



```matlab
[pval, f, df_num, df_den] = var_test(x, y);
printf("F = %.5g,  df = (%d, %d),  p value = %.5g\n", f, df_num, df_den, pval)
```

    F = 1.1337,  df = (29, 24),  p value = 0.75995



```matlab
[pval, f, df_num, df_den] = var_test(x, y, ">");
printf("F = %.5g,  df = (%d, %d),  p value = %.5g\n", f, df_num, df_den, pval)
```

    F = 1.1337,  df = (29, 24),  p value = 0.37998



```matlab
[pval, f, df_num, df_den] = var_test(x, y, "<");
printf("F = %.5g,  df = (%d, %d),  p value = %.5g\n", f, df_num, df_den, pval)
```

    F = 1.1337,  df = (29, 24),  p value = 0.62002
Google Analyticsのdebug


## 1. google-analytics-debuggerのchrome拡張をインストール
https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmfdileelhofjcijamephohjechhna?hl=ja

## 2. 対象のサイトで検証タブを開く
こんな形で、コンソールに送信内容を出力されます！
![CleanShot 2022-07-11 at 15.17.09@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103475/30200411-5bb8-78a0-7828-47e948381996.png)
CRM経験が無かったのでHubspot触ってみた

## 最終的になにをしたか

いきなり結論ですが、今回はもともとやってみたかったETLとの連携はせずになんとなく触ってみたメールテンプレート機能が楽しくて軽く感動したのでそちらの紹介になります。聞き及んではいましたがSaaSって本当に便利ですね。レベル感としては低いものになるかと思いますが悪しからず。

タイトルの通りCRM(そもそもSaaSも経験なかったですが)を触ったことがなかったので簡単に始められそうで無料でできる範囲が広いものを、ということで色々調べていたらAPI周りがシンプルかつ基本的なものは揃っているらしいHubspotCRMが良さそうだったので使ってみました。体験版があるCRM製品自体はたくさんあるのですが、のちのち触ってみたいETL製品であるStitchとの連携を調べていたらHubspotはひとつの選択肢であるようです。また、CRM製品としては社内にSalesforceの知見があるので新規開拓の意味も込めています。

## メールテンプレート

![スクリーンショット 2022-07-11 10.26.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529081/dcc8e643-2a10-f7eb-4235-574af0b1f617.png)
(これはセールス関連のデモ画面ですがこのような視認性の高い画面がローコードでつくれることにまず感動しました)

Hubspotはノーコード開発というよりも最終的にはエンジニアが触ることを前提で作られているらしくノーコードで全部、というわけにはいかないようですが少なくとも体験版の範囲ではコードを書くことなくチュートリアルに従うだけで重要な機能は全て自分で感触を確かめられます。

今回はそのうちのひとつであるメーリング機能について触れていきます。そもそも自分はHTMLメールについての知識が全くなくすべてコードが書かれていると思っていましたがこんな便利な機能があればHTMLの知識すら最低限でいいかもしれません。

![スクリーンショット 2022-07-11 10.30.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529081/bc165932-9cba-edfa-4c96-21fea4dbc3d8.png)
(マーケティング→Eメール)

![スクリーンショット 2022-07-11 11.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529081/6a7ae37f-52ff-4be4-6443-02034b385c5d.png)
こんな感じでドラッグ＆ドロップだけでメールを作成していきます。自動化というなにやら怪しいボタンも見えますがこれは返信など何かトリガーがあった場合に自動でメールを送信するなどの機能です。

ここに関してはチュートリアル無しで自分の好きなようにいじれるので最低限のものをつくりとりあえず自分のアドレスに送信します。無料枠では2500通送れるそうです。

そして受信したのがこちら。

![スクリーンショット 2022-07-11 14.37.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2529081/75d245ce-74d5-d482-89d0-6725f424d3d7.png)

なんかそれっぽい！
制作時間わずか2分です。2分でつくったものを記事にするなよ...という話ですがむしろ2分でそれっぽいメールができるというスピード感に私としては感動しました。実際よほど凝ったメールをつくらないのであればテンプレートを組み合わせるだけで十分かと思います。

## Hubspotを実際に使うなら

Starter、Professional、Enterpriseの3プランがありますがCRM製品としては標準〜やや安いSalesforce Sales Cloudよりもさらに安いです。また、海外では実績も豊富でSalesforceの代替品としては最も人気があるようです。
ただ、上述のように最終的にはエンジニアが開発することを前提につくられているためノーコード開発が目的ならば別の製品を使ったほうがいいかもしれません。
Windowsでdigコマンドを使う

サーバの引っ越しなどで、DNSレコードの中身を把握したい場合、digコマンドは必須かと思います。
ただ、デフォルトでWindowsにはないので設定が必要。
Windowsで使う場合は、以下手順にてインストールして使用します。


①ISCからBINDをダウンロード
https://www.isc.org/download/

新しいものがダメな場合は古いものを使うこと。

②BINDインストール

以下のように設定し、実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2701609/c5c1b38d-ae76-1c0e-c325-dfddb4c2125b.png)


③実行パスの設定

いちいちフォルダを移動して実行するのは面倒なので、パスを設定しておく。
システム環境変数から、Pathという変数の中に以下を追加する。
C:\Program Files\ISC BIND 9\bin
Octave でウィルコクソンの符号付順位和検定

# Octave でウィルコクソンの符号付順位和検定

対応のある 2 標本の代表値の差の検定である。

有効サンプルサイズが 26 以上でなければならない。

    usage:
    [pval, z] = wilcoxon_test (x, y, alt)
    
    x, y はデータベクトル
    alt はデフォルトで両側検定 "!="，片側検定は，帰無仮説が「y > x の確率が 0.5 より大きい」なら ">", その逆なら "<" で指定
    戻り値を指定しない場合は p 値のみを表示する



```matlab
pkg load statistics   % statistics が必要
format long           % 表示精度を高くする（任意）
```


```matlab
x = [49.6; 52.5; 48.3; 50.6; 56.7; 32.8; 51.6; 46.1; 54.6; 52.0; 39.3; 49.5; 45.1; 37.1; 63.9;
     48.3; 37.4; 33.4; 37.8; 51.2; 63.0; 74.3; 54.4; 60.1; 55.6; 61.2];
y = [48.7; 36.8; 51.9; 65.5; 62.6; 57.3; 43.3; 57.7; 61.4; 69.8; 48.0; 37.1; 29.8; 53.6; 49.3;
     50.2; 46.1; 50.6; 51.4; 61.0; 50.8; 51.7; 52.4; 57.3; 55.4; 62.6];
median(x), median(y)
```

    ans = 50.90000000000001
    ans = 51.80000000000000



```matlab
wilcoxon_test(x, y);
```

      pval: 0.353913



```matlab
[pval, z] = wilcoxon_test(x, y);
printf("z = %.5g,  p value = %.5g\n", z, pval)
```

    z = -0.92703,  p value = 0.35391



```matlab
[pval, z] = wilcoxon_test(x, y, "<");
printf("z = %.5g,  p value = %.5g\n", z, pval)
```

    z = -0.92703,  p value = 0.17696



```matlab
[pval, z] = wilcoxon_test(x, y, ">");
printf("z = %.5g,  p value = %.5g\n", z, pval)
```

    z = -0.92703,  p value = 0.82304
OracleでCASE文（条件分岐、if）

# やり方（シンプル）

特定カラムの値が〇〇だったら××、それ以外はNULL。
```END``` をよく書き忘れるから注意。

```sql
SELECT
    CASE 判定対象カラム名
        WHEN 1 THEN '1だよ'
        ELSE NULL
    END AS 判定結果カラムエイリアス名
FROM テーブル名
```

『NULLだったら※※』なら、```NVL()``` ```NVL2()``` ```COALESCE()``` を使うことも検討。

# やり方（WHENが複数）

```sql
SELECT
    CASE 判定対象カラム名
        WHEN 1 THEN '1だよ'
        WHEN 2 THEN '2だよ'
        ELSE NULL
    END AS 判定結果カラムエイリアス名
FROM テーブル名
```

# やり方（CASEで判定対象の指定無し）

```CASE``` の後に判定対象を指定せずに、 ```WHEN``` の中で判定。
（else ifみたいな使い方）

```sql
SELECT
    CASE 
        WHEN 判定対象カラム名1 = 1 THEN 'カラム1は1だよ'
        WHEN 判定対象カラム名2 = 1 THEN 'カラム1は1ではなく、カラム2は1だよ'
        ELSE NULL
    END AS 判定結果カラムエイリアス名
FROM テーブル名
```

# ELSEの省略

```ELSE``` 部分は省略できる。
省略したら ```ELSE NULL``` になる。

でも省略すると **あえてNULL** なのか **ELSE部分の書き漏れバグ** なのか **コレガワカラナイ**。
```ELSE``` は省略しない方がいいかなって思う。

# 注意点（返す型を揃えないと例外）

例えば下記は例外。

```sql:ORA-00932の例外になるSQL
SELECT 
    CASE 数値型のカラム名
        WHEN 1 THEN '1だよ'
        ELSE 数値型のカラム名
    END AS 判定結果カラムエイリアス名
FROM テーブル名
```

```WHEN``` に入った場合は文字列型が返る。
でも ```ELSE``` に入った場合は数値型が返る。
数値型 ≠ 文字列型 なので例外。

# 注意点（誤ったNULL判定その1）

補足として、 ```SUBSTR(NULL, 1, 1)``` の結果はNULL。

```WHEN IS NULL``` と書いてしまうパターン。

例えば下記は例外。

```sql:ORA-00932の例外になる誤ったSQL
SELECT 
    CASE SUBSTR(NULL, 1, 1) 
        WHEN IS NULL THEN 'NULLだよ' 
        ELSE 'NULLじゃないよ'
    END AS test
FROM テーブル名 
```

# 注意点（誤ったNULL判定その2）

```WHEN NULL``` と書いてしまうパターン。
この場合、 **例外にならない（Oracle側でストップがかからない）のでバグになる可能性大** で危険。

```sql:必ず『NULLじゃないよ』の結果になってしまう誤ったSQL
SELECT 
    CASE SUBSTR(NULL, 1, 1) 
        WHEN NULL THEN 'NULLだよ' 
        ELSE 'NULLじゃないよ'
    END AS test
FROM テーブル名 
```

# NULL判定したい時

```sql:こうやる
SELECT 
    CASE  
        WHEN SUBSTR(NULL, 1, 1) IS NULL THEN 'NULLだよ' 
        ELSE 'NULLじゃないよ' 
    END AS test
FROM テーブル名 
```

# CASEで判定するカラムの値がNULLの場合の補足

カラム名の値がNULLのレコードは『01じゃないよ』になる。
NULLは『01』ではないからELSE句の値が返る。
当たり前といっては当たり前だけど…。

```sql
SELECT 
    CASE カラム名 
        WHEN '01' THEN '01だよ' 
        ELSE '01じゃないよ' 
    END AS test
FROM テーブル名
```

# 単純なNULL置換をしたいだけなら

https://qiita.com/waokitsune/items/08d955741783f31eb31d

# 参考サイトさん

https://segakuin.com/oracle/sql/case.html

https://hensa40.cutegirl.jp/archives/938

# バージョン

Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
Octave でマン・ホイットニーの U 検定

# Octave で独立 2 標本の代表値の差の検定（マン・ホイットニーの U 検定）

独立 2 標本の代表値の差の検定は，ノンパラメトリック検定である「マン・ホイットニーの U 検定」で行う。

    usage:
    [pval, z] = u_test (x, y, alt)
    
    x, y はデータベクトル
    alt はデフォルトで両側検定 "!=", 片側検定は，帰無仮説が「y > x の確率が 0.5 より大きい」なら ">", その逆なら "<" で指定
    戻り値を指定しない場合は p 値のみを表示する



```matlab
pkg load statistics   % statistics が必要
format long           % 表示精度を高くする（任意）
```

```matlab
x = [49.6; 52.5; 48.3; 50.6; 56.7; 32.8; 51.6; 46.1; 54.6; 52.0; 39.3; 49.5; 45.1; 37.1; 63.9;
     48.3; 37.4; 33.4; 37.8; 51.2; 63.0; 74.3; 54.4; 60.1; 55.6; 49.3; 57.4; 40.4; 57.8; 60.9];
y = [48.7; 36.8; 51.9; 65.5; 62.6; 57.3; 43.3; 57.7; 61.4; 69.8; 48.0; 37.1; 29.8; 53.6; 49.3;
     50.2; 46.1; 50.6; 51.4; 61.0; 50.8; 51.7; 52.4; 57.3; 55.4];
median(x), median(y)
```

    ans = 50.90000000000001
    ans = 51.70000000000000



```matlab
u_test(x, y);
```

      pval: 0.531699



```matlab
[pval, z] = u_test(x, y);
printf("z = %.5g,  p value = %.5g\n", z, pval)
```

    z = -0.62541,  p value = 0.5317



```matlab
[pval, z] = u_test(x, y, "<");
printf("z = %.5g,  p value = %.5g\n", z, pval)
```

    z = -0.62541,  p value = 0.73415



```matlab
[pval, z] = u_test(x, y, ">");
printf("z = %.5g,  p value = %.5g\n", z, pval)
```

    z = -0.62541,  p value = 0.26585
【draw.io】ER図テーブルに列と行を追加する方法


<br>
図描画ツール[draw.io](https://www.draw.io/)でER図を作成中、<br>
テーブルの列や行の追加の方法がわからなかったのでメモしておきます。<br>
<br>

↓ここにありました。

![スクリーンショット 2022-07-11 143732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730324/6c375dc6-32fd-40fa-b237-9dbe7f0c9075.png)


対象のテーブルを選択して、右のArrangeタブのTableエリアを操作すればできました！
テキストエディタでの文字列置換（正規表現）

# テキストエディタでの文字列置換（正規表現）
1年近く更新してなかった事を反省し、なんでもいいから記事を書こうと考え、今日たまたま仕事で久しぶりに正規表現を使った際にハマってしまったので、それを記事にする。

正規表現を使って色々なテキストの置換を行う。（備忘録的な感じ）
動作確認はSakuraエディタで行っていますが、VSCodeなどでも同じと思う。（動作未確認ですが…。）

■環境
Windows :Windows10
エディタ：Sakuraエディタ
## (例1) アンダーバー以降の文字を削除する
20200227_AAAA ⇒ 20200227
20200422_BBBB ⇒ 20200422
20200516_CCCC ⇒ 20200516
20200620_DDDD ⇒ 20200620
20200730_EEEE ⇒ 20200730
20200831_FFFF ⇒ 20200831
20200924_GGGG ⇒ 20200924
20201005_HHHH ⇒ 20201005
```
置換前　　^*_.*
置換後　　(何も指定しない)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/9a2ae413-74e8-9372-85ec-62906a867255.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/2c90874f-739e-847e-4dcb-987a9e897e4a.png)
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/85f5ce4f-355e-610c-ff55-4273a0796b81.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/8410e4d4-da04-7266-f7d6-b882cb0540ca.png)

(2022/07/11 追記） ちなみにVSCodeの場合は、下記の通り記載すれば置換できました。
```
置換前　　_.*
置換後　　(何も指定しない)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/2e1d4e81-5132-b070-78c2-31f7357ec478.png)

## (例2) 8桁の文字に4桁2桁2桁で分けて、間に「/(スラッシュ)」を挿入する
20200227 ⇒ 2020/02/27
20200422 ⇒ 2020/04/22
20200516 ⇒ 2020/05/16
20200620 ⇒ 2020/06/20
20200730 ⇒ 2020/07/30
20200831 ⇒ 2020/08/31
20200924 ⇒ 2020/09/24
20201005 ⇒ 2020/10/05

```
置換前　　(.{4})(.{2})(.{2})
置換後　　$1/$2/$3
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/13d651c4-711c-f925-0a82-af255db2e134.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/c18cc2c6-9db0-611e-4e94-925d127a6738.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/1de81256-062d-64c6-2799-06fdc2fb0f15.png)

(2022/07/11 追記） ちなみにVSCodeの場合も、同じ設定値で置換できました。
```
置換前　　(.{4})(.{2})(.{2})
置換後　　$1/$2/$3
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223945/5c161832-d829-b094-0e03-0c7bdd2ac0cd.png)
Webpacker::Manifest::MissingEntryError 解消法 - Rails version 6.0 環境

## 対象環境
node.js : v16.x.x
rails : v6.0.x

## 具体的なエラー前動作
```:terminal
rails new xxx
cd xxx
rails g scaffold user
rails db:create
rails db:migrate
rails s
```
として、
http://localhost:3000/users
にアクセスすると下記のエラーが発生

![Screen Shot 2022-07-11 at 11.58.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2646082/3bf33b38-d7f7-251e-5b27-00c41ad72a48.png)

## 対処法【下記いずれかの対応で対処可能です】
### 1.railsのバージョンを6.1.xに変更する(推奨)
>参考：
[コマンド](https://qiita.com/seijMAN/items/ac363f6688c72f4ea186)
[インストール可能なバージョン参照](https://rubygems.org/gems/rails/versions)

### 2.webpackerのバージョンを5に変更する
```:Gemfile
変更前: gem 'webpacker', '~> 4.0'
変更後: gem 'webpacker', '~> 5.0'
```
に変更後
```:terminal
bundle install
rails webpacker:install
rails webpacker:compile
```

### 3.node.jsのバージョンをv14,又はv12にダウングレードする

## 原因
実は、ターミナルでrails newした時に下記のエラーが発生している
```:terminal
rails new xxx
(省略)
1 error generated.
make: *** [Release/obj.target/binding/src/binding.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/motoya/study/rails_6.0.3/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (node:events:527:28)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
gyp ERR! System Darwin 21.5.0
gyp ERR! command "/Users/motoya/.nvm/versions/node/v16.15.1/bin/node" "/Users/motoya/study/rails_6.0.3/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/motoya/study/rails_6.0.3/node_modules/node-sass
gyp ERR! node -v v16.15.1
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
Build failed with error code: 1
(省略)
```

端的に理解したところでは、
『node -v v16.15.1 & node-gyp -v v3.8.0のため、buildに失敗してます』
ということなので、依存関係が崩れているためエラーが発生しております。
※恐らく、webpacker v4のnode-gyp用の表記が古く現バージョンでは実行できないコマンドが表記されていると推察

この依存関係の崩れを修正するために
1. node -v v16.15.1 & node-gyp -v v3.8.0で実行可能な状態にする
Lrailsのバージョンを6.1.xに変更する
Lwebpackerのバージョンを5に変更する

2. webpacker v4でも読み込めるようにnodeのバージョンを下げる
Lnode.jsのバージョンをv14,又はv12にダウングレードする

を実施することで原因を取り除けるということです。

## 最後に
表層の原因と解決方法は理解できましたが、
・webpackerとnode_modulesの関係
・node.jsとnode-gypのバージョン関係
等々、深層部の理解に詰まったので今後調査していきたいと思います。
※ご教授いただけるととても嬉しいです(>_<)
Oracleで日付型に対して加算減算（n日、n時間、n分、n秒）

:::note info
記事の最後にもっと直感的で分かりやすい書き方の例もあります。
:::


# n日

単純に+または-でOK。

```sql:現在時刻から1日後を取得
SYSDATE + 1
```

『2023/08/13 17:13:09』に実行した場合、上記の結果は『2023/08/14 17:13:09』。

# 計算対象の値（カラム）が日付型になっていなければ例外

例えば下記は『ORA-01722: 数値が無効です。』の例外になります。

```sql:
'2023/01/01 00:00:00' + 1
```

# n時間

1時間後は『1日後』の応用。
1日は24時間だから加算減算する値を÷24。

```sql:現在時刻から1時間後を取得
SYSDATE + (1/24)
```

# n分

1440 = 24時間×60分。
1日は1440分。

```sql:現在時刻から1分後を取得
SYSDATE + (1/1440)
```

# n秒

86400 = 24時間×60分×60秒。
1日は86400秒。

```sql:現在時刻から1秒後を取得
SYSDATE + (1/86400)
```

# もっと分かりやすい書き方

わざわざ秒に変換しなくても〇時間後や〇分後などを取得できます。

コメントで教えてもらいました。感謝です！

```sql:
SELECT 
SYSDATE, 
SYSDATE - INTERVAL '1' HOUR FROM DUAL
-- 1時間前
```

```sql:
SELECT 
SYSDATE, 
SYSDATE + INTERVAL '2' MINUTE FROM DUAL
-- 2分後
```

```sql:
SELECT 
SYSDATE, 
SYSDATE - INTERVAL '3' SECOND FROM DUAL
-- 3秒前
```

# 参考サイトさん

https://sql-oracle.com/?p=745

http://oracle.se-free.com/dml/07_addtime.html

https://docs.oracle.com/cd/E57425_01/121/SQLRF/sql_elements003.htm#i38598

# バージョン

Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
UITableViewについてのメモ

まー覚えてられないのでメモ。途中だけど一旦あげ。サイレント修正します。

# xibの作成
1. New File > [cocoa　touch class] から UITableViewCellを選択し、「create xib file」みたいなチェックボックスにチェックを入れる
2. ファイルをターゲットしてIdentiferを設定 

# UITableViewとxibの接続
1. ViewControllerにUITableViewを配置（あとで画像載せる）
2. ViewControllerの viewDidLoad（） に以下を書く。

```swift
self.テーブル名.register(UINib.init(nibName: "xiｂファイル名", bundle: nil), forCellReuseIdentifier: "xiｂファイルのIdentifer")

// delegate, datasource
self.テーブル名.delegate = self
self.テーブル名.datasource = self
```

# UITableViewのプロトコル
・
・
・

# TableViewCellの高さ
可変にするのって大変なのかなーって思ってた時期もありました。

```swift
// 基準になる高さ
self.テーブル名.estimatedRowHeight = 40
// オートで高さを決めてくれる
self.テーブル名.rowHeight = UITableView.automaticDimension
```
KotlinのFizzBuzz問題(多分これが一番美しいと思います)

```kotlin
(1..100).forEach {
  val str = when (Pair(it % 3 == 0, it % 5 == 0)) {
    Pair(false, false) -> it
    Pair(true, false) -> "Fizz"
    Pair(false, true) -> "Buzz"
    else -> "FizzBuzz"
  }
  println(str)
}
```
Kotlinは`Pair`, `Triple`でタプルを表現するのでこういう書き方ができます。

もしくは

```kotlin
(1..100).asSequence().map {
  when (Pair(it % 3 == 0, i % 5 == 0)) {
    Pair(false, false) -> it
    Pair(true, false) -> "Fizz"
    Pair(false, true) -> "Buzz"
    else -> "FizzBuzz"
  }
}.forEach(::println)
```
`asSequence()`でLazy evaluationが可能となり、1要素毎にprintlnしてくれます。
もし`asSequence()`を付けずに実装してしまうと、`(1..1000000000)`のような巨大なループにした場合にEager evaluationな実装となってしまい、1000000000回mapのループを実行した後にまとめてprintlnしようとするため`java.lang.OutOfMemoryError`となってしまいます。

`to`関数を使うとこんな書き方もできます。
```kotlin
(1..100).asSequence().map { i ->
  when ((i % 3 == 0) to (i % 5 == 0)) {
    false to false -> i
    true to false -> "Fizz"
    false to true -> "Buzz"
    else -> "FizzBuzz"
  }
}.forEach(::println)
```
`to`関数は`Pair`を作るための関数です。が、ちょっとわかりにくいですね💦
GASでスクレイピングする時にログインがうまくいかないとき

## 問題
Google Apps Script(GAS)におけるスクレイピングでログインプロセスを実装するときには、UrlFetchAppなどでHttp Requestを何度か送信することになりますが、再現性なく400エラーなどに遭遇することがあります。

## 原因
この現象の原因はおそらく、**リクエスト毎にIPが異なることがあるため、向こうのサーバーが不正と検知しているため**と思われます。

## 対処法
これに対するGASでの対処法はおそらく無く、うまくいくまで繰り返す処理にする(あまりお勧めしない)か、別のサービスを利用するか、ローカルで実行するかしかないでしょう。

Github Actionsなどを検討してみてもよいと思われます。
Octave で独立 2 標本の平均値の差の検定（t 検定）

# Octave で独立 2 標本の平均値の差の検定（t 検定）

独立 2 標本の平均値の差の検定は，2 標本が等分散であることを仮定しない Welch の方法による $t$ 検定 `welch_test()` と，等分散を仮定する普通の $t$ 検定 `t_test_2()`，`ttest2` の三通りある。

検定の多重性を避けるためにも，**常に Welch の方法による t 検定を行うことを推奨する**。

    usage:
    [pval, t, df] = welch_test (x, y, alt)
    [pval, t, df] = t_test_2 (x, y, alt)
    
    x, y はデータベクトル
    alt はデフォルトで両側検定 "!="，片側検定は，帰無仮説が「x の母平均が y の母平均より小さい」なら "<", その逆なら ">" で指定
    戻り値を指定しない場合は p 値のみを表示する



```matlab
pkg load statistics   % statistics が必要
format long           % 表示精度を高くする（任意）
```

## Welch の方法による t 検定 `welch_test()`


```matlab
x = [49.6; 52.5; 48.3; 50.6; 56.7; 32.8; 51.6; 46.1; 54.6; 52.0; 39.3; 49.5; 45.1; 37.1; 63.9;
     48.3; 37.4; 33.4; 37.8; 51.2; 63.0; 74.3; 54.4; 60.1; 55.6; 49.3; 57.4; 40.4; 57.8; 60.9];
y = [48.7; 36.8; 51.9; 65.5; 62.6; 57.3; 43.3; 57.7; 61.4; 69.8; 48.0; 37.1; 29.8; 53.6; 49.3;
     50.2; 46.1; 50.6; 51.4; 61.0; 50.8; 51.7; 52.4; 57.3; 55.4];
mean(x), mean(y)
```

    ans = 50.36666666666667
    ans = 51.98800000000000



```matlab
welch_test(x, y);
```

      pval: 0.52512



```matlab
[pval, t, df] = welch_test(x, y);
printf("t = %.5g,  df = %d,  p value = %.5g\n", t, df, pval)
```

    t = -0.63977,  df = 52.2065,  p value = 0.52512



```matlab
[pval, t, df] = welch_test(x, y, "<");
printf("t = %.5g,  df = %d,  p value = %.5g\n", t, df, pval)
```

    t = -0.63977,  df = 52.2065,  p value = 0.26256



```matlab
[pval, t, df] = welch_test(x, y, ">");
printf("t = %.5g,  df = %d,  p value = %.5g\n", t, df, pval)
```

    t = -0.63977,  df = 52.2065,  p value = 0.73744


## 等分散を仮定する t 検定 `t_test_2()`


```matlab
[pval, t, df] = t_test_2(x, y);
printf("t = %.5g,  df = %d,  p value = %.5g\n", t, df, pval)
```

    t = -0.63607,  df = 53,  p value = 0.52747



```matlab
[pval, t, df] = t_test_2(x, y, "<");
printf("t = %.5g,  df = %d,  p value = %.5g\n", t, df, pval)
```

    t = -0.63607,  df = 53,  p value = 0.26374



```matlab
[pval, t, df] = t_test_2(x, y, ">");
printf("t = %.5g,  df = %d,  p value = %.5g\n", t, df, pval)
```

    t = -0.63607,  df = 53,  p value = 0.73626


## 等分散を仮定する t 検定 `ttest2()`

信頼区間も求めてくれる。

    usage:
    H = ttest2(x,y)
    H = ttest2(x,y,alpha)
    H = ttest2(x,y,alpha,tail)
    H = ttest2(x,y,alpha,tail,vartype)
    H = ttest2(x,y,alpha,tail,vartype,DIM)
    [H,PVAL] = ttest2(...)
    [h,p,ci,stats] = ttest2(...)
    
    alpha は有意水準（デフォルトで 0.05）
    tail は welch_test()，t_test_2() の場合と同じ
    vartype は デフォルトで "equal" **"unequal" はサポートされていない**ので，welch_test() を使う

戻り値を指定しない場合は H を返すので注意が必要である。帰無仮説が棄却されれば H = 1，棄却できなければ H = 0。
他の関数では戻り値を指定しない場合は $p$ 値を返すものが多いので，0 が返されて「$p$ 値が 0 に近いぐらい小さい...有意である」などと早とちりしてはいけない。

結論として，**この関数は使うに値しない**。welch_test() を使おう。


```matlab
 [h,p,ci,stats] = ttest2(x, y)
```

    h = 0
    p = 0.527470650898257
    ci =
    
      -6.733982141171007
       3.491315474504342
    
    stats =
    
      scalar structure containing the fields:
    
        tstat = -0.636066149394698
        df = 53
        sd = 9.412810486664524
【CSS】 input や textarea タグを :focus-within 擬似クラスでカスタマイズする

## `input` や `textarea` ってカスタマイズしにくいですよね
フォームに使われる要素は他の要素に比べてデフォルトのスタイルがたくさん当たっていたり、選択状態や無効状態など複数の状態があるのでカスタマイズしにくいですよね。

そこで `:focus-within` という擬似クラスを紹介したいと思います。

## かゆいところに手が届く `:focus-within` 擬似クラス
僕はこの擬似クラスを長らくCSSを使っていて初めて知りました。どんな擬似クラスかというと下記のようなものになっています。
> :focus-within は CSS の擬似クラスで、その要素または子孫要素にフォーカスがある場合に一致します。言い換えれば、それ自身が :focus 擬似クラスに該当するか、子孫に :focus に該当する要素がある要素を表します。

https://developer.mozilla.org/ja/docs/Web/CSS/:focus-within

つまり `input` を `div` で囲ったときに `div:focus-within` とすれば `input` の状態に応じて `div` のスタイルを変えることができます。便利ですね。

下記の例は先頭に `https://` を強制させる URL 入力フォームの例です。

```html
<!-- URLの入力フォームの例 -->
<div>
  <span>https://<span>
  <input type="text">
<dvi>

<style>
  /* 子要素である input がフォーカスされたときのスタイル */
  div:focus-within {
    border: 1px solid gray;
  }
  /* input のデフォルトのスタイルを削除（例） */
  input {
    border: none;
    outline: none;
  }
</style>

```

React とかだと `onFocus` や `onBlur` 、 `useState` を使って簡単に実装できてしまうので見落としがちですが、 JavaScript を使わなくても CSS だけで実現できるので、使ってみると良いと思います。

## まとめ
CSS は深い
YouTubeを使った学習方法

こんにちは。
土日はコミケの原稿をやっていました。
昨日はあまり眠れなかった気がしますが、今日も元気にまいります。


## 学習方法について
さて、現在、プログラミングの学習方法について調べています。
プログラミングの学習方法についてはいろいろと方法があるようですが、コードを書くのがうまくなりたかったら、実際に書いてみるしかないようです。
実際に手を動かすという点ではProgateやドットインストール、またはfreecodecampのようなサイトを使って、実際にコーディングをやりながら学んでいくのも良いようです。

### 写経について
プログラミングの学習方法に、写経というのがあるそうです。
写経というのは、お経を書き写すように、提示されているソースコードをそのまま書き写すという作業のようで、プログラミングの場合はこれが学習効果が高いそうです。
### 動画での学習
プログラミング系のアフィリエイターのマナブさんがおっしゃっていたんですが、これからの時代は本よりもYouTubeで動画を見て、そこに出てくるコードを写経するのが良いそうです。
マナブさん自体がたくさん稼いでいるというはなしをしているにも関わらず、その金額が嘘だというはなしのようなので、話半分に聞いていたんですが、動画を使った学習方法は良いかもしれないなと思いました。
動画サイトもYouTubeでOKだそうです。
#### 具体的な検索キーワード
「○○ tutorial」という検索の仕方でよいそうです。
私でいえば、Javascriptを勉強しようとしていますので、「Javascript tutorial」という風な感じで検索します。
出てきた動画で再生数が多いものを見ていけばOKというような感じのようです。

## まとめ
今日は動画サイトを使ったプログラミングの学習方法について調べたことをまとめてみました。
より深い内容に入っていく前に、もう少し調べてみようと思います。

freecodecampのJavascriptの講座をやっていたのですが、途中から急に動画がなくなり、不親切になってしまったので途中でやめました。
これからは動画で勉強する方法に切り替えてみます。

それでは、今回はこの辺で。
エラー解決：　NoMethodError - undefined method `own?' for nil:NilClass: 

このエラーはよく見過ぎて対応の仕方がよくわかってきましたが、改めてまとめていきたいと思います。

今回エラーが出た場所はここです。
```
  <%= render 'crud_menus', post: post if current_user.own?(post) %>
```
このエラーはmethodのレシーバーがundefinedだよって忠告されているエラーです。
今回はownの前のcurrent_userがnilになってますよ！と言うことです。

対応方法は本当に色々とありますが、私はよくunlessを使います。
下記のようにunlessをつけると、current_userがnilでない時に<%= render 'crud_menus', post: post if current_user.own?(post) %>を実行すると言うことになります。
```
<% unless current_user == nil then %>
  <%= render 'crud_menus', post: post if current_user.own?(post) %>
<% end %>
```

このように私はこのエラーをやり過ごしました。

たくさん、エラー解決の方法はありますが、その一例として、参考にしていただければ、幸いです。
【Open-Smartwatch】T-Watch-2021が届いたので遊ぶ【Programmable】

未来の挑戦者のためのメモ

> "あなたがこの記事を読んでいるということは、巷のスマートウォッチに嫌気が差し、自ら先駆者になろうとしたが、パッケージにもGitHubにも組み立て方すら書いておらず戦慄していることだろうと思う。"
> --- 筆者の頭の中から抜粋

# 参考動画

<iframe width="560" height="315" src="https://www.youtube.com/embed/3GkzNv1ah_w" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>


# 開封、中身について

![開封前](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274492/761b80df-4251-91a7-5913-2419a803f96a.jpeg)
開封前

![開封後](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274492/a0d6afac-e0f2-750e-24b6-056434ebb4f7.jpeg)

開封後

# 組み立て

本体ケースの中に、T-Watch本体を納めていき、腕時計の形に来ていきます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/EvGr9PVur8g" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>


本体ケースは3Dプリンターで出力されたものです。
個体差があるかもしれません。

本体の上下がわかりづらいですが、Type-C端子の向きを合わせると収めやすいです。

バイブモーターについて、記事最初の参考動画では納められず切断されていましたが、僕の動画のようにすればバッテリーの横のくぼみにぴったりと収まりました。

最後に、四隅のネジ穴にビスを締めれば完成です。

シールは適度に貼りましょう。

# 開発環境の構築

## 必要なもの

- VSCode
    - (拡張機能)
    - Arduino
    - PlatformIO
- Arduino (Microsoft Store版**じゃない方**)
- T-Watch_2021-master (GitHubからDL)

PythonやC++ extensionなどは、PlatformIOが自動でインストールしてくれます。

## Arduinoのインストール

公式ページからダウンロード、インストールする。
**Microsoft store版ではない**


:::note warn
Microsoft store版だと、Arduino.hの場所が変わるため、環境設定がやりづらくなります。
:::


## VSCodeのインストール

インストールしている場合は飛ばしても可

### [拡張機能] Arduino

拡張機能から`Arduino`を検索してインストール

Arduinoの拡張機能設定で、Arduino IDEの場所を設定する[^1]
[^1]:参考：https://qiita.com/filunK/items/49d92b04fca78e4ed5b0

### [拡張機能] PlatformIO

拡張機能から`PlatformIO`を検索してインストール

自動で同時に必要な拡張機能がインストールされます

c_cpp_properties.jsonの設定をする[^1]

## T-Watch-2021-master

GitHubからダウンロードします。

この中の`SmartWatch`というフォルダをコピーします。

サンプルコードが入っています。

このフォルダが作業フォルダになります。

# サンプルコードの書き込み

いくつかの.hファイルと.cppファイルを移動させる必要があります。

ポートを「COM3」を選びます。

ビルドに成功したら、書き込みができます。

T-Watch本体を書き込みモードにして、書き込み開始する。

:::note warn
この時、シリアルポートをクローズしておかないと、書き込みのアクセスが拒否されます。
:::

ターミナルで`Success`が表示されたら成功
AzureでJupyterLab(Elyra)を実行するとUnexpected end of JSON input

# はじめに

ElyraでPythonの機械学習パイプラインを作成してAzureにデプロイしたところ見たことのないエラーが発生しました。
また、エラーのタイミングが毎回異なったり、内容が変わったりと謎の現象が起きました
ネットには記事が中かったためまとめたいと思います。

# 問題

Elyraでパイプラインを実行したところ以下のエラーが発生しました。

```
Error making request
Unexpected end of JSON input
Check the JupyterLab log for more details
```

また別のタイミングではこのようなものも(同じパイプラインを実行しています)

```
Error making request
Unexpected token G in JSON at position 6
Check the JupyterLab log for more details
```

エラーはログではなくJupyteLabのモーダルとして表示されました
![1657005768.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/0ae468ab-02c1-06dd-18f9-f8e714b9d80a.png)

ローカルでは問題なく実行できて遭遇したことのないエラーでしたが、Azureだと不規則に発生していました。

# 解決方法

問題はAzureのWebAppのメモリが足りていないことに起因していました。
利用していたのは3.5GBで、機械学習を動かすのは厳しい状態でした。メモリが落ちるとパイプラインが止まり、メモリが解放されて再度手前から実行されていました。

なのでDockerログを見ると同じ個所が何度か実行されていました。

JupyterLabのログは左下から確認が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/2e9c819a-e818-f5d3-b37a-5b8116f791a8.png)

メモリを解放するためには不要なノートブックはシャットダウンする、[メモリを都度開放する](https://qiita.com/AnchorBlues/items/883790e43417640140aa)などが必要になります

ですがさすがに3.5GBは厳しいので、メモリが大きいのに変更しました

# おわりに

見覚えのないエラー、Elyraの記事が少ないというところで色々検証した結果ここまで行きつきました

# 参考
- [Jupyter(IPython)上でメモリ食っている変数を探し出して削除する](https://qiita.com/AnchorBlues/items/883790e43417640140aa)
買ってよかった技術書を紹介しよう!「カイゼン・ジャーニー」

https://qiita.com/official-campaigns/engineer-festa/2022

　Qiitaで「買ってよかった技術書を紹介しよう！」というイベントをやっていたので、参加してみます。

　私が紹介するのは「カイゼン・ジャーニー」です。というのも今、毎週土曜日のAM8時から著者による本読み会をちょうどやっていて、あらためて良い本だなと思ったので、紹介したいと思います。

## 「カイゼン・ジャーニー」はどんな本

　実際の開発現場でのストーリー形式（現場であるあるって話から、さすがにそんの事ないのでは？って話まで）で進みながら、アジャイルを始めとする様々なプラクティスを学べる本です。三部構成になっていて第一部で個人、第二部でチーム、第三部で外部を巻き込む、と言う形になっています。

　開発メンバーは自身の成長の為、リーダーはチームをまとめる為、マネージャーはより良いプロダクトを作る為にやるべき事を学べると思います。ストーリーではSIerの現場が舞台となっているので、特にSIerやSESで働く方は共感できるポイントが多いと思うので特にオススメです。

## 「カイゼン・ジャーニー」で学べるプラクティス一覧

　カイゼン・ジャーニーではストーリーにあわせて以下のプラクティスや理論が登場し、学ぶことができます。

価値仮設
　・仮設キャンバス
　・MVP
　・ユーザーインタビュー

ビジネスモデル
　・ビジネスモデルキャンバス
　・リーンキャンバス

顧客価値探索
　・ユーザーストーリー
　・ギャレットの5段階
　・INVEST
　・ユーザーストーリーマッピング

Whyの見つけ方
　・ゴールデンサークル
　・インセプションデッキ

期待マネジメント
　・1on1
　・インセプションデッキ
　・ドラッガー風エクササイズ
　・星取表

個人表明・情報共有
　・朝会
　・ファイブフィンガー

計画
　。プランニングポーカー
　・CCPM
　・スプリントプランニング

ゴール設定
　・完成の定義
　・スプリントゴール
　・リファインメント

タスクの見える化
　・タスクボード
　・Icebox/Parking Lot

チームマネジメント
　・タスクマネジメント
　・スクラム
　・モダンアジャイル

ノウハウ共有
　・モブプログラミング
　・ハンガーフライト

ルール作り
　・Working Agreement

プロセスの見える化
　・カンバン
　・スプリントボード

ふりかえり
　・KPT
　・ふりかえりのふりかえり
　・問題はありません問題
　・スプリントレビュー
　・むきなおり
　・タイムラインふりかえり
　・YWT

感情の共有
　・感謝のアクティビティ
　・ポストモーテム

プロセスのカイゼン
　・バリューストームマッピング
　・ECRS

情報、優先順位の整理
　・事実、意見、対策
　・緊急重要マトリクス
　・WIP制限
　・クネビンフレームワーク
　・狩野モデル

フェーズ整理
　・成功循環モデル
　・タックマンモデル
　・SL理論

サイクル
　・透明性－検査－適応
　・Build－Measure－Learn

理論・法則
　・素朴理論と建設的相互作用
　・学習する組織/氷山モデル
　・経験主義
　・パーキンソンの法則
　・コンウェイの法則
　・ジョブ理論
　・確証バイアス


## 「カイゼン・ジャーニー」の次に読む本

著者 市谷さんの本
・[チーム・ジャーニー](https://www.amazon.co.jp/dp/4798163635)
・[正しいものを正しくつくる](https://www.amazon.co.jp/dp/4798172561)
・[デジタルトランスフォーメーション・ジャーニー](https://www.amazon.co.jp/dp/4798172561)

著者 新井さんと沢渡さんの本
・[ここはウォーターフォール市、アジャイル町](https://www.amazon.co.jp/dp/B08G1DX2N5)

新井さん、市谷さん、小田中さんによる共著
・[いちばんやさしいアジャイル開発の教本](https://www.amazon.co.jp/dp/B088YGLSRJ)

スクラムを学ぶ
・[SCRUM BOOT CAMP THE BOOK](https://www.amazon.co.jp/dp/4798129712)

スクラムマスターの役割を学ぶ
・[SCRUMMASTER THE BOOK](https://www.amazon.co.jp/dp/4798166855)

ふりかえりを学ぶ
・[アジャイルなチームをつくる ふりかえりガイドブック](https://www.amazon.co.jp/dp/4798168793)


## 最後に

　最初でも触れましたが、2022/7/11現在、カイゼン・ジャーニーの著者による本読み会をやっていて、そこで著者の市谷さんが **「実際、現場ではいろいろなトラブルが起こるわけで、そのトラブルに対応できるプラクティスがどれだけ自分の引き出しの中に入っているかがとても重要」**  (若干、うろ覚え…)、と仰っていてその言葉にとても共感しました。
　そして、自分の引き出しに入れておくプラクティスを増やすには、このカイゼン・ジャーニーがうってつけだと思いました。

　この記事で興味をもったら、毎週土曜日朝8時からの著者による本読み会に是非参加してみて下さい。カイゼン・ジャーニーの本読み会はもうすぐ終わりますが、その後はカイゼン・ジャーニー続編のチーム・ジャーニーの本読み会が始まるみたいです。


　勉強会を主催するコミュニティDevLOVEのリンク

https://devlove.doorkeeper.jp/