OmniAICreator/Qiita-1.07M huggingface dataset:
表領域の使用率を確認

以下の記事を参照しています。
https://www.fuku.tokyo/2021/03/oraclepdbtbs/


記事が消えたときに備えてココに保存

全てのPDBの使用率を算出できる。
マルチテナントじゃなくても実行できるようだ。
（一応、12cのRAC環境で確認）


alter session set "_px_cdb_view_enabled"=false;
 
set lines 300
set pages 100
col pdb              format a20
col tablespace_name  format a20
col size(mb)         format 999,999,999
col used(mb)         format 999,999,999
col free(mb)         format 999,999,999
col max(mb)          format 999,999,999
col used(%)          format 990.9
 
select
  (select name from v$containers where con_id = df.con_id)           as pdb,        -- pdb名
  tablespace_name,                                                                  -- 表領域名
  nvl(total_bytes/1024/1024,0)                                       as "size(mb)", -- データファイルのサイズ
  (total_bytes - nvl(free_total_bytes,0)) / 1024 / 1024              as "used(mb)", -- データ使用量
  nvl(free_total_bytes/1024/1024,0)                                  as "free(mb)", -- データファイルの未使用サイズ
  nvl(max_bytes/1024/1024,0)                                         as "max(mb)",  -- データファイル拡張最大サイズ
  round((total_bytes - nvl(free_total_bytes,0)) / max_bytes * 100,1) as "used(%)"   -- 使用率(used(mb)/max(mb))
from
  ( select
      con_id,
      tablespace_name,
      sum(bytes) total_bytes,
      --autoextensible=noの場合 現在のサイズ(bytes)をmaxbytesに設定
      sum(case autoextensible when upper('yes') then maxbytes else bytes end) max_bytes
    from
      cdb_data_files
    group by
      con_id,tablespace_name
  ) df
  left outer join
  ( select
      con_id,
      tablespace_name free_tablespace_name,
      sum(bytes) free_total_bytes
    from
      cdb_free_space
    group by con_id,tablespace_name
  ) fs
  on df.con_id = fs.con_id
    and df.tablespace_name = fs.free_tablespace_name
where 1=1
-- and tablespace_name = upper('system')
order by pdb,tablespace_name
/
macOS での Session Manager プラグインのインストールで `Failed to create symlink` になった件

まっさらな MacBook Pro がやってきたのでセットアップして必要な環境作っていくときにちょっぴりハマった話。

## 環境

* Apple M3 Pro
* macOS Sonoma 14.1

## AWS CLI でセッション繋ぐ

```
$ aws ssm start-session --target i-XXXXXXXX

SessionManagerPlugin is not found. Please refer to SessionManager Documentation here: http://docs.aws.amazon.com/console/systems-manager/session-manager-plugin-not-found
```

SessionManagerPlugin ない言われた。

[macOS での Session Manager プラグインのインストール（公式）](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/install-plugin-macos-overview.html) に書いてる手順に従って

1.バンドルされたインストーラをダウンロードします。

```
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
```

2.パッケージを解凍します。

```
unzip sessionmanager-bundle.zip
```

3.インストールコマンドを実行します。

```
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

Password:
Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin
Failed to create symlink.
Please add /usr/local/sessionmanagerplugin/bin to your $PATH to use Session Manager Plugin.
```

おや？

ググってみてもズバリ同じエラーのものが見あたらない:thinking:

`Please add /usr/local/sessionmanagerplugin/bin to your $PATH to use Session Manager Plugin.`

なるほど？

```
export PATH=$PATH:/usr/local/sessionmanagerplugin/bin
```

追加してみた

```
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

Password:
Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin
Failed to create symlink.
Please add /usr/local/sessionmanagerplugin/bin to your $PATH to use Session Manager Plugin.
```

:cry:

うーむ

`Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin`

なのでそのへんを見てみる。

```
$ ls -la /usr/local/
total 0
drwxr-xr-x   4 root  wheel  128  3 22 16:22 .
drwxr-xr-x@ 11 root  wheel  352 10 14 13:08 ..
drwxr-xr-x@  6 root  wheel  192  3 22 16:22 sessionmanagerplugin
```

`bin` がないんですが？

```
$ sudo mkdir /usr/local/bin/
```

作ってみた

```
$ sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin

Creating Symlink from /usr/local/sessionmanagerplugin/bin/session-manager-plugin to /usr/local/bin/session-manager-plugin
Installation successful!
```

単純な話だったけどなぜ `/user/local/bin` なかったんや:thinking:
一時表領域を使用中のセッションを確認

以下の記事を参照しています。
https://www.fuku.tokyo/2020/04/temp/

タイトルが「ラーメン屋になりたいSEのブログ」
だが、なぜラーメン屋になりたがっているのかについての
記事は見当たらなかった。

記事が消えたときのためにココに保存。


alter session set "_px_cdb_view_enabled"=false;
 
set lines 300
set pages 100
col pdb              format a20
col tablespace_name  format a20
col size(mb)         format 999,999,999
col used(mb)         format 999,999,999
col free(mb)         format 999,999,999
col max(mb)          format 999,999,999
col used(%)          format 990.9
 
select
  (select name from v$containers where con_id = df.con_id)           as pdb,        -- pdb名
  tablespace_name,                                                                  -- 表領域名
  nvl(total_bytes/1024/1024,0)                                       as "size(mb)", -- データファイルのサイズ
  (total_bytes - nvl(free_total_bytes,0)) / 1024 / 1024              as "used(mb)", -- データ使用量
  nvl(free_total_bytes/1024/1024,0)                                  as "free(mb)", -- データファイルの未使用サイズ
  nvl(max_bytes/1024/1024,0)                                         as "max(mb)",  -- データファイル拡張最大サイズ
  round((total_bytes - nvl(free_total_bytes,0)) / max_bytes * 100,1) as "used(%)"   -- 使用率(used(mb)/max(mb))
from
  ( select
      con_id,
      tablespace_name,
      sum(bytes) total_bytes,
      --autoextensible=noの場合 現在のサイズ(bytes)をmaxbytesに設定
      sum(case autoextensible when upper('yes') then maxbytes else bytes end) max_bytes
    from
      cdb_data_files
    group by
      con_id,tablespace_name
  ) df
  left outer join
  ( select
      con_id,
      tablespace_name free_tablespace_name,
      sum(bytes) free_total_bytes
    from
      cdb_free_space
    group by con_id,tablespace_name
  ) fs
  on df.con_id = fs.con_id
    and df.tablespace_name = fs.free_tablespace_name
where 1=1
-- and tablespace_name = upper('system')
order by pdb,tablespace_name
/
Git CLI - 1. 基本的なLinux Command

:high_brightness: 始めに
Linuxをベースに作られた、最強のVersion管理システムGit/GitHub！
より便利に使用するためのGit CLIまとめ。
「Git CLI - 1. 基本的なLinux Command」編です。

●Gitでよく使う、基本的なLinux Command 
--------------------------------

$ git    <details><summary>details</summary>
使用できるコマンド情報
</details>

$ git config  <details><summary>details</summary>
環境設定
</details>

例)
$ git config --global user.name "任意の名前"
$ git config --global user.email "任意のメールアドレス"
$ git config --global core.editor "任意の基本Editor(notepad++など)"

$ pwd  <details><summary>details</summary>
現在経路(パス)  ※pwd(print working directory)
</details>

$ ls    <details><summary>details</summary>
現在経路にどんなファイルやDirectoryがあるか確認　※ls(list)
</details> 

$ clear <details><summary>details</summary>
Terminalをきれいにする(画面のコマンドを全部消す)
</details>

$ cd    <details><summary>details</summary>
Directory移動　※cd(change directory)
</details>

例)
$ cd ..  (上位Directoryに移動)
$ cd ~ (ホームDirectoryへ移動)
$ cd 下位Directoryの名前 (下位Directoryに移動)

![mkdir.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490906/c473e0e2-0ee3-9326-dce6-ce0932669a0c.jpeg)


$ mkdir フォルダ名   <details><summary>details</summary>
 指定フォルダ名でフォルダを作る　※mkdir(make directory)
</details>


$ rm -r フォルダ名   <details><summary>details</summary>
指定フォルダを削除(-r オプション：直下のフォルダやファイルも消す)　※rm(remove)

    
●ls コマンドのオプション
--------------------------------
|オプション|説明|
|:-:|:-:|
|-a |隠しファイルやDirectoryも表示|
|-l |ファイルやDirectoryの詳細情報表示|
|-r |ファイルの整列順を逆順で表示|
|-t |ファイルの作成時間順に整列(降順)|

※よく使うのは $ ls -la


●LinuxでDirectoryを表示する記号
--------------------------------
|記号|説明|
|:-:|:-:|
|~|ホームDirectory、ホームDirectoryのパスは 'c/Users/使用者ID'|
|./|現在使用者が作業中のDirectory|
|../|現在Directoryの上位Directory|


●Vim Editorでテキスト文書を作成
--------------------------------
Gitインストール時にVimをDefault Editorとしてにインストールできます。(OSの種類や環境によって選択可能です、Nano Editorもよく使用されます)

① 任意のtxtファイルを作ります。

$ vim test.txt   <details><summary>details</summary>
 現在のdirectoryにtest.txtファイルを作る (vimが実行されます)
</details>

② vimは２つのモードがあります。テキスト入力時には'入力モード'、文書をsave・終了する時は'exモード'に変更し使用します。

