OmniAICreator/Qiita-1.07M huggingface dataset:
【RN】react-i18nextで一部分にリンクを埋め込む・スタイルを当てる


### 背景
react-i18nextはi18nextを元にReact/ReactNativeで使用できるようにしたライブラリのようですね。サービスを多言語対応にできます。
今回、ReactNativeのアプリケーションでreact-i18nextを使用して一部分だけ文字色を変更・リンクに飛ばす実装がありました。
変数を埋め込む方法については[公式](https://react.i18next.com/)で明記されていたのですが、その部分だけスタイルを変える実装は見当たりませんでした。
確かに下のようにリンクに飛ばす箇所や色を変更する箇所だけ分割して`<Text></Text>`でその都度ネストすれば良い話なのですが、、
```JavaScript
<View style={tw`flex-row flex-wrap`}>
    <Text>{t`hogehoge.service`}</Text>
    <Pressable>
        <Link style={tw`text-red`}>利用規約</Link>
    </Pressable>
    <Text>及び</Text>
    <Pressable>
        <Link style={tw`text-red`}>プライバシーポリシー</Link>
    </Pressable>
    <Text>をご確認ください。</Text>
</View>
```
```JavaScript
...
hogehoge: {
...
    service: '当サービスの',
    termsOfUse: '利用規約',
    or: '及び',
    privacyPolicy: 'プライバシーポリシー',
    confirm: 'ご確認ください'
...
}
```

i18nextは翻訳のために使用されるライブラリであり、これだと翻訳が難しい場面もあるのでは？と思い(英語とか主述の順番逆だし、ないと思うけどこの区切り型だと通用しない自然言語があるかもだし...)なんとか一文で解決できないかなと思いました。

### 結論
`Trans`([公式はこちら](https://react.i18next.com/latest/trans-component))を使うことにしました。`components`のpropsで使用するコンポーネントをカスタマイズすることができるので、これを利用して`Text`や`View`、`Pressable`にスタイルを当てていきます。

```JavaScript
          <Trans
            i18nKey="hogehoge.confirmMessage"
            components={{
              TermsOfUsePressable: (
                <Pressable
                  accessibilityRole="link"
                  style={tw`flex items-center`}
                  onPress={() => Linking.openURL('https://...')}
                />
              ),
              PrivacyPolicyPressable: (
                <Pressable
                  accessibilityRole="link"
                  onPress={() => Linking.openURL('https://...')}
                />
              ),
              LinkText: <Text style={tw`text-red font-bold text-xs`} />,
              Text: <Text style={tw`text-xs`} />,
              View: <View style={tw`flex-row flex-wrap`} />,
            }}
          />
```


```JavaScript
...
hogehoge: {
...
    confirmMessage:
              '<View><Text>当サービスの</Text><TermsOfUsePressable><LinkText>利用規約</LinkText></TermsOfUsePressable><Text>及び</Text><PrivacyPolicyPressable><LinkText>プライバシーポリシー</LinkText></PrivacyPolicyPressable><Text>をご確認ください。</Text></View>'
...
}
```
かなり長くなってしまいましたが、こちらで一旦意図した実装はできそうでした。もしベストプラティクスがあれば教えていただけると幸いです！

それでは！
tableau serverの自動更新スケジュールがこけたときにセッションがkillされなかった件について【備忘録】

初めての事象が発生したので備忘録。

```
【条件】
・tableau server上の更新スケジュールが同じ、別のワークブックが今回のターゲット
・上記ワークブックが同じテーブルを参照（結合は別）

【経緯】
・上記２ワークブックが更新タイムアウト
・参照DBのセッションを確認→まだ存在している（ここでおかしい）
・その他のセッションをロック

【問題点】
・tableau serverで更新タイムアウトが起きたにも関わらずセッションが生きている

【解決】
・上記２セッションをkill
```

解決はしたけど理由は全然わからないので、こんなこともありましたよと備忘録です。
なんだろこれ。
paiza.ioでelixir その10

# 概要
paiza.ioでelixirやってみた。
genserverとloggerやってみた。

# 参考にしたページ

https://qiita.com/sand/items/5fd91c0b86b4919d7cc9

# サンプルコード

```
defmodule MyServer1 do
	use GenServer
	require Logger
	def start do
		GenServer.start(MyServer1, nil)
	end
	def put(pid, key, value) do
	    Logger.info("put")
		GenServer.cast(pid, {:put, key, value})
	end
	def get(pid, key) do
		Logger.info("get")
		GenServer.call(pid, {:get, key})
	end
	def init(_) do
	    Logger.info("init")
		{:ok, %{}}
	end
	def handle_cast({:put, key, value}, state) do
		{:noreply, Map.put(state, key, value)}
	end
	def handle_call({:get, key}, _, state) do
		{:reply, Map.get(state, key), state}
	end
end

{:ok, pid} = MyServer1.start()

MyServer1.put(pid, :my_key, :taro)
|> IO.puts
MyServer1.get(pid, :my_key)
|> IO.puts
MyServer1.put(pid, :my_key, :jiro)
|> IO.puts
MyServer1.get(pid, :my_key)
|> IO.puts
GenServer.call(pid, {:get, :my_key})
|> IO.puts


```

# 実行結果

```

02:05:34.481 [info]  init

02:05:34.483 [info]  put
ok

02:05:34.484 [info]  get
taro
ok

02:05:34.484 [info]  put

02:05:34.484 [info]  get
jiro
jiro
```

# 成果物

https://paiza.io/projects/sgIlBSMxN5CqfacVXpxumw?language=elixir

以上。
Cliche problem: 0.1 + 0.2 == 0.3?

`assert!(0.1 + 0.2 == 0.3)` leads to a `panic`
while
`assert!(0.1_f32 + 0.2_f32 == 0.3_f32)` will proceed without any issues

So, an actual implementation shows
`0.1 + 0.2 = 0.30000000000000004`

Therefore, the following will NOT work
`assert!(0.1_f64 + 0.2_f64 == 0.3_f64)`

But this will 
`assert!(0.1_f64 + 0.2_f64 != 0.3_f64)`

I think a good chunk of people have heard of this problem before, but it's always nice to have a brain teaser. Hope I spelled that right.
npm: heroicons, postcss-import, framer-motion のアップデート メモ (Breaking Changes)

## 1. heroicons v1 → v2

[Release v2.0.0 · tailwindlabs/heroicons](https://github.com/tailwindlabs/heroicons/releases/tag/v2.0.0)

* アイコンの変更。v1 と v2 は異なるアイコンと見なし、好みの方を使えば良いとある
* スタイルが２つ(Outline, Solid) から３つ(+ Mini)に増えた
  - Before: `import { ... } from '@heroicons/react/solid'`
  - After: `import { ... } from '@heroicons/react/24/solid'` or `import { ... } from '@heroicons/react/20/solid'`
  - Before: `import { ... } from '@heroicons/react/outline'`
  - After: `import { ... } from '@heroicons/react/24/outline'`
* アイコン名の変更 → 上の URL の一覧を参照

- - -

## 2. postcss-import  v1 → v2

[fix import with layer by romainmenke · Pull Request #496 · postcss/postcss-import](https://github.com/postcss/postcss-import/pull/496)

### Before

```
@import url('foo.css') layer(A) (min-width: 320px)
```

### After

```
@media (min-width: 320px) {
  @layer A {
    /* imported styles */
  }
}
```

- - -

## 3. framer-motion v6 → v7

[Upgrade guides | Framer for Developers](https://www.framer.com/docs/guide-upgrade/)

* react@18 対応
* Framer Motion は、手動変更しなくても大丈夫っぽい
* Framer Motion 3D ユーザーは、React Three Fiber を ^8.2.2 にアップグレードする必要あり
paiza.ioでelixir その9

# 概要
paiza.ioでelixirやってみた。
replaceとsplitやってみた。

# サンプルコード

```


Regex.replace(~r/Abc/, "Abc", "ABC")
|> IO.puts

String.replace("a,b,c", ",", "-")
|> IO.puts

String.split("a,b", ",")
|> length
|> IO.puts
#|> Enum.each(&IO.puts/1)

Regex.split(~r/-/, "a-b-c")
|> length
|> IO.puts
#|> Enum.each(&IO.puts/1)

```

# 実行結果

```
ABC
a-b-c
2
3
```

# 成果物

https://paiza.io/projects/dycNK7KfsIYQQtlaI1xZFw?language=elixir

以上。
ロードバランサーのログを別アカウントのS3バケットに書き込む

ロードバランサーのログはS3に出力することができるが，
これを別アカウントのS3バケットに出力したかった

### 難しい設定は不要でS3のポリシーを変えてやれば良い
クロスアカウントの設定が必要になるかと思ったが不要

## 手順
A→書き込むS3バケットを用意し，ポリシーを設定
B→Aのバケットを指定する
これだけです

### S3バケットを作成
A側でS3バケット(hoge-fuga)を作成します。
（ブロックパブリックアクセスは全てブロックでOK）

### S3のバケットポリシーを設定

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Allow_ELB_Access_logs_Other_Account",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::{BのアカウントID}:root",
                    "arn:aws:iam::{EC2のあるリージョンコード}:root"
                ]
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{hoge-fuga}/*"
        }
    ]
}
```

* {BのアカウントID}
* {elb-account-id}
* {hoge-fuga}
この3箇所を修正してS3に設定しましょう

elb-account-idは，こちらから確認できます
該当のリージョンのものをコピペしましょう
https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/enable-access-logs.html#attach-bucket-policy:~:text=Replace%20elb%2Daccount%2Did%20with%20the%20ID%20of%20the%20AWS%20account%20for%20Elastic%20Load%20Balancing%20for%20your%20Region%3A

## B側でS3バケットを設定
AWSダッシュボードから，EC2→ロードバランサー→説明タブ→属性の編集　にて
アクセスログにチェックし有効化，S3の場所を指定してください
（プレフィックスは適宜）

![スクリーンショット 2022-10-25 10.38.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869250/a0700bf6-3dcc-6e55-5a61-f50d68749c55.png)

以上で設定終了です
A側のS3バケットにログが出力されていることを確認してください。
ruby　arrayの組み込みメソッドを層別してみた

>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼
https://twitter.com/takeshi_program



みなさんは組み込みメソッドという存在はご存じでしょうか？
組み込みメソッドとは自分で定義しなくてもデフォルトで使えるようになっているメソッドの集合です。
rubyの場合、stringクラス、arrayクラス、hashクラスなど、各クラスで使える組み込みメソッドが違います（共通のものもあります）

例えばarrayクラスだけでも以下↓の数だけあります。
https://docs.ruby-lang.org/ja/latest/class/Array.html

使えると便利なのかもしれませんが、覚えるのが大変そうですね…🥺

覚えるための一助となればと思い、arrayクラスの一部のメソッドだけではありますが私なりにmiroというアプリで層別してみましたので、
よかったらご覧下さい。



### miro URL
https://miro.com/app/board/uXjVPHfC2SM=/?share_link_id=840118422501

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/f47d54a2-d5b6-76e7-cd4f-48300f14ac9f.png)
Long Text Area フィールドを数式で使う

[Answersで回答する時に使う情報のまとめに戻る](https://qiita.com/Keiji_otsubo/items/9e6e0e946826133eddc7)

この回答ではISBLANKが使えたと言っているけど、本当かな？

+ [Need Formula to Check if All 4 Long Text Area Fields are Filled Out](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JeKcqSAF)


# Long Text Area(32768)

```
ISBLANK	(Long_text__c)
```
Error: You referenced an unsupported field type called "Long Text Area" using the following field: Long_text__c

```
LEN(Long_text__c) > 0
```
Error: You referenced an unsupported field type called "Long Text Area" using the following field: Long_text__c


# Long Text Area(500)

```
ISBLANK	(Long_text__c)
```
Error: You referenced an unsupported field type called "Long Text Area" using the following field: Long_text__c

```
LEN(Long_text__c) > 0
```
Error: You referenced an unsupported field type called "Long Text Area" using the following field: Long_text__c


# Text Area(255)

問題ない 

# Rich Text Area(256)

```
ISBLANK	(Long_text__c)
```
Error: You referenced an unsupported field type called "Rich Text Area" using the following field: Long_text__c

```
LEN(Long_text__c) > 0
```
Error: You referenced an unsupported field type called "Rich Text Area" using the following field: Long_text__c

# REGEX

REGEXは使えるようです

+ [ロングテキスト項目の改行を制御する方法はありますか？](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J6WDU)

:::note
入力規則を使う場合は以下で対応できるとは思います。

```
AND(
REGEX(<field name>, '(.*\r?\n.*)*'),
NOT(ISBLANK(<field name>))
)
```
:::
フロントエンジニア、AWSエンジニア目指す方必見!　TypeScript導入!

# どういう方が読んだ方がいいか
・JavaScriptをある程度知っている方
・AWSエンジニアを目指される方
・フロント開発をされる方


# TypeScriptとは
Microsoftが開発したプログラミング言語で、JS(Java Script)をさらに拡張した言語です。
```静的型付け機能(static typing)```となっています。

新機能などがJSに追加されますが、JSのようにブラウザで実行できません。
新しい機能を```TS(TypeScript)からJSにコードを変換(コンパイル)```し、
開発者が正しいコードを書くことを支援します。

そして***型を検索する機能***があります
そして***JavaScriptの上位集合です。***

# TSのすごいとこ
・型検索
・JSの新機能
・JSにはない機能(インターフェースやジェネリック)
・メタプログラミング
・いろんなオプシション
・TSを使わないプロジェクトでも役立つツール

# TSを使った方がいい理由
・ドキュメントとしての側面を利用
・Linterとして利用
・ES5へのコンパイラ


# TypeScriptを動かしてみた
このサイトのplaygroundから試しに動かせます。

https://typescript-site-76.ortam.vercel.app/

```ts
const message: string = 'hello world';
console.log(message);
```
```js
"use strict";
const message = 'hello world';
console.log(message);
```
このように変換されます。



# TypeScriptのインストール
```
% npm install -g typescript

added 1 package, and audited 2 packages in 795ms

found 0 vulnerabilities
```
これで全てのフォルダにtypescriptが入ります。

# Typescriptの公式ドキュメント

https://github.com/microsoft/TypeScript

https://www.typescriptlang.org/docs/
# TsをJSに変換
インストールした後は以下のコマンドが使えます。
```
$ tcs　ファイル名
```
これは***TSをJSにコンパイルするコマンド***です


実際に動かします。まずはVScodeなどで下のように記述します。

```index.ts
let greeting: string = 'こんにちは';
console.log(greeting);
```
***tsからjsにコンパイルするコマンドを実行する***と
```
% tsc index.ts
```
***index.jsが作成***されます。こんな感じのコードになります。

```index.js
var greeting = "こんにちは";
console.log(greeting);
```
以下のコマンドで実行すると以下のようになります。
```
 % node index.js
こんにちは
```


# 資料

https://www.udemy.com/course/typescript-complete/
R: モンテカルロ法で円周率を求める

こちらのページを参考にしました。
[モンテカルロ法で円周率を求める](https://yoshida931.hatenablog.com/entry/2017/08/28/114746)

## プログラム

```r:pi_monte_carlo.R
# ---------------------------------------------------------
#	pi_monte_carlo.R
#
#					Oct/25/2022
# ---------------------------------------------------------
calc_pi_proc <- function(nn){
	dat <- matrix ( runif ( nn*2 , -1 , 1 ) , 2 )
	mm <- colSums( dat^2 ) < 1
	return( ( 4*sum( mm ) ) / nn )
}

# ---------------------------------------------------------
for (it in 1:10)
{
	nn <- 1000 * (it ** 2)
	pi = calc_pi_proc(nn)
	cat(it,nn,pi,"\n")
}

# ---------------------------------------------------------
```

## 実行結果
乱数を使うので、実行のたびに結果が異なります。

```text
$ Rscript pi_monte_carlo.R
1 1000 3.14 
2 4000 3.154 
3 9000 3.134667 
4 16000 3.1345 
5 25000 3.1656 
6 36000 3.139889 
7 49000 3.143102 
8 64000 3.138063 
9 81000 3.141877 
10 1e+05 3.142
```

```text
$ Rscript pi_monte_carlo.R
1 1000 3.112 
2 4000 3.138 
3 9000 3.168 
4 16000 3.142 
5 25000 3.1544 
6 36000 3.130111 
7 49000 3.124898 
8 64000 3.142375 
9 81000 3.144593 
10 1e+05 3.15664
```

確認したバージョン

```text
$ Rscript --version
Rscript (R) version 4.2.1 (2022-06-23)
```
MediaPipe face_geometoryが動かなかったのでコードを修正しました。

# landmark(特徴点)の数が異なるエラー発生 (2022/09/02時点)
geometry_pipelineにて、landmark(特徴点)の数が異なるエラーになりました。
エラー文言: The number of landmarks doesn't match the number passed upon initialization!

「face_landmark」から渡ってくる「screen_landmark_list」の特徴点の数が多くRET_CHECK_EQでエラーになります。
特徴点を削ることでエラーを解消しました。削った特徴点は追加された黒目の部分になります。
※動作結果を見ても、追加された部分を削るのが正しいはず。

そのうち修正されると思いますが、2022/09/02時点では動きません。

# 修正したソースコード

**mediapipe/modules/face_geometry/libs/geometry_pipeline.cc(123行目)**
元のコード
```
  absl::Status Convert(const NormalizedLandmarkList& screen_landmark_list,  //
                       const PerspectiveCameraFrustum& pcf,                 //
                       LandmarkList& metric_landmark_list,                  //
                       Eigen::Matrix4f& pose_transform_mat) const {
    RET_CHECK_EQ(screen_landmark_list.landmark_size(),
                 canonical_metric_landmarks_.cols())
        << "The number of landmarks doesn't match the number passed upon "
           "initialization!";

    Eigen::Matrix3Xf screen_landmarks;
    ConvertLandmarkListToEigenMatrix(screen_landmark_list, screen_landmarks);
```
↓ 修正後のコード
```
  absl::Status Convert(const NormalizedLandmarkList& screen_landmark_list,  //
                       const PerspectiveCameraFrustum& pcf,                 //
                       LandmarkList& metric_landmark_list,                  //
                       Eigen::Matrix4f& pose_transform_mat) const {

    NormalizedLandmarkList temp_screen_landmark_list;

    temp_screen_landmark_list.clear_landmark();
    for( int i=0; i<canonical_metric_landmarks_.cols(); ++i )
    {                              
        auto landmark = temp_screen_landmark_list.add_landmark();
        landmark->set_x( screen_landmark_list.landmark(i).x() );
        landmark->set_y( screen_landmark_list.landmark(i).y() );
        landmark->set_z( screen_landmark_list.landmark(i).z() );
    }

    RET_CHECK_EQ(temp_screen_landmark_list.landmark_size(),
                 canonical_metric_landmarks_.cols())
        << "The number of landmarks doesn't match the number passed upon "
           "initialization!";

    Eigen::Matrix3Xf screen_landmarks;
    ConvertLandmarkListToEigenMatrix(temp_screen_landmark_list, screen_landmarks);
```

MediaPipeとは、Googleの提供する機械学習のライブラリ群です。※学習データも込み
[https://google.github.io/mediapipe/](https://google.github.io/mediapipe/)
paiza.ioでelixir その8

# 概要
paiza.ioでelixirやってみた。
httpでgetやってみた。

# サンプルコード

```
:inets.start
:ssl.start

{:ok, {_, _, body}} = :httpc.request(["https://ohiapp0.herokuapp.com/ipinfo"])
body
#|> Jason.decode!()

|> IO.puts
```

# 実行結果

```
{"host":"ohiapp0.herokuapp.com","connection":"close","x-request-id":"c85628e2-fd7d-4d0d-b933-bb516a5b014c","x-forwarded-for":"13.231.7.231","x-forwarded-proto":"https","x-forwarded-port":"443","via":"1.1 vegur","connect-time":"0","x-request-start":"1666660384815","total-route-time":"0"}
```

# 成果物

https://paiza.io/projects/-AoOkI6Qi-al1krzyQCWwA?language=elixir

以上。
paiza.ioでelixir その7

# 概要
paiza.ioでelixirやってみた。
ファイルの読み書きやってみた。


# サンプルコード

```
File.write "hello.txt", "Hello World!!"

{result, 0} = System.cmd("ls", [])

IO.puts result

{result, 0} = System.cmd("cat", ["hello.txt"])

IO.puts result


```

# 実行結果

```
exec_command
exec_stderr.txt
exec_stdin.txt
exec_stdout.txt
hello.txt
Main.exs
main.tar.gz
runner_mysql
runner_php
run_user

Hello World!!
```

# 成果物

https://paiza.io/projects/sh8j76WL_KxIdh_kcSJFVg?language=elixir

以上。
Ruby: lambda, proc, アロー演算子, Proc.newの違い

[Kernel.#lambda](https://docs.ruby-lang.org/ja/latest/class/Kernel.html#M_LAMBDA) と [Kernel.#proc](https://docs.ruby-lang.org/ja/latest/class/Kernel.html#M_LAMBDA) はどちらもProcオブジェクトを生成する。どちらなのかは `Proc#lambda?` で判別できる。

- lambda
  - メソッドに近い
  - 引数の数が違っているとエラーになる
  - returnでlambda自身を抜ける
  - アロー演算子 [->](https://docs.ruby-lang.org/ja/latest/doc/symref.html) と同じ
- proc
  - ブロックに近い
  - 引数の数が違っていてもエラーにならない
  - returnでprocを囲むメソッドを抜ける。proc自身を抜けるにはnextを使う
  - `Proc.new` と同じ
Azure Fundamentals(AZ-900)：Azure の基礎: Azure のアーキテクチャとサービスについて説明する「Azureのデータ移行オプション」

Microsoft Learnを用いたMicrosoft Azure Fundamentals(AZ-900)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始める方の参考になれば幸いです。

## 今回の学習内容
**◆「Azureのデータ移行オプション」**
◇対応するMicrosoft Learn ラーニングパス
[Azure の基礎: Azure のアーキテクチャとサービスについて説明する](https://learn.microsoft.com/ja-jp/training/paths/azure-fundamentals-describe-azure-architecture-services/)
◇対応するモジュール
[Azure のデータ移行オプションを特定する](https://learn.microsoft.com/ja-jp/training/modules/describe-azure-storage-services/6-identify-azure-data-migration-options)

※前回の投稿は下記から確認できます。
[Azure Fundamentals(AZ-900)：Azure の基礎: Azure のアーキテクチャとサービスについて説明する「Azure ストレージサービス」](https://qiita.com/fsd-jume/items/f809c7c05932af38fe19)

## Azureのデータ移行オプション
### Azure Migrate
**オンプレミス環境からクラウドへの移行に役立つサービスを提供**
⇒インフラやアプリ、データに対するオンプレミスのリソース検出や評価、最適なサイズ設定などの移行前に必要な機能をサポート

**◆Azure Migrateによる提供**
・統合された移行プラットフォーム：Azureへの移行を開始、実行、追跡するための単一のポータル
・ツールの範囲：評価と移行のための様々なツール
※他のAzureサービスやツール、独立系ソフトウェアベンダ(ISV)オファリングとも統合
・評価と移行：オンプレミスインフラの評価とAzureへの移行が可能

**◆統合されているツール**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851723/8c57b573-8254-49db-be9e-46a30757e7d0.png)

### Azure Data Box
・大量のデータを迅速かつ安価で信頼性高く転送することができる物理移行サービス
・最大80TBの独自Data Boxストレージデバイスを使用してデータを転送
・デバイスは堅牢な筐体で保護され、転送中のデータはセキュリティで保護
・Azureとの間でデータをインポート/エクスポートすることが可能

**◆オンプレミスからAzureにデータを転送する場合のフロー**
①注文：Azure PortalでData Boxデバイスを注文
②輸送：Azureデータセンターから地域の運送業者を介して利用者のデータセンターにデバイスを輸送
③コピー：到着したデバイスをローカルWeb UIを使用してネットワークに接続し、データをコピー
④返却：デバイスをAzureデータセンターに返送
⑤移行：デバイスからAzureにデータが自動的にアップロード
※プロセス全体は、Azure PortalのData Boxサービスでエンドツーエンドで追跡可能

**◆ユースケース(Azureへのインポート)**
**・一回限りの移行**
大量のオンプレミスデータをAzureに移動する場合
 -オフラインテープのメディアライブラリをAzureに移動し、オンラインメディアライブラリを作成
 -VMファーム、SQL Server、アプリをAzureに移行
 -HDInsightを使用して詳細な分析やレポート作成を行うために、履歴データをAzureに移動
**・初期一括転送**
Data Boxを使用して初期一括転送が実行された後に、ネットワーク経由で増分転送を行う場合
**・定期的なアップロード**
定期的に生成される大量のデータをAzureに移動する必要がある場合
例)石油掘削装置や風力発電地帯でビデオコンテンツが生成されるエネルギー探査

**◆ユースケース(Azureからのエクスポート)**
**・ディザスターリカバリ**
Azureのデータのコピーをオンプレミスネットワークに復元する場合
**・セキュリティ要件**
政府/セキュリティ要件により、Azureからデータをエクスポートできる必要がある場合
例)Azure StorageはUS SecretとTop Secretのクラウドで利用でき、Data Boxを使用してAzureからデータをエクスポート可能
**・オンプレミス/別のクラウドサービス事業者への移行**
すべてのデータをオンプレミス/別のクラウドサービス事業者に戻す場合

**◆ディスクの消去**
**・インポート**
データがAzureにアップロードされると、デバイスのディスクが完全に消去される
**・エクスポート**
デバイスがAzureデータセンターに到着するとディスクが消去される

## 次の学習内容
**◆Azureのファイル移動オプション**

https://qiita.com/fsd-jume/items/8ebadb8ee2cd1cd36e4d

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8
ホームページとダッシュボードの違い

## 概要
ServiceNow‐Utahリリースより、本格的にHP→Dashboardの移行が推奨され、後方互換性がない変更になるので、両者の差分を調査した。
以下の二点について軽くまとめ。
- 両者の仕様差分
- 設定変更方法

### 仕様
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/87a7b854-e569-8e9f-b346-0ebae419592b.png)
詳細な記載は上記であるが、仕様面の差分はおおむね3点

- 固定レイアウトかレスポンシブUIか
- レンダリング性能
- ロールと共有

### 仕様‐UI
UIでの差分は以下。ヘッダーがおぼろげに違う。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/9f5f7cd6-c03c-2ed7-1969-d77205cdb275.png)

### 設定変更
##### 1.画面遷移制御
ログイン時の初期遷移画面をHPからDashboardに変更させる管理者設定として、以下のシステムプロパティをTrueにすることで実現可能。
com.glideapp.home.deprecate_homepages
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/339d7e5d-f44d-0042-9979-d4d65af25069.png)

##### 2.個別ユーザー設定
1.がFalseの場合、全体のシステムセッティングにおいて、個別ユーザーがホームページを使用するか、ダッシュボードを使用するかを、HomeのChoice選択にて選択できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/a58c36f9-6f60-c78a-5859-259e2a46c49e.png)

1．をTrueの場合、このセッティングの選択肢自体が消える。

##### 3.Storeアプリ
StoreでHomepage Depretionというツールが存在する。そこで管理ツールを導入すれば、上記の動作についてツールを通して対応可能となる。

### 参照
以下のドキュメント
[ホームページとレスポンシブダッシュボード](https://docs.servicenow.com/bundle/quebec-now-intelligence/page/use/dashboards/concept/differences-between-respsonsive-and-non-responsive-dashboards.html)

ついでに...技術ブログをやっておりますので、よければそちらもアクセスくださいませ。プロフィールアイコンのリンクより遷移可能。ServiceNowのことが最近メインに書いてます。
複数選択項目において、選んだ項目数を数値表記する項目は作成可能かどうか


[複数選択項目において、選んだ項目数を数値表記する項目は作成可能かどうか](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000KeybU)


新しい関数が増えているようです。

よく分からなかったのですが **PICKLISTCOUNT** とうのがあるような記述がありました。

https://automationchampion.com/2022/04/26/count-selected-values-in-a-multi-select-picklist-2/

更に調べてみると
https://twitter.com/tammforce/status/1536160372712804352

ヘルプに乗ってないみたいですね。
For #SFDC#SFDC formula users with multi select picklists: PICKLISTCOUNT() returns the number of selected items in an MSP field. It’s available now (Summer ‘22). It isn’t in the help docs or release notes yet, but feel free to tell your friends.
【ssh】~/.ssh/config ってなんなの？【OpenSSH】

## はじめに
先日、別記事でも書いたようにPCがぶっ壊れたのでイチから環境を作り直しました。
業務でBitbucketを使っているので、SSH接続したいなって思い、SSH接続のやり方を調べてると
（当然ながら） **~/.ssh/config ってファイル作って何かしらを書け！それでOK！** みたいに書いてあって。

無事にSSH接続できるようになったので不満はないのですが、そもそも何故、存在しなかった``~/.ssh/config`` ファイルを作るだけでそれらしくSSH接続できるのかがさっぱり分からなかったので、少しだけSSHコマンドについて調べてみました。

SSH自体とかセキュリティに突っ込んでいくと途方に暮れそうなので今回はやりません。

## とりあえずsshコマンドって何者？
困ったときのmanコマンド…

```zsh:$ man ssh をポチっと
NAME
     ssh – OpenSSH remote login client
 
SYNOPSIS
     ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
         [-i identity_file] [-J destination] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
         [-w local_tun[:remote_tun]] destination [command]
（以下略）
```
とりあえず私の環境では（という表現が適切かどうかは別）、sshコマンドというのは**OpenSSH**が何かしてくれるものってことが分かりました。

## OpenSSH
**OpenBSD**っていうUNIX系のフリーOSを作ってたりする団体が手掛ける、SSHプロトコルを実装したソフトウェア。なんだそうな。
MacもそうだしLinux系のOSには大体最初から入っているらしい。すごいね！
Windows10からは、windows端末にもOpenSSHが標準搭載されている。すごいね！

## ~/.ssh/config がないとき
```vim: sshコマンド一例（抜粋）
# ポート名を指定する場合
ssh ユーザー名@ホスト名 -p ポート番号

# 公開鍵認証の場合
ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前

# ポート名及び、公開鍵認証の場合
ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前 -p ポート番号
```
sshで接続したいサーバーが1つなら別にいいけど、複数サーバーとかあると覚えるのめんどくさそう。
なので、``~/.ssh/config``で設定ファイル作っておこうね、っていう話なわけ。

じゃあ、本題の``~/.ssh/config``を書けばいいよって根拠はどこか。

さっきの``man ssh``をポチッとした場面、OpenSSHのマニュアルページから覗いてみると各所にリンクが付いていて
その中に``ssh_config``というリンクがあり、下記URLに飛ぶことができます。
https://man.openbsd.org/ssh_config.5

それを見ると最初にこんなことが書いてあります。
```text:ssh_configの最初の方
ssh(1) obtains configuration data from the following sources in the following order:

1.command-line options
2.user's configuration file (~/.ssh/config)
3.system-wide configuration file (/etc/ssh/ssh_config)
```
SSH接続するときの設定をどこから検出するかの優先順位について書かれており、当然1番目はコマンド直打ちしたものですが2番目にいますね、``~/.ssh/config``。こいつが根拠のようです。やっと見つけた。
なお、3つ目の``/etc/ssh/ssh_config``はシステム全体の設定ファイルのことのよう。~~特に使わないと思う~~
gihubにつなぎます。Bitbucketにつなぎます。AWSにつなぎます。みたいに、個別のサーバーに対して各々設定を置く場合がほとんどだと思うので、``~/.ssh/config``ファイルを作って、その中にでそれぞれの設定を書くようにしましょう。

当ページの下には、それこそ一般的に``~/.ssh/config``でこんなこと書けばいいんだよと言われている各パラメータの意味合いであったりパターンについて記載があるので、ご興味あればぜひご一読を。

## 参考リンク

https://e-words.jp/w/OpenSSH.html

https://www.openssh.com/

https://qiita.com/passol78/items/2ad123e39efeb1a5286b
Python3: モンテカルロ法で円周率を求める

こちらのページを参考にしました。
[モンテカルロ法で円周率を求めるのをPythonで実装](https://note.com/shimakaze_soft/n/n9547f5c0bae0)

## プログラム

```py:pi_monte_carlo.py
#! /usr/bin/python
#
import random
import math
# ------------------------------------------------------------------
def calc_pi_proc(nn):
	point = 0
	for it in range(nn):
		xx = random.random()
		yy = random.random()
		if math.hypot(xx,yy) < 1.0:
			point += 1
	pi = 4.0 * point / nn
#
	return	pi
#
# ------------------------------------------------------------------
for it in range (1,11):
	nn = 1000 * (it**2)
	pi = calc_pi_proc(nn)
	print(it,nn,pi)
#
# ------------------------------------------------------------------
```

## 実行結果
乱数を使うので、実行のたびに結果が異なります。

```text
$ ./pi_monte_carlo.py 
1 1000 3.196
2 4000 3.118
3 9000 3.1542222222222223
4 16000 3.14175
5 25000 3.13312
6 36000 3.145
7 49000 3.1484897959183673
8 64000 3.1285625
9 81000 3.1404938271604936
10 100000 3.14424
```

```text
$ ./pi_monte_carlo.py 
1 1000 3.124
2 4000 3.151
3 9000 3.1355555555555554
4 16000 3.14675
5 25000 3.14496
6 36000 3.1384444444444446
7 49000 3.134612244897959
8 64000 3.151
9 81000 3.1486913580246916
10 100000 3.13892
```

## 確認したバージョン

```text
$ python --version
Python 3.10.7
```
SalesforceとAzure のSSOのエラー

+ [【Azure】AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application: 'edeb27a6-cc2d-424e-8cbe-a02a20891153'.I am having trouble connecting the WP main connection app to the Azure account.](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000FxmlU)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f1ed1846-aaf8-936c-f26f-2f128c60afc5.png)

Couldnt find any information on where the  AssertionConsumerServiceURL  but this is the setting that worked for me.
AssertionConsumerServiceURL の場所に関する情報は見つかりませんでした  が、これは私にとってはうまくいった設定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/45b44c1a-dbdd-3f53-aca0-c4f5f0eec122.png)

+ [AADSTS20012: An error occurred when we tried to process a WS-Federation message. The message was invalid , malformatted, or contains potentially dangerous characters](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Jyba6)

I was able to get global single logout working with Azure AD. There were two things I needed to confirm :

1. Signing Certificate for identity provider and Service Certificate for the service provider.
2. Logout URL - Azure AD gives the logout URL as https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0 which is incorrect. The logout URL must match the signOnURL provided by Azure.
 

https://stackoverflow.com/questions/59461777/saml-single-logout-using-sustainsys-and-azure-giving-message-is-invalid-error

# Azure フェデレーション ID メタデータを Salesforce サンドボックスに再度アップロードする(拡張ドメインを使用した新しい URL があるため)

新しい SSO 設定を作成する必要があります (SAML の [メタデータ ファイルから新規作成] ボタンSalesforce の SSO 設定)。 

その後、私が見逃したステップは、[私のドメイン] 設定に戻って [認証サービス] オプション ([認証設定] 内) を変更し、メタデータ ファイルで作成した最新の SSO 設定を使用することを Salesforce が認識できるようにすることでした。 

IDP (この場合は Azure) メタデータ ファイルを Salesforce SSO 設定にアップロードし、[私のドメイン] 設定で正しい認証サービス オプションを選択します。 

Azure の応答 URL に / を追加して、リンクを保存できるようにしました。そのように機能します。実際、Azure の 3 つの URL (エンティティ ID、応答 URL、サインオン URL) にコピーされたエンティティ ID URL のみを使用して構成をテストしたところ、動作しました。この方法では、URL で組織 ID をまったく使用しません。つまり、組織 ID が変更されるたびに応答 URL を更新する必要がありません。


[Salesforce Sandbox SSO 設定 (エンドポイント) のログイン URL が正しくないようです (/ がありません)](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000JdRfl)

上記の回答に加えて、証明書が一致しない場合にもエラーが発生する可能性があります。その場合、Azure からの証明書が必要になり、Salesforce シングル サインオン画面で ID プロバイダー証明書 を更新する必要があります。

# ゲストユーザ

+ [SSO for Azure AD Guest Accounts](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000078RKdd)

:::note
 We have set up and it is working. The only caveat we found was that the guest account needed to be assigned to the Enterprise application directly and not via a nested group.

セットアップが完了し、動作しています。私たちが発見した唯一の注意点は、ゲスト アカウントは、ネストされたグループ経由ではなく、エンタープライズ アプリケーションに直接割り当てる必要があるということでした。
:::

# 未解決

+ [Salesforceの自動プロビジョニング](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007UtiIE)
$(function(){});の意味

# はじめに
`$(function(){});`という書き出しで始まるこちらのコード。
特に説明をされることが無いためメモとして残しておきます。

# $(function(){});について
実はこのコード、省略形になっています。
省略せずに書くと`$(document).ready(function(){});`となります。

つまりHTML(document)の読み込み(ready)が完了してから処理を開始するということになり、基本は省略形を使う。

# サンプルコード
```javascript:省略形
$(function(){

    //ここにjQueryコード

});
   
```

```javascript:省略なし
$(document).ready(function(){

    //ここにjQueryコード

});
   
```
Microsoft AI-102 Designing and Implementing a Microsoft Azure AI Solution 合格体験記

先日、Microsoft 認定 AI-102: Designing and Implementing a Microsoft Azure AI Solution に合格致しました。
この試験については、AZ-104 などと比べて、ネット上でいろいろと検索しても情報が少なかったため、これから受験を考えている方の何かのヒントになればと思い、はじめて Qiita に投稿致しました。

# バックグラウンド
- Azure は、個人的に少し試した程度です。
- 仕事で、若干、機械学習に関することに携わっています。
- Microsoft認定資格：AZ-104, AZ-900, AI-900, SC-900, PL-900 合格済み。
- 関連しそうな他の資格：E資格 2022#1
- 勉強期間は、3ヶ月ほど。（途中、空白期間あり。実質1ヶ月半ほど。）

# 受験結果
テストセンターで受験し、スコアは 845/1000 でした。

# 活用教材
1. MS Laern 内のコレクション
    - https://learn.microsoft.com/ja-jp/certifications/azure-ai-engineer/
2. Udemy : AI-102 Microsoft Azure AI Solution Complete Exam Prep 2022
    - https://www.udemy.com/course/ai102-azure/
3. Udemy : AI-102用問題集（1コース）
4. ネット上にある無料問題集
    - https://www.jpnshiken.com/exam/AI-102-designing-and-implementing-an-azure-ai-solution-12420.html

まずは Microsoft推奨のコースを活用。
他にコースは無いかと調べた結果、Udemyのコースを発見し購入。
ネット上の無料問題集を発見し、こちらを活用。
追加の問題演習をする必要性を覚えて、Udemy で問題集を1コース購入。


# 勉強方法
- MS Learn のコレクションは、一度、全体像を把握するために全体を通して読みました。演習は、実施したもの実施しなかったもの様々です。私は、目の相性の問題なのか、ドキュメント類を画面上で長く閲覧出来ないため、印刷してキーポイントと思う所をマーキングしながら読みました。
- Udemy のコースは、英語コンテンツのため、MS Edge で字幕を日本語に翻訳しながら、全体を視聴しました。日本で開催されているコースを受講出来る方は不必要だと思います。
- Udemy の問題集は、検索をすると幾つか出てきます。そのうちの 1コースを購入。本文が英語のため MS Edge で翻訳しつつ問題の概要を把握して取り組みました。最終的には、概ね 7 割程度になるまで繰り返し解きました（問題集上の合格点には、達しませんでした）。なお、購入した問題集は、無料問題集と情報が重なる内容も多く、かつ、回答方式も4択からの選択となるため、繰り返し解くと問題慣れ（かつ理解せずに反射的に解答してしまう）をしてしまう一面もありました。
- 無料問題集についてです。ある面、この問題集が一番活用できました。と言いますのも、こちらの問題集、怪しい日本語と英語が混ざった本文に、正解なのか不正解なのか怪しい回答と、これまた怪しい解説とがセットになっていました。そこで、これらの問題の解答を、怪しい解説を参考に、Microsoftの公式ドキュメントから探し出して自分なりに理解して正解（と思うもの）を探すということをしました。この作業が一番の勉強になりました。
- 上記の中で、必要に応じてMicrosoftのドキュメント類も読みました。Azure AI の宿命としてサービス変更があり、新旧サービスのドキュメントを試験対策としてどの程度カバーすべきなのか悩みながら、独断で判断して活用しました。ドキュメントは[Weava](https://www.weavatools.com/)を活用しながら、マーキングしました。

# まとめ
Azure AI にある様々なサービスの概要を学ぶことができました。実際に活用出来るかと言えば、まだまだですが、とても愉しかったです。
最近は、AZ-104 等の書籍が幾つか出てきましたが、他の Azure 認定資格に関する書籍類（テキスト・問題集等）ももっと増えて欲しいと思っています。AI-102 についても、書籍が出ると嬉しいですね。
機会があれば、次は DP-100: Designing and Implementing a Data Science Solution on Azure に挑戦したいと考えています。

ご覧頂きありがとうございました。
Oracle Analytics Cloud：モバイルアプリを使用して分析してみる

# はじめに
Oracle Analytics Cloud（**OAC**）にアクセスするためのモバイルアプリが、App StoreやGoogle Playで入手できます。
それぞれにアクセスして、「Oracle Analytics」で検索してください。
ここでは、AppleのApp Storeで入手したiOS版のOracle Analyticsアプリを紹介します。

# アプリの起動
Oracle Analyticsアプリをダウンロードし、起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e25ff4af-be8a-2795-ef48-d3b76751b880.png)

# OACへの接続
「Use secure connection」をオンにして、OACのURLを入力し「Connect」をタップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/64cc528d-a971-a6db-88eb-fa2cf68d6785.png)
ユーザ名とパスワードを入力して「Login」をタップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/22d72648-0a20-2a30-818a-504952d6cff7.png)

## 最近使ったやつ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e0be2303-2e09-d749-688d-175e61856d30.png)

## お気に入りに登録してあるやつ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f0d022f7-5d5f-353f-6f44-9d744a207558.png)

## プロジェクト（ワークブック）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/2a6e1be2-acf7-8de0-b3df-9a8c50f0b2f1.png)

## データセット
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8ec5d5c8-f883-2c01-c718-1bf92ab0e48d.png)

# 新規でワークブックを作ってみる
データセットをタップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/461dd3d9-0691-ec77-949a-c5b61d6328da.png)

必要なディメンションとメジャーを選んで、「Next」をタップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/87bfee34-bfe8-3acc-d837-6aa6ecdc9b10.png)

いくつかの可視化を提案してくれるので、気に入ったものを選択して「Finish」をタップしたら完成です。

GIFアニメにしてみました。
![bsw9o-y03yf.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/436367b9-f851-2552-ed58-ae878c033a19.gif)

# 参考
[公式ドキュメント：Oracle Analytics for AndroidおよびiOSの使用](https://docs.oracle.com/cd/E83857_01/paas/analytics-cloud/aaios/index.html)
[公式ドキュメント（最新）：Using Oracle Analytics for Android and iOS](https://docs.oracle.com/en/cloud/paas/analytics-cloud/aaios/index.html)
MacからRaspberry PiにVNC接続するときに、MacのFinderの移動メニューに「サーバーへ接続」が出ないとき。

# MacからRaspberry PiにVNC接続するときに、MacのFinderの移動メニューに「サーバーへ接続」が出ないとき。

注意：Raspberry Pi側でVNC接続が済んでいる事



Ctrl + Space でスポットライトの入力窓を開いて vnc://アドレス Enter![ss 12.png]
![ss 11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6384/60f8326c-b53d-2f41-2485-85d0270fef01.png)

VNCアクセスが出来る。

![ss 12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6384/d5fd33bc-978b-346f-cf34-56ca637fa55c.png)

![ss 13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6384/bc304f9b-ec9f-392d-f137-295cf2c51ef9.png)

注： Safariブラウザのアドレス欄に同様に入力しても画面共有が出来る。
DBにSQLを自動発行させ処理速度を上げる(SPSS Modeler データ加工逆引き9-6)

# DBにSQLを自動発行させ処理速度を上げる(SQLプッシュバック)

![スクリーンショット 2022-10-19 13.46.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/fedf8dfa-da2d-2457-ff81-882bcc123617.png)

## 1.想定される利用目的

・大規模なデータベースを入力にした際のデータ加工速度の向上


## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/cache.str?raw=true

ストリームは逆引き9-6と同じものです。DB入力ノードは個別に設定ください。

## 3.サンプルストリームの説明

![スクリーンショット 2022-10-19 15.12.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/834eae85-aa79-27b4-3877-1770665f4ad8.png)

a.入力するデータのひとつ目です。6種類のカテゴリーと値が100万レコード（行）生成されます。
![スクリーンショット 2022-10-18 10.05.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/be9fdbf2-f656-cdca-ac85-3bf8928124e4.png)

DB接続は以下の記事を参考にしてください。

https://qiita.com/416nishimaki/items/ee13873b9d78268d648a

b.入力ふたつ目はカテゴリの重みマスタです。
![スクリーンショット 2022-10-18 10.06.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/957618b4-011f-a7b0-c8a1-9cc041ec16cb.png)

c.[レコード結合]ノードを編集します。ふたつの入力データを[Cate]をキーに内部結合します。
![スクリーンショット 2022-10-18 10.07.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1a3c6f16-6330-05c3-12b3-878b0a4fc158.png)

d.[フィールド作成]ノードを編集します。値に重みを掛けます。
![スクリーンショット 2022-10-18 10.07.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/099d9a89-954a-f054-5098-f7286679d3cf.png)

e.[レコード集計]ノードを編集します。
![スクリーンショット 2022-10-18 10.08.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f22d1524-3080-6a86-882f-9680d9b49ba9.png)

f.[テーブル]を実行します。プロセスがSQLに変換されるとノードが紫色に発光します。
![スクリーンショット 2022-10-19 15.16.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/003db8bb-e140-3ef5-f850-76035be99390.png)

1秒かからず、処理が完了してテーブルが表示されます。実際にDBが処理したSQLもわかります。
![スクリーンショット 2022-10-19 15.19.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b38bcd15-5a9d-a6bd-82ba-6a8e3043ca48.png)

同じ処理をメモリ16GBのMacで行うと28秒かかりました。
![スクリーンショット 2022-10-18 10.12.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0c546095-63d0-c1f4-5a6c-6e5b7a4d2db5.png)


#### 注意事項

自動でDBに投げられたSQLを表示するにはあらかじめストリームのプロパティの設定が必要です。

![スクリーンショット 2022-10-19 15.21.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/864361f7-2b8f-2fff-b649-48345ffba417.png)

実行前にどのノード範囲までSQLプッシュバックが効くやSQL文を確認する場合は以下の赤枠ボタンを押します。
![スクリーンショット 2022-10-19 15.23.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f54fc968-b7a7-1033-26b8-a0c9415dc33a.png)

## 4.参考情報

#### SQLプッシュバックを解説した記事

https://www.ibm.com/blogs/solutions/jp-ja/learn-modeler-02/

https://www.ibm.com/blogs/solutions/jp-ja/spssmodeler-push-node-16/

https://qiita.com/kawada2017/items/418378d654c7cc36c20a

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
Google UXデザイン：競合分析結果をプレゼンする

# はじめに

わたしが[Google UX Design Certificateで得られた素晴らしい体験][google]を、特に重要だと思われるポイントを小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ Google UX Design Certificateを受講してみてください。

[google]: https://qiita.com/mapami/items/7a0d0a3d4661c50f8bec

https://www.coursera.org/professional-certificates/google-ux-design

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/c3d622bb-c1ed-447b-c15e-c1bccff32a4a.png" width="800">

# 競合分析結果をまとめる

[前回ご紹介したように直接・間接の競合他社を調査][audit]し、その結果をスプレッドシートにまとめたら、次のステップは、チームやクライアントとその洞察を共有します。

[audit]:https://qiita.com/mapami/items/0435851afd8ccc256d23

#### 書面による報告書
より簡潔で、作成にかかる時間も短くなります。聴衆にあまり時間がない場合、洞察を素早く伝えるのに効果的な方法です。

#### Googleスライド・PowerPointなどを使ったスライド
ダイナミックで視覚的に魅力的ですが、作成とリハーサルに多くの時間と労力を必要とします。


# よいプレゼンテーションのためのTIPS
### 1
はじめに、プレゼンテーションの目的を要約することで、競合について何を学ぼうとしているのかが明確になります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/558c08bc-61b8-558a-c2c6-71348f4e6256.png" width="700">
### 2
プレゼンテーションの各セクションでは、そのセクションのトピックを特定するスライドで始めるとよいでしょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/51355990-e1b9-ba22-728e-46722229a8db.png" width="700">
### 3
競合製品について学んだこと、そして自社製品との比較についてまとめます。全体的なデザインは、できる限りシンプルでクリーンなものにしましょう。ごちゃごちゃした分かりにくい画像は避けることで、聴衆は重要な情報に集中し、理解しやすくなります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/a683015c-adb6-38f2-4ce9-ff38e56ce0ea.png" width="700">
### 4
キーポイントと収穫をまとめ、プレゼンテーションを終了します。競合分析は最大10社まで比較することができます。これは、聴衆にとって非常に多くの情報ですので、サマリーは聴衆の記憶を呼び覚ますことに役立ちます。

# データを効果的に見せる

データをどのように見せるかによって、聴衆の解釈は変わります。データの種類によって、適した形式が異なることを覚えておいてください。

- 多くの数値や定量的なデータが含まれる場合、図表を含める。
- 競合他社の製品の特定の機能や問題点を示すには、スクリーンショットを含める。

最後に、分析で使用した評価システムを説明するルーブリックを含めると役に立ちます。
- 前回分析したハンバーガー・レストランを "Needs works "から "Outstanding "まで格付けしています。そのルーブリックを使用して、各レストランを各カテゴリーで1～4のスケールで評価し、最終的な評価を作成しました。

# 強力なプレゼンテーション

<dl>
  <dt>チームからフィードバックを得る</dt>
  <dd>事前に信頼できるチームメイトとレポートやスライドを共有し、情報の流れについて意見を聞く。</dd>
  <dt>スライドに記載するテキストの量を制限する</dt>
  <dd>スライドには、重要なポイントに注意を向けるための十分な情報を含める必要があります。詳細はスピーチのために取っておく。</dd>
  <dt>ハイライトに徹する</dt>
  <dd>チームやクライアントへのプレゼンテーションは、分析のハイライトにのみ焦点を当てるべきです。もっと詳しく知りたい場合は、プレゼンテーションの付録に加えるか、報告書を作成してください。</dd>
  <dt>メモを使用する</dt>
  <dd>アウトラインやメモ用紙は、集中力を維持し、話題を絞り、時間通りに進めるために役立ちます。</dd>
  <dt>事前に練習をする</dt>
  <dd>本番前に何度か練習し、プレゼンテーションの内容やペースに慣れるようにしましょう。</dd>
  <dt>関連性のある画像を使用する</dt>
  <dd>画像やグラフィックは、プレゼンテーションのトピックに直接関連するものであることを確認してください。画像やグラフィックは、わかりやすさを高めるために慎重に選びましょう。</dd>
  <dt>自分の偏見を抑制する</dt>
  <dd>自分のデザインに対する偏見を自覚し、それがプレゼンテーションの判断を鈍らせることがないようにしましょう。</dd>
  <dt>結論を守る</dt>
  <dd>結論の裏付けとなるエビデンスを用意しましょう。可能な限り、実際のデータや具体的な事例を使用しましょう。</dd>
</dl>

# 競合分析からブレインストーミングへ

デザイナー、リサーチャー、ライター、エンジニアなど、さまざまな視点からアイデアを出せるチームを編成し、ブレインストーミングを始めます。

たとえば、競合の2社が会員登録に手間がかかるとします。
- あなたの製品のサインアッププロセスは簡単ですか？
- 競合他社に差をつけるために、サインアッププロセスのデザインを更新することは可能でしょうか？

どうすればもっと良くなるかアイデアを出すうちに、競合他社がまだ考えていない新しい強みを発見できるかもしれません。

たくさんのアイデアを思いついたら、それらを分類し始めます。似たようなアイデアをグループ分けして、パターンを明らかにすれば、いくつかのアイデアが自然に上位に上がってくるでしょう。

目標は、

***<font color="MediumVioletRed">『このブレーンストーミングで、製品を競合他社から際立たせるためのアイデアのリストを手に入れること』</font>***
Appleの審査で「Sign in with Apple」がなくてリジェクトされた話(Guideline 4.8 - Design - Sign in with Apple)

GoogleやTwitterなどのサードパーティを利用した認識機能を実装したiOSアプリを審査提出しましたが、下記の理由でリジェクトされました。

https://developer.apple.com/app-store/review/guidelines/#sign-in-with-apple
```
Guideline 4.8 - Design - Sign in with Apple

Your app uses a third-party login service, but does not offer Sign in with Apple. Apps that use a third-party login service for account authentication need to offer Sign in with Apple to users as an equivalent option.

Next Steps

Please revise your app to offer Sign in with Apple as an equivalent option for account authentication.

```

どうやらサードパーティ製の認証を利用している場合はAppleの認証機能も追加してねとのことらしい。
審査提出したアプリではGoogleとTwitter認証を使っていたので、この２つの認証機能を廃止するかAppleの認証機能をつけるかの二択。
今回はAppleの認証機能をつけることにした。

Firebaseを利用していたので、Firebaseで下記の公式ドキュメントに従って実装
https://firebase.google.com/docs/auth/ios/apple?hl=ja

## 1.Firebase,AppleDeveloper,XcodeでSign in With Appleを利用できるように設定をする
### 1-1.Firebaseの設定
Authetication>Sign-in methodから「新しいプロバイダを追加」でAppleを選択
![IMG_6009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/39ee4224-3752-ff37-5e0f-1a9a0c8f2ae4.jpeg)

右上の「有効にする」をONにして保存
![IMG_6011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/e3facd81-670e-ae98-ce5f-15f3deef5cde.jpeg)

### １−２.AppleDeveloperの設定
Certificates, Identifiers & Profiles>Identifiersから対象のアプリを選択
その後Capabilitiesの一覧から「Sign In with Apple」のチェックボックスにチェックを入れて保存

![IMG_6012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/6db4921f-1944-8dad-b48e-7c33d4d2aee0.jpeg)

### 1-3.Xcodeの設定
Signing&Capabilitiesから「＋Capabilitiy」を選択 
![IMG_6015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/59836533-6eed-18b2-5467-82d250cc2e53.jpeg)

ウィンドウが表示されるので「Sign in with Apple」を選択
![IMG_6016.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/1a24ab50-b1ea-42bd-dc89-8f8edf0fd099.jpeg)



以上で実装までの準備は完了。

## ２.実装

実装方法はFireBaseの公式ドキュメントに記載があるのでこちらに従う。
https://firebase.google.com/docs/auth/ios/apple?hl=ja

また、「Sign in with Apple」のボタンについては細かいガイドラインがあるのでそれを守る必要がある。
https://developer.apple.com/design/human-interface-guidelines/technologies/sign-in-with-apple

ロゴの大きさ、タイトル、文字の大きさ、背景色とボタンの色など


imageとしてボタンに画像を設定する場合は下記で作成が可能（よくエラーになりますが、、）
https://appleid.apple.com/signinwithapple/button#center-align-button-section



以上で設定は完了。
あとは機能を追加したよとAppleに返信して再申請をするだけ。
モデル共有 BYOM(Bring Your Own Model)

[Teradata Vantage™ - Bring Your Own Model User Guide](https://docs.teradata.com/r/Teradata-VantageTM-Bring-Your-Own-Model-User-Guide/May-2022/BYOM-Functions) [リリース番号:3.0 最終更新日:2022/6/2]の内容をもとに作成しています。

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

> Vantageアナリティクス BYOMシリーズのコンテンツです。
:::note information
各機能の詳細な説明に関しては、段階的にリンクを追加していきますので、リンクから詳細ページを参照してご利用下さい。
:::
## モデル共有(BYOM)とは？
モデル共有(Bring Your Own Model)は、PythonやRといったオープンソースや、AutoMLといった分析ツールでモデリングを行い、それを予測モデル交換フォーマットにより、VantageCloudに取り込み、スコアリングする方法になります。 
<img width="900" alt=" BYOM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740723/67c594c6-aeac-832b-6203-ab33daf73e64.png">
※BYOM=Bring Your Own Modelの略。

## 対応しているフォーマット
|フォーマット| 説明 |対応しているモデル|
|:-|:-|:-|
|PMML|PMMLはXML ベースの予測モデル交換フォーマットです。 PMML は、分析アプリケーションが、データ マイニングおよび機械学習アルゴリズムによって生成された予測モデルを記述および交換する方法を提供します。|異常検出、クラスタリング、一般回帰、k 最近傍法、単純ベイズ、ニューロネットワーク、ランダムフォレスト、ディシジョン ツリー、ベクターマシン|
|H2O.ai<br>(MOJO)|MOJOは、H2O の POJO に代わるものです。 POJO と同様に、H2O では、構築したモデルを MOJO に変換できます。MOJO は、リアルタイムでスコアリングのために展開できます。|Driverless AIとH2O-3 MOJOモデルに対応しています。|
|ONNX|ONNX は、機械学習モデルを表現するために構築されたオープン フォーマットです。 ONNX は、AI 開発者がさまざまなフレームワーク、ツール、ランタイム、およびコンパイラでモデルを使用できるようにするための共通の演算子セット と共通のファイル形式を定義します。|Chainer、Caffee2、PyTorch などはONNX へのネイティブ エクスポート機能をサポートしています。 Scikit-learn、TensorFlow、Keras、XGBoost、H2O、Spark ML などから ONNX に変換することもできます。|

※H2O Driverless AI (DAI)の利用時には別途H2O DAIの各種ライセンスが必要となります。


## モデル共有(BYOM)の利用手順
<img width="900" alt=" BYOM2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740723/4308fc4f-1652-847a-fb32-5c872e5e2006.png">

## 実行方法(PMMLの場合)
##### モデルテーブルの作成
```CreateModelTable.sql
CREATE SET TABLE pmml_models 
( model_id VARCHAR (30), 
　 model BLOB )
PRIMARY INDEX (model_id);
```
##### モデルのロード(Teradata Studioからの場合)
```ModelLoad.sql
INSERT INTO pmml_models VALUES ('iris_db_rf_model', ?);
```

##### スコアリングの実施
```ExecuteScoring.sql
CREATE MULTISET TABLE glm_adult_binary AS      /* スコアリング結果を格納するテーブルの作成 */
( SELECT * FROM mldb.PMMLPredict (             /* PMMLPredict関数の指定 */
  ON adultTest 					               /* データの入力テーブルの指定 */
  ON (SELECT * FROM pmml_models WHERE model_id=‘adult_glm_b_model’) DIMENSION  /* モデルの指定 */
  USING 
   Accumulate (‘ID’)                            /* スコアリング結果の蓄積単位の指定 */
  ) AS TD 
) WITH DATA;
```
## おわりに
:::note warn
警告
この本書はWEB上で公開されております[Teradata Vantageドキュメンテーション](https://docs.teradata.com/)よりトピックに必要な情報を抜粋したものです。掲載内容の正確性・完全性・信頼性・最新性を保証するものではございません。正確な内容については、原本をご参照下さい。
:::

#### Teradata Vantageへのお問合せ
[Teradata Vantage へのお問合せ](https://www.teradata.jp/About-Us/Contact)
Python,Ruby,PHP,Java,JavaScript,Perlの論理演算子の比較 | プログラミング言語比較

<a href="https://qiita.com/yuki_kimoto/items/f9c2454e7f9130ddb003">Qiita > プログラミング言語の比較</a>

プログラミング言語Python,Ruby,PHP,Java,JavaScript,Perlの論理演算子の比較

# Python

https://qiita.com/dondondon/items/0b7de45078bee0ba2b13

# Ruby

https://qiita.com/yusuke_blog1026/items/ab33bdfa495597d04f0b

# PHP

https://qiita.com/tsukishimaao/items/b4a2f30c89ea16ef6eb1

# Java

https://qiita.com/takahirocook/items/748990882f2de7a630a1

# JavaScript

https://qiita.com/TakeshiNickOsanai/items/e180777619f1a49f30e5

# Perl

https://perlzemi.com/blog/20100816136168.html
AQM0802Aで「a」を表示して遊ぶ。(LPC812MAX)(mbed)(I2C液晶)


x mbed2リビジョン144
x リビジョン変更がわかる人むけ


目的
軽量コンパクト化しすぎたので原点に戻って遊ぶ。


AQM0802A-RA-GBWの呼び名は、AQM0802または、AQM0802Aとする。

AQM0802は、どうも秋月のオリジナルぽい
値段改正がいろいろ起きて値段がバグっているので
買う時は、注意しましょう。
自称プロフェッサー(教授(なんの))であるの機体は、
いろいろ、いじってあるので、初心者は、完成済みが
おすすめ(10KΩプルアップは、いちお、盛っているみたい)


一番最初の"@"は、データモードの制御文字でその後は表示文字。

"@a"は、"a"が表示される。

"@HELLO"は、"HELLO"が表示される。

0x00,0x80は、カーソルを1行目先頭に移動
0x00,0xC0は、カーソルを2行目先頭に移動


![o_cop189.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/d8652a06-8734-6c56-a45e-020aaa188a4e.jpeg)


![o_cop190.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/924ad9a3-08e3-7b9e-8f16-be02685a64b9.jpeg)


![o_cop191.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/f6bf322c-51ce-88fb-7f25-88db2ee85033.jpeg)


![o_cop192.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/6a008fb2-dc9c-5db7-ee3c-4d3a8484bd82.jpeg)



```c++



//I2C_LCD_int_a_812_1

#include "mbed.h"

#define ADDR     (0x7C) //  address

//       SDA    SCL
I2C i2c(A4, A5); //812


//メイン関数
int main()
{

    //データリード
    char data_read[2];


    //LCDの初期化を開始

    //init
    wait_ms(2); //2ms待つ

    //コマンドモード
    data_read[0] = 0x0;

    data_read[1]=0x38; //function set
    i2c.write(ADDR, data_read, 2);

    data_read[1]=0x39; //function set
    i2c.write(ADDR, data_read, 2);

    data_read[1]=0x14; //interval osc
    i2c.write(ADDR, data_read, 2);

    data_read[1]=0x70; //contrast Low
    i2c.write(ADDR, data_read, 2);

    data_read[1]=0x56; //contast High/icon/power
    i2c.write(ADDR, data_read, 2);

    data_read[1]=0x6C; //follower control
    i2c.write(ADDR, data_read, 2);

    wait_ms(2); //2ms待つ

    data_read[1]=0x38; //function set
    i2c.write(ADDR, data_read, 2);

    data_read[1]=0x0C; //Display On
    i2c.write(ADDR, data_read, 2);

    data_read[1]=0x01; //Clear Display
    i2c.write(ADDR, data_read, 2);

    wait_ms(2); //2ms待つ

    //LCDの初期化が終了


    //文字の表示
    data_read[0]='@'; //データモード
    data_read[1]='a';
    i2c.write(ADDR, data_read, 2);

    //無限ループ
    while (1) {

        //2秒待つ
        wait_ms(2000);

    }//while

}//main





```
【Rails】永続ログイン時に作成されるremember_tokenの有無をminitestで調べる方法

# どうした？
Railsチュートリアルにならって永続ログイン機能を実装しました。
永続ログイン時にはUserモデル内で定義されたクラスに`remember_token`というインスタンス変数が付与されます。
本記事は、minitestでそれの有無を調べる方法をメモとして残します。

# テスト方法
## うまくいかない方法(ログイン時)
```ruby:users_login_test.rb
assert !@user.remember_digest.nil?
```
`@user`に`remember_token`をハッシュ化した`remember_digest`が付与されているかどうかを調べれば良いのかなと思いましたが、minitestはこれをfalseで返してきます。

minitestは、モデル内で定義したインスタンス変数にテストの内部からアクセスできません。
これは、インスタンス変数とminitestのスコープが異なるためです。

## cookiesに`remember_token`が存在するかをチェックする方法
cookiesに保存された`remember_token`の有無を調べる方法です。

```ruby:users_login_test.rb
assert !cookies[:remember_token].empty?
```

ログインしていれば、trueを返します。

## userがもつ`remember_token`とcookiesがもつ`remember_token`が一致するかをチェックする方法
モデル内で定義したインスタンス変数にアクセスするには、`assign`というテストハッシュを使用します。

> **assign(key = nil)**
> アクションを実行した結果、インスタンス変数に代入されたオブジェクトを取得

これを利用してuserがもつ`remember_token`がcookiesがもつ`remember_token`と一致するかをチェックします。
よってテストは以下のようになります。

```ruby:users_login_test.rb
assert cookies[:remember_token], assigns(:user).remember_token
```

ログインしていれば、trueを返します。

# 参考

[Railsチュートリアル 9章](https://railstutorial.jp/chapters/advanced_login?version=6.0#sec-testing_the_remember_me_box)

[Railsガイド ファンクショナルテスト](https://railsdoc.com/page/functional_test)