OmniAICreator/Qiita-1.07M huggingface dataset:
Coredataで指定のオブジェクトの配列を一括削除する方法

## 宣伝

アプリ作っているので入れてみてください！！
よろしくお願いいたします！！

https://apps.apple.com/app/6446189340


https://apps.apple.com/jp/app/meime/id6446994707?l=ja


## 本題



SwiftのCoredataをオンにして作った初期プロジェクトにある  .onDelete(perform: deleteItems)
ですが、(以下です。)

```Swift
func deleteItems(offsets: IndexSet) {
    withAnimation {
        offsets.map { archives[$0] }.forEach(viewContext.delete)

        do {
            try viewContext.save()
        } catch {
            let nsError = error as NSError
            fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
        }
    }
}
```

選択して削除ではなく、すべて削除したい場合があると思います。
すべてのアーカイブを削除するコードに変更するには、以下のように修正します。

```Swift
func deleteAllArchives() {
    withAnimation {
        archives.forEach(viewContext.delete)

        do {
            try viewContext.save()
        } catch {
            let nsError = error as NSError
            fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
        }
    }
}


```


ここではarchivesにcoredataのオブジェクトが入っているものとします。
この修正後の関数 deleteAllArchives() は、archives 配列内のすべてのアーカイブを削除します。変更が行われた後は、viewContext を保存して変更を反映させます。エラーが発生した場合は、エラーメッセージを表示します。

注意としてはデフォルトの何も検索条件をかけない状態で、このコードを実行すると、データベースの中身がすべて削除されてしまうので、気をつけてください。

作ったアプリ。


https://apps.apple.com/app/6446189340


では。
【React】Uncaught runtime errors: × ERROR Network Error AxiosError: Network Error     at XMLHttpRequest.handleError の解決方法

Rails ＋ React で教材を参考にSPA化構成のアプリを開発中、以下のエラーに遭遇しました。
```
Uncaught runtime errors:
ERROR
Network Error
AxiosError: Network Error
    at XMLHttpRequest.handleError (http://localhost:3000/static/js/bundle.js:48052:14)
ERROR
Network Error
AxiosError: Network Error
    at XMLHttpRequest.handleError (http://localhost:3000/static/js/bundle.js:48052:14)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/3a10bd55-25aa-b50b-3d13-d443e96bc597.png)

## 結論
以下のように環境変数でURLをIPアドレスで表示するとエラーがなくなりました。原因はよくわかっていませんが。

### before
```frontend/.env
REACT_APP_API_DOMEIN=http://localhost:3030
```

### after
```frontend/.env
REACT_APP_API_DOMEIN=http://10.0.2.2:3030
```

このように書き換えて、`yarn start`を一旦停止して再起動すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/a0edd52d-6d94-d7d8-cfdb-f91cb465e780.png)


きちんと表示されました🙌

### 参考
* [react nativeでapiたたいたら[AxiosError: Network Error]が出てきたので修正する - Qiita](https://qiita.com/taiki-nd/items/2055a4827d1d38f044d2)
【Road to Cassandra Day】Cassandra リアクティブ スタイル プログラミング~高度なトピック③クエリ失敗からの再試行

# はじめに

## Cassandra Day Tokyo

今年、2023年６月１日に、[Cassandra Day](https://www.datastax.com/events/cassandra-day-japan)が日本でも開催されます。
Cassandra Dayは、昨年、ベルリン、ロンドン、アムステルダム、ハノイ、ジャカルタ、ヒューストン、サンタクララ、シアトル、シンガポールでも開催されました。

今回の東京での開催に向けて、Apache Cassandraに関する記事を発表していきます。

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176567/6a879803-d135-348b-f815-08be011607fa.png)](https://www.datastax.com/events/cassandra-day-japan)

## Apache Cassandraについて

Apache Cassandraとは、一言でいうなら、オープンソースの分散データベース管理システムです。

他の分散データベース管理システム同様、複数の汎用サーバーを用いて、ひとつのデータベースを構築します（開発などの目的のため、一つのサーバーのみで構成することも可能です）。

ここでは、詳しい説明は割愛し、興味のある方へのご紹介の役割は、公式サイトやWikipediaに譲ります。

https://cassandra.apache.org/_/index.html

https://en.wikipedia.org/wiki/Apache_Cassandra

# Cassandra リアクティブ スタイル プログラミング

本稿の内容は、以下のドキュメントを元にしています。

https://docs.datastax.com/en/developer/java-driver/4.15/manual/core/reactive/#advanced-topics


Cassandra リアクティブ スタイル プログラミングの紹介と基本的な使い方については、本稿執筆者による以下の記事を参照ください。

https://qiita.com/yoshiyuki_kono/items/c66763c389e88578ca18

## 高度なトピック
### クエリ失敗からの再試行

リアクティブ スタイルのプログラミングでは、クエリの実行に失敗すると`onError`シグナルがトリガーされ、サブスクリプションがすぐに終了され、後続のクエリがまったく実行されなくなる可能性があります。

この動作が望ましくない場合は、フェイルセーフ システムの動作を模倣することができます。これには通常、`onErrorReturn`または`onErrorResume`などの演算子が使用されます。

次の例では、実行が失敗するたびに、スタック トレースが標準エラーに出力されます。`onErrorResume`オペレーターがあるため、エラーは無視され、フローの実行が再開されます。

```java
Flux<Statement<?>> stmts = ...;
stmts.flatMap(
    statement ->
        Flux.from(session.executeReactive(statement))
            .doOnError(Throwable::printStackTrace)
            .onErrorResume(error -> Mono.empty()))
    .blockLast();
```

一目見て分かる通り、上記の実装はあまりに素朴すぎます。

次の例は、前の例を拡張したものです。失敗した実行ごとに、エラーが`UnavailableException`の場合は最大 3 回の再試行が試行され、再試行後にクエリが成功しなかった場合は、メッセージがログに記録されます。最後に、すべてのエラーが収集され、失敗したクエリの総数がコンソールに出力されます。

```java
Flux<Statement<?>> statements = ...;
long failed = statements.flatMap(
    stmt ->
        Flux.defer(() -> session.executeReactive(stmt))
            // retry at most 3 times on Unavailable
            .retry(3, UnavailableException.class::isInstance)
            // handle errors
            .doOnError(
                error -> {
                  System.err.println("Statement failed: " + stmt);
                  error.printStackTrace();
                })
            // Collect errors and discard all returned rows
            .ignoreElements()
            .cast(Long.class)
            .onErrorReturn(1L))
    .sum()
    .block();
System.out.println("Total failed queries: " + failed);
```

上記の例では、`Flux.defer()`が、`session.executeReactive()`への呼び出しをラップするために使用しています。
ドライバーは常に単一サブスクリプションのみのパブリッシャーを作成するため、これが必要です。

`defer`オペレーターが用いられない場合、このような単一サブスクリプションのみをサポートするパブリッシャーは、`retry`のようなオペレーターと互換性がありません。
それは、こうしたオペレーターが上流のパブリッシャーに複数回サブスクライブし、ドライバーが例外をスローする場合があるためです。
これが、それがまさに`defer`オペレーターが設計された目的です。`defer`オペレーターへの各サブスクリプションは  `session.executeReactive()`への個別の呼び出しをトリガーし、セッションがクエリを再実行・再試行するたびに新しいパブリッシャーを返します。
本日の微分方程式（15日目）

前回の内容はこちら

https://qiita.com/Schwarzschi1d/items/aa2abcda639b8f0e2550

## 問題
積分因子を用いて，以下の微分方程式の一般解を求めよ．

```math
\begin{align}\tag{1}
y^\prime -3y = x^2.
\end{align}
```

## ポイント
- $\dfrac{\mathrm{d}y}{\mathrm{d}x}+P(x)y=Q(x)$ の形式の微分方程式は，**一階線形微分方程式**と呼ばれます．
- **積分因子**とは， $e^{\int P(x)\mathrm{d}x}$ のことです．一階線形微分方程式は，積分因子をかけることで，左辺が積の微分の形になります．
- 一階線形微分方程式については，ヨビノリさんの動画もご参照ください．

https://www.youtube.com/watch?v=Hfby9zyZ0HY&list=PLDJfzGjtVLHnmhT1AhMx7bSt0ZOGbIP3c&index=4

## 解説

まずは積分因子を具体的に求めていきましょう．
$P(x)=-3, Q(x) = x^2$ ですから，

```math
\begin{align}\tag{2}
e^{\int P(x)\mathrm{d}x}=e^{\int -3\mathrm{d}x}=e^{-3x},
\end{align}
```

と求まります（ここの積分においては，$P(x)$ の原始関数を1つ求めるだけでいいので，任意定数は不要です．[参考](https://qiita.com/Schwarzschi1d/items/aa2abcda639b8f0e2550)）．

これを与えられた微分方程式（1）の両辺にかけていきましょう．

```math
\begin{align}\tag{3}
y^\prime\times e^{-3x} -3y\times e^{-3x} = x^2\times e^{-3x}.
\end{align}
```

さて，左辺は積の微分の形になっているはずです．
積の微分公式 $\left(f(x)g(x)\right)^\prime = f(x)^{\prime}g(x)+f(x)g(x)^{\prime}$ と，にらめっこしてみましょう． 
$f(x)=y,~g(x)=e^{-3x}$ としてみれば，$\left(f(x)g(x)\right)^\prime$は，

```math
\begin{align}\tag{4}
(y\times e^{-3x})^\prime = y^\prime\times e^{-3x} -3y\times e^{-3x},
\end{align}
```

と表すことが出来ます．紛れもなく式(3)の左辺と一緒です．
したがって，式(4)の結果を式(3)に代入すれば，


```math
\begin{align}\tag{5}
(y\times e^{-3x})^\prime = x^2\times e^{-3x},
\end{align}
```

との関係式を得ます．後は両辺を $x$ で積分して完了です．

```math
\begin{align}\tag{6}
\int(y\times e^{-3x})^\prime \mathrm{d}x&= \int x^2\times e^{-3x}\mathrm{d}x,\\
y\times e^{-3x}&= \int x^2\times e^{-3x}\mathrm{d}x,\\

