OmniAICreator/Qiita-1.07M huggingface dataset:
【Databricks】Pricingのメモ- 2024年4月時点

# 背景・目的
Databricksでは、契約プランにより各サービスの単価（DBUあたりの金額）が変わります。
どれくらい変わるか、また変更有無について、変化点をまとめておきます。

:::note normal
2024年4月13日時点の整理です。今後変更の可能性がありますので正式な情報は、[ドキュメント](https://www.databricks.com/product/pricing/jobs)をご覧ください。
:::

# まとめ
::: note info
下記を前提にしています
- クラウドプロバイダーは、AWS
- リージョンは、東京リージョン
:::

[Databricks pricing](https://www.databricks.com/product/pricing)を元に整理します。

Databricksでは、機能ごとに変わりますので下記に整理します。下記の金額は、DBU単位です。

| 機能 | コンピュートタイプ| Standard | Premium| Enterprise |備考|
|:--------|:--------|:--------|:--------|:--------|:--------|
|Jobs| Jobs Compute | - | $0.15 | **$0.20** | 
||Jobs Compute Photon | - |$0.15 | **$0.20** | 
| Delta Live Tables | DLT Core / DLT Core Photon | - | $0.20| 同左 |
| | DLT Pro / DLT Pro Photon | - | $0.25 | 同左 |
|  | DLT Advanced / DLT Advanced Photon | - | $0.36 | 同左 |
|Databricks SQL | SQL Classic | - | $0.22|同左 |※1|
| | SQL Pro | - | $0.78 |同左 |
| | SQL Serverless | - | $1.00 | 同左 |
| All-Purpose Compute for Interactive Workloads | All-Purpose Compute| - | $0.55 | **$0.65** |
|| All-Purpose Compute Photon |  -  |$0.55 |**$0.65** |
|Model Serving | Model Serving and Feature Serving | - | $0.0090|同左|※2|
| | GPU Model Serving| - | $0.0070 | 同左|※1|
|Mosaic AI Foundation Model Serving |Verctor Search | - |  $0.28 |同左 |※2|
|Databricks Managed Services|Lakehouse Monitoring|-| $0.39 |$0.50|※1|
| |Predictive Optimization|-|$0.39 |$0.50|※1|

※1 リージョン選択可能（差異あり）
※2 Tokyoは選択できないため、バージニアで計算しています

## Mosaic AI Foundation Model Serving
上記とは異なり、モデルごとに価格が異なりますので、別枠で記載しました。

|Model |On Demand / <BR>Provisioned Throughput|Standard|Premium|Enterprise|備考|
|:--|:--|:--|:--|:--|:--|
|DBRX|On Demand| - |2.25 USD / M input tokens <BR>  6.75 USD / M output tokens|同左||
| |Provisioned Throughput| - |$14.85 / Hour|同左||
|LLaMa-2-70B|On Demand|- |$2.00 / M tokens|同左||
| |Provisioned Throughput|- |$44.00 / Hour|同左||
|Mixtral-8-7B|On Demand|- |$1.50 / M tokens | 同左||
| |Provisioned Throughput|- | $20.36 / Hour | 同左||
|MPT-30B|On Demand|- | $1.00 / M tokens | 同左||
| |Provisioned Throughput| - |$7.84 / Hour | 同左||
|LLaMa-2-70B|On Demand| - |$0.95 / M tokens | 同左 ||
| |Provisioned Throughput| - |$7.84 / Hour | 同左 ||
|MPT-7B|On Demand| - |$0.50 / M tokens | 同左 ||
| |Provisioned Throughput|- | $1.40 / Hour | 同左 ||
|BGE-Large|On Demand| - | $0.10 / M tokens| 同左 ||
| |Provisioned Throughput| -  | - |- |※1|

※1 Provisioned Throughputは記載なし

# 考察
今回、DatabricksのPricingを整理してみました。
契約プランにより、JobsとAll-Purpose Compute等、Managed Servicesの単価が変わるようです。


# 参考
https://www.databricks.com/product/pricing/jobs
[Python]マウスドラッグで範囲指定→座標取得→画像の切り抜き



```python
import tkinter
import time
import pyautogui
from PIL import Image, ImageTk
import numpy as np
```


```python
resize_ratio = 4  # 縮小倍率の指定


# ドラッグ開始した時のイベント - - - - - - - - - - - - - - - - - - - - - - - - - -
def get_start_point(event):
    global x1, y1, i, rect

    i += 1
    rect = (f'rect{i}')

    # canvas1上に四角形を描画
    canvas1.create_rectangle(event.x,
                             event.y,
                             event.x + 1,
                             event.y + 1,
                             outline="red",
                             tag=rect)

    # グローバル変数に座標を格納
    x1, y1 = event.x, event.y


# ドラッグ中のイベント - - - - - - - - - - - - - - - - - - - - - - - - - -
def draw_rectangle(event):

    # ドラッグ中のマウスポインタが領域外に出た時の処理
    if event.x < 0:
        x2 = 0
    else:
        x2 = min(img_resized.width, event.x)

    if event.y < 0:
        y2 = 0
    else:
        y2 = min(img_resized.height, event.y)

    # "rect"タグの画像を再描画
    canvas1.coords(rect, x1, y1, x2, y2)


# ドラッグを離したときのイベント - - - - - - - - - - - - - - - - - - - - - - - - - -
def release_action(event):

    global coordinates

    # "rect1"タグの画像の座標を元の縮尺に戻して取得
    x1, y1, x2, y2 = [
        int(n * resize_ratio) for n in canvas1.coords(rect)
    ]

    # 取得した座標を表示
    pyautogui.alert("x1 : " + str(x1) + "\n" + "y1 : " + str(y1) + "\n" +
                    "x2 : " + str(x2) + "\n" + "y2 : " + str(y2) +
                    "\n" + "i : " + str(i))

    coord = [x1, y1, x2, y2]
    coordinates.append(coord)


# メイン処理 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

i = 0
coordinates = []

# 表示する画像の取得（スクリーンショット）
img = Image.open("./pic.jpg")
# 画像をリサイズ
img_resized = img.resize(size=(int(img.width / resize_ratio),
                               int(img.height / resize_ratio)),
                         resample=Image.BILINEAR)

root = tkinter.Tk()
root.attributes("-topmost", True)  # tkinterウィンドウを常に最前面に表示

# tkinterで表示できるように画像変換
img_tk = ImageTk.PhotoImage(img_resized)

# Canvasウィジェットの描画
canvas1 = tkinter.Canvas(root,
                         bg="black",
                         width=img_resized.width,
                         height=img_resized.height)

# Canvasウィジェットに取得した画像を描画
canvas1.create_image(0, 0, image=img_tk, anchor=tkinter.NW)

# Canvasウィジェットを配置し、各種イベントを設定
canvas1.pack()
canvas1.bind("<ButtonPress-1>", get_start_point)
canvas1.bind("<Button1-Motion>", draw_rectangle)
canvas1.bind("<ButtonRelease-1>", release_action)

root.mainloop()

np_coordinates = np.array(coordinates).astype('int')
np.savetxt('./coordinates.txt', np_coordinates)
```



```python
import cv2
import numpy as np
```

```python
path = "./pic.jpg"
before_img = cv2.imread(path)
img = cv2.cvtColor(before_img, cv2.COLOR_BGR2RGB)


#座標の取得
coordinates = np.loadtxt('./coordinates.txt').astype('int')

#繰り返し回数＝行の数を取得
n, _ = coordinates.shape

for i in range(n):
    cropped = img[coordinates[i, 1]:coordinates[i, 3], coordinates[i, 0]:coordinates[i, 2]]
    rgb = cv2.cvtColor(cropped, cv2.COLOR_BGR2RGB)
    cv2.imwrite(f'./fig/{str(i).zfill(2)}.png',rgb)
```
sambaaddcインストール作業ログon ubuntuServer 23.10

```
timedatectl set-timezone Asia/Tokyo
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
sudo apt install acl attr dnsutils krb5-config krb5-user samba samba-dsdb-modules samba-vfs-modules smbclient winbind

EXAMPLE.LOCAL
raspberrypi
raspberrypi

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.org
sudo mv /etc/krb5.conf /etc/krb5.conf.org
sudo samba-tool domain provision -use-rfc2307 --interactive
sudo cp /var/lib/samba/private/krb5.conf /etc/
sudo systemctl stop smbd.service nmbd.service winbind.service
sudo systemctl disable smbd.service nmbd.service winbind.service
systemctl unmask samba-ad-dc.service
systemctl enable samba-ad-dc.service
systemctl start samba-ad-dc.service
systemctl status samba-ad-dc.service
echo -e "nameserver 127.0.0.1\nsearch example.local" | sudo tee /etc/resolv.conf
sudo samba-tool computer list
sudo smbclient //localhost/netlogon -UAdministrator -c 'ls'
sudo host -t SRV _ldap._tcp.example.local
sudo host -t SRV _kerberos._udp.example.local
sudo host -t A example.local
sudo samba-tool domain passwordsettings show
sudo samba-tool domain passwordsettings set --complexity=off
sudo samba-tool domain passwordsettings set --history-length=2
sudo samba-tool domain passwordsettings set --min-pwd-length=4
sudo samba-tool domain passwordsettings set --max-pwd-age=0
cat /etc/hosts
cat /etc/krb5.conf
cat /etc/resolv.conf
cat /etc/samba/smb.conf
```
[Rails]ちょっとN+1問題を解消してみよう


バックエンドエンジニアの実務では、N+1問題を見つけ、解決する場面がある、ということを聞きました。

そこで、練習のためにも、自分のアプリを使って、N+1問題について勉強したことをまとめてみます！

# N+1問題は何が問題（悪影響）なのか？

N+1問題の何が問題かというと、
- 何度も(N回)テーブルにデータを取りに行くと、当然、処理が重くなる
- これが例えば、N＝20回程度なら問題はないかもしれないが、N＝50,000など大量のデータを処理する際には、負荷がかかる
- 結果、サービスの利便性が悪くなる。ビジネスに影響が出る

という認識です。

つまり、そこまで多くのデータを処理しないケースなら、あまり問題にはならないはずです。

私のアプリケーションもそれに該当するのかなと思います。

しかし、大量の処理を想定して、設計したらどうなるか、ということを実際にやって見ることは勉強になるので、試してみました。

# N+1問題の特定

私は以下の方法で、N+1問題が発生しているところを特定しようと思いました。

- gem'bullet'の活用
- 複数テーブルにアクセスしているアクションを見る

## gem'bullet'の活用

rubyには「bullet」というgemが存在し、N+1問題を特定することを補助する目的のgemです。

ただし、私が他に使っているgemとの相性が悪く、確認してみても、一つのテーブルについて処理しているクエリにも誤作動するようになっていました。

もう一つ良くない点として、このgemでは、includesの使用を推奨することがありますが、後述するように、使う意図が分かりにくく推奨されないメソッドです。

bulletの使用は行わないものとしました。

## 複数テーブルにアクセスしているアクションを見る
controllerを確認して、いくつかのテーブルにクエリを出しているアクションを見る方法です。

N+1問題は、複数のテーブルに対してクエリを出す文脈で起こる問題です。

Idea.findなど、クエリに関連するコードを探して、問題が生じているかを見ていきました。

# 実際のケース

自分と、他ユーザーの公開アイデアを一覧表示する、というthemeページに問題が存在していました。

該当箇所を簡略化して抜き出します。

```
def theme
    @another_user_themes = []
    @public_themes = Value.where(public: true)
    @public_themes.each do |public_theme|
        idea = Idea.find_by(id: public_theme.idea_id)
        #他の人のテーマのみを配列に入れる
        if idea.user_id != @current_user.id 
            @another_user_themes << idea
        end
    end
end
  ```

Valuesテーブルから取り出したデータを参照して、Ideasテーブルに複数回アクセスしています。

@public_themesが増えるたびに、Idea.findが繰り返され、クエリは増大するはずです。

これを解消します。

## 解消するメソッドの選定 

N+1問題をrailsで解決するには、preloadかeager_loadを使います。

### 2つの使い分け

preload
- テーブルは結合されない。joinされない
- 2つのテーブルに対してそれぞれSQLを発行する
- 結合されていないので、whereでの絞り込みができない

eager_load
- テーブルを結合する
- whereでの絞り込みが可能
- 結合するので、レコードの多さなどによっては重い処理となる

今回の場合、
- 絞り込みを使いたい
- レコードをつなげることで、簡単に対応するideaが取得できる

と思ったので、eager_loadを採用します。

---

※includesについて

includes状況に応じて、2つを自動で判断するようです。
便利なメソッドですが、欠点もあります。
どちらを意図しているのか分からない、制御が難しい、という欠点です。
非推奨とされていることが多かったので、使いません。

---

## コードの修正案
```
 @public_themes = Value.eager_load(:idea).where(public: true)
 @another_user_themes = @public_themes.map(&:idea).select { |idea| idea.user_id != @current_user.id }
```

テーブルを結合させ、.map(&:idea)ができるようにした後で、selectメソッドを使い条件を絞り込みました。

ネストが深くならないように、メソッドチェインを使って、条件を絞っていくことを意識しました。

ターミナルでビフォーアフターを確認したところ、以前は、themeアクションにおいて、 Value Load (0.1ms) が行われたあと、該当する条件の数だけIdea Load (0.1ms)が行われていました。

しかし、修正したところ、SQL (0.1ms) のみで処理が完了しており、N+1問題が解消できていることが分かりました。

# まとめ

N+1問題の発見から、解決するためのメソッド選定までを行い、クエリを改良してみました。

個人的なアプリだと意識から逸れてしまうクエリの問題ですが、実務で意識することは確実に必要になってくるようなので、これから気をつけたいと思います。


記事内で、認識が間違っている部分、こうした方が良いよ、などありましたら、コメントいただけると助かります！☺
さくらvpsでssh公開鍵認証を導入する

# 初めに
僕はssh公開鍵認証が嫌いなのでその手順を解説します。

# サーバーOS
CentoOS Stream X_86_64

# 解説いきます

## ローカルの設定
まずローカルのホームディレクトリから始めます。
[~@パソコン名]みたいなターミナルを開くと出てくるやつから設定していきます。

```
cd .ssh
```
で.sshに移動します。
```
mkdir sakura_vps
```
で鍵を作る用のディレクトリを作ります。

```
cd sakura_vps
```
sakura_vpsに移動して
```
ssh-keygen -t ed25519 
```
で公開鍵と秘密鍵を作成
-fでファイル名をつけれます。


配置場所を聞かれたら
```
sakura_vps
```
を入力します。
パスフレーズを入力した方はしっかりメモをしておいてください。


次に configファイルを修正します。
.sshディレクトリに移動してもらって
```
vi config
```
configファイルの中身は
 ```
Host sample [sshログイン時に使用するので指定してください。]
  HostName 111.111.111.11 [ipアドレスを入力]
  User sample [sshログイン後に使うユーザーネームを入力]
  IdentityFile ~/.ssh/~ [秘密鍵の場所を入力]
      Port            設定したポート番号
```
こんな感じで修正してください

ローカル環境で
```
cat 公開鍵名
```
で公開鍵を表示しておいてください。

一般ユーザーでssh接続します。

## 一般ユーザーのssh接続後の設定
.sshディレクトリに移動してください。
なかったら
```
mkdir .ssh
```
で
```
cd .ssh
```
を叩いてください。

公開鍵をコピーしておきます。
```
vi authorized_keys
```
authorized_keysに公開鍵をペーストします。

フォルダやファイルに権限をつけます。

```
chmod 600 authorized_keys
```
一個上がって
```
chmod 700 .ssh
```


600・・・rootで読み書きができる
700・・・rootで読み書き実行ができる

## rootユーザーの設定
### 公開鍵認証を有効にする
rootユーザーでログインしてもらって
```
cd /etc/ssh
```
に移動
```
vi sshd_config
```
を修正

45行目ぐらいに
```
#PubkeyAuthentication yes
```
があると思うので

```
PubkeyAuthentication yes
```
修正してください。

## パスワード認証を無効化する

66行目ぐらいに
```
#PasswordAuthentication yes
```
があると思うので、
```
PasswordAuthentication no
```
に変更してください。

## 修正を反映する

```
systemctl restart sshd
```

パスワードが求められたら打ってください。

## テストする
ローカルからsshログインしてみる
```
ssh ~
```
~はconfigファイルに書いたHostのやつを入力です。
ログインできたらオッケーです。
お疲れ様でした。

## 補足:
ssh ~でもログインできますが、
```
ssh ユーザー名@ipアドレス -i 秘密鍵の場所　-p 3304
```
でもログインできます。長いと思うのでssh ホスト名でいいと思います。

# 最後に
sshの公開鍵の認証はパスワードでの認証ができなくなるのでセキュリティ的に安全です。
大変ですが、ぜひやってみてください。

# 参考文献

https://www.gadgets-today.net/?p=8224

https://qiita.com/d0ne1s/items/6d205744588e0f2c5d62

二つの記事を参考にしました。
わかりやすかったです。ありがとうございました!
LaTeXで自動改行するunderline

## マクロの内容
LaTeXでは``\underline``で下線を引くことができますが、これは文章が自動で改行（折り返し）されず使いづらいものです。これを改善するために自動改行（折返し）をするマクロを組みました。
マクロは以下のとおりです。プリアンブルに記述してください。

```latex
\makeatletter
\newlength{\chwidth}%
\newcommand{\ulinej}[1]{%
\@tfor\ch:=#1\do%
{\ch%
  \settowidth{\chwidth}{\ch}%
  \hspace{-\chwidth}%
  \underline{\vphantom{あ}\phantom{\ch}}%
}%
}%
\makeatother
\newcommand{\coloruline}[2][black]{\textcolor{#1}{\ulinej{#2}}}
```

## マクロの解説
まず文字列を1文字ずつに分解するために``\newcommand{\ulinej}``を定義しています。
1文字ずつに分解したあとは、「1文字表示⇒文字幅取得⇒文字幅だけ前に戻る⇒文字幅分の下線を引く」の順で実行しています。
最後に``\newcommand{\coloruline}``で下線を含む文字色を変更できるようにしています。文字色の引数は任意なので記述しなくでも問題はないです。
以下、使い方の例です。

```latex
\coloruline{あいうえおかきくけこ}%デフォルトは黒色
\coloruline[red]{さしすせそたちつてと}%[red]で文字色を赤に指定
```

## おわりに
マクロはあまり組んだことがないので、何か問題がありましたらコメントで教えていただけると幸いです。

## 更新履歴
2024-04-13　新規公開
gitにて複数のコミットを圧縮する方法

gitでローカルにて「〇〇日の終わり」「一旦コミット」や「チェックアウトするから一旦コミット」（←stashを使うべき）等で変なタイミング、細かすぎるタイミングでコミットしてしまった場合にプルリク等を出すのに問題がある場合、
**git rebase**で複数のコミットを一つにまとめられる。

例としてLaravelのルーティングファイルで下記のように3世代の変更があったとする。
**web.php**
```
<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
```
↓
```
<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

// 認証系ルーティング
Auth::routes();
```
↓
```
<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

// 認証系ルーティング
Auth::routes();

// ログイン後、本一覧画面へリダイレクト
Route::get('/home', function () {
    return redirect('/MyBook/book');
});
```

現状を確認すると
```
# git log
```
```
commit 938982e0aa548d377559de969248b7460b6fdb61
Date:   Sat Apr 13 16:35:49 2024 +0900

    [コミット3]/homeのルーティング追加

commit f09cb6426b1b23b91191d3f2d2c58ac5ad325ae0
Date:   Sat Apr 13 16:34:26 2024 +0900

    [コミット2]認証ルーティング設定

commit 5a79aaf9a1556f2e168218af5dad90631a576ecc
Date:   Sat Apr 13 16:33:08 2024 +0900

    [コミット1]依存関係設定
```

この状態で例えばコミット2とコミット3を圧縮したい場合

```git rebase -i HEAD~2```
を実行
git rebase -i HEAD~Nの
Nは「HEAD(最新コミット）からいくつ前のコミットからrebaseの対象にしたいか)」

下記のような編集画面になるので
```
pick f09cb64 [コミット2]認証ルーティング設定
pick 938982e [コミット3]/homeのルーティング追加

# Rebase 5a79aaf..938982e onto 5a79aaf
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
```
対象のコミットのうち最古のもの以外をpickから「squash」に変更。ここでの操作はvim
```
pick f09cb64 [コミット2]認証ルーティング設定
squash 938982e [コミット3]/homeのルーティング追加
```
次に統合版のコミットメッセージの入力プロンプトの画面になるので編集
```
# This is a combination of 2 commits.
# The first commit's message is:

[コミット2]認証ルーティング設定

# This is the 2nd commit message:

[コミット3]/homeのルーティング追加

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# HEAD detached at f09cb64
# You are currently editing a commit during a rebase.
#
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#       modified:   web.php
```
↓
```
[ルーティング編集作業]認証と一覧画面のルーティングを設定

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# HEAD detached from f09cb64
# Changes to be committed:
#   (use "git reset HEAD^1 <file>..." to unstage)
#
#       modified:   web.php
#
```
最後に確認すると
```
# git log
```
```
commit 12f2f8cb9bba537a1546bb465e3c543c319f35c9
Date:   Sat Apr 13 16:34:26 2024 +0900

    [ルーティング編集作業]認証と一覧画面のルーティングを設定

commit 5a79aaf9a1556f2e168218af5dad90631a576ecc
Date:   Sat Apr 13 16:33:08 2024 +0900

    [コミット1]依存関係設定
```
↑コミット2とコミット3がひとつのコミットに圧縮されている。
"FlutterをアップグレードしたらAppBarが消えた"の対処法

## FlutterをアップグレードしたらAppBarが消えた?
AppleのPrivacy Manifest対応をするべく、色々ライブラリをアップグレードする中で、Flutterも3.19.0にアップグレードしました。すると、AppBarがなくなり、Floating Action Buttonも紫になってしまいました。あれれ。

元
![20240413本来の色.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661656/bd989fef-4255-fbc3-9669-6a187b206e02.png)



アップグレード後
![20240413アップグレード後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661656/b043ed56-3858-4eac-20ea-496023429649.png)

## 直し方
ThemeDataに `useMaterial3: false` を追加するだけで直りました。

``` diff_dart:main.dart
return MaterialApp(
      title: 'Yamori memo',
      theme: ThemeData(
        primarySwatch: AppColors.mainBackColorMaterial,
        appBarTheme: AppBarTheme(
          //略
          )),
        ),
        textTheme: GoogleFonts.kiwiMaruTextTheme(
          Theme.of(context).textTheme,
        ),
+        useMaterial3: false,
      ),
```


## 原因
3.10からの [Material3対応](https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73#:~:text=Framework-,Material%203,-The%20Material%20library)  によって色が変わってしまったためのようです。

Flutterさんが推奨しているなら、Material Designに寄せたいですが、他に優先したいことがあるので、ひとまずこれでしのぎます。

## 参考
https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73
https://zenn.dev/team_soda/articles/ee134cc5ff7368#colorscheme.fromimageprovider()
https://flutter.salon/flutter/material3color/
https://zenn.dev/enoiu/articles/6b754d37d5a272
windows11 ドメイン参加　エラー

注意: この情報はネットワーク管理者向けのものです。ネットワーク管理者でない場合は、ネットワーク管理者に連絡してこの情報を伝えてください。この情報はファイル C:\WINDOWS\debug\dcdiag.txt に記録されています。

ドメイン "example.local" の Active Directory ドメイン コントローラー (AD DC) を検索するために使用される DNS の Service Location (SRV) リソース レコードを照会したときに、次のエラーが発生しました:

エラー: "DNS 名がありません。"
(エラー コード 0x0000232B RCODE_NAME_ERROR)

クエリは _ldap._tcp.dc._msdcs.example.local の SRV レコードに対するものでした

このエラーの一般的な原因として次のものがあります:

- ドメインの AD DC を検索するために必要な DNS SRV レコードが DNS に登録されていません。これらのレコードは、AD DC がドメインに追加されると、自動的に DNS サーバーに登録されます。レコードは、設定された間隔で AD DC によって更新されます。このコンピューターは、次の IP アドレスを持つ DNS サーバーを使用するように構成されています:

192.168.2.1

- 次のゾーンのうち 1 つまたは複数のゾーンで、子のゾーンへの委任が設定されていません:

example.local
local
. (ルート ゾーン)
【今すぐアウトプット】学びを結果に変えるアウトプット大全を読んでアウトプットしたくなった

# とにかくアウトプットしなければ記憶に残らないし、現実世界に影響しない。

[学びを結果に変えるアウトプット大全](https://amzn.asia/d/3TfpOwN)は知人におすすめされて読んだ本で、自己成長に繋がることがたくさん載っており大変ためになりました。
一番印象に残ったことは見出しに書いている通りです。

アウトプットしないでインプットばかりになっていませんか？
スマホ、TV、ラジオ、本など色々とインプットの媒体はありますが、
先週インプットした内容を覚えていますか？

たいそうなこと書いてますが私はあまり覚えていません（泣）
でもそういうものです。アウトプットしないなら記憶に残りません。

今回は本の内容を紹介しながら自分の感想などを記載したいと思います。

# 本の内容紹介

この本は著者が長年培ってきたアウトプット術を80個とトレーニング方法について記載されています。
エンジニアでなくても趣味でもなんでも役に立つと思います。その中から良かった内容を抜粋します。

### アウトプットについて

* **知識を使うことで脳は記憶に残そうとする**
* 自己成長を加速し、人生を好転させる
* **現実世界はアウトプットでしか変わらない**
* 学びを結果に変える
* 行動が変わらなければ、現実世界は何ひとつ変わらない。自己成長ではなく、自己満足しているだけ
* あなたがどれほど素晴らしい人間でも、アウトプットしない限り周囲のあなたの「魅力」や「真の能力」を知ることは不可能

脳は知識を使うことで、重要なことと判断し記憶に残そうとするとのこと。
確かによく使っている技術に関しては特に何も見なくても説明できます。一方で本を一回読んだだけで使っていない技術はそうはいきません。アウトプットすることで記憶に残す必要があります。
また学んだことをプレゼンしたり、応用して何かを作ったり、そうすることで何かしらに影響を与えることができフィートバックを頂けたりもしますが、インプットしているだけでは何も影響しません。
覚えたいならインプットだけではなくアウトプットしたい。

### 学習・記憶力について

* インプットとアウトプットの黄金比は3:7
* **本を３冊読んで0アウトプットなら1冊読んで1アウトプットした方が良い**
* 本を読んだや映画を見た後の感想などのアウトプットは2~3日のうちに細かい部分が曖昧になるためすぐに書き出しておく
* 人に教えることを前提に勉強するだけでも記憶力がアップして学びの効果が上がる
* 人間の脳では毎日、新しい神経細胞が作られ続けており、この神経の新生に必須の物質がBDNFで有酸素運動によって増える１日１時間程度の有酸素運動を週２回行う。２０分の運動でもドーパミンが分泌されるため集中力、記憶力、モチベーションがアップする
* ６時間睡眠を14日間続けると２日間完全に徹夜した時と同程度の集中力低下をきたしていることが明らかになっている。７時間以上の睡眠が必須

これまで本を読んで勉強することはあってもアウトプットする機会が圧倒的に少なかったです。これからはアウトプットの機会を増やして自己成長したいと思います。
また最近運動と睡眠は気にしているのですが、やってるかどうかで結果がすぐ出ます。頭が重くて集中できない方、運動せず7時間寝てない人はいますぐやってみて！運動は５分でも良いです。

### アウトプットするために

* 始められないから悩んでいるのに！とツッコミがありそうだが、**残念ながら「まず始める」しかない。まずは５分だけ頑張ろう**
* 体調が悪くてジムに行きたくない時も、とりあえず行くだけ行こうとか、まずは５分だけやろうとしてみる
* 講義などを聞いた際は全てを書き写すのではなく気づきを最低3つ書く、そして気づきを行動に変えるためTODOにする
* ３ヶ月で10キロやせる目標を立てても「どうせ無理だろう」と心の中で思ってしまう。**高すぎる目標はドーパミン（モチベーションの源）が出ない**

好きなことに関しては始めてしまえば長い時間やれますね。本当に始めることが大事だと思います。
会議やセミナーの内容など、全部メモしてしまう派なんですが、これからは大事なこと、気づいたことを中心にメモしたいと思います。
目標も良く起こる事象ですね。仕事忙しいのにこんなの無理だよってなってしまうと始めることすらできなくなります。本では細かい目標に分割して期限を設けると良いとありますがその通りだと思います。

# 最後に

本を読んでアウトプットとしたいという気持ちが沸いてきたので書かせて頂きました。
何かためになる情報があれば幸いです。

ちなみに仕事術も多く記載されています。これらにも大事なことが書いてありこの本だけで気づきが多くあります。
* 伝え方
* 質問する
* 依頼する
* 自己紹介
* スライド作成術
* 引用方法
* 危機管理
* 時間管理
拡張子ごとのファイル数とCSVファイルのレコード数をカウントするバッチファイル


拡張子ごとのファイル数と、CSVファイルのレコード数をカウントする。

```bat:CountFileType.bat
@echo off

setlocal enabledelayedexpansion

echo ――― [CSV][PDF]ファイル数＠FS001 ―――

set FOLDER[1]=C:\FS001\共有\東京
set FOLDER[2]=C:\FS001\共有\大阪
set FOLDER[3]=C:\FS001\共有\福岡

set FILE_CNT=0
set PDF_CNT=0
set CSV_CNT=0
set ALL_LINE=0

for /l %%i in (1,1,3) do (
    for /f "usebackq" %%A in (`dir /s /a-d /b !FOLDER[%%i]! ^| find /c /v ""`) do set /a FILE_CNT+=%%A
    for /f "usebackq" %%A in (`dir /s /a-d /b !FOLDER[%%i]!\*.csv ^| find /c /v ""`) do set /a CSV_CNT+=%%A
    for /f "usebackq" %%A in (`dir /s /a-d /b !FOLDER[%%i]!\*.pdf ^| find /c /v ""`) do set /a PDF_CNT+=%%A
)

for /r %FOLDER[1]% %%F in (*.csv) do (
    for /f "usebackq" %%F in (`type "%%F" ^| find /c /v ""`) do if %%F neq 0 set /a ALL_LINE+=%%F-1
)

for /r %FOLDER[2]% %%F in (*.csv) do (
    for /f "usebackq" %%F in (`type "%%F" ^| find /c /v ""`) do if %%F neq 0 set /a ALL_LINE+=%%F-1
)

for /r %FOLDER[3]% %%F in (*.csv) do (
    for /f "usebackq" %%F in (`type "%%F" ^| find /c /v ""`) do if %%F neq 0 set /a ALL_LINE+=%%F-1
)

echo.
echo ＜ファイル総数＞ %FILE_CNT%
echo CSVファイル総数：%CSV_CNT%
echo PDFファイル総数：%PDF_CNT%
echo CSVレコード総数：%ALL_LINE%
echo.

pause

```
---
［参考サイト］
- [コマンドプロンプト | ファイルとフォルダの数を取得する方法](https://1-notes.com/command-prompt-get-number-of-files-and-folders/)
- [コマンドプロンプトの予感](https://commandprompt.noyokan.com/command/count.html#google_vignette)
UnrealEngineをチュートリアル動画で学習する その1

# はじめに
UnrealEngineを学習するにあたって、メモとして記事にまとめます。
本記事では完結せず何回か分けて記事にする予定です。

# 今回やること
UnrealEngineの公式サイトにあるLearningの「`Your First Game In Unreal Engine 5`」を題材に学習しようと思います。
1時間23分ある学習動画なので、そのれなり時間がかかります。

https://dev.epicgames.com/community/learning/tutorials/e2V/your-first-game-in-unreal-engine-5

本記事では学習を始める前のセットアップまで扱います。

# セットアップ
## UnrealEngineをいれる
まずは、UnrealEngineのインストールを行います。
以下のサイトからランチャーのインストーラーをダウンロードして、ランチャーをインストールします。

https://www.unrealengine.com/ja/download

ランチャーのインストールからUnrealEngineのインストールまでの方法は以下の動画で解説があるのでそちらを参考にしてください。

https://www.youtube.com/watch?v=rldy9yY0yDU

私が今回入れたUnrealEngineのバージョンは`5.3.2`となります。

## 教材で使用する素材を入手する
今回の教材で使用する素材を入手します。
以下のUnrealEngineのサンプルプロジェクト「Stack O Bot」を「無料」ボタンを押して入手します。入手後は、そのサイトから「ランチャーで開く」を選択してランチャーでサンプルプロジェクトの項目を開きます。

https://www.unrealengine.com/marketplace/ja/product/stack-o-bot

開かれたランチャーに、「Stack O Bot」の項目が開かれており、「プロジェクトを作成する」ボタンを押して、任意のフォルダに「Stack O Bot」プロジェクトを作成する。
また、ランチャーの「UnrealEngine」->「ライブラリ」->「マイダウンロード」内からもプロジェクトの作成が出来ます。

「Stack O Bot」プロジェクトを作成したら、作成したフォルダ内にある以下のzipを解凍する。
`<「Stack O Bot」プロジェクトパス>\Content\FirstGameInUE5_Source.zip`
解凍した`FirstGameInUE5_Source`フォルダの中身が今回使用する教材の素材になります。FirstGameInUE5_Sourceフォルダは管理しやすいようにStack O Botプロジェクト外に別途素材フォルダを作成して、そこに入れることをお勧めします。

次回

https://qiita.com/Miyakovsky/items/5317355bb101c1b32563
StampS3とキャラクター液晶でHello Worldを表示して遊ぶ。


参考


↓ここをクリック↓



http://100year.cocolog-nifty.com/blog/2010/04/arduinolcd3-0bb.html



x 74HC164を使いピン数を減らしています。
x なぜか知らないが、表示速度を速くするとジャムるので各自で調整してくざさい。
x 秋月のACM1602K-NLW-BBWを使っています。


目的
GPIOのテスト




基板パターン ACM1602K-NLW-BBW


o_con88.jpg

![o_con88.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/23b6814a-a069-8e39-6c7c-9e537c43f2c5.jpeg)


結果

![o_coq031.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/0e378ed2-e338-0ba6-fd8a-be3be2170d54.jpeg)


プログラム


GPIO_LCD_Hello World_M5S3_1


```c++



//GPIO_LCD_Hello World_M5S3_1


//インクルド
#include <Arduino.h>


//*          *****  *****
//*         *       *    *
//*         *       *    *
//*         *       *    *
//*         *       *    *
//********   *****  *****


//定義
#define DW   digitalWrite

#define swdclk   15  // ?pin
#define swdio    13  // ?pin
#define en        5  // ?pin


//液晶の初期化配列
int lcd_int[] = {
  0x30, 0x30, 0x30, 0x38, 0x08, 0x01, 0x06, 0x08 + 0x04
}; //lcd_init


//液晶に一文字を表示する。
void seg1(int v, int rs)
{
  //一文字分のデータをセット
  for (int jj = 0; jj < 8; jj++) {
    if ( (v & 0x80) == 0 ) {
      DW(swdio, 0); //ビットが0
    } else {
      DW(swdio, 1); //ビットが1
    }//endif
    DW(swdclk, 1);
    DW(swdclk, 0);
    v = v << 1;
  }//for

  DW(swdio, rs);  //コマンド/データ
  DW(en, 1); delay(1); //イネーブルオン
  DW(en, 0);      //イネーブルオフ
} //seg1


//文字列の表示 nana_seg
void ns_printf(char *str1) {

  //文字の中身がゼロか
  while (*str1) {

    //一文字出力
    seg1( *str1 ++ , 1  );

  } //while

} //ns_printf


//初期化
void setup() {

  //GPIO初期化
  pinMode(swdclk, OUTPUT);
  pinMode(swdio, OUTPUT);
  pinMode(en, OUTPUT);
  DW(en, 0);

  //液晶の初期化
  for (int ii = 0; ii < 8; ii++) {
    seg1( lcd_int[ii] , 0); delay(2);
  }//for

  //スタートアップ表示
  seg1( 0x80 + 0x00 , 0  ); //1ライン目にカーソルを移動
  ns_printf( "Hello World" ); delay(500);
  //seg1(   0x01  , 0  ); delay(5); //画面クリア

} //setup


//メインループ
void loop() {
} //loop




```
VScode の表示フォントを変えてみた

# はじめに
最近お仕事でPowerShellコードをたくさん書いているのだが、デフォルトフォントが読みにくいのでいいフォントがないか探してみたところ、0xprotoというものを見つけたので試してみた。

# 導入手順

## 1. 「0xProto」をインストールする

1. 「0xProto のフォントフォルダ ( https://github.com/0xType/0xProto/tree/main/fonts ) 」にアクセスし、フォントをダウンロードする。今回は Windows 10 OS に導入するため、「0xProto-Regular.ttf」をクリックする。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/b0da858e-6f69-6a96-3362-eceecd270f8e.png)

2. 「0xProto-Regular.ttf」ページの "ダウンロードアイコン" をクリックし、ttfファイルをダウンロードする。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/2ccbc352-686f-8f00-4f3a-37aeacb66913.png)

3. ダウンロードしたファイル(0xProto-Regular.ttf) の コンテキストメニュー から "インストール" を苦選択する。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/7db03ab7-e334-5164-7aed-54a267c55110.png)

4. フォントのインストールが行われます。
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/54ad6c5f-f90b-4113-5ec1-6078b77dd7d6.png)


## 2. Vscode のフォントを変える

1. Vscode の メニュー 「ファイル > ユーザー設定 > 設定」を選択する。

2. 「ユーザー > フォント」を選択し、"Font Family" に "0xProto"を加えます。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/e47b2762-d7a0-a21f-c6ab-749b132f3ed5.png)


# 確認

デフォルトフォント"Consoles"から"0xProto"に変えることで次のように表示されるようになった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/fd0c4d09-1628-54a7-f767-fb82696610aa.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/969f1355-549e-4006-5edf-9d30963fd5c8.png)

簡単なPowerShell関数でフォントの表示差を比較してみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/53971798-eef8-77e2-4bbb-acbe80c22dd3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/4ff3ceb9-c29c-6d4d-6d76-ba9bbba101e8.png)

等間隔表示だった文字間隔が圧縮され、横に伸びていくコードが見やすく変わった。

おまけに日本語記述がどうなるか試してみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/d5363aa6-b0ae-5140-1f90-5fac5118fba0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/5ab3ee3c-b1be-f419-d427-7fa8c9f242c1.png)