ex mode　→　入力 mode　：　Aキー、Iキー
ex mode　←　入力 mode　：　Escキー

![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490906/21ab9b18-0434-d9e6-9c51-640f75696410.jpeg)


③ テキスト入力完了後、セーブする時はex modeに戻り、コロン(:)と'w'セーブ'q'終了コマンドを実行します。

※':wq' コマンド入力しEnterキーを押す

![vim.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490906/928abc8a-ec89-adf2-ed86-30fdaba1ce6c.jpeg)



④ Terminalで簡単にtxtの内容を確認する時は'cat'コマンド
$ cat test.txt


●cat コマンドで実行できる機能
--------------------------------
|コマンド|説明|
|:-:|:-:|
|$ cat file名|ファイルの内容を画面に表示|
|$ cat file1,file2‥fileN > 新file|ファイルN個を順に繋ぎ、新しいファイルを作る|
|$ cat file1 >> file2|file1の内容をfile2の最後に繋げる|


:last_quarter_moon: 終わりに
次回は[「Git CLI - 2. Gitでバージョンを管理する」](https://qiita.com/bshin/items/84f7896c2aea265c18d5#2-1-git-repository%E3%82%92%E4%BD%9C%E3%82%8B)についてまとめていきます。

投稿者
エンジニアファーストの会社 株式会社CRE-CO
Shin Boyoung
更新系APIの状態不整合の解決策　参照リクエスト＋非同期の照合ファイル


# はじめに　このページを読んでわかること
[更新系APIの状態不整合の解決策　参照リクエスト](https://qiita.com/okotaniki/items/34b4a9fb727aa65ad7fe)の課題として参照リクエストでサーバBの状態が取得できない場合に、照合ファイルを利用する解決策をまとめる。

# 非同期の照合ファイルのシーケンス
#### 参照リクエストがタイムアウト後、照合ファイルでサーバ側の状態を確認する
照合ファイルの状態”データなし”に、クライアント側の状態を一致させる。(状態不整合として課題はない)

```plantuml
サーバA->x サーバB : 更新リクエスト
note left:状態遷移　初期状態→不明　
note right:データなし
サーバA ->x サーバB:参照リクエスト
サーバA ->x サーバB:参照リクエスト
サーバA ->x サーバB:参照リクエスト
note left:参照リクエストが規定回数に達する(リトライアウト)
== 非同期(日次など) ==
サーバA->サーバB:照合ファイル要求
サーバB--> サーバA : 照合ファイル"データなし"
サーバA-> サーバA : 状態遷移
note left:状態遷移　不明→初期状態
```

#### 参照リクエストがタイムアウト後、照合ファイルでサーバ側の状態を確認する
照合ファイルの状態”処理済み”に、サーバAの状態を一致させる。(状態不整合として課題はない)

```plantuml
サーバA->サーバB : 更新リクエスト
note right:処理済み
サーバB-->x サーバA : OK
note left:状態遷移　初期状態→不明
サーバA ->x サーバB:参照リクエスト
サーバA ->x サーバB:参照リクエスト
サーバA ->x サーバB:参照リクエスト
note left:参照リクエストが規定回数に達する(リトライアウト)
== 非同期(日次など) ==
サーバA ->サーバB:照合ファイル要求
サーバB--> サーバA  : 照合ファイル"処理済み"
サーバA -> サーバA  : 状態遷移
note left:状態遷移　不明→処理済み
```

# 結論
照合ファイルにより状態不整合の課題は解決する。
しかし、実務の課題として、非同期の照合ファイルを受領するまでの間、クライアント側の状態を"不明"のままにしておくことが許容されないサービス要件であることが多いと推測される。なぜなら、更新リクエスト自体がバッチ処理ではなく、オンライン処理を用いていることから、サーバ側の処理結果がクライアント側で即座に必要なためと思料される。
Googleカレンダーの変更をLINEに通知するようにするのを全部ブラウザ経由でやる／Google Apps Script(GAS)+Line Notify

なんか最近IFTTTでやってたGoogleカレンダーのLINEへの追加通知が動いてなかったのでGASのみでやろうとしたところ「clasp とかいるんか…今手元に開発環境ないんよなぁ」「全部ブラウザ使うならどんな手順になるん？」となったのでまとめてみました。

# 1.LINE Notifyに登録してアクセストークンを発行する
以下とかを参考にやります。

https://zenn.dev/protoout/articles/18-line-notify-setup

# 2.なんか適当にGoogleスプレッドシートのファイルを作って、Apps Scriptを開く
下記画像みたいな感じで。ファイル名は適当で。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/bc204195-28ef-9dbc-5fa2-809e2c525964.png)

# 3.コードを貼り付ける
コードはこちらから拝借させていただきました。
(コードにはSlackへのエラー通知も含まれますが、本記事の手順には含みません)

https://qiita.com/syakesalmon/items/8a022acced0eb54adfb5

あとコードに1で取得したアクセストークンを貼り付けます。
コードのファイル名とかプロジェクト名は気分で設定してください。
(そういえばシークレット情報直書きってええんかな？まぁ個人利用ならAzure Key Vaultとかまではいらないか)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/e1a89dd2-0da0-795e-e50e-29845fef9b84.png)

# 3.トリガーを設定する
トリガー一覧を表示して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/7994923f-75bd-9c85-f16c-17fda729d6b4.png)

トリガー追加をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/ad87cbfb-eaee-0e89-87d5-b545a1796e3e.png)

追加するトリガーの設定して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/b7e7198e-4c97-ca19-ce7b-81e38777b714.png)

★なんかうまくいかず(Request had insufficient authentication scopesとか出た)、一度トリガーを削除したところ、何故かトリガーが追加できなくなった…
一日置いてブラウザのキャッシュ削除とかしたらいけたけど根本原因は不明…

# 4.サービスを追加
「サービス」から
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/2e5c101f-f22d-6ab2-aa07-3871ed97c446.png)

「Google Calender API」を選択して追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/fd15f098-3f9b-c873-a6c3-04c16204bbd8.png)

# 5.デプロイ
新しいデプロイで
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/8ee5ad60-4002-21f0-758a-cbb07178c266.png)

デプロイタイプをウェブアプリを選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/021a415a-f34f-3f32-8e2c-bd3a03f959d9.png)

説明を書いてデプロイをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65842/96117a56-bdf9-dab4-40aa-6570812fdafe.png)