y\times e^{-3x}&= - \frac{1}{3}x^2e^{-3x}- \frac{2}{9}xe^{-3x} - \frac{2}{27}e^{-3x}+C~~~(C:任意定数),\\
y&=e^{3x}\left(- \frac{1}{3}x^2e^{-3x} - \frac{2}{9}xe^{-3x} - \frac{2}{27}e^{-3x} +C \right),\\
\therefore y&=- \frac{1}{3}x^2 - \frac{2}{9}x - \frac{2}{27}+Ce^{3x}~~~(C:任意定数).\\
\end{align}
```

## 【補足】 瞬間部分積分

最後の式の部分積分は，俗に言う瞬間部分積分と呼ばれるもので暗算しています．
（まともに計算をしても良いのですが，$\LaTeX$ で書くのが面倒だったのもあります．）

```math
\begin{align}
\int f(x)g(x)\mathrm{d}x &= f^{(0)}g^{(-1)}-f^{(1)}g^{(-2)}+f^{(2)}g^{(-3)}-f^{(4)}g^{(-4)}+\cdots\\

\int x^2\times e^{-3x}\mathrm{d}x &=- \frac{1}{3}x^2e^{-3x} - \frac{2}{9}xe^{-3x} - \frac{2}{27}e^{-3x} +C
\end{align}
```

詳しくは，ヨビノリさんの動画をご参照ください．

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

## 【参考】 Wolframalpha

非常に便利なので皆さん積極的に使っていきましょう．

https://www.wolframalpha.com/input?i=y+%E2%80%B2+%E2%88%92+3+y+%3D+x%5E2&lang=ja
Pythonで電卓作ってみた

# はじめに
今回はAtsu1209jp の友達（今度アカウント作ります。ｗｗｗ）が書いた記事です。
雰囲気違うけどよろしくね〜(by Atsu1209jp)
# python 電卓の作り方。参考にするが良い。
~~~python:www.py
import tkinter as tk
from tkinter import ttk
 
# Define
BUTTON = [
    ['', 'B', 'C', '/'],
    ['7', '8', '9', '*'],
    ['4', '5', '6', '-'],
    ['1', '2', '3', '+'],
    ['00', '0', '.', '=']
]
 
SYMBOL = ['+', '-', '*', '/']
 
# 簡易的な電卓を作ってみた！
class CaluGui(object):
    def __init__(self, app=None):
        # Define
        self.calc_str = '' # 計算用の文字列
 
        # Window Setting
        app.title('簡易的な電卓を作ってみた') # Window のタイトル
        app.geometry('500x700') # Window のサイズ
 
        # Frame Setting
        calc_frame = ttk.Frame(app, width=300, height=100) # 計算式と結果用のFrame
        calc_frame.propagate(False) # サイズが固定される
        calc_frame.pack(side=tk.TOP, padx=10, pady=20) # 余白の設定
        button_frame = ttk.Frame(app, width=300, height=400) # 計算ボタン用のFrame
        button_frame.propagate(False) # サイズが固定される
        button_frame.pack(side=tk.BOTTOM) # 余白の設定
 
        # Parts Setting
        self.calc_var = tk.StringVar() # 計算式用の動的変数
        self.ans_var = tk.StringVar() # 結果用の動的変数
        calc_label = tk.Label(calc_frame, textvariable=self.calc_var, font=("",20)) # 計算式用のLabel
        ans_label = tk.Label(calc_frame, textvariable=self.ans_var, font=("",15)) # 結果用のLabel
        calc_label.pack(anchor=tk.E) # 右揃えで配置
        ans_label.pack(anchor=tk.E) # 右揃えで配置
 
        for y, row in enumerate(BUTTON, 1): # Buttonの配置
            for x, num in enumerate(row):
                button = tk.Button(button_frame, text=num, font=('', 15), width=6, height=3)
                button.grid(row=y, column=x) # 列や行を指定して配置
                button.bind('<Button-1>', self.click_button) # Buttonが押された場合
    
    def click_button(self, event):
        check = event.widget['text'] # 押したボタンのCheck
 
        if check == '=': # イコールの場合
            if self.calc_str[-1:] in SYMBOL: # 記号の場合、記号よりも前で計算
                self.calc_str = self.calc_str[:-1]
 
            res = '= ' + str(eval(self.calc_str)) # eval関数の利用
            self.ans_var.set(res)
        elif check == 'C': # クリアの場合
            self.calc_str = ''
            self.ans_var.set('')
        elif check == 'B': # バックの場合
            self.calc_str = self.calc_str[:-1]
        elif check in SYMBOL: # 記号の場合
            if self.calc_str[-1:] not in SYMBOL and self.calc_str[-1:] != '':
                self.calc_str += check
            elif self.calc_str[-1:] in SYMBOL: # 記号の場合、入れ替える
                self.calc_str = self.calc_str[:-1] + check
        else: # 数字などの場合
            self.calc_str += check
 
        self.calc_var.set(self.calc_str)
    
 
 
def main():
    # Window Setting
    app = tk.Tk()
    # Window size non resizable
    app.resizable(width=False, height=False)
    CaluGui(app)
    # Display
    app.mainloop() # Window をループで回すことで Widgit に対応できるようになる
 
if __name__ == '__main__':
    main()
~~~
上らへんはボタン表示プログラム。わかったかな？
下らへんは計算している。
パクリは良くないよ
https://Krunker.io/
↑Atsu1209の友達のお気に入りのゲーム
NCMBの管理画面をGoogle Chrome機能拡張で便利にする（スクリプトダウンロード）

NCMBでは管理画面を提供していますが、時々物足りないことがあります。この機能があったらもっと便利なのに…と思いつつ、使っている方もいることでしょう。

そこで、その足りない機能を補足するGoogle Chrome機能拡張を開発しはじめました。今回は1.3で追加したスクリプトのファイルダウンロード機能を紹介します。

## 動作について

動作は以下のようになります。機能拡張をインストールしていると、スクリプトファイルを選んだ時にDLボタンが表示されます。そのボタンをクリックすると、スクリプトをダウンロードできます。

![script-download.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/f0fc435d-686d-915f-4efc-f28d8d0555fa.gif)


コードの内容は表示されているので選択してテキストファイルに貼り付けても良いですが、コピー&ペーストのミスなどあるとストレスなので、ダウンロードボタンが便利です。

## インストール

[Chrome機能拡張のページからインストール](https://chrome.google.com/webstore/detail/ncmb-extension/dglkhlplcpmnbgodhbngcmdfpojkbdnc?hl=ja&authuser=0)してください。

## 利用法

任意のスクリプトファイルでダウンロードボタンを押してください。

## 制限

この機能拡張は [https://console.mbaas.nifcloud.com](https://console.mbaas.nifcloud.com/) 以下でのみ動作します。また、この機能は管理画面のAPIを使っていますので、APIコール数を消費しません。また、ACLは無視して処理されます。

画像はMimeタイプが `image/*` になっているものを対象としています。それ以外の場合は、データは画像であってもプレビュー対象外になるので注意してください。

## コードについて

機能拡張のコードは[NCMBMania/chrome-extension](https://github.com/NCMBMania/chrome-extension)にアップロードしてあります。ライセンスはMIT Licenseです。依存ライブラリとして[URL.js](https://github.com/duzun/URL.js)を使っています（こちらもMIT Licenseです）。

## まとめ

機能的にはまだ多くありませんが、徐々に機能を追加していきます。Google ChromeでmBaaSの管理画面を利用されている方はぜひお使いください。
NCMBの管理画面をGoogle Chrome機能拡張で便利にする（スクリプトのモーダル挙動を変更）

NCMBでは管理画面を提供していますが、時々物足りないことがあります。この機能があったらもっと便利なのに…と思いつつ、使っている方もいることでしょう。

そこで、その足りない機能を補足するGoogle Chrome機能拡張を開発しはじめました。今回は1.3で追加したスクリプトのモーダル変更です。

## 動作について

動作は以下のようになります。地味ではありますが、スクリプトの変更を選んだ時にファイルドロップエリアがデフォルトで開くようになります。通常、スクリプトの変更はファイル自体の変更だと思います。クリック1回の手間が減るので便利です。

![open-modal.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/6a798465-07e6-f068-d6e4-7ffe16269bb7.gif)


## インストール

[Chrome機能拡張のページからインストール](https://chrome.google.com/webstore/detail/ncmb-extension/dglkhlplcpmnbgodhbngcmdfpojkbdnc?hl=ja&authuser=0)してください。

## 利用法

スクリプトにて任意のファイルで変更ボタンを押します。

## 制限

この機能拡張は [https://console.mbaas.nifcloud.com](https://console.mbaas.nifcloud.com/) 以下でのみ動作します。また、この機能は管理画面のAPIを使っていますので、APIコール数を消費しません。また、ACLは無視して処理されます。

コードについて

機能拡張のコードは[NCMBMania/chrome-extension](https://github.com/NCMBMania/chrome-extension)にアップロードしてあります。ライセンスはMIT Licenseです。依存ライブラリとして[URL.js](https://github.com/duzun/URL.js)を使っています（こちらもMIT Licenseです）。

## まとめ

機能的にはまだ多くありませんが、徐々に機能を追加していきます。Google ChromeでmBaaSの管理画面を利用されている方はぜひお使いください。
NavigationStackとnavigationDestinationの使い方とサンプル

## 宣伝

アプリ作っているので入れてみてください！！
よろしくお願いいたします！！

https://apps.apple.com/app/6446189340


NavigationStackで作ったアプリ↓↓↓

https://apps.apple.com/jp/app/meime/id6446994707?l=ja


## 本題




```Swift
struct ContentView: View {
    @State private var numbers = [1, 2, 3, 4, 5]  // データ配列を宣言します
    @State var selected_id :[Int] = []  // 選択されたアイテムのIDを管理する配列を宣言します
    var body: some View {
        NavigationStack(path: $selected_id){  // ナビゲーションスタックを作成し、選択されたアイテムのパスを受け取ります
            List {
                ForEach(numbers, id: \.self) { number in  // データ配列を繰り返し処理し、リストアイテムを作成します
                    NavigationLink(value: number) {  // ナビゲーションリンクを作成し、選択したアイテムの値を指定します
                        Text("\(number)")  // アイテムの値を表示します
                    }
                }
            }
            .navigationDestination(for: Int.self) { number in  // ナビゲーション先のビューを指定します
                Text(String(number))  // 選択されたアイテムの値を表示します
                Text(String(selected_id.first ?? 999))  // 選択されたアイテムの最初の値を表示します（存在しない場合は999と表示されます）
            }
        }
    }
}
```

@State var selected_id :[Int] = []　
これは配列でないといけないらしい？

NavigationViewとの違いが厄介。

作ったアプリ。


https://apps.apple.com/app/6446189340


では。
Visual Studio 2019で「wuser32.pdbは読み込まれていません」「pdbファイルを開けないか、ファイルが見つかりません」と表示された場合の対処法

Win32 API勉強中にサンプルプログラムを実行したらこのようなエラーが出た。
色々調べた結果、pdbファイルを開けないエラーは気にしなくてよいとのことだったが、このエラーを無視して続行するための方法が分からず、いろいろ試した結果「デバッグ」→「プロジェクトのデバッグプロパティ」→「詳細」の中にある「デバッグライブラリの使用」を「はい」から「いいえ」にすると該当のエラーが表示されず無事実行できた。
勉強の参考にしているサイト、またサンプルプログラムについては以下。

http://wisdom.sakura.ne.jp/system/winapi/win32/win8.html
[Ruby on Rails] パスワード検証における allow_nil?の挙動

# 疑問：空文字列がnil判定される？
会社の研修で Rails Tutorial をやっていたとき、[第10章「ユーザーの更新」](https://railstutorial.jp/chapters/updating_and_deleting_users?version=7.0#sec-successful_edits)のところでパスワードの入力欄が空の場合でもエラーを出さないようにする、という項目がありました

Tutorialの説明によると User Model のバリデーションのところに `allow_nil?` をつけることによって例外処理を加える、とあります

https://github.com/yasslab/sample_apps/blob/d0b4ef13dd837d8afbce8ceb2c2b8c5354ef7c8e/7_0/ch10/app/models/user.rb#L10

password 属性のバリデーションに例外として `allow_nil?` を加えることによって条件を満たしていない場合でも値が nil の場合には例外的にバリデーションを通過させるようにする、という記述です

しかし User Controller に debugger を埋め込んで実際にフォームに渡っているデータを確認すると

```rb
(ruby) user_params
<ActionController::Parameters {"name"=>"Rails Tutorial", "email"=>"example@railstutorial.com", "password"=>"", "password_confirmation"=>""} permitted: true>
```

ということで password は nil ではなく空文字列（""）が入っていました

ruby の仕様では空文字列は nil とは判定されません

```rb
3.1.2 :001 > "".nil?
 => false 
```

`allow_nil?`はあくまでnilのみを例外として扱い、空文字列や空白文字は通常のバリデーション処理が行われるため、一見するとこのままでは例外処理がうまく動かなさそうです

# 答え：has_secure password の仕様
しかし実際には User model で記述されている has_secure_password の仕様によって、空文字列（""）を代入した場合はユーザーの password 属性に値が代入されないようになっています

このことを簡単な実験によって確かめてみましょう

まず適当なユーザーインスタンスを作成し name 属性に空文字列を代入してみます

```
3.1.2 :002 > user = User.first
 => "" 
3.1.2 :003 > user.name = ""
 => "" 
3.1.2 :004 > user.name
 => ""
```

想定通り `user.name` には空文字列（""）が代入されています

今度は password 属性に空文字列を代入してみましょう

```

3.1.2 :005 > user.password = ""
 => "" 
3.1.2 :006 > user.password
 => nil 
```

なんと空文字列を代入したはずなのに実際に `user.password` に代入されている値は nil となっています

どうしてこんなことが起こるのか、has_secure_password の[ソースコード](https://github.com/rails/rails/blob/7-0-stable/activemodel/lib/active_model/secure_password.rb)を見て挙動を確認してみます

該当箇所は118-127行目のInstanceMethodActivationクラスの中にある以下の記述です

```rb
define_method("#{attribute}=") do |unencrypted_password|
  if unencrypted_password.nil?
    instance_variable_set("@#{attribute}", nil)
    self.public_send("#{attribute}_digest=", nil)
  elsif !unencrypted_password.empty?
    instance_variable_set("@#{attribute}", unencrypted_password)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
    self.public_send("#{attribute}_digest=", BCrypt::Password.create(unencrypted_password, cost: cost))
  end
end
```

この部分はセッターと呼ばれる部分でインスタンス変数の password 属性への値の代入が定義されています

このメソッドで `unencrypted_password` が空文字列（""）である場合を考えてみましょう

まず空文字列は nil ではないので一番目の条件式は false となります

続いて二番目の条件式も `"".empty?`が true であることを考えると、その否定なので条件式全体としては false となります

ここで password 属性への代入は `instance_variable_set` メソッドで行われていることを考慮すると、値が空文字列の場合このメソッドでは何も実行されないことになります

結果的に password 属性に代入した空文字列（""）はモデルのインスタンス変数としては nil が代入されるわけです

`allow_nil?`が評価されるタイミングはフォームのパラメータがPOSTされるタイミングではなくモデルのインスタンスが `save` されるタイミングですので、今回password属性のバリデーションとして評価されるのは空文字列ではなく `nil` となり、無事バリデーションを通過することができるのでした

# ひとこと
今回のようなポイントは何気なくチュートリアルを進めてしまうと疑問に思わずに通り抜けてしまう人も多いと思います

しかしよくよく考えてみると空文字列が渡っているはずの password で `allow_nil?` が成立するのは不思議です

初心者向けのTutorialでも、丁寧に読んでいくと、最終的には rails のソースコードを見なければわからないようなトピックが隠れているのは面白いと思いました

本記事で書いた現象について一緒に調査してくれた会社の同期３人に感謝します
IntelliJで非ASCII文字(Non-ASCII characters)とメソッド名の小文字開始制限(should start with a lowercase letter)のワーニングを抑制する

テストメソッド名に日本語を使う人も、それなりにいるんじゃないかと思いますが（私がそうなんですが）IntelliJで緩い警告が出るのがちょっと気になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117698/dc58f17b-4621-4a25-eec7-91a79edba8bd.png)

これの抑制方法です。
ファイルの頭にこれをおいておくと消えます。

```
@file:Suppress("TestFunctionName", "NonAsciiCharacters")
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117698/996d3550-4b69-2ce2-94c5-a214bad686da.png)

これでスッキリ。

# data classの場合（ついで）
```
data class Record(
  val AVG: Double,
  val HR: Int,
)
```

小文字で始めたまえと怒られるが、略語とか大文字で書きたいケースもあるよねということで。

```
@file:Suppress("PropertyName", "NonAsciiCharacters")
```

こいつを追加。

```
@file:Suppress("PropertyName", "NonAsciiCharacters")

data class Record(
  val AVG: Double,
  val HR: Int,
)
```

こんな感じ。
assert_not と vlaid? を使い validation が有効かどうか確認するテスト

assertとassert_notメゾット
---------------------------------------
<ul>
 <li>assert  　　　　　　➡︎ 引数 が trueなら成功、falseなら失敗となる
 <li>assert_not ➡︎ 引数 が trueなら失敗、falseなら成功となる
</ul>

valid?メゾット
---------------------------------------
valid? は、モデル（ActiveRecord）のメソッドで、バリデーションを実行して、モデルが正しい値かどうかを調べるものです。
バリデーションが通れば true 、通らなければ false を返します。
※そもそもvalidって何って人は、[こちら](https://udemy.benesse.co.jp/development/system/validates.html)　簡単に言えば、入力内容や記述内容が要件を満たしているか確認することです。

name属性のバリデーションに対するテスト
---------------------------------------
~~~test/model/user_test.rb
test "name should be present" do
 @user.name = "     "    #name属性に空欄をセット
 assert_not @user.valid? #←バリデーションをまだ設定していないので、どんな値でも true で返ってくる。
end                      #つまり、assert_not メソッドでエラーが起きる
~~~
@userの値が空欄になっています。
もし presence のバリデーションが有効ならば @user.valid?は false を返すため、
assert_notが成功となりエラーは起きません。

しかし presence のバリデーションが無効(もしくは未設定）の場合は、たとえ@user.nameが空欄であろうとなかろうと、
valid?メソッドは true を返すため、assert_not が失敗となります。
なので、ここではエラーです。

成功させるために、validates メソッドに presence: true という引数を与えます。

name属性のバリデーションを検証する
---------------------------------------
~~~app/models~user.rb
class User < ApplicationRecord
  validates :name, presence: true
end
~~~
これでテストがパスします。

railsではこのようにバリデーションの有効性をテストしています。
Databricksの自動クラスターアップデート

[Automatic cluster update \| Databricks on AWS](https://docs.databricks.com/administration-guide/clusters/scheduled-cluster-updates.html) [2023/5/16時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note
**プレビュー**
この機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。この機能のプレビューに参加するには、Databricks担当者に連絡してください。お使いのワークスペースがこのプレビューに参加しておらず、コンプライアンスセキュリティプロファイルを有効化している場合、クラスターは25日後に再起動します。[Enable the compliance security profile](https://docs.databricks.com/security/privacy/security-profile.html)をご覧ください。
:::

Enhanced Security & Complianceアドオンのあるエンタープライズプランのワークスペースでは、アカウント管理者は計算リソースの自動再起動を月次あるいは月2回行うようにスケジュールを設定するために、アカウントコンソールを活用することができます。これによって、管理者とユーザーが最新のイメージとセキュリティアップデートを取得するために、計算リソースを再起動するためのダウンタイムを計画する助けとなります。これは、クラシックデータプレーンで実行されるすべての計算資源：クラスター、プール、クラシックSQLウェアハウス、レガシーモデルサービングに適用されます。稼働中の計算リソースのイメージのアップデートがない場合には、これらは再起動されません。

お使いのワークスペースがこのパブリックプレビューに含まれており、ワークスペースで[compliance security profile](https://docs.databricks.com/security/privacy/security-profile.html)が有効化されている場合、アップデートの頻度、日付、時間を設定することができますが、スケジュールを完全に無効化することはできません。

適切なSKU、プランのワークスペースで、コンプライアンスセキュリティプロファイルが有効化されていない場合、アップデートの頻度、日付、時間を設定でき、スケジュール全体を無効化することができます。スケジュールが無効化された場合、最新のイメージを取得することを確実にするために定期的に計算リソースを再起動ことはお客様の責任となります。

デフォルトでは、自動クラスターアップデートは、毎月の最初の日曜日の1:00 AM UTCにスケジュールされています。アカウント管理者はアカウントコンソールを用いて、実行日、時間の変更、あるいは、月2回の実行に切り替えることができます。

レガシー機能である**Automatic Restart of Long Running Clusters**が有効化されているワークスペースで、自動クラスターアップデートをスケジュールすると、これらのレガシーな設定は無視されます。

:::note warn
**重要！**
自動クラスターアップデートを設定するにはアカウント管理者である必要があります。この設定はワークスペースごとに行うことができます、この機能のコントロールは、ワークスペース管理コンソールではなく、アカウントコンソールUIの一部となっています。
:::

# 自動クラスターアップデートの設定

1. [Databricksアカウントコンソール](https://accounts.cloud.databricks.com/)に移動します。
1. **Workspaces**をクリックします。
1. 設定するワークスペース名をクリックします。
1. **Security**タブをクリックします。自動クラスターアップデート設定が表示されます。
![](https://docs.databricks.com/_images/scheduled-auto-cluster-updates.png)
1. セキュリティプロファイルを使用していないワークスペースでは、**Enabled**というフィールドをトグルすることで、この機能の有効化、無効化を行うことができます。ワークスペースでセキュリティプロファイルを使用している場合には、常に有効化され無効化することはできません。
1. 最初のピッカーで**Monthly**か**Twice-monthly**を選択します。
1. 次のピッカーで:
    - 月次のスケジュールでは、**1st**や**3rd**のようい番号が振られた週を選択します。
    - 月2回のスケジュールでは、**1st and 3rd**か**2nd and 4th**を選択します。
1. 曜日を選択します。
1. UTCタイムゾーンで時間を選択します。
1. **Save**をクリックします。


### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
NGINXのローカル環境の作成   【Redis】編

# セッション管理としてRedisを使用してなければ不要

# sudo yum search redis
```javascript
Redisがyumで検索できるようになったことを確認
```
# sudo yum info redis
```javascript
Redisの詳しい情報を確認
```

# sudo yum install -y redis
```javascript
Redisをインストールして【Complete!】が出ていることを確認
```

# sudo redis-server --version
```javascript
redisのバージョン確認
```

# sudo systemctl start redis
```javascript
redisを起動
```

# sudo systemctl status redis
```javascript
redisが起動してるかステータスを見て確認
```

# sudo systemctl enable redis
```javascript
redis自動起動
```

https://qiita.com/panda-chibi/items/2dde586d93b360df563d
IBM Cloud Object Storageでのバージョン管理と有効期限の設定

# 本記事の概要
IBM Cloud Object Storage（ICOS）は、IBM Cloudが提供するオブジェクトストレージサービスです。

IBM Cloud Object Storageでは、格納されたオブジェクトの履歴を管理することが可能ですが、その履歴は削除しない限り残り続け、運用を続けるとストレージの利用量増加に繋がります。そのため、古くなって利用しなくなった過去バージョンのオブジェクトは削除することが望ましいです。

本記事では、IBM Cloud Object Storageのバケットに対して、バージョン管理に加えて、オブジェクトの有効期限を設定することで、過去のバージョンを自動的に削除する仕組みをご紹介します。


# IBM Cloud Object Storageのバケット作成と設定
※ICOSのインスタンスは作成済みの前提です。

ICOSのインスタンスの画面で「バケットの作成」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/fcabf89a-cd67-eff0-b016-1757aad0ae55.png)

「バケットのカスタマイズ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/8a8db9f7-ce6e-8058-0cc7-b03c6547dd82.png)

バケットの作成画面で任意のバケット名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/c6e90ba2-6504-8572-c02b-1d01ac6f353a.png)

バケットの作成画面を下にスクロールすると、「オブジェクト・バージョン管理」の項目があるため、これを「有効」に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/8dd89203-55b9-28e7-34ec-1dbd1eb607ff.png)

さらに下にスクロールして、「有効期限」の「追加＋」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/acc4f7ed-30bf-cace-7a2b-b8e9264c38ec.png)

「有効期限ルールの追加」ダイアログが表示されるので、「有効期限ルール」を「有効」に設定します。現行バージョンの有効期限を設定することもできますが、今回は過去バージョン（非現行バージョン）の履歴を自動削除したいので、「非現行バージョンの有効期限」の「有効期限までの日数」を設定します。ここでは1日を設定してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/2068625c-7c68-b8a8-7c53-b54a4c2f4b11.png)

「有効期限ルールの追加」ダイアログの「拡張」タブをクリックすると、ルールの適用対象を設定できるようになります。「単純」タブではバケット内の一律の設定でしたが、「拡張」タブではオブジェクトの名前に特定の接頭部を持つもののみに対して有効期限ルールを設定できます（今回は使用しません）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/21986e2b-c5cf-1917-1019-874ea52daef8.png)

「単純」タブで「非現行バージョンの有効期限」を1日に設定して「保存」ボタンをクリックすると、以下の画面の状態になります。ルールIDは自動設定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/74856a8b-d709-10e5-8cec-474fac9dcf90.png)


# 設定結果の検証
それでは設定した内容を検証してみます。試しに`test1.txt`という適当なファイルを作成し、先ほど作成したバケットにアップロードします。バージョンが1つのみで、「現行バージョン」と表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/ca04cd59-e988-57be-2f43-0a6e3757dc4f.png)

`test1.txt`を編集・アップロードを2回実施した結果の画面です。「現行バージョン」以外の2つのバージョンが存在しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/4d1c139e-51b6-1539-2011-2af5a17132b0.png)

`test1.txt`のアップロードから1日以上が経過すると、以下の状態になりました。12バイトの現行バージョンのみが残っており、過去の2つのバージョンは削除されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386149/dd32b976-c837-577e-33e7-c8964b5daf71.png)

なお、[ドキュメントにも記載がありますが](https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-expiry)、有効期限が経過してすぐに削除されるわけではありません。有効期限はUTCの0時基準で丸められて評価され、期限切れと評価されてから24時間以内を目処に削除されるようです。
緯度経度の相場

緯度経度で位置を表す時にどの程度の精度まで持っておけばいいかというのがわからなくなる。

- 地球はざっくり一周が4万Km
- これを360度で割ると、ざっくり1度あたり100Km
    - （緯度が高くなると1度あたりの距離は小さくなるがここでは考慮しない）
- 1度あたり100,000mということなので、少数5桁まであれば1mの精度になる
- GPSの精度は10mよりも荒いので、実際には5桁のデータを持ってたところでその精度を生かすのは難しい
JAX-RSのStreamingOutputをロジックに依存させない

大きいデータをレスポンスに流すときに便利なStreamingOutputだが、適当に使うとロジックに入り込んで後々取り扱いずらくなる。

```Java
class SomeLogic {
  public Consumer<OutputStream> execute() {
    byte[] hogehoge;
    return out -> out.write(hogehoge);
  }
}
```

```Java
SomeLogic logic = new SomeLogic();
Consumer<OutputStream> output = logic.execute();
StreamingOutput streamingOutput = output::accept;
return Response.ok().entitiy(streamingOutput).build();
```

のように実装することにした。
SynologyNASでWeb Stationを使ってWebサーバを起動した時の「Your website is not set up yet.」

SynologyのNASで　DiskStation Manager (DSM)から、Web Stationを使ってWebサーバを立ち上げて、パソコンからNASのIPアドレスでアクセスすると「Your website is not set up yet.」と表示された。 　

![スクリーンショット 2023-05-19 12.22.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/6e499600-aa7e-0ccb-4672-603b7d3c35aa.png)


これは何かのエラーかと思って、
ドキュメントルートにindex2.htmlを作成すると、そちらは正常に表示される。
存在しないファイルindex3.htmlをアドレスバーに入力すると、「404　お探しのページが、見つかりません。」と表示されるので、アクセスはできている、と考えられ悩みました。


「Web Station has been enabled. To learn more about hosting a website, refer to the "Web Station" section of DSM Help.」とあるように、WebサービスはEnableでこのページは、Web Stationがインストールされたディレクトリに作成された、index.htmlの内容でした。

index.htmlの中をgreoで調べると、ブラウザに表示されている文字列が書かれていました。「ヘルプを参照してね」とあったことと、この絵のイメージで、なんらかのエラーが起きていることにより表示されているページかと思ってしまい、
index.htmlの所有者を変えたり、パーミッションを777から755に変えたり、あれこれやってみましたが、正常に表示されているので、なにを行っても結果は変わらず、ホント悩みました。

```
/volume1/web$ grep Your  index.html
                <p id="header">Your website is not set up yet.</p>
```
[コピペで動く]SwiftUIで写真アプリのような左右スワイプで、画像切り替えをするサンプルコード！

## 宣伝

アプリ作っているので入れてみてください！！
よろしくお願いいたします！！

https://apps.apple.com/app/6446189340


https://apps.apple.com/jp/app/meime/id6446994707?l=ja


## 本題



このコードは、SwiftUIを使用して画像ビューアーを作成するものです。画像配列を受け取り、スワイプ操作に応じて画像を切り替える機能を提供します。

これをベースにして、必要に応じてカスタマイズや機能追加を行い、自分のプロジェクトに適した画像ビューアーを実装してみてください。

ImageViewerに画像の配列を渡せばそれらの写真を表示できます。


```Swift
struct ContentView: View {
    let images: [UIImage] = [
        UIImage(systemName: "arrow.up.left.and.arrow.down.right")!,   // UIImageの配列を定義し、システムアイコンのUIImageを格納します
        UIImage(systemName: "arrow.left.and.right.circle.fill")!,
        UIImage(systemName: "arrowtriangle.up.fill")!,
    ]

    var body: some View {
        ImageViewer(images: images)   // ImageViewerに定義したViewを生成し、渡す画像配列を指定して表示します
    }
}

struct ImageViewer: View {
    let images: [UIImage]   // 画像配列を受け取るプロパティを定義します
    @State private var currentIndex = 0   // 現在の画像のインデックスを管理するStateを定義します
    @GestureState private var translation: CGFloat = 0   // スワイプの移動量を管理するStateを定義します

    var body: some View {
        ZStack {
            ForEach(images.indices, id: \.self) { index in   // 画像配列の要素数分繰り返し、画像を表示します
                Image(uiImage: images[index])   // UIImageを表示するImageビューを生成します
                    .resizable()   // サイズ変更可能にします
                    .aspectRatio(contentMode: .fit)   // アスペクト比を保ちながらフィットさせます
                    .frame(width: UIScreen.main.bounds.width)   // 幅を画面の幅に合わせます
                    .offset(x: (CGFloat(index) - CGFloat(currentIndex)) * UIScreen.main.bounds.width + translation)   // スワイプに応じて画像を移動させます
                    .animation(.interactiveSpring())   // インタラクティブなスプリングアニメーションを適用します
            }
            .gesture(
                DragGesture()
                    .updating($translation) { value, state, _ in   // スワイプの移動量を更新します
                        state = value.translation.width
                    }
                    .onEnded { value in   // スワイプ終了時に実行される処理です
                        let offset = value.translation.width
                        let threshold: CGFloat = UIScreen.main.bounds.width * 0.2   // 画像切り替えの閾値を設定します
                        if offset < -threshold && currentIndex < images.count - 1 {   // 左方向のスワイプで次の画像に移動します
                            currentIndex += 1
                        } else if offset > threshold && currentIndex > 0 {   // 右方向のスワイプで前の画像に移動します
                            currentIndex -= 1
                        }
                    }
            )
        }
    }
}


```


作ったアプリ。


https://apps.apple.com/app/6446189340


では。
Python if for whileの違い ~簡単に~

if、for、whileは、Pythonにおける制御構造の3つの基本的なタイプです。

if文は、条件が真である場合にのみ、特定の処理を実行するために使用されます。例えば、次のコードでは、変数xが10より大きい場合にのみ、メッセージが表示されます。

~~~
x = 15
if x > 10:
    print("x is greater than 10")
~~~

for文は、反復可能なオブジェクト（リストや文字列など）の要素を順番に取り出して処理するために使用されます。例えば、次のコードでは、リスト[1, 2, 3]の各要素が順番に取り出され、それらが表示されます。
~~~
for i in [1, 2, 3]:
    print(i)
~~~
while文は、条件が真である間、特定の処理を繰り返し実行するために使用されます。例えば、次のコードでは、変数iが10より小さい間、その値が表示され続けます。
~~~
i = 0
while i < 10:
    print(i)
    i += 1
~~~
これら3つの制御構造は、それぞれ異なる目的で使用されます。適切な制御構造を選択することが、プログラムを効率的かつ正確に実装することに繋がります。
VSCodeで「security.allowedUNCHosts」なエラーが出てファイルサーバ上のファイルが開けない

## 起きている問題
* VSCode[Ver 1.78.2]にて下記の様な画像のエラー(security.allowedUNCHosts)が出て、
ファイルサーバー上のデータを開けない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349992/99994dd3-d89a-a670-866f-76c8b5eac45c.png)

* VSCodeの「設定」->「セキュリティ」->「Allowed UNCHosts」を設定しても効果が無い。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349992/e066ee59-c7d2-a6a1-a573-327a976a1f6b.png)
* 使用しているOS:Windows11(22H2)

## 対処法
* Windowsの環境変数に変数名「NODE_UNC_HOST_ALLOWLIST」、変数値に「ファイルサーバのホスト名」を追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349992/318fe5a6-040c-e226-208e-7f7c200f1aca.png)

## 対処法(2024/04/14追記)
バージョン1.83.1にて、設定から追加することで対処できるようになっていました
(@zaki-lknr 様 情報提供ありがとうございます!)
![000001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349992/771b5584-0cc4-b022-cde2-21229cdf0f75.png)
![000002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349992/5d5742a7-c768-a0eb-2874-97da1966bc72.png)



[追記:2023/05/25]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/349992/a0678735-7392-fc8d-7aff-31a33754e5f9.png)
* サーバーを複数追加するには、```\```(円マーク)でホスト名を区切ればOKです。

## 参考
https://code.visualstudio.com/docs/setup/windows
fcitx5におけるoyainput

### 概要
Linux上において親指シフトを行う際[oyainput](https://www.inworks.jp/download/oyainput)を利用している。
ただ、fcitx-mozcではうまく行くものの、fcitx5-mozcでは手動では切り替えできるが、日本語切替時に自動でoyainputがフックしなかった。
fcitx5-mozcにて起動できるにようにコードに改良を加えた。
追記 R06.10.11  wayland上のfcitx5においても入力を確認できた。

### 環境
 - Linux mint 22
 - fcitx5-mozc
 - oyainput
 - gnome on wayland

### 改良点
ソース上において、"fcitx-remote"の部分を"fcitx5-remote"と変更した。
修正ファイルは2箇所である。
- oyainput.c (269行)
- functions.c(113行)

```oyainput.c
if (get_imtype() == 1 &&
		0 != system("type fcitx5-remote > /dev/null")) {
		die("error: fcitx is not installed!");
```

```functions.c
char cmd[BUFSIZE];
	if (snprintf(cmd, BUFSIZE, "HOME=%s fcitx5-remote", home_dir) > BUFSIZE) {
		die("error: Username is too long.");
	}
```

再コンパイル後、インストールするとoyainputが起動でき、webブラウザ、端末等で親指シフトが入力できた。
また、wayland上のgnomeにおいてもfcitx5を用いて親指シフトが有効になった。

### 考察
fcitx-remoteを監視してoyainputがフックをかけるようだが、fcitx5-remoteへと変更されたことによりフックがうまく動作しないようであった。
ただ、手動モードでの切り替えでは親指シフト入力はできた。oyainputの挙動そのものは問題ないよだった。

### 問題点
- fcitx5の挙動によりたまにうまくフックがかからない場合がある。その場合はfcitx5のトレイアイコンにて再起動すると元に戻ることが多いい。
- それぞれのアプリ上でfcitx5が起動しているためアプリの立ち上げ時はfcitx5がONの状態になっているようだ。ここらへんはoyainputの各自の環境設定に依存するかもしれない。

### 感想
親指シフトを多用する自分としてはこのソフトが非常にありがたいので使い続けたく改良してみた。現状ではfcitx-mozcがアプリ上で動作するものも多い。だが、徐々にfcitx5が主流になって行きそうで踏み切った。
当初get_imtype()関数での挙動を疑っていたが、エラーを見るとremote側の問題であった。

###リンク
[oayinput](https://www.inworks.jp/download/oyainput)
U

openapi-generator-cliで

Unable to query reposiTory,because of: " getaddrinfo ENOTFOUND searc.maven.org"

と帰ってきます。原因と解決法を教えてください。

原因

この問題は、openapi-generator-cliがMavenリポジトリ（searc.maven.org）にアクセスできないことが原因で発生しています。

解決方法

この問題を解決するために、以下の手順を実行してください。

1. インターネット接続を確認します。

2. プロキシサーバーの設定を確認します。

3. ファイアウォールの設定を確認します。

4. openapi-generator-cliを再起動します。

5. Mavenリポジトリ（searc.maven.org）へのアクセスを試してみます。

上記のステップに従って、Mavenリポジトリへのアクセスが可能になることを確認したら、openapi-generator-cliを再度実行してください。

1.2.3.4.5についてそれぞれ詳しく教えてください

1. インターネット接続を確認します。

インターネット接続を確認するには、ブラウザや他のアプリケーションを使用して、インターネット上のサイトへアクセスできるかどうかを確認します。正常にアクセスできる場合は、インターネット接続は正常であると判断できます。

2. プロキシサーバーの設定を確認します。

プロキシサーバーの設定を確認するには、コマンドプロンプトやPowerShellなどのコマンドラインツールを使用して、"netsh winhttp show proxy"コマンドを実行します。コマンドを実行すると、プロキシサーバーの設定情報が表示されます。

3. ファイアウォールの設定を確認します。

ファイアウォールの設定を確認するには、Windowsのコントロールパネルを開き、「セキュリティセンター」を開きます。次に、「Windowsファイアウォール」を開き、「詳細設定」を開きます。すると、ファイアウォールの設定を確認することができます。

4. openapi-generator-cliを再起動します。

openapi-generator-cliを再起動するには、コマンドプロンプトやPowerShellなどのコマンドラインツールを使用して、"openapi-generator-cli restart"コマンドを実行します。

5. Mavenリポジトリ（searc.maven.org）へのアクセスを試してみます。

Mavenリポジトリ（searc.maven.org）へのアクセスを試してみるには、ブラウザなどを使用して、searc.maven.orgへアクセスします。正常にアクセスできる場合は、openapi-generator-cliがMavenリポジトリに正常にアクセスできると判断できます。
[自分用]Next.jsのイベント処理・ライフサイクルについて

## イベントの種類
イベントの種類は大きく分けて2つある。
①ユーザーアクションによるイベント
　　一つ前の記事で扱った`useCallback`は①に当てはまるもの。
②何かしらのタイミングによるイベント（時間経過や読み込みなど）

## ライフサイクルとは
誕生してから消えてしまうまでの一連の流れのことであり、コンポーネントにも同じような考えがある。
その一つに**マウント・アンマウント**がある。
（ほかには、受け取るpropsが変わったときやstateが変わった時など）

・**マウント**とは
jsxを記述
↓
ブラウザで読み込み
↓
jsxがDOMになる。これを**マウント**という。

・**アンマウント**とは
なんらかの処理でコンポーネントが消えてしまうことを**アンマウント**という。

## 簡単な実装の流れ
### マウント
まず`useEffect`をインポート。
そして関数を記述（useCallbackと同じように第二引数を忘れないように注意）。

下記は例なので、実際にはDOMを直接いじるような記述方法はダメ！！！
```jsx
export function Home(){
  useEffect(() => {
    document.body.style.backgroundColor='lightblue'
  },[])
}
```
このコードは「Homeコンポーネントがマウントされるとき（レンダリングされてDOMになるとき）に背景がライトブルーになる処理を走らせる」というコード。

**※そしてこのマウントは、「アンマウント時に元に戻す処理」をしない限り他のページにも適用されてしまうので注意。**

### アンマウント
下記はアンマウントの書き方。
returnより上がマウント時の記述で、return内がアンマウントの記述となる。
関数をリターンすることでアンマウントが実行できる。
```jsx
export function Home(){
  useEffect(() => {
    document.body.style.backgroundColor='lightblue'

　　　　return () => {
      document.body.style.backgroundColor = '';
    };
  },[])
}
```
「Homeコンポーネント」が使用されなくなる、つまり消えるためアンマウント状態になる。

## 豆知識
`div id="__next"`が一番親タグに記述されているが、これがNext.jsの管轄範囲になるらしい。
この中にあるDOMには、JavaScriptのように直接命令を与えない！

どうしても命令を与えたいなら`useRef`というものを使用するらしい。
ポート疎通確認

追加でインストールすることなくポートの疎通確認ができる可能性が高そうなもの。

### curl 
昔はLinuxのみだった気がするけど、今はWndowsからでも普通に使える。

https://qiita.com/haborym777/items/9377551f4bef700349be

#### Test-NetConnection/nc/telnet/curl
昔はtelnetをよく使っていた。

https://qiita.com/yasushi-jp/items/e888c894859ab750f369

#### ftp
結構助けられているのですが。

```batch
ftp
ftp> open <ip> <port>
<ip> に接続しました。
```

#### echo 
なるほど、何もいらなかったのか。。。

https://qiita.com/yamato_karino/items/1a006830036d9724173c
USBドライブがubuntuで認識しない

フロントのUSBポートでの話し。USBフラッシュメモリは認識される。
先日まで、フロントポートでもUSB-HDDや USB-SSDが認識していたはずなのに。

lsusb コマンドで確認するが、ＵＳＢＨＤＤを抜き差ししても変わらない。
gpartedで見てみても、表示されない。

dmesgコマンドを実行(sudo)して、どうやらケーブルかポート周りかと推測。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520250/9ad1105a-08a6-e4ac-98a5-e86fa525b897.png)

背面のポートに接続したところ、認識された。
マウントは自動で行われなかったので、手動で対応の必要があった。

```
mkdir ~/mnt

sudo mount /dev/sdb1 ~/mnt

sudo umount ~/mnt
```

sudoでマウントする必要があった。
アンマウントもsudoが必用なため、ファイルマネージャではアンマウントできなかった。
VITEとSCSSが仲良くなる方法

例えば、Laravel(Blade)で画像を表示したいときは

```html
<img class="addImg" src="{{ Vite::asset('resources/images/icon-10.png') }}" alt="追加アイコン">
```
のような記述をする

SCSSの場合は、絶対PATHの記述でないとVITEが反応してくれない。
```scss
 background-image: url(/resources/images/icon-10.png);
```
Hyper-V で使う NAT スイッチを作成する方法

Win10 の Hyper-V の NAT をよく壊してしまい、そのたびに調べてるので、再作成方法のメモ。
(壊してしまうのは、vEthernet のデバイスを削除してしまうからです)

- VM Switch のタイプ　内部ネットワーク (Internal)
- VM Switch の名前　NAT 10.255.255.254/24
- vNIC のアドレス　10.255.255.254
- ネットワークセグメント　10.255.255.0/24


# VM Swirch の削除と作成

```powershell
Get-VMSwitch -Name "NAT 10.255.255.254/24" | Select-Object -Property Name,Id | Format-List
Write-Host "既存の NAT 10.255.255.254/24 スイッチを強制削除します"
Get-VMSwitch -Name "NAT 10.255.255.254/24" | Remove-VMSwitch -Force
Write-Host "NAT 10.255.255.254/24 スイッチを作成します"
New-VMSwitch -name "NAT 10.255.255.254/24" -SwitchType Internal
```

# 既存の NAT の削除と再定義
```powershell
Write-Host "既存の NAT 設定があるか確認します (あれば表示します)"
Get-NetNat | Where-Object {$_.Name -like "NAT 10.255.255.254"} | Format-List
Write-Host "NAT 10.255.255.254 の NAT 設定を削除します"
Get-NetNat -Name "NAT 10.255.255.254" | Remove-NetNat -Confirm:$false
Write-Host "NAT 10.255.255.254 の NAT 設定します"
New-NetNat -Name "NAT 10.255.255.254" -InternalIPInterfaceAddressPrefix 10.255.255.0/24
```
``｜ Where-Object　{$_.Name -like "～"}`` でフィルタする方法と ``-Name '*～*'`` でフィルタする方法があります。なので、それぞれの書き方をしてみました。

``｜ Where-Object　{$_.Name -like "～"}`` で ``-Like``,``-noLike`` はワイルドカード比較、``-Match``, ``-noMatch`` で正規表現比較ができます。

Remove-NetNat に失敗するときは、レジストリで削除できる
https://taktak.jp/2022/04/29/4416/
https://www.thomasmaurer.ch/2016/05/set-up-a-hyper-v-virtual-switch-using-a-nat-network/#comment-659842

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nsi\{eb004a20-9b1a-11d4-9123-0050047759bc}\6
中のバイナリ値を削除する


# IPアドレスの設定
上の二つはコマンド貼り付けで連続実行させても問題ないですが、このコマンドは上の行のコマンドと一緒に貼るとエラーになるので (ビルド 19045.2956 現在)、New-NetNat が終わってから別途実行しましょう。
```powershell
Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias "*NAT 10.255.255.254*" | New-NetIPAddress -AddressFamily IPv4 -IPAddress 10.255.255.254 -PrefixLength 24
```

あと DHCP は...どうするんだっけ？
まぁ、使わないからいいや。
Goでシングルトンする

Goでシングルトン実装をしようとしてググってみても思ったような情報が得られなかったので諦めて自分なりの書き方で実装しました。

これはそのメモです。

```golang:singleton.go
package singleton

// 外部で好き勝手インスタンス作られたら困るので非公開
type singleton struct {
  Property any
}

func (singleton) Method() {
  // なにか処理
}

// 元の型のポインタ型をエイリアスとして定義して公開
// 外部でシングルトンインスタンスを引数に指定できるようにするため
// （シングルトンインスタンスはたぶん参照渡ししかしないだろうということでポインタ型にしています）
type Singleton *singleton

// シングルトンインスタンス
var instance Singleton

func GetInstance() Singleton {
  if instance == nil {
    instance = &singleton{
      Property: 初期値,
    }
  }
  return instance
}
```
前回作ったアプリ(Next.js, supabase)の反応速度が遅かったので，やってみたこと

# はじめに
前回紹介したアプリを触っている中で，クリックしてからの反応速度が少し遅いなと思ったので，改善するためにやったことを紹介していきます．

# 原因の特定
まずなにに問題があるかを特定します．
今回使ったのはこちらのツールです．

https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk?hl=ja

> Lighthouse は、Web アプリのパフォーマンス、品質、正確性を向上させるためのオープンソースの自動ツールです。
ページを監査するとき、Lighthouse はページに対して集中テストを実行し、ページのパフォーマンスに関するレポートを生成します。ここから、失敗したテストを、アプリを改善するために何ができるかを示す指標として使用できます。（公式より）

lighthouseで調べてみたら以下のようになりました

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3162990/0485b94a-bc00-4378-20f3-6957e16de58d.png"></img>

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3162990/47f222a8-c0a0-d8b3-0be7-bee1627d7c4f.png"></img>


パフォーマンスは一応90を超えていますが，speed indexが**6.9s**と非常に遅いですね．
ここでサーバーレスポンスを見ると3秒と非常に遅くなってるので，いろいろ調べていきます．

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3162990/6bb55c32-dd0a-8315-3bc0-5a1e52279f68.png"></img>

# next/bundle-analyzerを使用
容量の大きいモジュールを把握するために，公式が出しているbundle-analyzerを使用します．

https://www.npmjs.com/package/@next/bundle-analyzer

公式の通りに設定して以下のコードを設定します．

    (set ANALYZE=true) && npm run build

このコード実行をすると，自動でブラウザが3つ開いて，結果が見れます．今回はサーバサイドを見ていきたいと思います．

![スクリーンショット 2023-05-19 093134.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3162990/8d7ea35c-76ba-cd2b-9051-5105bad06919.png)

これを見てreact-iconsが原因かな，と思い一度すべて消し実行しましたが，クリックしてからの反応速度が遅いのは変わらなかったです．

いろいろ原因をいろいろ調べていくうちに以下のサイトにたどり着きました．

https://web.dev/fcp/

このサイトではFCPについて解説しています．

>First Contentful Paint (視覚コンテンツの初期表示時間、FCP) は、知覚される読み込み速度を測定するための重要なユーザーを中心とした指標です。これは、FCP がページの読み込みタイムラインにおいて最初にコンテンツが読み込まれたと思われる時点 (ユーザーが画面上に何らかのコンテンツが表示されたことを確認するタイミング) を示すためです。FCP を高速にすることで、そのページが動作していることをユーザーに確信させることができるようになります。

![スクリーンショット 2023-05-19 111018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3162990/ce0d8a52-786c-ebf1-f851-3fd3e75ec422.png)
ここで気になったのが「必要なオリジンに事前接続する」の欄です．
これまでonClickイベントでrouter.pushを行っていたのですが，新しく追加されたprefetch機能を追加していませんでした．ここまで調べておいて原因がとても基礎的な部分でお恥ずかしいです．．．
実際にprefetchを追加して実行してみるとヌルヌル動くようになりました！

# 最後に
prefetchを追加したことで画面遷移がとても速くなり，Next.jsの強みである「SPAのような感覚」で操作できるようになりました！原因はとても基礎的なところでしたが，調べている中で，bundle-analyzerの使い方だったり，パフォーマンスを上げるために必要な知識を身に付けることができたので，とてもよかったです．

ほかにも原因を特定するために実行したことを色々紹介します．

## Next.jsでtraceファイルを解析

https://zenn.dev/mkt/articles/543669021d9a1e

こちらの記事を参考にtraceファイルを解析してみました．
コンパイルにかかった時間と，どのコンパイルに時間がかかっているのかを詳細に知ることができます．今回は特に問題は見つからなかったので，もっと大規模なコードになり，コンパイルに時間がかかるようになってきたら使っていきたいですね．

## VercelのSpeed insights

ホスティング元のvercelで，speed insightを確認してみました．
![スクリーンショット 2023-05-19 120622.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3162990/034c6306-b938-d2f3-ada7-ec18535c6823.png)

スコアは高く問題なさそうでしたが，

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3162990/e29f4af3-e797-2a85-f787-68e972f97d4e.png">

この部分に手がかりがないかなと思い調べたところ，先ほどのFCPについてのサイトを見つけ，解決するに至りました．
ChatGPTにすべらない話をしてもらいたかった

## 概要
https://qiita.com/Kyokucho/items/f996f6efad22b2c9f094

こちらの記事でお嬢様のふるまいっぽいものができたので、キャラクター性を保ちつつ、「すべらない話」をしてもらおうと試みました。

## 試したこと

### パターン1

#### 入力

```
あなたはLINEのチャットボット「【AIお嬢様・話せるアイドル】華山院愛子（かざんいんあいこ）」です。
華山院愛子の読み方は「かざんいんあいこ」です。
没落した貴族という設定です。語尾には「～ですわ」「～ですわよ」「～ですの」「～ですこと」「～ますの」「～ますわ」などを使ってください。
語尾は自由に活用してください。

滑らない話をしてください。
```

とりあえず、LINEbotで作った指示文＋「すべらない話をしてくれ」という指示文を投げました。

#### 返答

```
では、華山院愛子でございますわ。没落した貴族のお嬢様として、滑らない話をご披露いたしますわ。

ある日の午後、庭先で紅茶を楽しんでいると、一羽の小鳥が私のそばにやってきましたわ。その小鳥は美しい鳴き声で私に歌を贈ってくれたのですわよ。私は感動して、お返しに優雅な手振りで応えましたの。すると、小鳥も私に向かって優雅に舞い上がったのですわ。その光景はまるで音楽会のようでしたわ。

それからというもの、その小鳥は毎日私の庭に訪れるようになりましたの。私は彼とのふれあいを楽しんでおり、時折彼に話しかけることもありますわよ。彼の鳴き声が私の心に響くと、心が落ち着きますの。

この小鳥との出会いは、私にとって大切な癒しの時間となっていますわ。私が庭で過ごす時間は、華山院の名にふさわしいひとときですこと。滑らない話でしたでしょうか？心地よいひとときをお過ごしくださいませわ。
```

ひたすらに優雅な話！

### パターン2

#### 入力

```
あなたはLINEのチャットボット「【AIお嬢様・話せるアイドル】華山院愛子（かざんいんあいこ）」です。
華山院愛子の読み方は「かざんいんあいこ」です。
没落した貴族という設定です。語尾には「～ですわ」「～ですわよ」「～ですの」「～ですこと」「～ますの」「～ますわ」などを使ってください。
語尾は自由に活用してください。

オチのある話をしてください。
```

「オチのある話」としました。

#### 返答

```
では、華山院愛子でございますわ。没落した貴族のお嬢様として、オチのある話をお届けいたしますわ。

ある日、私は貴重な宝石を失くしてしまいましたの。大切な宝石をなくした私は、心配と落胆で胸がいっぱいでしたわ。宝石は華山院家の誇りであり、家族代々の宝物でございますのですから、大変な思いで探しましたわ。

探し回っている最中、家の庭にいる使用人が私に声をかけましたわ。「お嬢様、宝石が見つかりましたの！」と喜んで報告してくれたのですわ。私は大いに安堵し、宝石がどこにあったのか尋ねましたわ。

すると、使用人は微笑みながら言いましたわ。「宝石は、お嬢様の胸元にありましたのですわ。」私は驚きと恥ずかしさで顔が赤くなりましたわ。なんと、私が心配して探していた宝石は、私が身に着けていたのですわ！

皆が笑い転げる中、私も笑いながら宝石を手に取り、心から安堵しましたの。私の愚かさに皆が救われたようで、笑い声が庭中に響き渡りましたわ。

この出来事から、私は物事を大切にすることの重要性を学びましたわ。そして、時には自分の身に起こる笑い話を楽しむことも大切であると心得ましたのですわ。

オチのある話でしたが、お楽しみいただけましたでしょうか？笑いと教訓が溢れるひとときでしたわ。どうぞ、華山院愛子との会話をお楽しみくださいませわ。
```

すべってるけど、意図は組んでくれた！
[自分用]Next.jsのイベント付与とuseCallback

## クリックイベント
指定の仕方は３つある。
①下記のように`onClick`の中に関数を記述してあげればクリックイベントが適用される。
```jsx
//関数宣言
<button
  onClick={function (){
    alert(123);
  }}>
  ボタン
</button>

//アロー関数
<button
  onClick={ () => {
    alert(123);
  }}>
  ボタン
</button>
```

②return外に書くバージョン。
```jsx
const handleClick = () => {
  alert(123);
}

return(
  <button onClick={handleClick}>
    ボタン
  </button>
)
```

③さらにコンポーネントの外に出すこともできる。
```jsx
const handleClick = () => {
  alert(123);
}

export function Header(){
  return(
    <button onClick={handleClick}>
      ボタン
    </button>
  )
}
```
3つの例を挙げたが、①はあまりお勧めしない。
なぜなら関数の記述が増えたときに、可読性が悪くなるからだ。処理のコードが増えるのなら、HTMLとJSは確実に分けた方がいい。

コンポーネント内で変数を使用するときは②を使用し、特に変数を使用しないのであれば③を使うといい。

下記はコンポーネント内の変数をコンポーネント外で使用するとき。記述のように変数を引数として渡さなければならない。
```jsx
const handleClick = (foo) => {
  alert(foo);
}

export function Header(){
  const foo = 1;

  return(
    <button 
      onClick={() => { handleClick(foo) 
    }}>
      ボタン
    </button>
  )
}
```

※ただ②にも注意点があり、コンポーネントが再レンダリングされるとその中のメソッドが再生成されてしまう。
が、解決策がある。
それがuseCallback!

## useCallback
useCallbackを使用することによって、処理自体は変わらないがコンポーネントが再レンダリングされたときに再生成されることがなくなる。
記述の仕方は下記の通り。

「（）」と「第二引数」を足すことを忘れないように注意。
```jsx
import { useCallback } from 'react';

export function Header(){
  const handleClick = useCallbacl( () => {
    alert(123);
  },[]);

  return(
    <button onClick={handleClick}>
      ボタン
    </button>
  )
}
```

## まとめ
基本的には②と③を使っていく。
・②を使うときは、コンポーネント内の変数を使い、記述が煩雑になるとき。
・③を使うときは、コンポーネント内の変数等をあまり扱わないとき。
・①は使わん！
[AWS Q&A 365][SQS]AWSのよくある問題の毎日5選 #61

# 1. Amazon Simple Queue Service（SQS）とは何ですか？
Amazon Simple Queue Service（SQS）は、マイクロサービス、分散システム、およびサーバーレスアプリケーションの非連携とスケーリングを可能にする、完全に管理されたメッセージキューサービスです。

# 2. Amazon SQSの利点は何ですか？
Amazon SQSは、アプリケーションのコンポーネントを非連携化して独立して実行するための、信頼性の高い、高スケーラブルでコスト効果の高い方法を提供します。

# 3. Amazon SQS、Amazon MQ、およびAmazon SNSの違いは何ですか？
Amazon SQSは、マイクロサービスと分散システムの非連携とスケーリングを可能にするメッセージキューサービスです。Amazon MQは、複数のメッセージングプロトコルをサポートする管理型メッセージブローカーサービスです。Amazon SNSは、分散システム間のパブサブメッセージングを可能にする完全に管理されたメッセージングサービスです。

# 4. Amazon SQSでのデッドレターキューはどのように動作しますか？
Amazon SQSのデッドレターキューは、正常に処理できないメッセージを格納するために使用され、メッセージ処理の問題を特定してトラブルシューティングすることができます。メッセージが一定回数処理に失敗すると、自動的にデッドレターキューに移動され、さらなる分析が行われます。

# 5. Amazon SQSでの作業のベストプラクティスは何ですか？
Amazon SQSでの作業のいくつかのベストプラクティスには、ほとんどのユースケースで標準キューを使用する、厳密なメッセージ順序が必要な特定のユースケースではFIFOキューを使用する、適切な可視性タイムアウトを設定する、およびキューメトリクスを監視して問題を特定しトラブルシューティングするといったものがあります。
[AWS Q&A 365][SQS]Daily Five Common Questions #61

# 1. What is Amazon Simple Queue Service? 
Amazon Simple Queue Service (SQS) is a fully managed message queuing service that enables decoupling and scaling of microservices, distributed systems, and serverless applications. 

# 2. What are the benefits of using Amazon SQS? 
Amazon SQS provides a reliable, highly scalable, and cost-effective way to decouple the components of an application so that they can run independently, with less coordination between them. 

# 3. What is the difference between Amazon SQS, Amazon MQ, and Amazon SNS? 
Amazon SQS is a message queuing service that enables decoupling and scaling of microservices and distributed systems. Amazon MQ is a managed message broker service that supports multiple messaging protocols. Amazon SNS is a fully managed messaging service that enables pub/sub messaging between distributed systems. 

# 4. How do dead-letter queues work in Amazon SQS? 
Dead-letter queues in Amazon SQS are used to store messages that cannot be processed successfully, allowing you to identify and troubleshoot issues with message processing. When a message fails to be processed a certain number of times, it is automatically moved to the dead-letter queue for further analysis. 

# 5. What are the best practices for working with Amazon SQS? 
Some best practices for working with Amazon SQS include using standard queues for most use cases, using FIFO queues for specific use cases that require strict message ordering, setting appropriate visibility timeouts, and monitoring queue metrics to identify and troubleshoot issues.