OmniAICreator/Qiita-1.07M huggingface dataset:
Denoを試す(hello worldまで)

# Deno（ディノ）とは
- DenoはRyan Dahl（Node.jsの製作者）によるJS/TSランタイム
- Node.jsの問題点を改良するために作られたランタイムで、開発体験やセキュリティを意識した設計になっている

今回は公式ドキュメントに沿ってトライする

https://deno.land/manual@v1.32.3/introduction

# 環境
macOS Monterey(version:12.5)
Apple M1 Pro

# インストール
[公式](https://deno.land/manual@v1.32.3/getting_started/installation)の通りに次のコマンドを実行する。

```
$ curl -fsSL https://deno.land/x/install/install.sh | sh
```

実行結果
```
######################################################################## 100.0%
Archive:  /Users/hoge/.deno/bin/deno.zip
  inflating: /Users/hoge/.deno/bin/deno
Deno was installed successfully to /Users/hoge/.deno/bin/deno
Manually add the directory to your $HOME/.zshrc (or similar)
  export DENO_INSTALL="/Users/hoge/.deno"
  export PATH="$DENO_INSTALL/bin:$PATH"
Run '/Users/hoge/.deno/bin/deno --help' to get started

Stuck? Join our Discord https://discord.gg/deno
```

バージョン確認
```
$ deno --version
zsh: command not found: deno
```
エラーが出た。
pathが通ってないのが原因なので通す。

`vi ~/.zshenv`で以下を追記して更新

```
export DENO_INSTALL=~/.deno
export PATH=$DENO_INSTALL/bin:$PATH
```
設定反映
```
$ source ~/.zshenv
```
バージョン再確認
```
$ deno --version
deno 1.32.3 (release, aarch64-apple-darwin)
v8 11.2.214.9
typescript 5.0.3
```
出来た。

# 環境設定（VSCode）
拡張機能をインストール

https://marketplace.visualstudio.com/items?itemName=denoland.vscode-deno

# 公式のハンズオンを試す

```javascript:first_steps.ts
console.log("Welcome to Deno!");
// $ deno run first_steps.ts
// => Welcome to Deno!
```
Android向けに作成したGoogle Test実行ファイルをLLDBでデバッグする

# 概要
[前回](https://qiita.com/Wagomu056/items/5b6b3c789b697ac54596)作成したAndroid向けテスト実行ファイルを、LLDBでデバッグする方法をまとめました。

# LLDBを使ったデバッグ方法

## lldb-serverを端末にコピー

**lldb-server**を実行する端末にコピーします。
lldb-serverはndkディレクトリ内にあります。**aarch64**は端末のアーキテクチャにより適宜変更します。

```shell-session
$ cd ~/Library/Android/sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/darwin-x86_64/lib64/clang/12.0.8/lib/linux
$ adb push aarch64/lldb-server /data/local/tmp
$ adb shell chmod a+x /data/local/tmp/lldb-server
```

## lldb-serverを実行

実行する端末でlldb-serverを起動します。

```shell-session
$ adb shell
emulator_arm64:/ $ cd /data/local/tmp/
emulator_arm64:/ $ ./lldb-server platform --listen *:1234
```

## lldbで接続する

PCでlldbを起動し、lldb-serverを起動した端末に接続します。
接続先は適宜変えます。以下はローカルで起動しているエミュレータに接続しています。

```shell-session
$ lldb
(lldb) platform select remote-android
  Platform: remote-android
 Connected: no
(lldb) platform connect connect://localhost:1234
  Platform: remote-android
    Triple: aarch64-unknown-linux-android
OS Version: 30 (5.4.86-android11-2-00040-g29b2beadc627-ab7157994)
  Hostname: localhost
 Connected: yes
WorkingDir: /
    Kernel: #1 SMP PREEMPT Fri Feb 19 11:59:46 UTC 2021
```

## デバッグ付き起動

端末と繋がったので、後は通常通りlldbを使ってデバッグします。
fileコマンドで実行ファイルを指定して、ブレークポイントを設定して起動してみました。

```shell-session
(lldb) file native-lib-tests
(lldb) br set --file ndk_library.cpp --line 5
(lldb) r
[==========] Running 2 tests from 1 test suite.
[----------] Global test environment set-up.
[----------] 2 tests from ExampleTest
[ RUN      ] ExampleTest.BasicAssertion
[       OK ] ExampleTest.BasicAssertion (0 ms)
[ RUN      ] ExampleTest.NDKLibTest
Process 9372 stopped
* thread #1, name = 'native-lib-test', stop reason = breakpoint 1.1
    frame #0: 0x00000055555e67a4 native-lib-tests`ndk_lib_add(a=2, b=2) at ndk_library.cpp:5:12
   2   	
   3   	int ndk_lib_add(int a, int b)
   4   	{
-> 5   	    return a + b;
   6   	}
Target 0: (native-lib-tests) stopped.
(lldb) c
Process 9372 resuming
[       OK ] ExampleTest.NDKLibTest (408592 ms)
[----------] 2 tests from ExampleTest (408593 ms total)

[----------] Global test environment tear-down
[==========] 2 tests from 1 test suite ran. (408593 ms total)
[  PASSED  ] 2 tests.
Process 9372 exited with status = 0 (0x00000000)
```

# まとめ

これでデバッグしながらテストを書けるようになったと思います。
実はfileロード時にwarningが出ていて、これは後で調べることにします。。

```shell-session
(lldb) file native-lib-tests
warning: (aarch64) /Users/user-name/.lldb/module_cache/remote-android/.cache/E35B2B34-1204-B8F8-73FF-A936612E05F6/libm.so No LZMA support found for reading .gnu_debugdata section
warning: (aarch64) /Users/user-name/.lldb/module_cache/remote-android/.cache/0EF8B9FD-3BA8-4892-8093-21B735317A50/libdl.so No LZMA support found for reading .gnu_debugdata section
warning: (aarch64) /Users/user-nam,e/.lldb/module_cache/remote-android/.cache/859DF8A8-F625-B037-0BF4-6C208FBA5842/ld-android.so No LZMA support found for reading .gnu_debugdata section
Current executable set to '/Users/user-name/git-projects/ndk_lib_test/ndk_lib_test_app/app/.cxx/Debug/output/native-lib-tests' (aarch64).
```

# 参考元
https://www.ninjastars-net.com/entry/2020/04/27/180000
【図解】順運動学の概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030125/b43dd681-ad04-04ab-5d2d-432eec4baf76.png)


:::note
こちらの記事は，[ロボティクスの辞書的な記事（にしたい記事）](https://qiita.com/akinami/items/eb0741b0d9c322e5d5ec)のコンテンツです．
:::
事前に必要な知識（見ておいた方が良い記事）：特になし

# 順運動学とは

順運動学とは，あるロボットアームにおいて

:::note
「各関節の角度[^1]」から「エンドエフェクタ[^2]の位置，姿勢」を求める
:::
問題になります[^3]．


<br>
<br>


例えば下図のような平面2自由度ロボットアームの場合
- 「リンク1の角度$\theta_1$」と「リンク2の角度$\theta_2$」

が決まれば

- 「エンドエフェクタの位置$(x,y)$」

が求められます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030125/b134639b-03e6-9bb0-2d9f-2954ac96d9da.png)


# 順運動学の解法
順運動学により「エンドエフェクタの位置，姿勢」を求める解法には，以下の2種類が存在します．

各解法については，説明が長くなるのでそれぞれ別記事で説明します．

1. 三角関数を用いて図的に求める方法（初めて勉強する方はこちらの方が理解しやすいと思います）
    - [記事link](https://qiita.com/akinami/items/b65a175137b46742533d)
1. 同次変換行列を用いて求める方法
    - [記事link](https://qiita.com/akinami/items/9e65389929cedb1c9551)

# 最後に
ロボットにおける順運動学の概要について説明しました．

しかし，実際にロボットを制御する場面を想像してみるとロボットアームを利用するときは

「各関節の変位」から「エンドエフェクタの位置・姿勢」を求めたい場面（順運動学）
よりも
「エンドエフェクタの位置・姿勢」から「各関節の変位」を求めたい場面

の方が多いと思います．

例えば，
「地点Aにあるペットボトルをエンドエフェクタで掴みたい！」
と言った場合は，
「地点A（エンドエフェクタの位置・姿勢）」がわかった状態で「各関節の変位」を求める
必要があります．

このように，順運動学とは逆に「エンドエフェクタの位置・姿勢」から「各関節の変位」を求める問題を
- 逆運動学

と言います．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030125/dc488b70-d978-5c7f-00db-5e6556eac387.png)


<br>
<br>

逆運動学に関しても，今後記事にしていく予定（作成出来次第この記事にlinkも追加します）ですので，しばらくお待ちください．
（逆運動学を求める際には，順運動学の知識も必要になるため，「順運動学については知らなくてもOK」という訳ではないのでお気をつけください．）

<br>

以上で，順運動学の説明は終わりになります．ロボティクスに興味のある方のお役に少しでも立てたら幸いです．




[^1]:厳密には「各関節の変異」になります．今回は，「回転関節」を想定しているため変化するのは「各関節の角度$\theta$」ですが，「直動関節」の場合はリンクが伸び縮みするので，「各リンクの長さ$L$」が変化します．
[^2]:エンドエフェクタ：ロボットアームの先端に取り付けられる機器のことで，運動学の説明においては，単に「ロボットアームの先端」を指すことが多いです．
[^3]:関節があるロボットならば「ロボットアーム」でなくてもよい（例えばヒューマノイドロボットの足）のですが，説明のしやすさ等からここでは「ロボットアーム」に対象を絞って説明します．
SQL Server Migration Assistant for Oracle における 0000: Unhandled Exception というSSMA issue への対応方法

## 概要

### ケース概要

SSMA で解析できないエラーの場合に出力される。本 issues が発生した場合には、コード全体が変換されなくなるため、ソース側の修正が必要となる。issue のケース数は複数ある可能性がある。`Create Report`を実施することで、SSMA issue を確認することができる。

### ケース 1 複数カラムを更新する Update 文 にてカラム名を未指定

```sql
CREATE TABLE DEPARTMENTS AS SELECT * FROM HR.DEPARTMENTS;
```

```sql
UPDATE departments A
SET
  (
    A.DEPARTMENT_ID,
    A.department_name
  ) = (
    SELECT
      B.DEPARTMENT_ID,
      CAST(B.department_name AS VARCHAR2(30))
    FROM
      HR.departments B
    WHERE
      B.department_id = A.department_id
  )
WHERE
  EXISTS (
    SELECT
      *
    FROM
      HR.departments B
    WHERE
      B.department_id = A.department_id
  );
```

## Azure SQL Database における対処法

#### 対応方法 1

オラクル DB のソースにて、`CAST(B.department_name AS VARCHAR2(30))`の箇所にてカラム名が設定されないため、`AS department_name`を追記する。

```sql
UPDATE departments A
SET
  (
    A.DEPARTMENT_ID,
    A.department_name
  ) = (
    SELECT
      B.DEPARTMENT_ID,
      CAST(B.department_name AS VARCHAR2(30)) AS department_name
    FROM
      departments B
    WHERE
      B.department_id = A.department_id
  )
WHERE
  EXISTS (
    SELECT
      *
    FROM
      departments B
    WHERE
      B.department_id = A.department_id
  );
```

SSMA により次のように変換される。

```sql
WITH 
   u$cte AS 
   (
      SELECT B.DEPARTMENT_ID, CAST(B.DEPARTMENT_NAME AS varchar(30)) AS DEPARTMENT_NAME
      FROM DEPARTMENTS  AS B
   )
UPDATE DEPARTMENTS
   SET 
      DEPARTMENT_ID = u$cte.DEPARTMENT_ID, 
      DEPARTMENT_NAME = u$cte.DEPARTMENT_NAME
FROM DEPARTMENTS  AS A 
   LEFT OUTER JOIN u$cte 
   ON u$cte.DEPARTMENT_ID = A.DEPARTMENT_ID
WHERE EXISTS 
   (
      SELECT B$2.DEPARTMENT_ID, B$2.DEPARTMENT_NAME, B$2.MANAGER_ID, B$2.LOCATION_ID
      FROM DEPARTMENTS  AS B$2
      WHERE B$2.DEPARTMENT_ID = A.DEPARTMENT_ID
   )
GO
```
あたらしい LTspice の FRA でスイッチとキャパシタ回路の周波数特性を見る

Youtube チャネル [伝説のSpice](https://www.youtube.com/@Denspa/) さん経由で， LTspice がバージョンアップしたことを知った．

あたらしい LTspice に追加された機能を少し工夫することで，スイッチトキャパシタ回路 (SC回路) の特性がシミュレーションできたので，その流れを紹介する．

# LTspice の FRA 機能

新しい LTspice には Transient Frequency Response という解析が追加されていて，こちらも新しく追加された fra ブロックと組み合わせて使と，過渡解析の結果から周波数ごとの成分を抜き出して周波数特性としてプロットしてくれる．信号源の周波数掃引も過渡解析条件の設定も自動的に制御してくれるのでとても便利である．

fra ブロックには2種類のモードがある．

* Gain vs. Frequency (負帰還回路の開ループ利得を解析)
* Impedance vs. Frequency (電流を流したときに生じる電圧からインピーダンスを計算)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227884/1950264a-7e79-5fea-7358-201b70560b09.png)

今回は，Impedance vs. Frequency を使用した．

# 使用例：スイッチトキャパシタ抵抗の周波数特性解析
スイッチトキャパシタ回路を解析するうえで問題なのは，fra が「電流を出力して電圧を測定する」という点である．スイッチトキャパシタ回路は「電圧」をスイッチ経由で容量にサンプリングし，その電荷を演算に使う．しかしながら fra ブロックは「電流」を出すので，スイッチトキャパシタ回路側でスイッチをオフにしても電流を止めることができず，スイッチのオン抵抗とオフ抵抗の平均的な抵抗値が見えるだけになっていまう．

そこで，fra が出力する電流を電圧に変換してスイッチトキャパシタ回路に与え，流れる電流を電圧に変換して fra にもどす，という構成をとった．電圧と電流が入れ替わるので， Transient Frequency Response 解析結果として出力されるインピーダンスも逆数をとる必要がある．

容量 10pF，クロック周波数 1MHz の簡単なスイッチトキャパシタ抵抗のインピーダンスの周波数特性を計算した例を以下に示す．抵抗値として期待される抵抗値 (1/10pF/1MHz = 100kΩ) が得られた．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227884/bf993173-9bc4-1cf5-54bf-2498b9e0d451.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227884/50e461cf-be20-2974-259d-015e2c0894cc.png)

この時の過渡解析波形は次のようになる．周波数を自動的に掃引している様子がわかる．なお， fra ブロックの設定にある Max # of Simultaneous Harmonics を 2 以上に設定すると，整数倍の周波数を重ね合わせて同時に解析するようになり，解析時間が短縮される．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227884/095bdba5-055f-1e39-e9a0-0993ed9a52d9.png)

# まとめ
fra ブロックと Transient Frequency Response 解析を使用して，スイッチトキャパシタ抵抗のインピーダンスの周波数特性をプロットする手順を示した．この機能はかなり使い道がありそうなので，また検討したい．
フロントエンド勉強①(備忘録)

<h1>Progate HTML&CSS&Javascript初級編完了</h1>
<p>
勉強時間：３時間くらい(4/09)<br>
内容：HTML、CSSの基礎を学び、簡単なwebページの作成を行った。<br>
感想：久しぶりに行ったので割と忘れてました。あと、無料の量が少なくてちょっとがっかり。

<a href="https://qiita.com/engineerhikaru/items/5181fbf3e38cfb9b47df">参考ロードマップ</a>
</p>
Viteで環境変数を使って可変的なパスのエイリアス設定をする

# なぜ可変的にしたいのか？

環境変数変えるだけでimportするファイルを変えたかった

# 環境変数でパスを切替えたい

以下実装すれば実現できます。
* .envファイル作成
* vite.config.tsから環境変数を読み込む
* vite.config.tsでエイリアス設定
* tsconfigでもエイリアス設定

# .envファイル作成

以下のように環境変数を宣言してください。VITEの機能で参照する場合、接頭辞はVITE_である必要があります。vite.config.tsと同じ階層に作成してください。
```
VITE_APP_FOO='foo'
```

# 環境変数を読み込む

直接vite.config.tsからimport.meta.envを参照できないため、viteライブラリからloadEnv関数を読み込みます。

```typescript:vite.config.tsのloadEnv
export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd());
```

loadEnvで環境変数をenvに読み込み、関数内で自由に参照可能となります。

# vite.config.tsでエイリアス設定

env.変数名で使用して可変的なエイリアスを設定することができます。
この手順まででもvite serveの場合は正常に動きますが、tscを行うとcannot find moduleエラーが出るため、後述のtsconfigを修正する必要があります。
```typescript:vite.config.ts
 return {
    plugins: [react(), htmlPlugin()],
    resolve: {
      alias: {
        "/@FEATURE": path.resolve(__dirname, `src/feature/${env.VITE_APP_FOO}`),
      },
    },
    base: "./"
  };
```
公式を見る限り、プラグインを使うと高度なことができると記載がありましたが、可変的なパスのエイリアスは見当たらなかったです。
https://ja.vitejs.dev/config/shared-options.html#resolve-alias
https://ja.vitejs.dev/guide/api-plugin.html

# tsconfigにエイリアス設定

可変的にしているため、型エラー起きないように固定値でエイリアス設定しています。
```json
    "baseUrl": "./",
    "paths": {
      "/@FEATURE/*": ["./src/feature/foo/*"]
    }
```

# おまけ

viteはindex.htmlから環境変数を読み込む際に正規表現で置き換える処理を行いますが、urlを置き換えたい際は特殊文字使えないので注意です。

>  const htmlPlugin = () => ({
    name: 'html-transform',
    transformIndexHtml: (html: string): string =>
      html.replace(/%=(.*?)%/g, (match, p1) => env[p1] ?? match),
  });

引用元：
https://qiita.com/JotarO_Oyanagi/items/45227341a3465dec58fe

公式：
https://ja.vitejs.dev/guide/api-plugin.html#transformindexhtml


# 今回のコード全て
[https://codesandbox.io/p/sandbox/vite-env-resolve-bnngq0](https://codesandbox.io/p/sandbox/vite-env-resolve-bnngq0)

# 参考
https://zenn.dev/k_u_0615/articles/34b7f7d4a79e52
TextWidget内の文字を左寄せしたい時

# はじめに
テキストウィジェット内の要素を左寄せする時の流れです。

# 結論
TextをWidgetでラッピングし、WidgetをAlignに変更。Alignウィジェット内に、alignment: Alignment.centerLeftを追加。

# コード比較
```dart:sample.dart
Text(
  headerText,
  style: TextStyle(
    fontFamily: "Cera Pro",
    color: Pallete.blackColor,
    fontSize: 20,
    fontWeight: FontWeight.bold,
  ),
),
```

この表示を左に寄せたい時
カーソルをTextの上に合わせ、右クリックからリファクターを選択。
その中のWidgetを選択し、以下のように変更。

```dart:sample.dart
// WidgetをAlignに変更
Align(
  // 以下の行を追加
  alignment: Alignment.centerLeft,
  child: Text(
    headerText,
    style: TextStyle(
      fontFamily: "Cera Pro",
      color: Pallete.blackColor,
      fontSize: 20,
      fontWeight: FontWeight.bold,
    ),
  ),
),
```

以上。
Googleデータアナリティクス：データモデリング

# はじめに

本記事は、Googleデータアナリティクスのプロフェッショナル認定証のプログラムより、参照させて頂いています。興味を持った方は、是非受講してみてください。

https://www.coursera.org/professional-certificates/data-analytics-japanese

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/36b2ca51-67fa-7818-756d-a4a47431a4c6.png" width="800">

# データモデリングとは？

***<font color="MediumVioletRed">『データがどのように組織化され、構造化されているかを可視化し、図を作成するプロセス』</font>***

この可視化したものがデータモデルと呼ばれます。

データモデリングは、家の設計図と考えることができます。常時、電気技師、大工、配管工がその設計図を使っているでしょう。これらの建築業者はそれぞれ設計図に対して異なる関係性ですが、家の全体的な構造を理解するためには、全員が設計図を必要とします。データモデルも同様で、ユーザーによって必要とするデータは異なるかもしれませんが、データモデルによって、全体の構造を理解することができます。

# データモデリングの階層

データモデリングの各階層には、それぞれ異なるレベルの情報が含まれます。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/259cc8be-aa27-918f-dd08-faf76c747c4f.png" width="700">

| データモデル | 説明  | 
| :--- | :--- | 
| 概念 | データが組織全体でどのように相互作用するかなど、データ構造のハイレベルな視点を示します。<br>※例えば、新しいデータベースのビジネス要件を定義するためなどに使用されます。概念データモデルには、技術的な要素は含まれません。 | 
| 論理 | リレーションシップ（関係）、アトリビュート（属性）、エンティティ（実体）など、データベースにおける技術的な詳細に焦点を当てます。<br>※例えば、個々の記録がデータベース内でどのように一意的に識別されるかを定義するためなどに使用されます。ただし、データベース の表名は物理データモデルにあたります。 | 
| 物理 | データベースがどう機能するかを示します。物理データモデルでは、使用するすべてのエンティティと属性を定義します。<br>※例えば、データベースの表名、列名、データの型などが含まれます。 | 

# データモデリング テクニック

データモデルの開発にはさまざまなアプローチがありますが、一般的な方法として、

- ERD（Entity Relationship Diagram）
    - データ・モデル内のエンティティ間の関係を視覚的に理解するための方法
- UML（Unified Modeling Language）図
    - システムのエンティティ、属性、操作、およびそれらの関係を示すことで、システムの構造を記述する非常に詳細な図

の 2 つがあります。

# データ分析およびデータモデリング

データモデリングは、データのハイレベルな詳細と、組織の情報システム全体におけるデータの関連性を調査するのに役立ちます。データモデリングには、データがどのように組み合わされているかを理解するためのデータ分析が必要な場合もあります。しかしながら、データモデルを使用することで、組織内のすべての人がデータを理解し、協力しやすくなるため、あなたやあなたのチーム全員にとって重要なのです。
TCAでFocusStateを正しく使う方法

iOS15で追加されたFocusStateは、TextFieldなどのフォーカス制御が簡単になる便利なプロパティラッパーです。
今回はFocusStateをTCAで正しく扱う方法について解説していきたいと思います。

## 実装
Viewに以下のようなextensionを追加します。
```Swift
public extension View {
    func synchronize<Value: Equatable>(
        _ first: Binding<Value>,
        _ second: FocusState<Value>.Binding
    ) -> some View {
        onChange(of: first.wrappedValue, perform: { second.wrappedValue = $0 })
            .onChange(of: second.wrappedValue, perform: { first.wrappedValue = $0 })
    }
}
```
onChangeを使って`first`のwrappedValueが変化したら`second`のwrappedValueにfirstの値を入れ、
同じように`second`が変化したら`first`に代入しています。このようにして、BindingとFocusStateをリンクすることができます。

### 使用方法
今回はemailとpasswordの入力を例にします。EmailのTextFieldでエンターを押すとPasswordのTextFieldにfocusされる処理を書いていきます。

```Swift:HogeReducer.swift
struct HogeReducer: ReducerProtocol {
    struct State: Equatable {
        @BindingState var focused: Field?
        @BindingState var email = ""
        @BindingState var password = ""
    }

    enum Action: Equatable, BindableAction {
        case binding(BindingAction<State>)
    }

    var body: some ReducerProtocolOf<Self> {
        BindingReducer()
    }
}

extension HogeReducer {
    enum Field {
        case email, password
    }
}
```
```HogeView.swift
struct HogeView: View {
    @FocusState private var focused: HogeReducer.Field?
    private let store: StoreOf<HogeReducer>

    init(store: StoreOf<HogeReducer>) {
        self.store = store
    }

    var body: some View {
        WithViewStore(store, observe: { $0 }) { viewStore in
            HStack {
                TextField(
                    "email",
                    text: viewStore.binding(\.$email),
                    onCommit: {
                        // Enterを押したらPasswordのFieldがFocusされるように
                        viewStore.send(.set(\.$focused, .password))
                    }
                )
                .focused($focused, equals: .email)

                SecureField("password", text: viewStore.binding(\.$password))
                    .focused($focused, equals: .password)
            }
            // HogeReducer.StateのfocusedとHogeViewのfocusedをシンクロさせる。
            .synchronize(viewStore.binding(\.$focused), $focused)
        }
    }
}

```
TCAは単方向のデータフローなのでViewで状態を保ち、Viewで状態を変更するのは好ましくないです。そのため、`HogeReducer`のほうでfocusedの状態を保持、変更されるようにしています。

## まとめ
TCAでFocusStateを正しく利用することができました。

## 参考文献
https://www.pointfree.co/episodes/ep155-swiftui-focus-state
Googleデータアナリティクス：データの構造化

# はじめに

本記事は、Googleデータアナリティクスのプロフェッショナル認定証のプログラムより、参照させて頂いています。興味を持った方は、是非受講してみてください。

https://www.coursera.org/professional-certificates/data-analytics-japanese

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/36b2ca51-67fa-7818-756d-a4a47431a4c6.png" width="800">

# 2種類のデータを保管する方法

データはどこにでもあり、さまざまな方法で保管することができます。一般的にデータは 2 つのカテゴリーに分類されます。 

- ***<font color="MediumVioletRed">構造化データ</font>***: 行や列など一定のフォーマットで整理されたデータ
    - 例）お気に入りのレストランをオンラインで評価する
- ***<font color="MediumVioletRed">非構造化データ</font>***:  簡単に識別できるような方法で整理されていないデータ
    - 例）Google Earth を使ってレストランの場所の衛星画像をチェックする場合

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/9c271fe0-6f8b-2653-fd3a-60fb658f6a0e.png" width="６00">

# 構造化データ

構造化データは一定のフォーマットで整理されています。これによって、ビジネスのニーズに合わせた保管や照会がしやすくなります。データをエクスポートするさいにも構造化された状態で出力されます。

### <font color="MediumBlue">データモデル</font>

構造化データは データモデルとしてうまく機能します。 

- データモデルとは、データ エレメントが 互いにどう関連するかを整理するモデルです。 
- データエレメントとは、 人の名前や口座番号、住所といった 情報の断片のことです。 

データモデルで、データの一貫性を保ち、 データがどう整理できるかを マッピングすることができます。 これにより、データアナリストや その他のステークホルダーがデータを理解し、 ビジネス目的で活用がしやすくなります。 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/4cde209b-b755-6278-27c8-763a3ba4f76d.png" width="400">

### <font color="MediumBlue">データベース</font>

構造化データは、データモデルとして うまく機能するだけでなく、 データベースにおいても有効です。 データベースでは 必要なときいつでも簡単にデータを 入力、照会、分析することができます。 

### <font color="MediumBlue">データの可視化</font>

構造化データは、チャート、 グラフ、ヒートマップ、ダッシュボード、 その他ほとんどのデータの ビジュアライゼーションに 対応でき、 データの可視化が非常に簡単です。 

:::note info
データアナリストは、ほとんどの場合、 構造化データを扱います。
:::

# 非構造化データ

非構造化データは、簡単に識別できるような方法で整理することができません。そして、世の中には構造化データよりも非構造化データの方がはるかに多く存在します。

- 動画
- 音声ファイル
- テキストファイル
- ソーシャルメディアコンテンツ
- 衛星画像
- プレゼンテーション
- PDF ファイル
- 自由回答形式のアンケート
- Web サイト

など、これらすべてが非構造化データの一種に該当します。

# 公平性の問題

非構造化データは、構造がないため、検索、管理、分析が困難です。しかし近年、人工知能や機械学習アルゴリズムの進歩により、この状況は変わりつつあります。

今、データ サイエンティストが直面している新たな課題は、これらのツールが包括的で偏りのないようにすることです。そうしないと、データセットの特定の要素が、他の要素よりも偏って評価されたり、表現されてしまったりすることになります。

不公平なデータセットは母集団を正確に反映しないため、歪んだ結果や低い精度、信頼性の低い分析結果を生み出すことになります。
SRAファイルのまま、リード長さを確認する

タイトルの通りです。
SRAファイルを解凍せずにリード長を見たいときは、

```sh
fastq-dump --split-files -X 1 -Z SRR0000000.sra
```

とすればいいです。ここでは、-X 1 で、最初の1スポットのみをダンプします。-Z で標準出力にアウトプットします。
ちなみに、ネット上のファイルにもこれは有効で、

```
fastq-dump --split-files -X 1 -Z SRR0000000
```

とした場合は番号からインターネットを見に行ってくれるようです。この記事は以上です。
Docker Rails 7 x Mysql

## 前提
備忘録
Dockerの知識
M1 Mac

## 手順

```shell
1 bundleを初期化 railsプロジェクトを初期化 ↓
# Railsを作成する際にMysqlのDB設定で起動すること
docker-compose run app rails new . --force --no-deps --database=mysql

2 config/databaseでDockerのmysqlに接続するように設定

3 rails db:createでDBを作成

4 接続確認
```


*Dockerfile*
```Dockerfile
FROM ruby:3.2.2

WORKDIR /myapp

COPY Gemfile* /myapp/

# build-essentialはbuildに必要な機能を一式提供 ex C Compiler, g++
# RubyはCで書かれている rbenvが使用するのに必要らしい
# dockerを使う場合rbenvは不要 (なくてもRubyは動くのでrbenvを使わないのであれば不要)
# mariadb-clientもmysqlコンテナから確認するなら不要 (rails dbconsoleを使わない)
RUN apt -qq update && apt install -y build-essential mariadb-client

RUN gem update --system && \
    bundle install

COPY . /myapp

CMD ["rails", "server", "-b", "0.0.0.0"]
```

*docker-compose.yml*
```yml

services:
  app:
    build:
      context: .
      dockerfile: ./Dockerfile
    depends_on:
        - db
    tty: true
    volumes:
      - ./:/myapp
    ports:
      - "3000:3000"
    environment:
      - TZ=Asia/Tokyo

	db:
    image: mysql:8.0.31
    platform: linux/amd64
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
      - ./db/data:/var/lib/mysql
      - ./db/conf.d:/etc/mysql/conf.d
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Tokyo
      MYSQL_ROOT_PASSWORD=root
      MYSQL_DATABASE=test
      MYSQL_USER=test
      MYSQL_PASSWORD=test
```

## RailsをMysqlコンテナに接続する
*config/database.yml*

```yml
# Dockerで立ち上げたMySQLコンテナの内容に書き換える
default: &default
    adapter: mysql2
	encoding: utf8mb4
	pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
	username: root
    password:root
	host: db
```

## 終わりに
`/tmp/pids/server.pid`を削除する処理は書いてないです。 rails7環境だとコンテナ閉じたらちゃんと消してくれます。
もし残ってたら手動で消してもいいし、CMDに追加したりENTRYPOINTを利用しても良いです。

これ系の記事は 下記の構成が多いです。
```md
1: ENTRYPOINTで指定したshellで削除処理
2: CMDにrailsの起動コマンド
3: ymlのcommandの削除処理とrailsの起動コマンド 
```

3で1と2でやっている内容と同じことをしているので1と2は不要です。
2に至っては、3のcommandが指定されている時点でDockerはCMDを無視します。

*3のみではなく1,2も書く理由は下記かも？*
```yml
CMD[] # なくても動くが、一応デフォルトの指定をしておく
ENTRYPOINT # 絶対に実行してほしい内容を記述
command # 保険で上記2つをこちらでも書いておく
```

シンプルにしたいので、1,2でやるか3で統一したい派です。

## リンク

[過去に投稿した記事](https://qiita.com/kandalog/items/80a06114f55bdc07be00)
SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ

## 概要

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果内容を共有する。Oracle Database の機能別に、SSMA によりどのように移行すべきかの検討を実施した。機能別に個別の記事として投稿しており、本記事はその記事へのリンク集である。

## 個別機能の検証記事

- データ型
  - [Oracle データ型編](https://qiita.com/manabian/items/ebbfa4919335d3a09735)
  - [Oracle ユーザー定義データ型編](https://qiita.com/manabian/items/d6316e7d2f0402e31de9)

- スキーマとテーブル
  - [Oracle スキーマ編](https://qiita.com/manabian/items/96d5d8fb91de9eb05b63)
  - [Oracle テーブル編](https://qiita.com/manabian/items/8bd75e9d815ac587ce7e)
  - [Oracle データベース・リンク編](https://qiita.com/manabian/items/b4758e258fd753e24ae1)
  - [Oracle シノニム編](https://qiita.com/manabian/items/6f7ca9cee69f0a91dc58)
- 関数
  - [Oracle 関数編](https://qiita.com/manabian/items/27490b5fcf8a7981ae3c)
  - [Oracle ユーザー定義関数編](https://qiita.com/manabian/items/a720b2589e25d84c06d9)
- ビュー
  - [Oracle ビュー編](https://qiita.com/manabian/items/099913891981350b9d2f)
  - [Oracle マテリアライズド・ビュー編](https://qiita.com/manabian/items/f1d229f4aa771ea41a1a)
  - [Oracle システムビュー編](https://qiita.com/manabian/items/c292a4b272e638dc7d82)

- トリガー
  - [Oracle trigger 編](https://qiita.com/manabian/items/343f21be2338257e9b19)
- シーケンス
  - [Oracle sequences 編](https://qiita.com/manabian/items/43ea3a2e99a62f2df83b)
- PL/SQL プログラミング
  - [PL/SQL 基礎編](https://qiita.com/manabian/items/8d7e9603b576f1c997ef)
  - [Oracle における変数と定数編](https://qiita.com/manabian/items/1cdea3ee4a11fe947d55)
  - [ Oracle 制御文編](https://qiita.com/manabian/items/23ed8d6e171256acf9da)
  - [Oracle 例外処理編](https://qiita.com/manabian/items/3ada8f4fb1e39d645a26)
  - [Oracle データ操作言語( DML )文編](https://qiita.com/manabian/items/b6df6f3dead040b01a84)
  - [Oracle 動的 SQL 編](https://qiita.com/manabian/items/b1946772f52640712a89)
  - [Oracle Cursor 編](https://qiita.com/manabian/items/bf62f1d4e6fbccf1cf7d)
  - [Oracle におけるレコードとコレクション編](https://qiita.com/manabian/items/2ca8659bd8aefba9e3d2)
  - [Oracle トランザクション編](https://qiita.com/manabian/items/ee2459e1c91edb73078b)
  - [Oracle ネストしたサブプログラム編](https://qiita.com/manabian/items/1febf3d58df1a64b9eb4)
- パッケージ
  - [Oracle パッケージ編](https://qiita.com/manabian/items/ccf0d7b079b34f0c7dbc)
  - [DBMS_OUTPUT パッケージ編](https://qiita.com/manabian/items/bfdcf5689f75206bf59c)
  - [ Oracle UTL_FILE パッケージ編](https://qiita.com/manabian/items/ba7511c1f940c15961c8)
Salesforce認定アソシエイト試験の公式練習問題解説してみた-03

こんにちは

Salesforce認定アソシエイト試験の公式練習問題があるのはご存じでしょうか。
Trailheadにフラッシュカードとして何度も解ける練習問題がございます。

今回は
認定資格試験の準備: Salesforce 認定アソシエイト＞
Salesforce エコシステムについて学ぶ


の問題3問目を解説します


今回の内容は動画でも解説しています

https://www.youtube.com/watch?v=5luJ3tE693U

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

https://trailhead.salesforce.com/ja/content/learn/modules/cert-prep-salesforce-certified-associate/learn-about-the-salesforce-ecosystem?trailmix_creator_id=strailhead&trailmix_slug=prepare-for-your-salesforce-certified-associate-credential

![０３.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/701dd2c0-c29e-cf1f-2b95-c81b6ddf28eb.png)




正解はAです

Sandboxとは
メタデータや顧客データを含む本番環境の完全なコピーされた環境のことです

https://www.salesforce.com/jp/products/platform/products/sandbox/

Sandboxで作成した項目などは「変更セット」というものを使用してSandboxから本番環境へリリースすることは可能です

https://help.salesforce.com/s/articleView?id=sf.changesets.htm&type=5

https://help.salesforce.com/s/articleView?id=sf.changesets_about_connection.htm&type=5

ぜひSandboxの使用ができる場合、Salesforceの本番環境で設定変更する場柄にSandboxでテストしてから本番へのリリースを試してみてください

Aについて
本番環境で設定変更する前にSandboxでテストしてみてください
Cについて
Sandboxでテストして問題なければ変更セットで移行してみてください



## 他の認定アソシエイトの勉強方法について

他の勉強方法についてはこちらをご確認ください

https://qiita.com/Takaa/items/d35c9955fe8eb889d76b
新 Xcode14.3 から macOS を Ventura 13.0 以上にする必要がある

軽く共有記事です。

表題の通り、新 Xcode14.3 から macOS を Ventura 13.0 以上にする必要があるようです。
Xcode 14.3 に上げる時は（関係者には）お声掛けした方良さそうですね。

### 現在の（私の）開発環境
- Xcode 14.2
- macOS Monterey 12.6

### 新 Xcode の最小OS要件
- Xcode 14.3
- macOS Ventura 13.0

### 注意点
- Xcode14.3 に上げると macOS 12 以下の人は全員（私も）アップグレードが必要になるのでご注意を
    - Xcode 14.3 に上げる時は（関係者には）お声掛けした方良さそう
    - 不用意に上げると現場は多少混乱するかも（あるあるですね）
- ちなみに、macOS Ventura 13.0 以上にすると、Xcode13系は使えなくなります
    - されど、Xcode14必須化（4/25）はもうすぐ
    - なので、もうXcode13系に後戻りすることはないはず（ですよね）

### 参考サイト
- [Xcode - サポート - Apple Developer](https://developer.apple.com/jp/support/xcode/)
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～ Oracle UTL_FILE パッケージ編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### UTL_FILE パッケージについて

Oracle Database ドキュメントにて、UTL_FILE パッケージの機能について次のように記載されている。

> PL/SQLプログラムでオペレーティング・システムのテキスト・ファイルの読込みと書込みができます。

引用元：[262 UTL_FILE (oracle.com)](https://docs.oracle.com/cd/F19136_01/arpls/UTL_FILE.html#GUID-EBC42A36-EB72-4AA1-B75F-8CF4BC6E29B4)

利用されるユースケースには次のものがある。

1. ログ書き込み
2. ファイル出力
3. ファイル入力

### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database

## Azure SQL Database への移行

### SSMA による変換

Azure SQL Database では、SSMA による変換をサポートしていない。SSMA v9.3 では、`UTL_FILE.PUT_LINE`が、想定通りに動作しない`ssma_oracle.utl_file_put_line`に変換される仕様となっているため、変換後にコメントアウト、あるいは、削除を実施する必要がある。

`UTL_FILE.PUT`後に`UTL_FILE.NEW_LINE`を実行しているコードは`UTL_FILE.PUT_LINE`とほぼ同様の動作となるため、`UTL_FILE.PUT_LINE`として手動変換を実施する。

```sql
UTL_FILE.PUT(out_handle,CONVERT(output,'JA16SJIS'));
UTL_FILE.NEW_LINE(out_handle, 1);
```

### 移行方針

Azure Data Factory などのツールを用いたプログラムに移行する。
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～DBMS_OUTPUT パッケージ編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### DBMS_OUTPUT パッケージについて

Oracle Database ドキュメントにて、次のように記載されている。

> ストアド・プロシージャ、パッケージおよびトリガーからメッセージを送信できます。

引用元：[120 DBMS_OUTPUT (oracle.com)](https://docs.oracle.com/cd/F19136_01/arpls/DBMS_OUTPUT.html#GUID-C1400094-18D5-4F36-A2C9-D28B0E12FD8C)

`DBMS_OUTPUT.PUT`後に`DBMS_OUTPUT.NEW_LINE`を実行しているコードは、`DBMS_OUTPUT.PUT_LINE`とほぼ同様の動作となる。

```sql
BEGIN
	DBMS_OUTPUT.PUT('START');
	DBMS_OUTPUT.NEW_LINE;
END;
```

### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database

## Azure SQL Database への移行

### SSMA による変換

次の処理のみ変換をサポートしている。

- PUT_LINE

### 変換例

#### Oracle SQL Developer のセットアップ

1. Oracle SQL Developer 起動後、 `表示` -> `DBMS 出力`を選択
2. `DBMS 出力`タブにて、`+`を選択し、`接続`にて接続先を設定の上、`OK`を選択。

#### 変換例 1 PUT_LINE

##### Oracle Database のコード

```sql
BEGIN
	DBMS_OUTPUT.PUT_LINE('START');
END;
```

##### Azure SQL Database への変換

SSMA により次のように変換される。

```sql
BEGIN
   PRINT 'START'
END
GO
```

#### 変換例 2 PUT と NEWNEW_LINE

##### Oracle Database のコード

```sql
BEGIN
	DBMS_OUTPUT.PUT('START');
	DBMS_OUTPUT.NEW_LINE;
END;
```

##### Azure SQL Database への変換

SSMA により次のような Issues が発生する。

```sql
BEGIN

   /* 
   *   SSMA error messages:
   *   O2SS0050: Conversion of identifier 'DBMS_OUTPUT.PUT(CHAR)' is not supported.

   EXECUTE DBMS_OUTPUT.PUT('START')
   */



   /* 
   *   SSMA error messages:
   *   O2SS0050: Conversion of identifier 'DBMS_OUTPUT.NEW_LINE' is not supported.

   EXECUTE DBMS_OUTPUT.NEW_LINE
   */



   DECLARE
      @db_null_statement int

END
GO
```

次のように手動変換を行う。あるいは、Oracle database のコードを、`DBMS_OUTPUT.PUT_LINE`に書き換えて変換を実施する。

```sql
BEGIN
   PRINT 'START'
END
GO
````
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle トランザクション編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### トランザクションについて

Oracle Database ドキュメントにて、次のように記載されている。

> Oracle Databaseが1つの単位として処理する連続した1つ以上のSQL文です(これらの文は、すべて実行されるか、1つも実行されないかのいずれかです)。

引用元：[6.6 トランザクションの処理および制御 (oracle.com)]https://docs.oracle.com/cd/F19136_01/lnpls/static-sql.html#GUID-218080C2-A7C5-42CC-B34E-A08A0C9341C1)

トランザクションに関する自律型トランザクションという機能があり、次のように記載されている。

> 別の、メイン・トランザクションによって開始される独立したトランザクションです。

引用元：[6.7 自律型トランザクション (oracle.com)](https://docs.oracle.com/cd/F19136_01/lnpls/static-sql.html#GUID-BC564905-51F4-4ADB-B300-9F15B1AC3099)

### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database

## Azure SQL Database への移行

詳細については、次のホワイトペーパーに記載されている。

- Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database

自律型トランザクションについても、次のホワイトペーパーに記載されている。

- Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database

### 概要

### 移行方針

Azure SQL Database では拡張ストアド プロシージャ機能がサポートされていないため、`xp_ora2ms_exec2_ex` 拡張ストアードプロシージャによりエミュレートされている機能を利用できない場合がある。
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle 動的 SQL 編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### 動的 SQL について

動的SQLについて、Oracle Database ドキュメントにて、次のように記載されている。

> 実行時にSQL文を生成して実行するためのプログラミング方法です。

引用元：[7 PL/SQLの動的SQL (oracle.com)](https://docs.oracle.com/cd/F19136_01/lnpls/dynamic-sql.html)


### 参考リンク

- SSMA のドキュメント
    - [O2SS0157: OPEN の動的文字列...FOR が変換されていません (エラー) - SQL Server | Microsoft Learn](https://learn.microsoft.com/ja-jp/sql/ssma/oracle/messages/o2ss0157?view=sql-server-ver16)
- その他
    - [Migrating Oracle to SQL Server using SSMA - Error O2SS0157 Dynamic string for OPEN...FOR not converted | Microsoft Learn](https://learn.microsoft.com/ja-jp/archive/blogs/ssma/migrating-oracle-to-sql-server-using-ssma-error-o2ss0157-dynamic-string-for-open-for-not-converted)

## Azure SQL Database への移行

### SSMA による変換

動的 SQL として実行される文字列が変換されないため、手動で変換する必要がある。


### 移行方針

次のいずれかの対応を実施する。

1. 動的クエリのロジックを変更
2. 静的クエリへ変更
M2 MacにDocker Imageが対応してなかったときの対処方法

## 概要
MySQL5.7のDockerイメージを使う際にM2 MacBookのCPUアーキテクチャのベースであるlinux/arm64/v8に対応していなかったためエラーが発生した．
今回はその対処方法をメモとして残す

## エラーメッセージ
```
$ docker compose up -d
[+] Running 0/1
 ⠦ db Pulling     2.7s 
no matching manifest for linux/arm64/v8 in the manifest list entries
```
このエラーメッセージはMySQL5.7のイメージにlinux/arm64/v8に対応していなかったために発生している．
実際にDocker Hub上にあるMySQL:5.7のイメージを見に行くとlinux/arm64/v8には対応していない．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469304/a65167ca-4a64-a4a5-7549-82caf155bed9.png)

https://hub.docker.com/layers/library/mysql/5.7/images/sha256-47b0250a983e600ab247e6f25a4c99069d4cb637fd8dc6a11a43e83a83e9308c?context=explore

## 解決策
解決策としてdocker-compose.yamlにplatformを指定することで対処できる．
```docker-compose.yaml
...
services:
  db:
    image: mysql:5.7 
    platform: linux/amd64
...
```
上記のようにDocker imageが対応しているアーキテクチャをplatformで指定すれば，動かすことができる．

https://docs.docker.com/compose/compose-file/compose-file-v2/#platform

## Reference
https://zenn.dev/marumarumeruru/articles/55173a98863d4e
bsport

CÁCH ĐĂNG KÝ NHÀ CÁI BSPORT.APP & TẢI APP BSPORT 2023
https://bsport.app/cach-dang-ky-nha-cai-bsport-app-tai-app-bsport-2023/
https://bsport.app/cach-nap-tien-tai-nha-cai-bsport-app-2023/
https://bsport.app/cach-rut-tien-bsport-app-2023/
https://bsport.app/nap-tien-usdt-bsport-cuc-nhanh-cuc-tien-2023/
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle sequences 編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### sequences について

Oracle Database ドキュメントにて、次のように記載されている。

> 複数のユーザーが一意の整数を生成するときに使用できるデータベース・オブジェクトです。 順序を使用すると、主キー値を自動的に生成できます。

引用元：[CREATE SEQUENCE (oracle.com)](https://docs.oracle.com/cd/F19136_01/sqlrf/CREATE-SEQUENCE.html#GUID-E9C78A8C-615A-4757-B2A8-5E6EFB130571)

### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
    - Oracle to SQL Server Migration Handbook v2.0

## Azure SQL Database への移行

### SSMA による変換

Oracle Database の Cursor を置換するロジックについては、次のホワイトペーパーに記載されている。

- Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
- Oracle to SQL Server Migration Handbook v2.0

### 移行方針

Oracle Database の sequences 機能は、 Azure SQL Database の sequences 機能に、一部機能を除き変換される。

Oracle Database の CURRVAL 機能を Azure SQL Database ではサポートしていないため、`Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database`記載の方法を参考に Azure SQL Database の sequences 機能を用いない方法に移行する必要がある。

### 変換例

#### 変換例 1 sequences の基本的な定義

##### Oracle Database のコード

sequences の基本的な定義を行うコードの変換仕様を説明する。

```sql
CREATE SEQUENCE hr.seq_test
    INCREMENT BY 1 
    START WITH 1 
    MAXVALUE 99999999999 
    MINVALUE 1 
    CYCLE NOCACHE
;
```

##### Azure SQL Database への変換

次の T-SQL のコードに変換される。

```sql
IF EXISTS (SELECT * FROM sys.sequences seq JOIN sys.schemas sch ON seq.schema_id=sch.schema_id WHERE seq.name=N'SEQ_TEST'  AND sch.name=N'SSMA' )
 DROP SEQUENCE [HR].[SEQ_TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE SEQUENCE [HR].[SEQ_TEST]
    AS numeric(28)
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 99999999999
    CYCLE
    NO CACHE
```

#### 変換例 2 NEXTVAL の利用

##### Oracle Database のコード

```sql
WITH SRC AS(
SELECT 'A' AS NAME FROM DUAL
UNION ALL
SELECT 'B' AS NAME FROM DUAL
UNION ALL
SELECT 'C' AS NAME FROM DUAL
)

SELECT
    hr.seq_test.nextval
    ,NAME
FROM
    SRC;
```

##### Azure SQL Database への変換

次の T-SQL のコードに変換される。

```sql
WITH 
   SRC AS 
   (
      SELECT 'A' AS NAME
       UNION ALL
      SELECT 'B' AS NAME
       UNION ALL
      SELECT 'C' AS NAME
   )
SELECT NEXT VALUE FOR HR.SEQ_TEST, SRC.NAME
FROM SRC
GO
```
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle trigger 編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### trigger について

Oracle Database ドキュメントにて、次のように記載されている。

> ストアド・プロシージャのように、データベースに格納して繰り返し起動できる名前付きPL/SQLユニットです。

引用元：[9.1 トリガーの概要 (oracle.com)](https://docs.oracle.com/cd/F19136_01/lnpls/plsql-triggers.html#GUID-3CD2CC67-5AC2-4DD5-B7D3-12E5FAE082C9)

### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
    - Oracle to SQL Server Migration Handbook v2.0

## Azure SQL Database への移行

### SSMA による変換

Oracle Database の trigger を置換するロジックについては、次のホワイトペーパーに記載されている。

- Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
- Oracle to SQL Server Migration Handbook v2.0
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle システムビュー編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### システムビュー について

Oracle Database ではシステムビューをデータ・ディクショナリ・ビューとして管理されており、次のように記載されている。

> データベースに関する管理メタデータを提供する読取り専用の表の集合

引用元：[データ・ディクショナリの概要 (oracle.com)](https://docs.oracle.com/cd/F19136_01/cncpt/data-dictionary-and-dynamic-performance-views.html#GUID-9B9ABE1C-A1E3-464F-8936-978250DC3E1F)

### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database

## Azure SQL Database への移行

### SSMA による変換

Oracle Database の システムビュー を変換対象のシステムビューが、次のホワイトペーパーに記載されている。

- Oracle to SQL Server Migration Handbook v2.0

### 移行方針

Azure SQL Database のビューへ移行する。
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle マテリアライズド・ビュー編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### マテリアライズド・ビューについて

Oracle Database ドキュメントにて、次のように記載されている。

> スキーマ・オブジェクトとして事前に格納またはマテリアライズされた問合せ結果です。

引用元：[マテリアライズド・ビューの概要 (oracle.com)](https://docs.oracle.com/cd/F19136_01/cncpt/partitions-views-and-other-schema-objects.html#GUID-2822B62B-CAF3-4DCE-B4D6-5E677FB8A829)

次のようなテーブルへのクエリ性能を最適化する場合に、よく利用される。

1. ファクトテーブル
2. レプリケーションのマスタテーブル
3. データベース・リンクによるリモートテーブル

### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
    - Oracle to SQL Server Migration Handbook v 2.0
- その他
    - [Converting materialized view with float type](https://abcloudz.com/blog/oracle-to-sql-server-migration-with-ssma-converting-materialized-view-with-float-type/)

## Azure SQL Database への移行

### SSMA による変換

マテリアライズド・ビューはインデックス付きビューに変換される。


### 移行方針

次の対応の実施を検討する。

1. ビュー化
2. テーブル化
3. インデックス付きビュー化

インデックス付きビュー化する際には、次のドキュメントに記載されている要件を満たす必要がある。

- [インデックス付きビューの作成 - SQL Server | Microsoft Learn](https://learn.microsoft.com/ja-jp/sql/relational-databases/views/create-indexed-views?view=sql-server-ver16#additional-requirements)

### 変換例

#### 変換例 1 マテリアライズド・ビューの変換

##### Oracle Database のコード

```sql
CREATE MATERIALIZED VIEW hr.mv_employees
    REFRESH
        FORCE
        ON DEMAND
AS
    SELECT
        employee_id,
        first_name,
        last_name
    FROM
        hr.employees;
```

##### Azure SQL Database への変換

SSMA により次のように変換される。

```sql
CREATE VIEW HR.MV_EMPLOYEES
WITH
    SCHEMABINDING
AS
    SELECT
        EMPLOYEES.EMPLOYEE_ID, 
        EMPLOYEES.FIRST_NAME,
        EMPLOYEES.LAST_NAME,
        EMPLOYEES.EMAIL AS EMPLOYEES_EMAIL
    FROM HR.EMPLOYEES
GO
```
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle ビュー編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### ビューについて

Oracle Database ドキュメントにて、次のように記載されている。

> 表または表の組合せの論理表現です。

引用元：[24.1 ビューの管理 (oracle.com)](https://docs.oracle.com/cd/F19136_01/admin/managing-views-sequences-and-synonyms.html#GUID-6A691576-77B3-4DAF-ABC7-3EF4707302D4)

### 参考リンク

特になし。

## Azure SQL Database への移行

### SSMA による変換

Azure SQL ファミリーのビューに変換される。

### 移行方針

SSMA により変換されたプログラムを利用する。
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle シノニム編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### シノニムについて

シノニムについて、Oracle Database ドキュメントにて、次のように記載されている。

> スキーマ・オブジェクトの別名です。

引用元：[24.3.1 シノニムについて (oracle.com)](https://docs.oracle.com/cd/F19136_01/admin/managing-views-sequences-and-synonyms.html#GUID-F66725AA-B410-49EA-9C96-CF5C408879F1)


### 参考リンク

- ホワイトペーパー
    - Oracle to SQL Server Migration Handbook v 2.0

## Azure SQL Database への移行

### SSMA による変換

シノニムの変換仕様について、`Oracle to SQL Server Migration Handbook v 2.0`にて次のように記載されている。

> SSMA could handle Synonyms while migration. 
> •	Oracle private synonyms are converted to SQL Server synonyms stored in the target database. 
> •	SSMA converts public synonyms to synonyms defined in the ssma_oracle schema.

引用元: Oracle to SQL Server Migration Handbook v 2.0

> SSMA は、移行中にシノニムを処理できます。
> • Oracle のプライベート シノニムは、ターゲット データベースに格納されている SQL Server シノニムに変換されます。
> • SSMA は、パブリック シノニムを ssma_oracle スキーマで定義されたシノニムに変換します。

上記の翻訳

### 移行方針

SSMA による自動変換されたプログラムを利用する。

### 変換例

#### 変換例 1 プライベートシノニムの設定

##### Oracle Database のコード

```sql
CREATE SYNONYM syn_pri_001 FOR HR.DEPARTMENTS;
```

##### Azure SQL Database への変換

```sql
CREATE SYNONYM SSMA.SYN_PRI_001 FOR [ssma-test ].HR.DEPARTMENTS
GO
```

#### 変換例 2 プライベートシノニムの利用

##### Oracle Database のコード

```sql
SELECT * FROM SYN_PRI_001;
```

##### Azure SQL Database への変換

```sql
SELECT SYN_PRI_001.DEPARTMENT_ID, SYN_PRI_001.DEPARTMENT_NAME, SYN_PRI_001.MANAGER_ID, SYN_PRI_001.LOCATION_ID
FROM SSMA.SYN_PRI_001
GO
```
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle データベース・リンク編～

## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

- [SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証記事のまとめ - Qiita](https://qiita.com/manabian/items/0ec96b66033a7bd03a25)


### データベース・リンク について

Oracle Database ドキュメントにて、次のように記載されている。

> 他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。

引用元：[CREATE DATABASE LINK (oracle.com)](https://docs.oracle.com/cd/F19136_01/sqlrf/CREATE-DATABASE-LINK.html#GUID-D966642A-B19E-449D-9968-1121AF06D793)

### 参考リンク

- ホワイトペーパー
    - Oracle to SQL Server Migration Handbook v2.0
- その他
    - [Oracle to SQL Server migration with SSMA: Converting database links (abcloudz.com)](https://abcloudz.com/blog/oracle-to-sql-server-migration-with-ssma-converting-database-links/)

## SSMA での変換

### 概要

Oracle Database の Cursor を変換するロジックについては、次のホワイトペーパーに記載されている。

- Oracle to SQL Server Migration Handbook v2.0

### 移行方針

ホワイトペーパーにて代替手段として提案されているリンク サーバー機能が Azure SQL Database ではサポートされていないため、次の対応の実施を検討する。

1. テーブルとして実体化

Azure SQL Database にてリンク サーバー機能がサポートされていない旨は、次のようにドキュメントに記載されている。

> Linked servers are available in SQL Server Database Engine and Azure SQL Managed Instance. They are not enabled in Azure SQL Database singleton and elastic pools. 

引用元：[Linked Servers (Database Engine) - SQL Server | Microsoft Learn](https://learn.microsoft.com/en-us/sql/relational-databases/linked-servers/linked-servers-database-engine?view=sql-server-ver16)
NeurIPS2022の量子化論文 (3)

# 概要

この記事では、[NeurIPS2022](https://nips.cc/)の量子化論文を紹介します。[^1]
([その1](https://qiita.com/kyad/items/5138306b021299ae4ad2) [その2](https://qiita.com/kyad/items/e6207213ae9d3513d8fd))

[^1]: 画像や数式は論文から引用しています。

# On-Device Training Under 256KB Memory

https://openreview.net/pdf?id=zGvRdBW06F5

- 概要：Tiny Training Engine (TTE)。256KBメモリで学習
- 新規性：256KBメモリ以下で学習するものは初。量子化されたNWはBNが無いので収束が難しい課題を解決
- キモ：(1)QAS(Quantization Aware Scaling). Weightとbiasはビット数が異なるのでスケールを合わせる。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/96d3a5c0-e084-59a9-5c33-2cf22991a599.png)
  (b)Sparse Update. 重要でない勾配は計算を省く。
- 評価：MCU-Netsで評価した。


# Optimal Brain Compression: A Framework for Accurate Post-Training Quantization and Pruning 

https://openreview.net/forum?id=ksVGCOlOEba

- 概要：OBC. OBSと同時に枝刈りする。
- 新規性：OBSの計算量を近似などで削減した。
- キモ：OBSの計算は行毎に分割すれば計算量を削減できる。
- 評価：Unstructured 又は N:M Sparsity枝刈りでResNet, YOLO, BERTで評価した。


# Towards Efficient Post-training Quantization of Pre-trained Language Models 

https://openreview.net/forum?id=tvDRmAxGIjw

- 概要：巨大事前学習モデルの量子化で、PTQによるもの
- 研究機関：Huawei
- 新規性：事前学習モデルからQATするのではなく、PTQで量子化する。PTQで精度を上げる
- キモ：
  (1)MREM. Transformerレイヤ毎に2乗誤差を最小化する((2)式)。
  (2)Accelerated Parallel Training. (1)をモジュール毎に分割して学習する。
  (3)Annealed Teaching Forcing. Floatでの計算結果も混ぜながら処理する((3)式)。
- 評価：BERT, GLUEでQATと比較


# Not All Bits have Equal Value: Heterogeneous Precisions via Trainable Noise

https://openreview.net/forum?id=zKBbP3R86oc

- 概要：混合量子化でビット数を決める方法。Post-processの学習による。
- 新規性：ノイズを与えながら学習してノイズ幅でビット数を決める。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2448931/322e9c1d-9407-dd5e-ecef-0c51d791e8da.png)
- キモ：学習時にノイズをのせて学習する。
- 評価：ResNet, MobileNetV2, CIFAR等で実験


# おまけ
## Optimal Brain Surgeon: Extensions and performance comparisons

https://proceedings.neurips.cc/paper/1993/file/b056eb1587586b71e2da9acfe4fbd19e-Paper.pdf

- OBS. ロスのテイラー展開の2次の項(Hessian)の小さいものはロスへの寄与が小さいとして刈る。
SQL Server Migration Assistant for Oracle  による Oracle Database から Azure SQL Database への移行検証～Oracle スキーマ編～


## 概要

### 本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle （SSMA）によるプログラム移行検証結果の一部である。

### スキーマについて

Oracle Database ドキュメントにて、次のように記載されている。

> データベース・オブジェクトの集合です。

引用元：[8.1 スキーマ・オブジェクトについて (oracle.com)](https://docs.oracle.com/cd/F19136_01/admqs/managing-schema-objects.html#GUID-8AC1A325-3542-48A0-9B0E-180D633A5BD1)


### 参考リンク

- ホワイトペーパー
    - Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
- その他
    - [Project 設定 (変換) (OracleToSQL) - SQL Server | Microsoft Learn](https://learn.microsoft.com/ja-jp/sql/ssma/oracle/project-settings-conversion-oracletosql?view=sql-server-ver16#miscellaneous-options)
    - [Schema mapping in Oracle to SQL Server migrations | ABCloudz Blog](https://abcloudz.com/blog/schema-mapping-in-migration-from-oracle-to-sql-server/)

## Azure SQL Database への移行

### SSMA による変換

SSMA の設定値である`Default Schema Mapping`の値により変換方法が異なるが、Azure SQL Database では`Default Schema Mapping`の設定値はなく、`Schema to schema`相当の設定となっている。

### 移行方針

Azure SQL Database のスキーマとして移行を実施する。