# 5.実行結果
カレンダー変更でトリガーされてエラー無く完了してるのにLINEにメッセージが来ない…何故？(´･ω･`)
一時表領域の使用率

以下のSQLを実行

SELECT
    ROUND(allocated_space / (1024 * 1024), 0) "割当済(MB)",
    ROUND(free_space / (1024 * 1024), 0) "空容量(MB)",
    ROUND(free_space / TABLESPACE_SIZE * 100, 2) "空き率(%)"
FROM
    dba_temp_free_space;
【SwiftUI】データ管理の基本（Property Wrapper）

# はじめに
`@StateObject` と `@ObservedObject` の注意すべき点を知ったので、この機会に他の主要な Property Wrapper も含めて備忘録としてまとめたいと思います。

# ■ 値型のデータ

## `@State`

- その View にデータを保持
- 外から渡されるデータではないので `private` が良さそう

## `@Binding`

- その View で、親 View に保持されているデータを更新する場合に使う

```swift
struct SuperView: View {
    @State private var value = 0
    var body: some View {
        SubView(value: self.$value)
    }
}

struct SubView: View {
    @Binding var value: Int
    var body: some View {
	    // SuperView の value を更新できる
    }
}
```

子 View がデータを更新しないなら、 `@Binding` をつけず普通に子 View に渡しておけば、親 View 側でデータが更新された際には、再描画によって**更新後の値が渡された）子 View が新しく作り直されるので**オッケーということですね。

# ■ 参照型のデータ

以下、データの型は `ObservableObject` プロトコルへの準拠が必要。`@Published` を付与したデータが更新されるタイミングで SwiftUI へ通知される。

## `@StateObject`

- その View で参照型のデータオブジェクトを保持する場合に使用
- 外から渡されるデータではないので `private` が良さそう
- オブジェクトのインスタンスは View の表示中に一度しか作成されない
- **View インスタンスが破棄された後もオブジェクトは破棄されず SwiftUI から保持される（詳細は後述）**

## `@ObservedObject`

- 親 View から渡されるオブジェクトを扱う場合に使用（するといい）
- View インスタンスが破棄されるとオブジェクトも破棄される（詳細は後述）

## `@StateObject` と `@ObservedObject`の注意すべき違い

```swift
struct MainView: View {
	@State private var isHoge: Bool = false
	var body: some View {
		SubView() // isHoge が更新されると再描画される
	}
}
```

このとき、 `isHoge` が更新されたときに `SubView()` が再描画されることによって、

`@ObservedObject` の場合は、 `hogeDataSource` はリセットされる
```swift
struct SubView: View {
    // @ObservedObject で保持しているデータの場合
    @ObservedObject private var hogeDataSource = HogeDataSource()
    var body: some View {
        // ...
    }
}
```
`@StateObject` の場合は、 `hogeDataSource` はリセットされない
```swift
struct SubView: View {
    // @StateObject で保持しているデータの場合
    @StateObject private var hogeDataSource = HogeDataSource()
    var body: some View {
        // ...
    }
}
```
    
`SubView` の**インスタンス自体は一度破棄されているけど、SwiftUI の機能によってオブジェクトが保持されている**（先祖の View の再描画によるインスタンスの破棄からオブジェクトだけは保管して守られ、作り直されたインスタンスに付け直す）ということでしょうか。こちらはなんとなく直感に反する感じがしました… 覚えておきます。
    

## `@EnvironmentObject`

- これで定義したオブジェクトは、すべての子孫の View からアクセスできる

```swift
struct MainView: View {
		@StateObject private var hogeDataSource = HogeDataSource()
    var body: some View {
		    // .environmentObject で渡す
        ParentView().environmentObject(isHoge)
    }
}

// 親子間で hogeDataSource の受け渡しをしていかなくても
struct ParentView: View {
    var body: some View {
        ChildView()
    }
}

struct ChildView: View {
    var body: some View {
        GrandChildView()
    }
}

// 子孫のどこからでも hogeDataSource にアクセスできる
struct GrandChildView: View {
		// @EnvironmentObject でアクセスする
    @EnvironmentObject var hogeDataSource: HogeDataSource
    var body: some View {
				// ...
    }
}
```

データを保持している View から深い階層の View からアクセスさせる必要がある場合、1階層ずつ `@ObservedObject` を渡すと冗長なので、 `@EnvironmentObject` が有効ということですね。

# ■ 環境値

## `@Environment`

- View の環境値を読み取るために使う
- 例
    
    ```swift
    @Environment(\.isPresented) var isPresented
    @Environment(\.dismiss) var dismiss
    ```
    

具体的にはスクリーンの情報、言語や地域、アプリの起動状態などについての値を読み取るときに使うものですね。こちらは **[公式リファレンス](https://developer.apple.com/documentation/swiftui/environmentvalues)** を参照すると具体例が浮かんでわかりやすいと思います。
【Unity】 missing が存在する時自動でビルドをキャンセルする仕組み

皆さんは `missing` について悩んだ事はありますか？

`missing` を探すアセットは世の中にたくさんありますが
ビルドするシーンに `missing` が存在する時に
自動でビルドをキャンセルする仕組みは
意外とありません。

そこで今回はその仕組みを提供してみたいと思います。
この仕組みを導入する以外の操作は必要なく
毎回実行する手間もありませんので
是非導入を検討して頂けると幸いです。

unitypackage 版も公開しますので
楽に導入したいならば
そちらも検討下さい。

***

[https://drive.google.com/file/d/1sNoFsd5nST2H-uCkTlmhwkgEcV_wW9Wa/view?usp=sharing](https://drive.google.com/file/d/1sNoFsd5nST2H-uCkTlmhwkgEcV_wW9Wa/view?usp=sharing)

unitypackage 版は
上記の URL からダウンロードして下さい。

SephirothStopOutputAtMissing.cs
以外のファイルは削除してかまいません。
HowToUse.pdf 等は容量が大きいため
削除する事を推奨します。

***

では仕組みを作成していきます。

Editor フォルダを作成して、その中に
SephirothStopOutputAtMissing.cs を新規作成して
下記の内容にして下さい。

```Csharp:SephirothStopOutputAtMissing.cs
#pragma warning disable 0618

namespace SephirothTools
{
    public class SephirothStopOutputAtMissing : UnityEditor.Build.IPreprocessBuild
    {

        public void OnPreprocessBuild(UnityEditor.BuildTarget target, string path)
        {
            string currentScenePath = UnityEngine.SceneManagement.SceneManager.GetActiveScene().path;
            foreach (var oneScene in UnityEditor.EditorBuildSettings.scenes)
            {
                UnityEditor.SceneManagement.EditorSceneManager.OpenScene(oneScene.path);

                foreach (var oneGameObject in UnityEngine.Object
            .FindObjectsOfType<UnityEngine.GameObject>(true))
                {
                    foreach (var oneComponent in oneGameObject.GetComponents<UnityEngine.Component>())
                    {
                        if (!oneComponent)
                        {
                            throw new UnityEditor.Build.BuildFailedException(oneScene.path + "'s objectName: " + oneGameObject.name + " is missing. Stop the app's output.");
                        }

                        UnityEditor.SerializedObject serializedObject = new UnityEditor.SerializedObject(oneComponent);

                        serializedObject.ApplyModifiedProperties();

                        UnityEditor.SerializedProperty property = serializedObject.GetIterator();

                        while (property.Next(true))
                        {
                            if (property.propertyType == UnityEditor.SerializedPropertyType.ObjectReference && property.objectReferenceValue == null && property.objectReferenceInstanceIDValue != 0)
                            {
                                throw new UnityEditor.Build.BuildFailedException(oneScene.path + "'s objectName: " + oneGameObject.name + " is missing. Stop the app's output.");
                            }
                        }
                    }
                }
            }
            UnityEditor.SceneManagement.EditorSceneManager.OpenScene(currentScenePath);
        }

        public int callbackOrder { get { return 0; } }
    }
}
```

ビルド対象のシーンに対して
missing が存在するときに
throw new UnityEditor.Build.BuildFailedException
が呼ばれているのが分かると思います。

BuildFailedException が throw されると
自動でビルドがキャンセルされます。
どのオブジェクトが missing なのかも
ログで分かるように作成しています。

***

あとがき

以上が missing が存在する時
自動でビルドをキャンセルする仕組みになります。

導入しておけば
それ以外の操作が必要ない点は
非常に便利なハズです。

この仕組みが
皆さんの開発の助けになれば幸いです。
閲覧ありがとうございました。
更新系APIの状態不整合の解決策　参照リクエスト


# はじめに　このページを読んでわかること
[更新系APIのタイムアウトで発生する課題](https://qiita.com/okotaniki/items/b4fb6210ebe6900d1f8e)でまとめたサーバ間の状態不整合の解決策として、サーバAをサーバBの状態に一致させるため参照リクエストを利用する。

# 参照リクエストのシーケンス
#### 更新リクエストがタイムアウト→参照リクエストを送信
参照リクエストでサーバBにデータがないため、サーバA内部の状態遷移で、初期状態に戻す。(課題なし)
```plantuml
サーバA->x サーバB : 更新リクエスト
note left:状態遷移　初期状態→不明　
note right:データなし
サーバA -> サーバB:参照リクエスト
サーバB--> サーバA : データなし
サーバA-> サーバA :サーバBの状態に合わせる
note left:状態遷移　不明→初期状態
```
#### 更新リクエストがタイムアウト→参照リクエストを送信
参照リクエストでサーバ側にデータがあることを確認できたので、サーバA内部の状態遷移で、処理済み状態にする。(課題なし)
```plantuml
サーバA->サーバB : 更新リクエスト
note right:処理済み
サーバB-->x サーバA : OK
note left:状態遷移　初期状態→不明
サーバA -> サーバB:参照リクエスト
サーバB--> サーバA : 処理済み
サーバA-> サーバA :サーバBの状態に合わせる
note left:状態遷移　不明→処理済み
```

# 結論　
参照リクエストによりサーバBの状態にサーバAを一致させることでサーバ間の状態不整合を解消させることはできた。
以下が課題として残る。
- 参照リクエストのレスポンスが受信できない場合、サーバBの状態を取得できない
【SQL】SELECTをする際、特定条件時に既存の値に「-（マイナス）」を入れる

## 結論
```
SELECT
    hoge,  /*1かどうかの確認用、fugaだけ欲しければ不要*/
    CASE WHEN hoge = '1'
        THEN -1 * fuga
        ELSE fuga
    END AS fuga
FROM test_table
;
```

## 何をしているのか
test_table内の項目「hoge」が'1'の時、
同テーブル内の項目「fuga」の値に「-1」を掛ける（*で掛ける）ことで先頭に「-」を付ける。

## 実際の動き
既存のtest_tableの中身
| hoge | fuga |
|:-----|-----:|
| 1    | 1100 |
| 0    | 1000 |

結論のSELECTを実行
| hoge | fuga  |
|:-----|-----: |
| 1    | -1100 |
| 0    | 1000  |

「fuga」がテーブル定義上、テーブル定義の最大桁を超過しても「-」は付く。
（最大桁が「4」であっても上記の実際の動きのように「-」が付く）
更新系APIの状態不整合の解決策　ロールバック＋非同期の照合ファイル

# はじめに　このページを読んでわかること
[更新系APIの状態不整合の解決策　非同期の照合ファイル](https://qiita.com/okotaniki/items/cbddac07806b643434a6)において、課題として、照合ファイルを受け取るまで、サーバAを”不明”状態にしておくことが許容されないサービス要件に対応できないことを指摘した。
本ページでは、その解決策として、サーバAをロークバックする方法をメモしておく。

# 非同期の照合ファイルによるロールバックのシーケンス
#### 更新リクエストがタイムアウト後、サーバAをロールバックし、照合ファイルでサーバBの状態を確認する

```plantuml
サーバA->x サーバB : 更新リクエスト
note left:状態遷移　初期状態→不明　
note right:データなし
サーバA-> サーバA : **タイムアウト検知したら初期状態にロールバックさせる**
note left:状態遷移　不明→初期状態 
== 非同期(日次など) ==
サーバA->サーバB:照合ファイル要求
サーバB--> サーバA : 照合ファイル"データなし"
```
#### 更新レスポンスがタイムアウト後、サーバAをロールバックし、照合ファイルでサーバBの状態を確認する
照合ファイルでサーバBは"処理済み"のため、サーバAの"初期状態"に一致させるため、取消リクエストを送信する。
課題として、照合ファイルを受信するまでサーバ間の状態不整合を許容できないサービス要件の場合、さらに解決策が必要となる。

```plantuml
サーバA->サーバB : 更新リクエスト(1回目)
note right:処理済み
サーバB-->x サーバA : OK
note left:状態遷移　初期状態→不明
サーバA-> サーバA : **タイムアウト検知したら初期状態にロールバックさせる**
note left:状態遷移　不明→初期状態 
== 非同期(日次など) ==
サーバA->サーバB:照合ファイル要求
サーバB--> サーバA : 照合ファイル"処理済み"
サーバA->サーバB : 取消リクエスト
note right:処理済み→取消
サーバB-->サーバA : OK
```

# 結論　
ロールバックによりサーバAを”不明”状態にしておくことが許容されないサービス要件を満たすことはできた。
サービス要件によっては、照合ファイルを受信するまでサーバ間の状態不整合を許容できないことが、課題となる。
ブックデザインのためにDTPを学んだこと１

原稿を渡され、本を作って欲しい。
そんな依頼が来ましたが、ほとんど知識のないまま
本を１冊作ることになりました。
そんな私が学んだことを書いていきます。

書き方は以下の通り
↓

    1 まず、疑問に思ったこと
    2 その回答
    3 そこからまた疑問に思ったこと

この順番で記載をします。

というわけで、今日の疑問

1　ブックデザインとはどんなことをするのか？
　本を作るとき、表紙をデザインして、本文のレイアウトをする。
　この中で気をつけるべきことは何か、この辺りを考えて調べてみました。

2　回答
　ブックデザインとは、*書籍の体裁や見映えを美しく魅力的に作り上げる作業*
　のことを指します。以下のような幅広い意味が含まれています。

【内容の視覚化】
- 本の内容や主旨を視覚的に表現すること
- タイトル、写真、イラストなどで本の世界観を伝える

【読みやすさの追求】
- レイアウト、行送り、フォントなどを工夫し読みやすさを高める
- 目次や索引などの機能性も重視する

【装丁のデザイン】
- 表紙や背表紙のデザイン、用紙や製本方式の選定
- 素材の質感や色使いなど、本の価値を高める

【ブランディング】
- 出版社やシリーズの個性や世界観を視覚的に表現する
- イメージやコンセプトを一貫させる

【読者への魅力創出】
- 読者が手に取りたくなる魅力的な本を作ること
- 読書の喜びを視覚から体感できるように仕上げる

まとめ：ブックデザインは本の内容と体裁の両面に関わる総合的な作業。
言語情報と視覚情報を融合させ、それらを最適なかたちで表現することが求められる。

3　次回は、少し漠然としているので、パーツ別に留意点を調べていきます。
　　例えば、カバーデザインや本文のレイアウトについて
　　印刷所の方がまとめた情報などもチェックして参ります。
RとPython(pandas)対比表

# はじめに
RstudioのRと、VscodeのPythonを交互に使っていると、しょっちゅうどっちがどっちだか分からなくなる。`groupby()`と書くべきところを`group_by()`と書いてエラーに怒られて「なんで？」と思ったりする。ということで、自分が混乱しがちなものを整理してみた。

# 対比表

| 操作カテゴリ | 操作内容 | VScode/Python/Pandas | Rstudio/R/tidyverse |
|--------------|----------|---------------|-------------|
| ファイル | CSVファイル読込 | `pd.read_csv()` | `read.csv()` | 
| | CSVファイル出力 | `df.to_csv()` | `write.csv()` |
| | ファイル一覧取得 | `glob.glob()` | - |
| 作業場所 | 現WD取得 | `os.getcwd()` | `getwd()` |
| | WD設定 | `os.chdir()` | `setwd()` |
| データ整形 | 並び替え | `df.sort_values()` | `arrange()` |
| | インデックス設定 | `df.set_index()` |  - |
| | インデックスリセット | `df.reset_index()` | - |
| | 列名変更 | `df.rename()` | `rename()` |
| | 列削除 | `df.drop()` | `select()` |
| | 列選択 | `df.loc[]` | `select()` |
| | 置換 | `df.replace()` | - |
| | データ型変更 | `df.astype()` | - |
| | NA削除 | `df.dropna()` | `drop_na()` |
| | 重複行削除 | `df.drop_duplicates()` | `distinct()` |
| データ結合 | 縦結合 | `pd.concat()` | `rbind()` |
| | 横結合 | `pd.merge()` | `left_join()` |
| 集計 | グルーピング | `df.groupby()` | `group_by()` |
| | 集約 | `df.sum()` | `summarise()` |
| キーボード・ショートカット | 選択行をコメント/非コメント | `Ctrl＋/` |  `Ctrl+Shift+C` |
|  | pipe演算子(`%>%`)を挿入 | - | `Ctrl＋Shift＋M` |

# おまけ
getwd()を実行する時、脳内で「♪Get wild and tough ひとりでは～」と歌いがち。

https://open.spotify.com/track/5boa5pUNMOHjpXuKyIGcXj?si=hLao3rBTSeWy8qif0Cuz-w&context=spotify%3Asearch%3Aget
WSL環境でPreprosを使うまで

prepros.configが含まれたリポジトリを触る機会があり、WSL環境とPreprosを連携させるのにひと手間必要だったので、その方法を記載します。

# 前提
## Preprosとは
Preprosとは、SassコンパイルやJavaScriptの圧縮などWEB開発に必要な手続きを、登録したプロジェクトのディレクトリを監視して自動で行ってくれるGUIのツールです。

https://prepros.io/

## WSLとは
Windows上で、Linuxを動作させる仕組みです。
仮想マシンではなく、WindowsとLinuxが地続きに同居しているため、両OSの良い部分をシームレスに使うことができて大変便利です。

https://learn.microsoft.com/ja-jp/windows/wsl/about

# したいこと
WSLのファイルシステムに設置したPreprosを前提としたプロジェクトを、
WindowsにインストールしたPreprosで利用したい。

# うまくいかなかったこと
プロジェクトディレクトリをPreprosに読み込ませようとすると、
下記エラーが発生して、プロジェクトの追加が行えない。

__Unable to Add Project__
folder with a UNC path can not be added as  a project. Use "Map Network Drive" to assign a driver letter to the folder.
(訳: UNCパスのフォルダはプロジェクトとして追加できません。「ネットワークドライブの割り当て」を使用して、フォルダにドライブ文字を割り当ててください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274706/150f6dd5-a822-5aff-a6d9-e11131dfecc7.png)

# どう解決したか
エラー文にご丁寧に対応方法まで書かれているので、その通りに対応します。
ちなみに、UNCパスとは、Windowsのディレクトリ指定方法の一つで、ネットワークドライブの位置を示す形式です。
WSLの場合、Windowsからファイルを参照する場合、以下のように指定するのですが、これがUNCパスです。
~~~
\\wsl.localhost\Ubuntu-22.04\home\name\Project
~~~
## ネットワークドライブの割り当て
※Windows 11での操作です。
まず、Win + Eキーでエクスプローラーを開きます。
次に、サイドバーに表示されるPCに対して右クリックするか、PCを選択した状態で三点メニューをクリックし、
表示された「ネットワークドライブの割り当て」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274706/89d319bf-8e08-dd4c-3416-87355937a775.png)

設定用の画面が表示されるので、適当なドライブを選択して、
フォルダーにWSLのUNCパスを指定して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274706/ca6b8f3f-86b4-87f9-63f2-6e539def9eaf.png)

成功するとPC内にネットワークドライブが追加されます。例ではZ:ドライブに割り当てています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274706/9fa8c805-ab80-779d-3853-501c2a9f6f8e.png)

これで下記のようにドライブ文字付きのパス指定が可能になりました。
~~~
Z:\home\name\Project
↑と↓は同じ場所を指定しています。
\\wsl.localhost\Ubuntu-22.04\home\name\Project
~~~

再度、Preprosにドライブ文字付きのパスでプロジェクトを登録すると、無事完了しました。
内部のファイルを編集して保存すると、自動でコンパイル処理も実行されます。めでたしめでたし。
お疲れ様でした！
【Nextjs】microCMSからデータを取得できない

# はじめに
NextjsとmicroCMSを用いてブログサイトを作っていたところ、データ取得に躓いたのでまとめます。

# 問題
以下のエラーが出ました。

```
 × Error: Network Error.
  Details: fetch failed
```
おそらく、microCMSのクライアント作成時に問題が発生していると考えられます。

# 解決策
serviceDomainを変更する

```ts:client.ts
import { createClient } from "microcms-js-sdk";

export const client = createClient({
  - //serviceDomain: "https://my-tech-blog-jisou",
  serviceDomain "my-tech-blog-jisou",
  apiKey: process.env.MICROCMS_API_KEY,
});
```

" https:// "の部分がいらなかったようです。

# おわりに
今回はmicroCMSのドキュメントを見たのですが、" https:// "が必要ないという旨を見つけることができず、chatgptに聞いて解決しました。

# About Me
- X(Twitter)

https://twitter.com/shunii_hack
GitHubPagesとVercelの比較：静的サイトホスティングの選択肢

# GitLab的ドキュメント文化の組織へのインストール

新型コロッケさわぎのころから、いろいろなものをGitHub保存するようにしてきました。組織内ドキュメントもGitHubでメンテナンスしながら作り上げていました。ただし、ドキュメントに含まれるコンテンツは「イベント予定」「働き方」「設備関連情報」「ソルバーの使い方」「業務フロー」「複合機やNASのIPとかのインフラ情報」などです。

しかし、この場合、Google検索を頼りにすることはできません。たとえばGitLabでは、ハンドブックと呼ばれるルールブックやドキュメントが完全公開されているため、Google検索が有効です。しかし、そんな勇気のある猛者はあまりいないと思います。秘匿したい情報もありますし、GitHub上のユーザーインターフェースは閲覧には適していません。特に検索能力は限られています。

# 検索能と非公開性の両立への一提案

この問題を解決するために、Sphinx、GitBook、Hugo、Honkitなどの静的サイトジェネレーター（SSG）を使用してドキュメントページを作成することを考えました。さらに、search-pro-kuiのようなプラグインを使用して検索機能を強化できます。また、スタティックサイトの生成(SSG)にHonkitって興味深いアプリ採用しました。Gitbookから派生したこのHonkitツールは、CLIアプリケーションとしての利便性を保ちつつ、オープンソースソフトウェアとしての自由度も高く、多くの開発者にとって魅力的な選択肢かもしれません。CLIはそのスピード感と直接的なコントロール感で、多くの場合、よりストレスフリーな体験を提供できます。これは良いアプローチですが、非公開性ということでホスティングには課題がありました。

この技術系ブログでも質問しましたが、VPNやソフトイーサを使用して非公開にする方法は、私には合いませんでした。たとえば、有名なホスティングサービスであるGitHub Pagesは無料で利用できますが、公開されてしまうため、私たちの目的には合いませんでした。私は無料で認証付きの非公開ホームページを作成したかったのです。

そこで、無料で利用できるVercelというホスティングサービスを見つけました。ミドルウェアとして機能するJavaScriptファイルをトップディレクトリに配置するだけで認証機能を追加できるのは、非常に便利です。Basic認証も無料で実装でき、私たちの要件にぴったりです。このような技術が、組織内のコミュニケーションや情報共有をスムーズにし、生産性を向上させることに繋がるでしょう。みんなに教えたくて、ここに投稿しました！

## Refs.

- https://vercel.com
- https://honkit.netlify.app
- https://about.gitlab.com/handbook/
Red Hat Ansible Automation Platform と AWX について調べてみた【前編】

# 背景

　仕事上でAnsibleを良く使って構築してますが、その後の設定変更対応や運用では使えてないことに課題感をもっており、もっと活用したいと考えておりました。日々の運用作業に活用する場合は提供速度も重要ですが、初期構築作業と比べ依頼数が格段に多くなるため、作業の正確性が重要となります。また、担当者間で作業分担することも増えるため、担当者のツールや案件の理解度に依存しないように運用を回す必要があります。しかしながらAnsibleはCUIのツールとなっているため、担当者の理解度に大きく依存してしまうため、誤った操作をする懸念があります。
 　そこで担当者の理解を補助するためにAnsibleのGUIツールの導入を考えていたところ、Red Hat Ansible Automation Platform（AAP）とそのコミュニティ版であるAWXを見つけました。
 本記事ではAAPのGUI機能についてと、AWXの商用利用に制限がないかを調査した結果をご紹介いたします。
  
# Red Hat Ansible Automation Platform とは

一言で言うと複数チーム向けの自動化ソリューションです。

公式ページでは３つの異なる立場のチームと９つの機能が挙げられており、それぞれのチームでどの機能を使うか紹介されております。
筆者の場合はAnsibleをGUIで使いたいが目的のため、公式ページ上の自動化管理者と運用チームで紹介されているAutomation controller と Ansible Automation Hub を利用することで目的を達成できます。機能の詳細については次回の記事で紹介させていただきます。

> 自動化管理者と運用チーム
> 自動化管理者と運用チームは、自動化プラットフォームとフレームワークの運用を維持します。彼らは Automation controller と Ansible Automation Hub の強力なツールを利用でき、共通言語と、エンドポイントで広範にアクセスできるコマンドライン・インタフェース (CLI)、グラフィカル・ユーザー・インタフェース (GUI)、テキストベースのユーザー・インタフェース (TUI) の組み合わせを使用して、自動化プロジェクトの管理と共有をより効率的に実行できます。

https://www.redhat.com/ja/technologies/management/ansible/features?whousesansibletabs=teams

# ライセンス
AAPはAWS向けだとプレミアサポート契約かつ100ノード単位のパックのみで、１年間で17,500ドル（約262.5万円）です。ノード数は管理対象ノードとのことで、いまいち抽象的で分かりにくいですが常識的に考えるとインベントリファイルに記載するホストと思われます。（要検証）

https://www.redhat.com/ja/technologies/management/ansible/pricing

https://aws.amazon.com/marketplace/pp/prodview-4hz3uo55uaemk?sr=0-3&ref_=beagle&applicationId=AWSMPContessa
> RHAAP	Red Hat Ansible Automation Platform Premium. Sold in 100 node packs.	$17,500

https://access.redhat.com/documentation/ja-jp/red_hat_ansible_automation_platform/2.4/html/automation_controller_user_guide/ref-controller-node-counting

AWXはApache License 2.0のため商用利用が可能となります。またソースコードはGitHubで公開されております。

https://github.com/ansible/awx

# ライフサイクル
AAPの現在(2024年3月25日)の最新はバージョン2.4です。
2023年6月27日にリリースされてフルサポート期間は2024年6月27日まで、メンテナンスサポート（2回目）は2025年12月31日まで受けられます。そのためざっくりとしたサポート期間は通常は2年ほどのようです。
1.2系のような延長サポート付きになると5年ほどのようです。
なるべく延長サポート付きのバージョンを選びたいですが、1.2系の次の延長サポートバージョンの情報はありませんでした。

https://access.redhat.com/support/policy/updates/ansible-automation-platform#dates

AWXの現在(2024年3月25日)の最新バージョンは24.0.0です。2週間ほどで新しいバージョンがリリースされるようですが、FAQの下記記載から安定版の概念は無いものと思われます。

https://github.com/ansible/awx/releases

> Q: AWX はどれくらいの頻度でリリースされますか?
AWX チームは現在、約 2 週間ごとに新しいビルドをリリースする予定です。 AWX チームは、独自の裁量で特定のビルドに「安定」のフラグを付けます。 「安定している」という用語は、運用環境での使用への適合性や、いかなる種類の保証も意味するものではないことに注意してください。

https://www.ansible.com/faq

# まとめ

* AAPのAutomation controller と Ansible Automation Hub にGUI機能が含まれます。
* AWXはApache License 2.0のため商用利用が可能となります。

# 今後の予定
AAPとAWXの機能比較と実機検証を予定しております。
(ChatGPT3.5) MathML大学入試数学問題 編 解答,sympyで,本文,類題 の実行方法

・MathMLについて、おすすめの方法,使用例があれば教えて下さい。

# ChatGPT-3.5先生へのお願い方法

大学入試数学問題集成 様内 MathMLが多数あります。
https://mathexamtest.web.fc2.com/

手順
①urlの前に
view-source:
を挿入して、MathMLを表示する。
①`  ブラウザにソースコードの表示があれば使う。

②pから/pをコピー後、テキストをChatGPTに貼り付ける。
③最終行に以下の「お好みの行」を、追加して実行する。(最初?ありかも)

入力例 「お好みの行」中点不要でした。
・そのまま実行。MathMLだけ。
・sympyで
・本文だけ表示して下さい。
・テキストに変換して、類題を2つ作って下さい。
・MathMLの表示におかしいところはありますか。

# 実行結果
・日本語が含まれていても、英語の解答の場合もあります。
・sympyでの時は、本当ですか　を繰り返します。
　ソースコードは、エラーがでる場合が多いです。
　ソースコードは勉強になります。
　ソースコードの完成形?ステキです。
・MathMLの表示の聞き方を調査中です。

# 条件
ChatGPT3.5先生は,最大文字数?制限があるそうです。

# webの操作に詳しい方へ
ステキな操作インターフェイスをお待ちしております。

# いつもと違うおすすめです。

https://qiita.com/yoshiwatanabe/items/7973608e79d3f677c738
【kintone プラグイン】Hoku System テーブル行順並び替え プラグイン

# はじめに

Hoku Systemの**テーブル行順並び替えプラグイン**は、kintoneの詳細画面で、テーブルの行の順番をソートしたり自由自在に移動(レコードに保存したければ保存も)できるようにするプラグインです。

:::note
ルックアップや、添付ファイルが含まれるテーブルも対応しています！
:::

**プラグイン 公式HP**
・[Hoku System テーブル行順 並び替え プラグイン](https://hoku-system.stores.jp/items/65e7d44a81cb290307b9a261)
・[Hoku System テーブル行順 並び替え プラグイン【体験版・無料】](https://hoku-system.stores.jp/items/65e7d74781cb2903ceb9a2b4)

# 本体 操作方法

**◆テーブル行並び替え画面への切替方法**

①　詳細画面の右上の操作ボタンの中にテーブル行並び替え画面の切替ボタンが表示されます。

![Hoku System テーブル行順 並び替え プラグイン 並び替え画面　切替ボタン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/c4c51b27-5480-a660-cc3b-9a78f2bc7f55.png)

②　クリックするとテーブル並び替え画面に切り替わります。

![Hoku System テーブル行順 並び替え プラグイン 並び替え画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/faeb3df0-69c6-c722-2a13-5ac9de1294eb.png)


**◆並び替えしたテーブルの行の順番を保存**

![Hoku System テーブル行順 並び替え プラグイン 並び替え 保存](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/55f421ee-7613-10b3-f227-32da7a8b2972.png)


並び替えしたテーブルの行の順番をレコードに保存できます。
※保存機能は設定画面でOFFにする事ができます。


# 並び替え機能の種類
添付ファイルやルックアップフィールドが含まれるテーブもOK！

![Hoku System テーブル行順 並び替え プラグイン　ソート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/7452a018-f947-3c81-83c1-ea503ceaa23b.png)

**◆【機能1】フィールド毎にソート**
・昇順・降順・元に戻す をクリックで切替可能
・複数フィールドのソートが可能

**◆【機能2】上下に移動**
・ボタンクリックで、一つ上に、一つ下にの移動が可能

**◆【機能3】自由に移動**
・ドラッグ＆ドロップで移動が可能

[**◇詳しくはHoku System STORESの公式サイトへ**](https://hoku-system.stores.jp/items/65d6b73aa2eab20200c6ab2f) 

# 設定方法
**◆設定画面 例**
![Hoku System テーブル行順並び替えプラグイン 設定画面 ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744766/847dd2b7-94ce-d8a3-6154-acfdb945ec8a.png)
テーブル行並び替え機能を使いたいテーブル名をチェックして保存ボタンを押したら完了！
※並び替えの保存機能を使わない場合など、お好みで、チェックを外せば、並び替え後のレコードの保存機能を制限する事ができます。

# さいごに
kintoneはくせがありますが、使い慣れると便利だと思います。
標準機能でできない事・煩わしい事はカスタマイズやプラグインでどうにかなる事が多々あります。

https://hoku-system.stores.jp/

皆様の毎日作業がよりスムーズに行われるよう願っています。
【ChatGPT有＋DALL-E3】Arttrainがやってきた。


　どうも、カーブミラーです。

　今回は、Arttrainがやってきましたので、その話になります。さて、Arttrainとはなんでしょうか？

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はあります。　あしからず。
:::

　まずは、ニュース。

　OpenAIが
　　Soraを映像関連や研究関連に
　　　少しずつ開放？して
　　　　いるようです。
[OpenAI Soraのニュース（英語）](https://openai.com/blog/sora-first-impressions)

　また、
　　OpenAIは
　　　ハリウッドなどに
　　　　働きかけている、との
　　　　　話も聞こえています。

　おそらく、
　　Soraは
　　　我々一般人に、ではなく
　　　　こうした関連方向に
　　　　　提供されていくのだと
　　　　　　私は思っています。

　少なくとも
　　CTOであるミラ・ムラティ氏は
　　　インタビューに
　　　　“半年。早ければ２から３ヶ月”
　　　　　と答えています。

　これから考えるに
　　一般に提供されるように
　　　なるのは、もう少し先と
　　　　考えるのが妥当ではない
　　　　　かと思います。

　まぁ、私の予想なんて
　　当たるも八卦
　　　当たらぬも八卦、な
　　　　ものなので、気にしなくても
　　　　　大丈夫です。
　　　　　　来るときには来ますw
***
　次は、
　　ChatGPTアプリ版（Android版）に
　　　ついてです。

　これまでは
　　アプリ版で
　　　GPTsを使おうとすると
　　　　メインメニューから
　　　　　選ぶ必要がありました。

　Web版では
　　“メンション”機能があり、
　　　入力枠で、“@”を入力すると
　　　　GPTsリストを出してくれる
　　　　　のですが、アプリ版には
　　　　　　ありませんでした。

　それが
　　アプリ版（Android限定ですが）で
　　　使えるようになったのです。

　アプリ版では
　　GPTsの制作成は
　　　行なえませんが、
　　　　Web版で作成して、
　　　　　普段使いにアプリ版という
　　　　　　使い方もできます。

　iOS版の前に
　　Android版に
　　　開放されたのは謎です
　　　（これまで後回しだったのに）が
　　　　　それはそれ、
　　　　　　これはこれということで。
　　　　　　　こっちにはコントロール
　　　　　　　　できませんからね。
***
　さて
　　本題。
　　　Arttrainとはなんぞや？

　X-Twitterしていると
　　画像生成している絵師（術師）の
　　　あいだで、たまに見かける
　　　　“バトン”の受け渡し。

　リレーのバトンのことですが、
　　これは海外からつながったものの
　　　ようです。

　海外では
　　“Arttrain”と称して
　　　つながっていきます。

　フォロワーにつないで、
　　テーマに沿って
　　　描いてもらうものです。

　それが次々に
　　バトンが渡されていきます。

　それが
　　私にまわってきました。

　無視しても
　　よかったのですが、
　　　普段の付き合い
　　　（それほどでもない）から
　　　　無視はよくないと
　　　　　考えて、とりあえず参加
　　　　　　しました。

　次の人を指名するのですが
　　これは困ります。

　それなりのフォロワーは
　　いますが、同じバトンを
　　　すでに受け取っている人ばかり。

　なので
　　私は、バトンをバラまく作戦に
　　　して、フォロワーさんの
　　　　自由参加を促しました。

　だって、
　　自分の創作時間を
　　　それに傾けるわけですから
　　　　余裕がなければできません。

　それで
　　そうなったわけです。

　しかし、
　　こうしたバトンの受け渡しは
　　　ほかの世界ではありません。

　展示会や個人的に集まったときに
　　催し物程度にやられるのが
　　　ふつうです。

　ところが
　　X-Twitterでは
　　　それが簡単にできる。

　おそらく、
　　X-Twitterが、
　　　開かれたSNSだから
　　　　なのでしょうね。

　Discordなどは
　　Closedな性質を
　　　持っているので、
　　　　その中だけで完結してしまい、
　　　　　外には出ません。

　もちろん、
　　そちらにも
　　　利点はありますし、
　　　　それが悪いなどと
　　　　　書きません。
　　　　　　人の自由ですからね。
***
　さて、
　　今回のバトン、
　　　お題は『自由』。

　一番苦手な
　　テーマです😅

　奥さんが旦那さんに
　　「晩ごはん、何がいい？」と
　　　　聞かれて、
　　　　　「なんでもいい」は
　　　　　　　夫婦喧嘩のもとです😂

　奥さんも彼女も
　　いませんが😭

　悩んだ末に
　　こうなりました。
![1711421147526.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/635133eb-c772-cd5b-e68f-7860446f215d.jpeg)

　『自由という名の束縛』
　　　というタイトルを付けて
　　　　ポストしました。
　
　みなさんの
　　作品制作の糧に
　　　なれば　幸いです。

　今回は、ここまで。
EC2への複数ネットワークインターフェースアタッチについて

EC2に複数のネットワークインターフェースをアタッチして構築するケースについて。

AWSドキュメントでは下記に複数のネットワークインターフェースのアタッチについて説明があるのでメモ

- [ネットワークインターフェイスの設定に関するベストプラクティス](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/best-practices-for-configuring-network-interfaces.html)
- [ネットワークインターフェイスのシナリオ](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/scenarios-enis.html)

## 同じサブネットから複数のネットワークインターフェイスをインスタンスにアタッチするケースでは

[ネットワークインターフェイスの設定に関するベストプラクティス](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/best-practices-for-configuring-network-interfaces.html)

以下ベストプラクティスより引用

>同じサブネットから複数のネットワークインターフェイスをインスタンスにアタッチすると、非対称ルーティングなどのネットワーク問題が発生する場合があります。可能であれば、代わりにプライマリネットワークインターフェイス上でセカンダリプライベート IPv4 アドレスを使用します。

AWSのベストプラクティスでは同じサブネットから複数のネットワークインターフェスをアタッチするのでは、可能であればネットワークインターフェース1つでセカンダリIPアドレスを設定する方を推奨していました。

理由としては行きと帰るで通信経路が変わる非対称ルーティングなどが上げられていました。

用途ごとにIPアドレスを分けるために、EC2インスタンスに複数ネットワークインターフェースをアタッチしているのを見たことがありますが、AWSのベストプラクティスとしては、可能ならばネットワークインターフェース1つにセカンダリIPがよさそうです。

## どんなケースで複数のネットワークインターフェースを利用するのか

[ネットワークインターフェイスのシナリオ](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/scenarios-enis.html)

ドキュメントで紹介されているのは下記4つのケース
それぞれ読み込んで自分の解釈をメモ。

- 管理用ネットワークを作成する。
- 仮想プライベートクラウド (VPC) 内でネットワークアプライアンスやセキュリティアプライアンスを使用します。
- 別個のサブネット上のワークロード/ロールを使用するデュアルホーム接続インスタンスを作成する。
- 低予算で可用性の高いソリューションを作成する。

#### 管理用ネットワークを作成する。

WebサーバーにPublicサブネット側に1つ、Privateサブネット側に1つの計2つのネットワークインターフェースを割り当てていて。

Publicサブネット側のネットワークインターフェースにはEIPを割り当ててインターネット側との通信を担いSGで80と443の通信を許可する。
Privateサブネット側のネットワークインターフェースにはバックエンドの通信を担い、SGで爆エンドからの管理通信（ssh)を許可する。

上記のようなPublic側とPrivate側でセキュリティグループの設定を分けた構成が紹介されています。

#### VPC 内でネットワークアプライアンスとセキュリティアプライアンスを使用する

アプライアンスによっては、複数のネットワークインターフェースを使用した構成が優先される旨が記載。

#### 別個のサブネット上のワークロード/ロールを使用するデュアルホーム接続インスタンスを作成する。

Webサーバーとバックエンド（データーベースサーバー）が異なるサブネットで稼働しており、アプリケーションサーバーがWebサーバーとバックエンド（データベースサーバー）が稼働しているサブネットにデュアルホーム接続して間を取り持つケースについて記載されていました。

#### 同一アカウント内の個別の VPC にあるワークロード/ロールを使用するデュアルホームインスタンスを作成する

同一アカウントで異なるVPCかつ同一AZの場合、異なるサブネットに作成したネットワークインターフェースをインスタンスにアタッチできる。

ユースケースとしては下記となる。以下引用

>VPC にまたがるデュアルホームインスタンスは、次のユースケースで使用できます。
>相互にピアリングできない 2 つの VPC 間における CIDR の重複を克服: VPC のセカンダリ CIDR を活用して、重複しない 2 つの IP 範囲でインスタンスが通信できるようにします。
>単一アカウント内で複数の VPC を接続: 通常は VPC の境界で区切られている個々のリソース間における通信を可能にします。

#### 低予算で可用性の高いソリューションを構築する

重要なインスタンスについては、ネットワークインターフェースを2つ挿して、また障害対策用のインスタンスを用意しておく。

セカンダリネットワークインターフェースはデタッチする事ができるので、障害発生時にはセカンダリネットワークインターフェースを障害対策用のインスタンスに割り当てることでプライベートIPアドレス（EIPがあればEIPも）、MACアドレスが維持される。

また障害対策用インスタンスにアタッチされた時点でネットワークトラフィックはそちらに流れ始める。


## 総評

- サブネット間の通信をネットワークACLですべて遮断しネットワーク分割して、利用するサブネットごとにネットワークインターフェース作成してデュアルホーム接続する

- 用途ごとにIPアドレスを切り分けたいのでネットワークインターフェースを複数アタッチする

といったケースは見かけたことありますが、それ以外のケースについても色々と記載がありました。

ただ管理がなかなか大変になってくるので、特殊要件がない場合、ネットワークインターフェースを複数枚といった構成はなるべく避けたいですね。
7zip 日本語化にする

```

★7zip 日本語化にする
ダウンロードインストール完了以後
日本語化する方法は
左のstartメニューにある7-Zip File Managerに
ツール＞オプション＞言語
言語を日本語を選択する
インストール完了後PC再起動だけで右メニューも日本語になる
wslで、最小のカーネルをコンパイル その27

# 概要
wslで、kernel.elfのコンパイル、やってみた。
一段上のkernel見つけたので、コンパイルしてみた。
qemuで、起動してみた。

# 環境
Windows11

# 手順

# diskexplorerで、test5.imgのbootにgazos.elfを入れる。

![スクリーンショット 2024-03-26 105646.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/3ffeb221-f6c3-ddf4-1af4-f5ea276d3520.png)

# Qeum Luncharで、test5.imgを起動


Cキーで、grubコマンドラインに入って、キーを打つ。
kernelを設定
bootで起動

```
grub> kernel (fd0)/boot/gazos.elf

grub> boot

```

![スクリーンショット 2024-03-26 105819.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/302bc19d-52c3-3033-8916-433ea13c6e99.png)

# bootで起動

![スクリーンショット 2024-03-26 105834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/b58397e1-f69a-bcef-2a43-21db67b91729.png)

以上。
自己紹介

# はじめに
こんにちは! 中学2年生の<font color="red">**WardHamamatsu67**</font>です! HTML,CSSなどのWeb開発に必要な言語を使用しています。現在はJavaScriptを勉強しています。
趣味はGoogle Mapです。
プログラミングを本格的に始めたのはなんと昨年度(中1の時)で、まだ1年半ぐらいしかやっていません(マジ)。 最初はPythonを学習していたのですが、だんだんとHTMLに洗脳されていき、そこからCSS,PHPへと発展していきました。また、つい最近、AtCoderをやり始めました。**PHP単で!**
# 今後の予定
まずは、JavaScriptを勉強してどんどん動的なWebページを作りたいと思います。PHPもさらに極めてAtCoderのC問題が解けるようになりたいです。
# 最後に
これからHTML,CSS,JavaScript,PHPに関する記事をどんどん投稿していきたいと思います。まだまだ勉強不足でネタが思いつきませんが、少しずつ頑張っていきたいと思います。
次回からしばらくHTML,CSSのみで<font color="blue">**青看板**</font>をつくったことについて書きたいと思っています。
この記事が良いと思った方は、いいねとフォローをお願いします。
OCI - HPC Cluster: HPCアプリケーション - STAR-CCM+の実行に関する情報

:::note info
本ページは [OCI: HPC Cluster](https://qiita.com/itokazu/items/63d2e3cebdcdda5afce0) のサブページになります。
:::

# 概要
本ページではHPC　Cluster上でSTAR-CCM+を実行する際の情報について記載します。
なお、本ページの内容は著者の経験から得られた情報を記載しております。内容についてSiemens社に確認をしたものではないので、その点ご了承のもとご利用ください。


# OCIで実行する上での考慮点
## MPIオプションの指定
複数のBMインスタンスでノード間通信にRDMAを利用する場合、MPIのオプション指定が必要になります。
既存のstarccm+のオプションに以下を指定してください。

### ■ BM.Optimized3.36インスタンス
#### - IntelMPI
STAR-CCM+に同梱されているIntel MPIのverによりオプションが変わりますのでご注意ください。

Intel MPI 2019以降:
```
-mpi intel　-mpiflags "-iface ens800f0 -genv I_MPI_FABRICS=shm:ofi -genv I_MPI_DEBUG=5"
```

Intel MPI 2018以前:
```
-mpi intel -mpiflags "-iface ens800f0 -genv I_MPI_FABRICS=shm:dapl -genv DAT_OVERRIDE=/etc/dat.conf -genv I_MPI_DAT_LIBRARY=/usr/lib64/libdat2.so -genv I_MPI_DAPL_PROVIDER=ofa-v2-cma-roe-ens800f0 -genv I_MPI_FALLBACK=0 -genv I_MPI_DEBUG=5"
```

#### - OpenMPI
OpenMPI v4:
```
-mpi openmpi -mpiflags "--display-devel-map --bind-to core --rank-by core --map-by core -mca btl ^openib --mca coll_hcoll_enable 0 -mca mca_base_env_list UCX_NET_DEVICES=mlx5_2:1;UCX_IB_TRAFFIC_CLASS=105;UCX_IB_GID_INDEX=3;HCOLL_ENABLE_MCAST_ALL=0;UCX_TLS=rc,self,sm"
```

#### - Platform MPI

```
-mpi platform -mppflags "-intra=shm -e MPI_HASIC_UDAPL=ofa-v2-cma-roe-ens800f0 -UDAPL -aff=automatic:bandwidth:core -affopt=v -prot"
```

### ■ BM.Standard.E5.192インスタンス
(準備中)
Salesforce認定アドミニストレーター過去問+時々解説　Q81 ~ Q90

## Q81. 複数の商談レコードでリードソースを一括更新する場合, どの手法で行うのが適切か？

A データローダを用いて更新します
B インポートウイザードを用いて更新します
C 商談レコードへのリストビューを作成し、インライン編集を使って更新します
D 類似商談を使用して更新します

<details><summary>解答</summary>
A, C

解説: データインポートウィザードは「商談」の登録更新には対応していない. リストビューのインライン編集を使ってリードソースを一括更新することも可能.
</details>

## Q82. Salesforceのルールはどの順番で実行されますか？

A 割り当てルール→自動レスポンスルール→入力規則→ワークフロールール→エスカレーションルール
B 入力規則→ワークフロールール→エスカレーションルール→割り当てルール→自動レスポンスルール
C 自動レスポンスルール→ワークフロールール→入力規則→割り当てルール→エスカレーションルール
D 入力規則→割り当てルール→自動レスポンスルール→ワークフロールール→エスカレーションルール

<details><summary>解答</summary>
D

解説: ルールの実行順序 公式ヘルプ
https://help.salesforce.com/s/articleView?id=sf.rules_processing_order.htm&type=5
解説: 
</details>

## Q83. ワークフロー承認プロセスでのレコードロックは, 特定の項目レベルセキュリティまたは共有設定がある場合にのみ, ユーザーがレコードを編集できないようにしますか？

<details><summary>解答</summary>
いいえ

解説:　特定の項目レベルセキュリティまたは共有設定がある場合に限らず, 　承認申請したレコードにはレコードロックがかかりレコードの編集ができなくなる. 
</details>

## Q84. セールスプロセス, リードプロセス, サポートプロセス, およびソリューションプロセス専用に使用され, レコードタイプでは使用できない選択リストはどれ？

A 商談[フェーズ]
B ソリューション[状況]
C ケース[発生源]
D リード状況
E ケース[状況]

<details><summary>解答</summary>
A, B, D, E

解説: レコードタイプおよび選択リストの作成と更新に関する制限事項
https://help.salesforce.com/s/articleView?id=sf.recordtypes_picklists_limitations.htm&type=5
</details>

## Q85. 複数のサポートチームに対してレコードタイプを導入するのはどんな場合ですか？

A 異なった選択リスト値が必要となった時
B 異なったレコードアクセスが必要な時
C 異なった項目レベルセキュリティが必要な時
D 複数のページレイアウトが必要となった時

<details><summary>解答</summary>
A, D

解説: レコードタイプを利用すると, レコードタイプごとに表示する選択リスト値を割り当てることができ, レコードタイプ別にページレイアウトを割り当てることが可能になる.
複数の選択リストやページレイアウトが必要になったら, レコードタイプを用意する.
</details>

## Q86. 商品スケジュールで設定できるスケジュールの種類はどれですか？

A 生産
B 数量
C 予測
D 収益

<details><summary>解答</summary>
B, D
</details>

## Q87. クイックアクションの説明として適切なものはどれですか？

A 取引先や商談レコード、活動の記録を作成できます
B クイックアクションはグローバルアクションとオブジェクト固有のアクションに区別されます
C グローバルアクションでは、レコード作成・更新の際にページの移動が必要ありません
D クイックアクションにより出先でもメモやソリューションの作成ができます

<details><summary>解答</summary>
A, B, C

解説: クイックアクション　公式ヘルプ
https://help.salesforce.com/s/articleView?id=sf.actions_overview.htm&type=5
</details>

## Q88. 積み上げ集計項目には, どの積み上げ種別が存在しますか？

A 平均
B 最小値
C 最大値
D 件数
E 差異
F 合計

<details><summary>解答</summary>
B, C, D, F
</details>

## Q89. レポートのカスタム集計項目について, 正しい説明はどれ？

A レポートは、カスタム集計項目の結果ごとにグルーピングが可能です
B カスタム集計項目は、レポート内で数式項目を参照することが可能です
C カスタム集計項目は、別のカスタム集計項目を参照することが可能です
D カスタム集計項目はカスタムレポートタイプから作成したレポートで利用可能です

<details><summary>解答</summary>
A, D
</details>

## Q90. 数値以外のデータ型から数値型のデータ型に変更する場合, 変更した項目のデータは失われますか？

<details><summary>解答</summary>
はい
</details>

## Q91~Q100
https://qiita.com/taiga-shiokawa/items/e350da626aec3f77a865
wslで、最小のカーネルをコンパイル その26

# 概要
wslで、kernel.elfのコンパイル、やってみた。
一段上のkernel見つけたので、コンパイルしてみた。
grubでbootできるように、リンカーとboot.Sを追加した。

# リンカー

```

ENTRY(_start)

SECTIONS
{
	. = 1M;
	.text BLOCK(4K) : ALIGN(4K) {
		*(.multiboot)
		*(.text)
	}
	.rodata BLOCK(4K) : ALIGN(4K) {
		*(.rodata)
	}
	.data BLOCK(4K) : ALIGN(4K) {
		*(.data)
	}
	.bss BLOCK(4K) : ALIGN(4K) {
		*(COMMON)
		*(.bss)
	}
}




```

# boot.S


```
.set MAGIC,    0x1BADB002
.set FLAGS,    0
.set CHECKSUM, -(MAGIC + FLAGS)

.section .multiboot
	.long MAGIC
	.long FLAGS
	.long CHECKSUM
stackBottom:
	.skip 1024
stackTop:

.section .text
.global _start
.type _start, @function
_start:
	mov 	$stackTop, %esp
	call 	kernel_entry
	cli
hltLoop:
	hlt
	jmp 	hltLoop
.size _start, . - _start




```

以上。
Gemini Proを非同期処理で呼び出す

## Geminiについて
Geminiとは、Google提供するLLMの一つです。OpenAIのChatGPT APIのように、APIが用意されています。今回は、そのAPIへのリクエストの非同期実装を行います。
https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/gemini?hl=ja

## なぜ非同期で呼び出したいのか？
動機は、Geminiへの多くのリクエストを短時間で処理したいからです。最近、学習データの特徴量生成にGemini APIを使っているのですが、めちゃくちゃ実行時間がかかります。例えば、学習データが5000行のcsvファイルである場合、Gemini APIへ5000回のリクエストを送らないと行けません。そうすると、5時間くらいかかってしまいます。さすがに、待てないです。そういうことで、非同期処理でGemini Proを呼び出すコードを実装します。技術的には、Pythonの標準パッケージであるasyncioを使います。

### asyncioを使う理由
Pythonだと、非同期実行を可能にしてくれるパッケージとして、multiprocessingとasyncioの2つがあります。今回は、asyncioを選びました。API呼び出しタスクのようなI/Oタスクでの非同期処理に特化しているからです。ファイル読み込みやAPI呼び出し中に、スレッドが待ちに入ります。asyncioは、そのスレッドを使って、別の処理を実行することを可能にします。こうすることで、全体の処理の高速化が実現できます。


## コード紹介

### Gemini API 呼び出し編
まずは、パッケージのインポートを行います。
```python
import os

import aiohttp
import asyncio
```

以下のコードは、非同期でGemini APIを呼び出すコードです。GCP経由の呼び出しなので、os.getenv('GCP_PROJECT_ID')を使っています。aiohttpを用いて、非同期で処理しています。
parse_streaming_response関数は、レスポンスからGeminiによって生成されたテキストを取り出す処理を行っています。

```python

async def async_call_gemini_pro(prompt: str):

    url = f"https://us-central1-aiplatform.googleapis.com/v1/projects/{os.getenv('GCP_PROJECT_ID')}/locations/us-central1/publishers/google/models/gemini-1.0-pro:streamGenerateContent"
    header = {
        "Authorization": f"Bearer {os.getenv('GEMINI_API_TOKEN')}",
        "Content-Type": "application/json; charset=utf-8"
    }
    json_body = {
        "contents": {
            "role": "user",
            "parts": {
                "text": prompt
            }
        },
        "safety_settings": {
            "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
            "threshold": "BLOCK_LOW_AND_ABOVE"
        },
        "generation_config": {
            "temperature": 0.9,
            "topP": 1.0,
            "maxOutputTokens": 200
        }
    }
    async with aiohttp.ClientSession() as session:
        async with session.post(
            url,
            headers=header,
            json=json_body
        ) as response:
            streaming_response = await response.json()
            final_response = parse_streaming_response(streaming_response)
            return final_response

```

以下がメインの非同期処理を呼び出すコードです。
```python
async def main():
    tasks = []
    for i in range(10):
        tasks.append(async_call_gemini_pro(
            "今の気分を詩にしてください")
        )
    results = await asyncio.gather(*tasks)
    print("Results")
    print(results)
```


## で、結局速くなったのか？
asyncioありとなしで、10回のリクエストを処理する実行時間を比較してみました。
| 非同期 or Not     | 実行時間(秒) |
| ----------- | ----------- |
| 非同期      |  2.9       |
| Not 非同期   | 21.5        |
Microsoft Fabric Lakehouse で、テーブルが読み込めないケースのうち、DeltaTableIsInfrequentlyCheckpointed が表示される場合の対処策

## はじめに

日本語検索ひっかかるように記事投稿

以下のようにレイクハウスのテーブルでエラーが出る場合があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9f477c7e-606c-63c6-8b92-6b7c3d961cf9.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/9bd1cfbc-ea1b-d86c-d0f5-b3d4ddbd6207.png)





## 対処

データフロー Gen 2 の既知の不具合で _last_checkpoint が更新されないようです。

https://community.fabric.microsoft.com/t5/General-Discussion/Error-DeltaTableIsInfrequentlyCheckpointed-when-accessing/m-p/3759055

https://books.japila.pl/delta-lake-internals/InMemoryLogReplay/?h=checkpo#current-state-of-delta-table

以下が有志の対処コード。ワークスペース上のすべてのレイクハウステーブルのチェックポイントを作成します。（DeltaLogはPython API が見つからなかった）


```scala:scala

%%spark

import org.apache.spark.sql.delta.DeltaLog

val lakehouses = spark.catalog.listDatabases()

lakehouses.collect().sortWith(_.name < _.name).foreach { lakehouse =>

  if (lakehouse.name != "DataflowsStagingLakehouse") {

    val tables = spark.catalog.listTables(lakehouse.name)

    tables.collect().sortWith(_.name < _.name).foreach { table =>

      DeltaLog.forTable(spark, s"${lakehouse.locationUri}/${table.name}").checkpoint()
      println(s"Completed code run for lakehouse: ${lakehouse.name}, table: ${table.name}")

    }

  }

}


```
wslで、最小のカーネルをコンパイル その25

# 概要
wslで、kernel.elfのコンパイル、やってみた。
一段上のkernel見つけたので、コンパイルしてみた。
GDT、IDT、ある。PIC、PIT、FDC、Keyboard、叩いてる。素晴らしい。

# 参考にしたページ

https://github.com/owenson/gazos

# 手順

```
>git clone https://github.com/owenson/gazos.git
>cd gazos
>make
```

# エラーでるので、Makefile、書き換えた。

```
REMOVE = rm -f

GCC = gcc
LD  = ld

OBJS = boot.o idt.o kernel.o io.o video.o 8259.o keyboard.o pit.o delay.o dma.o fdc.o gazfs.o string.o math.o mem.o

KERNELFN = gazos.elf

$(KERNELFN) : $(OBJS)
	$(LD) -m elf_i386 -o $@ $(OBJS)  -T linker.ld -nostdlib

.c.o:
	$(GCC) -m32 -std=gnu99 -ffreestanding -O2 -Wall -Wextra -c -o $@ $<

.S.o:
	as --32 -c -o $@ $<

clean:
	$(REMOVE) $(OBJS) $(KERNELFN)


```

以上。