ちゃんと日本語も圧縮される。ただし、入力中は下記のように隠れていくので長文入力時には困るかも。コーディングするときのメイン言語は英語なのでまぁいいかな？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184939/338796e8-9c18-7a1d-4aca-593422af5b84.png)


# 参考

https://qiita.com/usamik26/items/2ab0c4b88bf7c00845dd

https://github.com/0xType/0xProto

https://qiita.com/tanimoto-hikari/items/fea59595f1202d5761a4
Pythonの仮想環境作り

pythonで仮想環境を作ってパッケージをインストールする方法

仮想環境を作成
```
python3 -m venv myenv
```

仮想環境を起動
```
source myenv/bin/activate
```

仮想環境でパッケージをインストール
```
pip install $パッケージ名
```
Flask-RESTX でレスポンス返却する JSON データで日本語を文字化けさせない

# 概要
デフォルトで [Flask-RESTX](https://flask-restx.readthedocs.io/en/latest/index.html) は `json.dumps` を ASCII モードでレスポンスを返却してしまう。このため、JSON データにひらがなや漢字が含まれる場合は、内容が文字化けしてしまうという事象が発生する。

# 解決方法
Flask-RESTX の [RESTX_JSON](https://flask-restx.readthedocs.io/en/latest/configuration.html#RESTX_JSON) 環境変数を使って、`json.dumps` 時の引数を上書きする。

```python
app.config["RESTX_JSON"] = {"ensure_ascii": False}
```

- 実装例
```python: app.py
from flask import Flask
from flask_restx import Api, Resource

app = Flask(__name__)
api = Api(app)

app.config["RESTX_JSON"] = {"ensure_ascii": False}

@api.route("/hello")
class Hello(Resource):
    def get(self):
        return {"message": "こんにちは、世界。"}, 200

if __name__ == '__main__':
    app.run(debug=True)
```

- 出力例
```bash
$ curl http://localhost:5000/hello
{
    "message": "こんにちは、世界。"
}
```
CentOS7でJenkinsを建てる

# はじめに
CentOS7でなにか作りたかった。
業務ではいくらでもつかっているJenkinsを建てたことがなかった。
ちょっと作ってみようと思う。

# 前提
firewalld,selinux無効化済みのCentOS7サーバが作ってある前提。

# Javaのインストール
JenkinsはJavaで動くのでまずJavaをインストールする。

```ruby:Javaのインストール
yum -y install java-11-openjdk
```

# wgetインストール
Jenkinsのリポジトリをダウンロードするためにwgetをインストールする。

```ruby:wgetインストール
yum -y install wget
```

# Jenkinsリポジトリインストール
Jenkinsのリポジトリをインストールする。

```ruby:Jenkinsリポジトリインストール
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
```

# Jenkinsインストール
jenkinsリポジトリの公開鍵が合わなくなっているため`--nogpgcheck`でインストールする。

```ruby:Jenkinsインストール
yum -y install jenkins --nogpgcheck
```

# Jenkins起動
jenkinsを起動する。
スペックが低いと起動に時間がかかるので注意。

```ruby:Jenkins起動
systemctl enable jenkins
systemctl start jenkins
```

# 初期パスワード取得
/var/lib/jenkins/secrets/initialAdminPasswordに初期設定パスワードが生成されている。
画面を出す前に控えておく。

```ruby:初期パスワード取得
cat /var/lib/jenkins/secrets/initialAdminPassword
```

# 画面確認
なんでもいいのでブラウザに「http://[サーバのIPアドレス]:8080/」といれて画面がでればOK
せっかくなので初期設定していろいろ遊んでみよう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1092362/490f6dfa-3d13-d4fe-29c5-c20a624f87f1.png)


# あとがき
前に記事は書いたが改めてrundeckとjenkinsの比較をしたいなと思った。
比較記事はできたら投稿する予定。
例のごとくいつになるかわからないが。
sshのポート番号変更方法

# 初めに
sshのポート番号の変更がしたくなったので、解説をしていきます。

# サーバーOS
CentoOS Stream X_86_64

# やり方

## サーバーのコントロールパネルでやる設定

![スクリーンショット 2024-04-13 15.37.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/180791ca-739f-a7cb-812d-d4a6f661ac1e.png)

まず、コントロールパネルに行ってもらってパケットフィルターを設定を押してください。

![スクリーンショット 2024-04-13 15.37.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/f0ea1652-aea5-993a-23ef-8fb98b8a1703.png)

自分が設定したいポートを設定します。

設定を保存してもらって終了です。

## ターミナルの設定

sshサーバーに接続してrootユーザーになってください。

```
cd /etc/ssh
```
でsshディレクトリに行ってください。
そこでsshの設定ファイルである。sshd_configのバックアップを取ります。
```
cp sshd_config sshd_config.old
```
上書きするかの確認を取られるかもですが、許可してください。

```
vi sshd_config
```
でsshd_configの設定をしていきます。
```
Port ~
```
みたいなところがあると思うので、コントロールパネルで設定した番号を指定してください。

## 設定を反映
```
systemctl restart sshd
```
でsshの設定を反映します。

## テスト
ローカルからsshでサーバに接続できるかを確認します。

```
ssh -p ポート番号 ユーザー名@IPアドレス
```
を叩いて、パスワードを入力すると接続できます。

一応22番で接続できないことを確認しておきます。
```
ssh ユーザー名@IPアドレス
```
を叩いてもらって

```
ssh: connect to host ~~~ port 22: Connection refused
```
と出れば終了です。
お疲れ様でした。

# 追記
22番ポートが使えないことを確認したら
さくらvpsのサーバー詳細からパケットフィルタを設定で
接続ポートから22番を外しておいてください。
# 参考文献
https://webkaru.net/linux/change-ssh-port/

公式からおすすめされたサイトを参考にしたのですが、コントロールパネルの説明がなかったので、少し残念でした。
DCモータのモデル

DCモータのモデルについて解説しました。
永久磁石同期モータの制御を理解するためには、DCモータの制御を理解する必要があります。
DCモータのモデルについてとMATLAB/simlinkのファイルを下記に保存していますので、ご自由にお使いください。
不明点、ご指摘等がありましたらご連絡ください。

https://drive.google.com/drive/folders/1Md8QQ09-hWU6gPSuBc_XLWQz_i58rbw6?usp=sharing
MacでのPython2、Python3の話

macOSでは、標準でPython 2がインストールされていますが、最新のmacOSバージョンではPython 2は廃止され、Python 3が推奨されています。そのため、Python 3を使う場合は通常`python3`コマンドを使用します。`python`コマンドを使用するとPython 2が実行されるため、エラーが発生します。

もし`python`コマンドを使用してPython 3を実行したい場合は、以下のいずれかの方法でPython 3をデフォルトのPythonに設定することができます。

1. **シンボリックリンクの変更**: Python 3の実行ファイルを`python`という名前のシンボリックリンクに設定します。

   ```bash
   sudo ln -sf /usr/bin/python3 /usr/bin/python
   ```

   これにより、`python`コマンドがPython 3を実行するようになります。ただし、システムの動作が変更されるため、注意して使用してください。

2. **zshの設定変更**: zshの設定ファイル（通常は`~/.zshrc`）にエイリアスを設定して、`python`コマンドを`python3`にリダイレクトします。

   ```bash
   echo "alias python='python3'" >> ~/.zshrc
   source ~/.zshrc
   ```

   これにより、`python`コマンドがPython 3を実行するようになりますが、この設定はzshを使用している場合に限定されます。

いずれの方法を選択してもかまいませんが、通常は`python3`コマンドを使用することが推奨されます。特に、システムの設定を変更することで予期しない問題が発生する可能性があるため、注意してください。
【python】2024年北見工業大の整数問題をプログラミングしてみた

# はじめに
北見工業大学の入試問題にプログラミング題材にふさわしい問題があったので、pythonでプログラミングしました。

## 問題
> 2の2024乗を7で割った余りを求めよ。
> 出典 2024年北見工業大学

## プログラミングしたコード
実装したソースコードです。

```python
# 北見工業大2024年の入試問題
# 2の2024乗を7で割った余りを求める

seven_remainder_array = []

def seven_div_remainder(num):
  remainder = num % 7
  return remainder


def main():
  base_number = 2
  power_number = 2024

  for i in range(0,power_number+1):
      num = pow(base_number,i)
      ans = seven_div_remainder(num)
      seven_remainder_array.append(ans)

  print(seven_remainder_array[len(seven_remainder_array)-1])

if __name__ == "__main__":
  main()
```

## 実行結果
実行結果はこんな感じ

![kekka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1055346/6307dade-3644-8164-8562-6d59e9fa901f.jpeg)


# 最後に
何かしら機会があったら実装します。
システム全体にPythonパッケージのDjangoをインストールする方法

システム全体にDjangoをインストールする場合は、システムのPythonパッケージとしてインストールします。以下の手順で行います。

1. **Homebrewを使用してDjangoをインストールする**:
   Homebrewを使用してDjangoをインストールするには、ターミナルで次のコマンドを実行します。

   ```bash
   brew install django
   ```

   これにより、システム全体にDjangoがインストールされます。

2. **バージョンの確認**:
   インストールが完了したら、Djangoが正しくインストールされているか確認します。ターミナルで以下のコマンドを実行します。

   ```bash
   django-admin --version
   ```

   インストールされたDjangoのバージョンが表示されれば、正常にインストールされています。

3. **プロジェクトの作成**:
   Djangoプロジェクトを作成するには、任意のディレクトリで次のコマンドを実行します。

   ```bash
   django-admin startproject myproject
   ```

   これにより、myprojectという名前の新しいDjangoプロジェクトが作成されます。

システム全体にDjangoをインストールする場合は、他のプロジェクトでも同じバージョンのDjangoを使用できるため便利です。ただし、プロジェクトごとにDjangoのバージョンを切り替えたり、バージョンを管理したりする必要がある場合は、仮想環境を使用することをお勧めします。
Rustの'#[derive(Debug)]'ってなんですのん

# #[derive(Debug)] とは

enum,トレイトの説明とかで当たり前のように出てくるこれは何なのか改めて調べてみた


# 使い方

例えば、`Person`の構造体を作って、開発中にそれの中身を確認したいなって時に使います

逆に`#[derive(Debug)]`が無いとコンパイラエラーで中身は確認できません。
```rust
#[derive(Debug)]
struct Person {
    name: String,
    age: u8,
}

fn main() {
    let person = Person {
        name: String::from("Alice"),
        age: 30,
    };
    println!("{:?}", person); // ここで中身を確認したい

    println!("-----------------------");
    println!("{}", person.name);
    println!("{}", person.age);
}

```

```bash
Person { name: "Alice", age: 30 }
--------------------
Alice
30
```

## ２種類の表示方法

```rust
#[derive(Debug)]
struct Person {
    name: String,
    age: u8,
}

fn main() {
    let person = Person {
        name: String::from("Alice"),
        age: 30,
    };

    println!("{:?}", person); // Debug formatting
    println!("------------------------------------");
    println!("{:#?}", person); // Pretty print
}

```
`{:?}`でフォーマットなしで出力します。
`{:#?}`でフォーマットありで出力します。


```bash
Person { name: "Alice", age: 30 }
------------------------------------
Person {
    name: "Alice",
    age: 30,
}
```

### 参考
https://doc.rust-jp.rs/rust-by-example-ja/hello/print/print_debug.html

https://www.udemy.com/course/ultimate-rust-2/
Storybook で next-intl の言語切り替えや useTlanslations を動かすためのメモ

Storybook を用いて開発を行うときに詰まったので忘備録。

前提として

- nextjs / app router
- next-intl
- storybook

という構成。

要点は

- `NextIntlClientProvider` を使うこと
- `useMessage` を使わずに自前で message を組み立てること
- 自前で locale の設定を行える口を作る

の2点である。
`useMessage` が 動かないので、本体の開発と同じノリでやると失敗するので注意。
なので decorator で `NextIntlClientProvider` を使う.

また、locale の値を通すために globalType を経由して設定する。
こうすることでおそらく開発可能。

RSC でも挙動を確認できたので多分大丈夫。

```
import type { Preview } from '@storybook/react';
import React, { useEffect } from 'react';
import { NextIntlClientProvider } from 'next-intl';
import ja from '../src/locales/ja.json';
import en from '../src/locales/en.json';

const withIntl = (Story, context) => {
  const locale = context.globals.locale;

  return (
    <NextIntlClientProvider locale={locale} messages={locale === 'ja' ? ja : en}>
      <Story />
    </NextIntlClientProvider>
  );
};

export const globalTypes = {
  locale: {
    name: 'Locale',
    description: 'Internationalization locale',
    defaultValue: 'ja',
    toolbar: {
      icon: 'globe',
      items: [
        { value: 'ja', title: '日本語' },
        { value: 'en', title: 'English' },
      ],
      showName: true,
    },
  },
};

const preview: Preview = {
  parameters: {
    nextjs: {
      appDirectory: true,
    },
  },
  decorators: [withIntl],
};

export default preview;
```
KotlinFest2024で気になる登壇まとめ

# はじめに
今年のKotlinFestは5年ぶりのオフライン開催となるようでとても楽しみですね！

https://www.kotlinfest.dev/kotlin-fest-2024

私も弊社エンジニアと参戦予定ですが、今回の開催に際しスピーカーの募集もかなり盛り上がっているようです！
まだスピーカー募集中なので、どの応募が当日採用されるのかは決まっていないご状況ですが、個人的に気になる登壇をピックアップしてみたいと思います。

# 1. Kotlinでも真面目にWebフロントエンド開発がしたい！kotlin-reactのはじめかた by マヤミトさん

https://fortee.jp/kotlin-fest-2024/proposal/707f983d-330c-4a0e-abd2-89ae3ce07692

個人的にkotlinを使用したWebの開発にはとても興味があり、一時期トライしようとしていたこともあるので非常に興味があります。
TypeScript + Reactの組み合わせと比較もさることながら、何かと障害になってくるライブラリ部分の解説もあるようなので登壇が決まった際にはとても楽しみな内容です。

# 2. Androidアプリから始めるMultiplatformアプリ開発 by 久保出 雅俊さん

https://fortee.jp/kotlin-fest-2024/proposal/6b4c1530-aecf-4a3b-9fcf-88d8433e2537

Androidエンジニアなのでやはりこの登壇は気になってしまいますね。
去年の段階ではMultiplatformはまだ発展途上感が否めなかったですが、現状を知るという意味でも気になってしまいます。
JetpackでもMultiplatform対応が進んでいるとのことなので、去年の状況と比較しながら視聴するのも面白そうですね。

# 3. 2024年版 Kotlin サーバーサイドプログラミング実践開発 by 竹端 尚人さん

https://fortee.jp/kotlin-fest-2024/proposal/9c5d8033-173a-4785-a072-abe61af9a531

【Kotlin サーバーサイドプログラミング実践開発】を出版されている竹端さんの登壇です。
私も上記書籍読みましたが、とても実践的で実装時には何度も助けられました。
今回の登壇は上記書籍のアップデート版として現在の状況にあったアーキテクチャやツールのご説明もあるとのことで、登壇が決まれば視聴必須です！

# 4. Kotlinで保守性が高く変更容易なテストを書こう by Kyosuke Awataさん

https://fortee.jp/kotlin-fest-2024/proposal/fe576a26-c86b-44f7-af92-8e791aad02ea

何かと後回しになりがちなテストコードですが、まさにテスト実装時には記述の内容を悩みがちですよね。
テストコードを負債にしない、まさに仰る通りでテストコードが負債になってしまったら何のためのテストかわからなくなるので、ここで一度テストコードへの理解を深めておくのは良いと思います。

# 5. 組織戦略とKotlin by RyoNagnaumaさん

https://fortee.jp/kotlin-fest-2024/proposal/045af2d9-6067-40a7-9889-c709673e55e7

こちらの登壇はいち経営者として非常に気になります。
適用する技術も結局人材採用時や育成のタイミングで負債となってしまったらビジネスモデル全体に影響を及ぼしかねません。
社外の方々がどういった観点で技術選定を行い、組織に転用しているのか学びの多い登壇となりそうでとても楽しみです。

# 6. JetpackComposeでWebアプリを作る by 和田陵佑さん

https://fortee.jp/kotlin-fest-2024/proposal/2650403f-be80-4ab9-bb3c-9b5138c537d8

市場的にもかなりJetpackComposeが浸透しつつある現在では、必須級の登壇と呼べるのではないでしょうか。
個人的にもWeb側もKotlinを採用したいと考えているので、非常に気になる内容ですね。

# さいごに
気になる登壇が多すぎます、、、（笑）
まとめきれなかったので、来週も気になる登壇ピックアップします！

ちなみにセッション応募期間は21日までのようなので、気になる方は是非応募してみてください！
Hugging Face CI/CDにおけるエラー解消: Git LFS設定と画像ファイルの履歴削除

## はじめに

この記事では、Hugging Faceとの連携におけるCI/CDプロセス中に生じる可能性のあるエラーを解消する方法を解説します。具体的には、Gitリポジトリで大きな画像ファイル（PNG、GIF、JPG）を扱う際に発生する問題を解決するため、Git LFS（Large File Storage）の導入と、過去のコミットからのこれらファイルの削除に焦点を当てます。これにより、Hugging Faceでの自動化プロセスがスムーズに進行し、エラーが防げるようになります。

---

こちらの記事もおすすめ

https://hamaruki.com/launch-streamlit-with-huggingface-and-create-linebot/

https://hamaruki.com/a-complete-guide-to-creating-and-publishing-datasets-with-hugging-face/

## Hugging Faceでのエラーとその必要性

Hugging Faceでは、特に大きなファイルを含むリポジトリを扱う場合、ファイルのサイズが大きすぎるとCI/CDプロセス中にエラーが発生することがあります。これを防ぐためには、Git LFSを利用してこれらのファイルを効率的に管理し、リポジトリのパフォーマンスを最適化する必要があります。また、既にリポジトリに存在する大きなファイルを履歴から削除することで、リポジトリのクローンやフェッチの時間を短縮し、Hugging Faceのサーバーへの負担を軽減します。
## 必要なツールのインストール

Git LFSをインストールして初期設定を行います。

```bash
git lfs install
```


## LFSでのファイル追跡設定

必要なファイルタイプをLFSで追跡するように設定します。

```bash
git lfs track "*.png"
git lfs track "*.gif"
git lfs track "*.jpg"
```



`.gitattributes` ファイルの更新をコミットします。

```bash
git add .gitattributes
git commit -m "Configure Git LFS tracking for image files"
```


## リポジトリ履歴からの画像ファイル削除

`git filter-branch`を使用して、過去のコミットから不要な画像ファイルを削除します。

```bash
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch *.png *.gif *.jpg" --prune-empty --tag-name-filter cat -- --all
```


## ガーベージコレクション

不要なデータを物理的に削除し、リポジトリを最適化します。

```bash
git reflog expire --expire=now --all
git gc --prune=now --aggressive
```


## 変更のプッシュ

リモートリポジトリに対して変更を強制プッシュし、全体の反映を行います。

```bash
git push origin --force --all
git push origin --force --tags
```


## まとめ

この手順により、Hugging FaceのCI/CDプロセス中に発生するファイルサイズに関連するエラーを解消できます。Git LFSの導入と、履歴からの大きなファイルの削除は、リポジトリのパフォーマンス向上に大いに寄与し、自動化プロセスの効率を大幅に改善します。このプロセスを適用することで、開発の速度と効率が向上し、技術的な問題による障害を最小限に抑えることができます。
C#でメモリリークの調査方法

## 再現させる
- Prismの問題かどうかは不明
- 再現しているPCのスペックに合わせる（メモリ容量、OS、ビット数）
- 再現する際、メモリ容量、OS、ビット数を合わせる。PCに入っている他アプリケーションが悪さしている可能性がある。
- Windowsアップデートのパッチ当て状況でも変わる
- パッチを抜いたら改善したこともある
- 最新のアップデートが当たっているPCかどうかも注目
- DELLのあるソフトが起動していることが原因でメモリリークしていることもあった
- 再現しないと調査できない
- メモリ使用量で計測する。開発PCで再現しないのはスペックがいいだけの可能性あり 
- タスクマネージャー見ながら、メモリ容量が減らず、積もっていくことがあればメモリリーク。
- 32bitマシン(32ビットCPUを採用したコンピュータ)とかであれば、アプリケーションに与えられるメモリ容量が4GBとかしかない
- ネイティブDLLの使用があれば疑う
- Microsoft推奨メモリ使用量診断ツールを使用する

## 再現したら
- どこでリークしているかを突き止める
- コードのバイナリーで探索
  - コードを半分消す
  - 再現しなくなったら消した側に問題あり
  - 再現し続けていたらさらに半分消す
- たいてい原因はどこかの１行

## 場所が分かったら
- Dispose漏れ？
- 画面遷移のやり方で改善する？
- イベントが登録されたままで画面を閉じている
- 外部接触部分
- サードパーティー
- 大胆にツールを使わないバージョンで作ってみる
- ミニマムにする
  - Prismを使わないようにしてみる
  - DBと接触しないようにしてみる
  - ファイルとアクセスしないようにしてみる
rootでsshサーバーに直接アクセスできないようにする方法

# 初めに
さくらvpsで一般ユーザーを作ったので、rootユーザーで直接ログインできないように設定していきます。

# os
CentoOS Stream X_86_64

# rootユーザーで直接アクセスできないように設定していく
## 設定
rootユーザーで設定してください。
```
[root@~]# 
```
ターミナルがこれになっていたらOKです。

```
# cd /etc/ssh
# cp sshd_config sshd_config.old
```
/etc/sshに移動してください。
その後sshd_configというファイルのバックアップをとっておきます。

```
vi sshd_config
```
でsshd_configの編集をしていきます。

40行目ぐらいに
```
#PermitRootLogin ~
```
みたいなところがあると思うのでこの行を編集していきます。

```
PermitRootLogin no
```
先頭の#は取っておいてください。

##　反映
編集が終わったら
```
systemctl restart sshd.service
```
で修正内容を反映させます。

##　テスト
```
ssh root@ipアドレス
```
で直接ssh接続ができないかを確認してください。

お疲れ様でした。

# 終わりに
セキュリティ対策はしておくのが大事なので参考になれば幸いです。

# 参考文献

https://knowledge.sakura.ad.jp/8218/?_gl=1*lmu5zy*_gcl_aw*R0NMLjE3MTIzODQyNzMuQ2p3S0NBand3cjZ3QmhCY0Vpd0FmTUVRczZ1M1FSb0lDNElTWFNsNnFiY3JtQ3E3VWxvcjBsYkRhNE1KNUE3ZDNpaG1IMmRCQ0ZORGNCb0M3SThRQXZEX0J3RQ..*_gcl_au*MTE4Njc3MTAwNS4xNzA4NjU2MzEy#VPSSSH

この記事はかなり詳しく書いてあるので参考にしてください！
MacでコマンドラインからPythonをインストールする方法

MacでコマンドラインからPythonをインストールする方法を以下に示します。
公式サイトからダウロードする場合は、<a>https://www.python.org/downloads/</a>を参照してください

1. Homebrewをインストールする:
   Homebrewは、Mac用のパッケージ管理システムであり、Pythonを含むさまざまなソフトウェアを簡単にインストールできます。ターミナルで以下のコマンドを実行してHomebrewをインストールします。

   ```bash
   /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
   ```

2. Pythonのインストール:
   Homebrewを使用してPythonをインストールします。以下のコマンドを実行します。

   ```bash
   brew install python
   ```

   このコマンドにより、最新の安定版のPythonがインストールされます。

3. インストールの確認:
   インストールが完了したら、ターミナルで以下のコマンドを使用してPythonのバージョンを確認します。

   ```bash
   python --version
   ```

   または
   ```bash
   python3 --version
   ```

   また、pipもインストールされているかどうかを確認します。

   ```bash
   pip --version
   ```
   
   または
   ```bash
   pip3 --version
   ```
   

   インストールされていれば、Pythonとpipのバージョンが表示されます。

これで、MacにPythonが正常にインストールされました。必要に応じて、Pythonの仮想環境やパッケージの管理にpipを使用できます。
Pythonのバージョン管理ツールについて

Pythonバージョン管理ツールにはいくつかの種類があります。主なものを以下に示します。

1. **pyenv**:
   - pyenvは、シンプルで柔軟なPythonバージョン管理ツールです。複数のPythonバージョンをインストールし、プロジェクトごとに異なるバージョンを選択できます。
   - グローバルなPythonのバージョンやプロジェクトごとのPythonのバージョンを切り替えることができます。
   - また、仮想環境との連携も可能です。

2. **pyenv-virtualenv**:
   - pyenv-virtualenvは、pyenvと組み合わせて仮想環境を管理するためのプラグインです。
   - プロジェクトごとに独立した仮想環境を作成し、それぞれの仮想環境で異なるPythonバージョンやパッケージを使用できます。

3. **pyenv-win**:
   - pyenv-winは、Windowsでpyenvの機能を提供するためのツールです。pyenvと同様に複数のPythonバージョンを管理し、プロジェクトごとに異なるバージョンを使用できます。

4. **pyenv-installer**:
   - pyenv-installerは、pyenvを簡単にインストールするためのインストーラースクリプトです。pyenvをインストールする際に便利です。

これらのツールは、Pythonのバージョン管理や仮想環境の管理を容易にするためのさまざまな機能を提供します。特に複数のプロジェクトやPythonバージョンを同時に管理する場合に役立ちます。
CHUO_Techにいってきました！

:::note
CHUO Techは、中央区に会社のある企業が集まって立ち上げられた勉強会です
今回のテーマは「技術選定」です
:::

# 背景

https://chuo-tech.connpass.com/event/313257/

4月12日に行われたCHUO_Techに行ってきました！

ここに登壇された方々のLTのスライドを紹介させて頂きます！

# 全体で方針決めてスモールチームで技術選定
https://twitter.com/simodake/status/1778781299609919971

## 技術選定の目的
チームが楽しく快適に技術を使えること
## スモールチーム
- 3~5人
- 1サービス内でもチームが分かれている
- メリット
    - 責任範囲が明確
    - 素早い技術選定が可能
## 技術選定をするには使い続ける覚悟も必要
- 数年は使い続ける
- 発生したトラブルを解決する

## 5年後にどうなっていたいか
- モノリシック目指す
- 必要に応じてマイクロサービス化も検討
- フットワーク軽い技術選定
↓
これが「チームが楽しく快適に技術を使えること」を実現する

# ビジネスを加速する技術選定
https://twitter.com/miyoshihayato/status/1778782043566219478

## フルスクラッチ or SaaS
### フルスクラッチ
メリット
- 自由度が高い
- 自社でデータを所有できる
デメリット
- 将来的に人的コストが高くなる

### SaaS
メリット
- 初期コスト、運用コストが低い
- 迅速に導入できる

デメリット
- カスタマイズの限界
- サービス停止リスク
- 機能過剰

## 何に重きを置くか
### フルスクラッチ
中長期的にコア技術になる

### SaaS
一元管理によるCSコスト減

# プロダクトライフサイクルに合わせた 「技術選定」の実践
https://twitter.com/onsd_/status/1778730172470219252
## 「技術選定」の意義
単なる「技術的な方針決定」ではなく、お客様への価値提供に直結する

## 実は技術選定のチャンスはたくさんある
- プロダクト立ち上げ
- 使用中の技術のリプレイス
- 課題への対応

# 0→1開発における技術選定において一番大切なこと
https://twitter.com/bicstone_me/status/1778741643438625243

## 意思決定を言語化して属人化を防ぎ、次ある意思決定に生かす
### 横串で議論する
- フロントエンド、サーバーサイド会の実施
- 他チームにも知見が共有される
- テックブログに技術選定記事を公開し、リアクションをみたりフィードバックをもらう
↓
広い視野で議論ができる

### 技術選定に関する意思決定を言語化して記録（[ADR](https://adr.github.io/)）する
技術選定の意思決定を言語化、仕組み化し型を作る
↓
背景を誰でも理解でき、属人化を回避できる

### いつでも捨てられるようにする
環境や人に依存した選定をしない
定期的に振り返り、時には捨てることも必要

### [アノテーションコメント](https://qiita.com/taka-kawa/items/673716d77795c937d422)をする
当時の実装した際の温度感をコメントに残す
例）時間優先した等の意思決定（WHY NOT）
↓
内容によっては過去の実装を変える為の背中を押してくれる

### タスク、PR、コミットはWHATではなくWHYで
背景や文脈が[形式知化](https://www.hrpro.co.jp/series_detail.php?t_no=2927)される
↓
将来の意思決定に活かせる

# 0→1と1→10の狭間で Javaという技術選定を振り返る
https://twitter.com/jagaimogmog/status/1778741079808029176

## Javaを選定した理由
### 0→1の開発スピード、コードに注力できることを重視した
- 社内エンジニアの技術スタック
- その言語のエコシステムが成熟していた

### Java or Ruby
Javaにした
- 長く使われるプロダクトにする為、静的型付が魅力
- その業界でJavaが使われていた
- バージョン間の後法互換性が高い

### Java選定後の苦労
- 参考リソースの不足
- ヌルポ（登壇されてた方がヌルポを連呼されてました😂）

## 技術選定をし直す
多様なスキルセットを持つ人が増えた
- 1年後に自分達がやりたいことができるか
    - 例）ドメインの表現力
- 実現可能性

# ドクターメイトがRustを全面採用するに至った経緯
スライドが見つかりませんでしたので内容が簡単になります。すみません。。

## 技術選定の基準
ワクワクする開発

## Rustを全面採用した経緯
TSよりエラーの型が厳密、堅牢

## Rustに慣れる
- 毎日15分AtCoderのA,B
- コードリーディング

# エンジニア採用と生産性からみた技術選定
スライドが見つかりませんでしたので内容が簡単になります。すみません。。

事業、人事の観点から技術選定をされていました

# 最後に
- 勉強になることばかりでした、業務に生かします
- できる所から技術選定に引き続き携わっていきたいです！
- 次回もあるそうです！

ハコベルさんのボールペン掴み取りだったんですが、掴みすぎてびっくりされました

https://twitter.com/taiyama1212/status/1778780297854844985

本記事を読んで頂き、ありがとうございました。
いいねいただけると記事執筆の励みになりますので、参考になったと思われた方は是非よろしくお願い致します🙏
PDFを作成する一番簡単なマクロの例

### 0.VBAエディタを開く。
通常はAlt + F11を押す。

### 1.標準モジュールを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359600/d3f291f0-2352-cf7f-5e5c-680b8138653c.png)

### 2.標準モジュールとクラスモジュール

標準モジュールはグローバルな手続きや変数を定義するために使用され、クラスモジュールはオブジェクト指向プログラミングの原則に従ってデータと操作をカプセル化するために使用される。

### 3.PDFを作成するコードを作成

```vba:
Sub CreatePDF()
    Dim ws As Worksheet
    Dim rng As Range
    Dim fileSaveName As Variant
    
    ' 保存するシートを指定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 保存する範囲を指定
    Set rng = ws.Range("A1:D10")
    
    ' ファイル名を指定して保存ダイアログを表示
    fileSaveName = Application.GetSaveAsFilename(fileFilter:="PDF Files (*.pdf), *.pdf", Title:="Save PDF As")
    
    ' ユーザーがキャンセルボタンを押した場合、処理を終了
    If fileSaveName = False Then Exit Sub
    
    ' PDFに出力
    rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fileSaveName, Quality:=xlQualityStandard
End Sub
```

### 4.「挿入」からボタンコントロールを選択してマクロを登録

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359600/45f42ceb-6105-d5ad-7386-f88499584515.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359600/6695abd5-ab53-a821-c4c0-237254f1c9d8.png)
centos一般ユーザーからrootに切り替えの際のパスワード設定

# 初めに
さくらvpsでosをインストールした後、一般ユーザーからrootに切り替える際のパスワードを設定する方法を解説します。

# OS
CentoOS Stream X_86_64

# 解決方法

## sshでサーバーに接続する

```
ssh ユーザー名@サーバーのIPアドレス
```
これを叩いてください。
接続が初めての方はfingerprintの接続の確認があると思いますが、yesで続けてください。
パスワードを入力してこれでsshで接続が完了しました。

### 参考文献

https://qiita.com/opatu07/items/a6e9cb2bc15412602b9a

sshの接続方法を詳しく知りたい方はここに詳しくsshで接続する方法を書いてます。


# rootに接続する時のパスワードを変更する

ssh接続後に
```
sudo passwd root
```
をしてパスワードを設定してください。
あまりパスワードが簡単だと、
```
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
```
みたいに怒られるので、再度設定しなおしてください。

パスワードの設定が終わって
```
passwd: all authentication tokens updated successfully.
```
この表示が出たら、設定完了です。
お疲れ様でした。

# 終わりに
パスワード設定で困っている人の参考になれば幸いです。


# 参考文献
https://qiita.com/_toki/items/cced337d72103ed4387c

この方の記事を参考にしました。
ありがとうございました！
さくらvpsでOSを再インストールしたらWARNINGが出るときの解決方法

# 初めに
さくらvpsでOSを再インストールしたら下図が出たのでその解決方法を紹介します。

# OS
CentOS　Stream X_86_64

# エラー画面

![スクリーンショット 2024-04-13 14.06.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/14899578-0255-0614-3b31-8c788ff592a8.png)


# 解決方法

```
ssh-keygen -R ~
```
をターミナルなどで叩いてもらえばOKです。

~は各自で変更してください。Host key for ~~　の~~を入れればいけると思います。


# 最後に
僕はこのエラーに何回も遭遇してはwebサイトをググっていました。
エラーに困っている方へ参考になれば幸いです。

# 参考文献

https://qiita.com/hnw/items/0eeee62ce403b8d6a23c

参考にさせていただきました。ありがとうございます。
解説が丁寧なので詳しく知りたい方は参考にしてみてください!