OmniAICreator/Qiita-1.07M huggingface dataset:
【Git】GitHubへのSSHキーの作成から登録方法

## 経緯

新人研修の際に、SSHキーの生成がうまくいかないことが多く、出戻りが発生。
なぜかつまずくことが多かったので簡単に記載した記事にしようと思いました。

## 前提条件

今回GitHubでの登録なのでアカウントを保有している。

https://github.com/

Windows、Mac、Linux各OSのコマンドラインでの作業が可能。

## 実行環境

・Windows11
・GitHub

## 作成が必要な理由

SSHを使用した、gitコマンド実行のために必要。(push pull clonen など)
ユーザー側でキーペアを作成し、その公開鍵をGitLabに登録することで利用可能になります。

本手順ではユーザーのPCのホームディレクトリにキーペアを作成します。

## 手順
①Windows キー＋Rキーを押して「cmd」を入力しエンターでコマンドプロンプトを起動
※各環境に合わせてコマンドプロンプトを起動してください。

②Users/ユーザー名/.ssh　へ移動します
```bash
cd \.ssh
```
※.sshフォルダがない場合は下記コマンドで作成し、再度移動する。
```bash
cd \
mkdir .ssh
```

③ssh-keygenコマンドでキーペアを作成します。
現在のディレクトリが「.ssh」であるか確認する
```bash
cd
C:/tyUsers/ユーザー名/.ssh　←　.sshディレクトリにいることを確認する。
```

アルゴリズムは ”ED25519”、コメントはGitLab上のユーザーのメールアドレスを使用してください “hogehoge@gmail.com" を設定して進めます。

```bash
ssh-keygen -t ed25519 -C "hogehoge@gmail.com"
```

次にキーペアの作成場所とファイル名の確認が表示されます。

今回はデフォルトのままEnterキーを押下して先に進めます、下記画像を参考にしてください。
※ユーザ名は伏せています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/e7cdebcf-5f05-721a-1387-2f324480fbeb.png)


④SSHキーの作成ができたら、SSHキーのコピーを行います。
.sshフォルダに入り、先ほどの「id_ed25519」「id_ed25519.pub」が作られていると思います。
今回使用するのは「id_ed25519.pub」になります。

先ほどと同じディレクトリにて下記コマンドを実行。

```bash
type id_ed25519.pub
```

SSHkeyが展開されますのでコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/f75a5da4-478e-d5a2-c945-15f7958d2b13.png)


⑤GitHubに登録

https://github.com/

自分のアカウントでログインを行う。
「Setting」を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/48f45709-0803-df42-1df0-50414cbb4127.png)

「SSH and GPS keys」を開き、「New SSH key」を押下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/827d1f9f-57db-e207-79a9-688af1b391bd.png)

必要情報を入力して「Add SSH key」を押下する。

| Title | 登録Keyの任意の名前を付ける今回は「test」とする |
| --- | --- |
| Key type | Authentication Key Signing Key |
| Key | id_ed25519.pubでコピーした情報を入力 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2602338/e938e2de-0a8d-76a2-65e1-fe4caa8a28cd.png)

⑥Git疎通確認
作成したSSHkeyが機能しているか、Gitとの接続確認を行います
先ほどのコマンドプロンプトにて下記コマンドを実行

```bash
ssh -T git@github.com
```

成功
```bash
Hi ○○! You've successfully authenticated, but GitHub does not provide shell access.
```

失敗
```bash
> The authenticity of host 'github.com (IP ADDRESS)' can't be established.
> ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
> Are you sure you want to continue connecting (yes/no)?
```
表示されるメッセージのフィンガープリントが、GitHub の公開キー フィンガープリントと一致することを確認します。 その場合は、「yes」と入力します。
```bash
> Hi USERNAME! You've successfully authenticated, but GitHub does not
> provide shell access.
```

## まとめ
普段何気なく使用しているGitなどは初期設定の機会が少ないと忘れてしまします。。
今回備忘録として記事にした際、WindowsのコマンドとLinuxコマンドが混ざってしまい少し時間がかかってしまったので良い機会でした。

## 参考サイト

https://blogs.networld.co.jp/entry/2022/02/16/170051

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/testing-your-ssh-connection
controllerにはあまりロジックを書かないほうがいいらしい

### 今回この記事を書こうと思ったきっかけ
今通っているスクールで過去の生徒のコードレビュー動画を見ていた時に、レビューをしていたエンジニアの人が<font color = "red">コントローラーはテストしずらいのでコントローラーにはあまりロジックを書かずに、Modelに逃がすか、違う層（helperなど）に書いた方がいい</font>とアドバイスしていたのでそこが気になったので今回は理解を深めるために、コントローラの単体実装とコントローラとモデルの組み合わせ実装の2つのコード例を書いてみた。
### コントローラの単体実装
```
class AnimalsController < ApplicationController
  def index
    animals = Animal.where(trading_status:0)

    if params[:pet_type].present?
      animals = animals.where(pet_type: params[:pet_type])
    end

    if params[:vaccinated].present?
      animals = animals.where(vaccinated: params[:vaccinated])
    end

    if params[:spayed_neutered].present?
      animals = animals.where(spayed_neutered:params[:spayed_neutered])
    end

    if params[:sex].present?
      animals = animals.where(sex: params[:sex])
    end

    if params[:age].present?
      animals = animals.where(age: params[:age])
    end

    if params[:prefecture].present?
      animals = animals.where(prefecture: params[:prefecture])
    end

    @animals = animals.shuffle
  end

end
```
上記の例は、単体のコントローラの実装です。trading_statusが0の全ての動物の情報を取得して
そこからさらにプルダウンで選択できるようにしております

### コントローラとモデルの組み合わせ実装
controllerは以下の通り

```
class AnimalsController < ApplicationController
  def index
    animals = Animal.animals

    if params[:pet_type].present?
      animals = animals.pet_type(params[:pet_type])
    end

    if params[:vaccinated].present?
      animals = animals.vaccinated(params[:vaccinated])
    end

    if params[:spayed_neutered].present?
      animals = animals.spayed_neutered(params[:spayed_neutered])
    end

    if params[:sex].present?
      animals = animals.sex(params[:sex])
    end

    if params[:age].present?
      animals = animals.age(params[:age])
    end

    if params[:prefecture].present?
      animals = animals.prefecture(params[:prefecture])
    end

    @animals = animals.shuffle
  end
end
```
modelは以下の通り
```
class Animal < ApplicationRecord
  scope :animals, -> {
    where(trading_status: 0)
  }

  scope :pet_type, -> (pet_type){
    where(pet_type: pet_type) 
  }

  scope :vaccinated, -> (vaccinated) {
    where(vaccinated: vaccinated) 
  } 

  scope :spayed_neutered, -> (spayed_neutered) {  
    where(spayed_neutered: spayed_neutered)
  }

  scope :sex, -> (sex) {
    where(sex: sex)
  }

  scope :age, -> (age) {
    where(age: age)
  }

  scope :prefecture, -> (prefecture) {
    where(prefecture: prefecture)
  }
end
```
上記の例では、コントローラとモデルの組み合わせ実装を示しています。Animalモデルでスコープを定義することで絞り込みの処理をモデルに移すことができます

このように、コントローラとモデルを組み合わせることで、コードの再利用性と保守性が向上します。モデルにビジネスロジックやデータのバリデーション、スコープの定義をすることで、コントローラはよりシンプルでリクエストの処理に集中できます。
GitからクローンしたLaravelをDockerのみでパッケージをインストールする


## はじめに

こんにちは。
最近，`sail`を用いた開発をすることが多くなりましたね。（自分だけじゃないはず）
自分はパソコン3台（Windows11\*2，MacM1\*1）を使っており，色々なリポジトリをクローンしまくってます。
リポジトリをクローンしたら初めにパッケージが必要になりますが，パッケージをインストールしていないため，`sail`が使えません。
そのパッケージをインストールするためにローカルに`composer`等を入れるのはイヤです。
そこで`composer`等をインストールしなくてもできる方法をまとめておきます。

## `composer install`の実行

とても簡単でした。

```bash:composer install
docker run --rm \
    -u "$(id -u):$(id -g)" \
    -v "$(pwd):/var/www/html" \
    -w /var/www/html \
    laravelsail/php82-composer:latest \
    composer install
```

| オプション | 意味                                 |
| ---------- | ------------------------------------ |
| `-u`       | コマンドが実行されるユーザーの設定   |
| `--rm`     | コマンドの実行完了時，コンテナの破棄 |
| `-v`       | ボリュームの設定                     |
| `-w`       | コンテナ内の作業ディレクトリを指定   |

## 参考

https://laravel.com/docs/10.x/sail

https://qiita.com/TaaaZyyy/items/4ecf21f23e6730faf696

https://minegishirei.hatenablog.com/entry/2023/05/09/095603
Laravel初学者へのすすめ#2


## はじめに

Laravelに関してまだまだな自分ですが，弟がLaravelを勉強してみたいとのことなので学習内容をまとる第2弾です。
これまでに個人開発で必要だと感じたことを中心にまとめて行きます。
Laravelに限らず。VSCodeやDockerのこともあるのでLaravel以外を学ぶ方にも役立ちます。
第2弾はLaravelの開発環境の構築やGitHubの使い方等です。

## 前提

- パソコンがある（Windowsを前提にまとめます。Macは適宜読み替え等してください。）
- Web制作ではなく，Web開発ができることが目標
- 学ぶ意欲がある
- ある程度のHTMLやCSS，JavaScriptを知っている
- 第1弾を読み終え，ある程度習得している

第1弾の記事は以下から。

https://qiita.com/ikepu-tp/items/f950cadf0dac7331b4b5

## 1. Laravelのプロジェクト作成

今回はDockerでLaravelを開発します。
そのため，phpやcomposerのインストールは不要です。
Laravelのプロジェクト作成に関しては次のサイトを参考にしてください。

## 2. GitHubにリポジトリ作成

上で作成したLaravelのプロジェクトについて，GitHubにリポジトリを作成し，プッシュしましょう。
GitHubのリポジトリ作成及びプッシュについては前回の第1弾の記事をご確認ください。

:::note info
Laravelが使える人が身近にいる場合，その方に添削等をお願いしてみましょう。
GitHubのリポジトリにはユーザーを招待する機能があります。添削してくれる人を招待しましょう。
:::

## 3. ブランチの分岐

GitHubにリポジトリを作成できたら新しくブランチを切りましょう。
`develop`や`practice`等お好みで。
その新しく作ったブランチで編集をしていきます。

## 4. Laravelを編集

### Dockerの起動

Laravelを使うにはDockerを起動する必要があります。
Laravelは`sail`というものが用意してあり，簡単にDockerの起動ができます。
コマンドを立ち上げ，Laravelのプロジェクトを作成したディレクトリに移動しましょう。

> VSCodeであれば，`Shift+Ctrl+P`で起動します。

```bash:Dockerの起動
./vendor/bin/sail up -d
```

### jsライブラリのインストール

Laravelのプロジェクトを作成した段階ではLaravelを動かすことはできますが，スタイルの適用やJavaScriptは動きません。
スタイルシートやJavaScriptはコンパイルが必要なためです。
それらを効率良くしてくれるものとして，Laravelでは`Vite`を使っています。
まずはJavaScriptライブラリをインストールしましょう。

```bash:ライブラリのインストール
sail yarn install
```

### 開発サーバの起動

JavaScriptライブラリのインストールが終わったら開発サーバを立ち上げましょう。

```bash:開発サーバ
sail yarn dev
```

以上でひとまず，Laravelの編集ができる様になりました。
[http://localhost](http://localhost)をブラウザゲーム開くと，ウェルカムページが表示されます。

http://localhost

## 5. Laravelの編集演習

それでは実際にLaravelを編集してみましょう。
Laravelについて解説されたサイトはたくさんあるのでここからは自身で検索し，次の課題を実装してください。
課題の添削が必要であれば，GitHubのリポジトリに招待していただければ時間がある時にみますよ。

> 演習課題はHTMLやCSS，JavaScriptができる前提です。
> これらについてわからないことがあれば自身で調べてください。
> *`blade`と`html`は若干違います。*

### 演習課題

1. `resources/views/welcome.blade.php`を編集し，編集が反映されていることをブラウザで確認しなさい。
2. `routes/web.php`を編集し，[http://localhost/welcome](http://localhost/welcome)で[http://localhost/](http://localhost)と同様のページを表示しなさい。
3. `resources/views/welcome.blade.php`を編集し，`@for`を用いて1から10まで表示しなさい。
4. `resources/views/welcome.blade.php`を編集し，`@if`を用いて午前中なら「午前中」，午後なら「午後」と表示しなさい。
【PowerShell】カフェWi-Fiに接続した時間をしらべてみた

# 1．記事を読んでできるようになること
以下のような課題を解決できる。

* あなたは某カフェでWEBテストを受験予定。カフェのWi-Fiからインターネット接続を行っているが、このWi-Fiは1時間おきに接続が切れてしまう。そして、接続した時間を忘れてしまったのでタイムアウトが怖い状況である。

* イベントビュアー（GUI）から特定もできるが、起動等に時間がかかるのでPowerShellでサクッと特定したい。

# 2．処理の概要
[Get-WinEvent](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.diagnostics/get-winevent?view=powershell-7.3)コマンドでWi-Fiに接続した当日分のログを抽出し、それをログファイルへ出力する。

# 3．作成したスクリプト
```check_WiFiLogs.ps1
# ログファイル作成先を設定
$path = "C:\Work\Log"
if (!(Test-Path $path)){
    New-Item $path -ItemType Directory | Out-Null
}
# ログファイル名設定
$Log_file = $path + "\Wi-fi.log"

# メイン処理
$Start_day = [datetime]::today
$Wifi_Logs = Get-WinEvent -ProviderName 'Microsoft-Windows-WLAN-Autoconfig' | 
Where-Object { $_.TimeCreated -ge $Start_day } | 
Select-Object TimeCreated,Message

# ログ出力
Write-Output $Wifi_Logs | Out-File $Log_file -Append 

```

# 4．できあがるもの
ざっくりといつWi-Fiに接続したのかが確認できる。

![wifi_log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2015081/51ad7bfc-5558-1d1b-1da1-11c1e14ab439.png)

# 5．参照リンク

https://algorithm.joho.info/computer/event-viewer-wlan-autoconfig/
3Dプリンタの定着にラフトがお勧めでブリムは良くない理由

3DプリンタでABSなどの素材を使うと第1層が剥がれ失敗するケースが多い。その原因は素材の熱収縮にある。
樹脂に限らず、ガラスや金属も熱がかかると膨張し、冷えると収縮する。その比率が違うのでプレートと印刷物のサイズが変わってしまい、はがれてしまう。

テストプリントで説明すると、1本の直線は横方向の収縮が大きいため、横に引く力が発生するが、それは両側から働く力であり、定着していると耐えやすい方向に平行になっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476406/9fc10a2a-cef6-9c64-1594-b608c77d7852.png)

ところがブリムやスカートを印刷すると、いとも簡単にはがれてしまうことがある。それは横方向に収縮する力が、縦向きの棒を引き寄せてしまい、縦棒はいとも簡単にはがれてしまう。縦棒は横方向の力には弱い。だからブリムがはがれるときは角からはがれ始め、短い辺がはがれて浮いてしまう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476406/33810f65-9d56-364d-098b-0e0ea73abfd6.png)

ではなぜラフトは耐えられるのか。それはラフトの第1層が同じ方向に揃っているから。これらは独立してそれぞれが収縮に耐えている。そして第2層が直角あるいは斜めに印刷される。これらは横方向の収縮によってわずかに位置が変わる可能性がある。しかし第2層が多少ずれたところで、定着には関与していないのだから、ここからはがれ始めることはない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3476406/9a36ab3e-f914-5b02-b42c-ce8aeba220cc.png)
この上にさらに板状に印刷するが、それは印刷物と収縮率が変わらないため、変形があっても相対的位置変化が無視されるので、ラフトから印刷物が剥がれることもない。

ということで、はがれやすい材料にはラフトを付けるのが良い。

他にも、ホットプレートの温度を初期だけ高めに設定して途中で下げるのも良くない。せっかくうまく定着したのに、収縮を促進してはがれやすい状態になってしまう。
PythonでMD Dos日時をパースする

# MS Dos日時とは何か

zipファイルのバイナリなどで日時を表すために用いられる。
時刻と日付それぞれで2バイトの16進数で表す。

![MSDosDateTime.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1003037/772863ba-590a-d22a-d9e0-4ce248cc074a.png)

# Pythonコード

MS Dos日付をパースするコードは以下の通り。
引数は2バイトのMS Dos日付をリトルエンディアンで取得して整数に変換したものとする。

```Python
#int_ms_dos_date is 2-Byte or lower integer
def get_date_from_ms_dos_date(int_ms_dos_date):
    #Convert to 16 bit fixed length binary string
    str_bin_ms_dos_date = format(int_ms_dos_date, '0>16b')
    year = int(str_bin_ms_dos_date[0:7],2) + 1980
    month = int(str_bin_ms_dos_date[7:11],2)
    day = int(str_bin_ms_dos_date[11:16],2)
    return(f"{year}/{month}/{day}")
```

MS Dos時刻をパースするコードは以下の通り。
引数は2バイトのMS Dos時刻をリトルエンディアンで取得して整数に変換したものとする。

```Python
#int_ms_dos_time is 2-Byte or lower integer
def get_time_from_ms_dos_time(int_ms_dos_time):
    #Convert to 16 bit fixed length binary string
    str_bin_ms_dos_time = format(int_ms_dos_time, '0>16b')
    hour = int(str_bin_ms_dos_time[0:5],2)
    minute = int(str_bin_ms_dos_time[5:11],2)
    second = int(str_bin_ms_dos_time[11:16],2) * 2
    return("%(num1)02d:%(num2)02d.%(num3)02d" % {"num1":hour,"num2" : minute,"num3":second})
```

# 使い方

```Python
import struct

with open(zip_file_name, 'rb') as zip_file:
    data = zip_file.read(14)
    fields = struct.unpack('<IHHHHH', data[0:14])
    #get a little-endian Dos-Date-Time value as integer
header_signature,version,bit_flag,compression_method,int_last_modification_time,int_last_modification_date = fields

    #get result as a string
    last_modification_date = get_date_from_ms_dos_date(int_last_modification_date)
    last_modification_time = get_time_from_ms_dos_time(int_last_modification_time)
```

# ハマったところ

フォーマット情報を見つけることができたが、内容があまり理解できなかった。
→具体的にサンプルを作って理解した。

# 参考

https://formats.kaitai.io/dos_datetime/index.html
Canvaを使ってロゴを作った話

# 1.はじめに

私は自社開発に携わっており、現在基本設計の工程を進めています。
ロゴが必要になりCanvaで作成した際のエピソードを綴っていきます！

![aCanva.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3495456/0f5ac01a-95fe-fb53-15c4-b079b9c644fb.png)

# 2.ロゴを作るにあたって
ロゴを見てサービス内容が直感的に分かるようにしたいです。
デザインのイメージが浮かばないので社内の方に相談して何とか方針が決まりました。
※ここでは自社で開発しているサービスについて言及しないので抽象的になります。
ちょっとイメージができたのでそれをCanvaで表してみます。

Canvaには素材がありこれらを組み合わせることによって作ろうとしました。
↓こんな感じ
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3495456/005c73df-cc66-bda9-0123-576fe38eda6a.png)
それにしても直感的でわかりやすいツールになってます。
前回Figamについて投稿しましたが、同じようにすぐにそれっぽくつくることができました！


# 3.画像って四角以外では保存できないらしい
そんなこんなでやってるうちに一つ勉強になることがありました。
四角以外での保存ってできないらしいぞ、ということです。

ロゴを作っている最中に一個やらないといけないことがありました。
それは「画像を斜めに切り取りたい」です。

一部の画像を切り取りそれを別の画像に乗せたかったのです。
やってみっかということでWindwosの標準で入っているペイント3Dを使い、斜めに切り取ろうとします。
色々触ってみるとそもそも斜めに切り取ることができません。
調べてみると画像って四角以外では保存できないことを知りました。
理由は↓らしいです。
![chatgpt.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3495456/8895280f-0bd1-9c81-6ed7-139d32e55253.png)

いやー勉強になりました。
結果的には要らない部分を白塗りし、Canva内機能の背景リムーバで疑似的に斜めにすることができました。

# 4.商用利用について
サービスの顔になるわけなので商用利用になります。
調べてみると商用利用可能でした！

https://www.canva.com/ja_jp/learn/commercial-use/

ただ以下の利用方法ではNGになってしまうので気を付けましょう！
>・Canvaの素材（写真・音楽・動画など）を無加工の状態で、販売、再配布、クレジットの取得を行う
>・Canvaで作成したデザインをつかって商標登録をする
>・Canvaの素材をストックフォトサービスなどのサイトで販売する

# 5.Canva大AI時代
ここ最近ですがChatGPTにCanvaのプラグインが出たそうです！
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">朗報。<br><br>ついにCanvaがChatGPTと統合されました。<br><br>これを使えば、あらゆるビジュアルを数秒で作成することができます。<br><br>このスレッドでChatGPT×Canvaで<br>ロゴやバナーを作成する方法を解説します。 <a href="https://t.co/7oWY4CtLR6">pic.twitter.com/7oWY4CtLR6</a></p>&mdash; ナギ| AI活用術×図解 (@nagi__blog) <a href="https://twitter.com/nagi__blog/status/1698440777674961398?ref_src=twsrc%5Etfw">September 3, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ついにAIにロゴをお願いする時代に突入しています。
自分はデザインのセンスが皆無なのでAIが作成してくれるのは大助かりです。
（ChatGPTの月額課金をしないと使えない機能だそうです。。。自分は課金していないので使えませんが使える方は使ってみるとどうでしょうか。）

# 6.予告
次回は9月22日に投稿予定です！
データ前処理プラットフォームStreamCat



# プロジェクトの目的

このプロジェクトでは、データ前処理プログラムの開発・運用プラットフォーム[**StreamCat**](https://github.com/sabanyan/streamcat-web)を開発しています。データ分析の経験はあるけどプログラム開発の経験が乏しいユーザが、簡単に開発・運用できることを目指しています。

データ前処理とは、収集された生データに対して、分析手法を適用するまでに行う処理です。

# StreamCat

[**StreamCat**](https://github.com/sabanyan/streamcat-web)を使えば、以下のような手順でデータ前処理プログラムを開発してこれを運用できます。

#### 1. プロジェクトを立ち上げる

プロジェクトは、複数のメンバで協調して開発作業を進めて行くために必要なプログラム、データ、資料などを入れておく共有フォルダです
![library.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554253/8ca3b717-fa66-bedd-3d60-5c1257fd563e.png)

#### 2. 前処理プログラムを作成する
    
コマンドと呼ぶ単機能の処理を繋げて前処理プログラムを作ります
![flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554253/851316e0-1d74-dbda-f93f-668894d9de74.png)

#### 3. 運用する

スケジュールに基づいて定期的に実行したり、実行状況を監視します
![notimplemented.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554253/30a07f21-765f-f6c2-ba5b-2b04a09cb25f.png)

## 開発環境
- システム形態
    - Webアプリケーション
- 開発言語
    - Python
    - TypeScript
    - Rust(予定)
- 使用フレームワーク
    - FastAPI
    - SQLAlchemy
    - React

## メンバー構成
- プロジェクトリーダ：1人
- 開発者：1人
- オブザーバ：1人

## これまでの活動

- 2018年ごろ：[株式会社KSKアナリティクス](https://www.ksk-anl.com)の自社製品として開発をスタート
- 2021年09月：開発中止
- 2021年10月：会社から成果物を譲り受ける。元開発メンバーの中から有志が集い、オープンソースとして開発を継続することを決意

## これからの予定
 - 開発者の増強
 - 前処理開発機能の刷新
 - 運用機能の構築
注意：Julia で，整数演算のオーバーフローのために正しい結果が得られない

ちょっと長い計算式で，うっかりするととんでもないことになりかねないので注意が必要。

```julia
(a, b, d) = (3000, 4000, 456)
(1/(a*b)*(a*b*(a + b) - d*(a^2 + b^2) - sqrt((-a*b*(a + b) + d*(a^2 + b^2))^2 - 2*a^3*b^3)))
# 5829.850417385261
```

答えとして 5829.850417385261 が表示されるが，これは正しくない。エラーメッセージなどは一切表示されない。

a, b, c を浮動小数点数にすると正しい答え 2500.0 が得られる。

```julia
(a, b, d) = (3000.0, 4000.0, 456.0)
(1/(a*b)*(a*b*(a + b) - d*(a^2 + b^2) - sqrt((-a*b*(a + b) + d*(a^2 + b^2))^2 - 2*a^3*b^3)))
# 2500.0
```

R では特に指定しない限り変数は double なので，何もしなくても正しい答えが得られる。

```R
> a = 3000; b = 4000; d = 456
> (1/(a*b)*(a*b*(a + b) - d*(a^2 + b^2) - sqrt((-a*b*(a + b) + d*(a^2 + b^2))^2 - 2*a^3*b^3)))
[1] 2500
```

Python では整数は必要ならば自動的に長精度演算が行われるので，この場合も特に何もしなくても正しい答えが得られる。

```Python
>>> import math
>>> (a, b, d) = (3000, 4000, 456)
>>> (1/(a*b)*(a*b*(a + b) - d*(a**2 + b**2) - math.sqrt((-a*b*(a + b) + d*(a**2 + b**2))**2 - 2*a**3*b**3)))
2500.0
```
Vimの基本操作② -ファイルの中でカーソルを動かす-

## この記事のゴール
- vimでカーソルを1つずつ移動する。
- vimでカーソルをページ単位で移動する。
- vimでカーソルを単語単位で移動する。
- vimでカーソルを先頭や最終行に移動する。
- vimでカーソルを指定した行に移動する。

## この記事を読むにあっての前提条件
- ターミナルの起動方法は知っている。(本記事ではUbuntuを使って説明しています。)
- vimがインストールされている。
- vimでファイルを作成する方法を知っている。

## 実際に試す際の注意事項
- `<CTRL>`はキーボードのコントロールキーを押すという意味となります。Macの方はCommandキーに読み替えてください。

## 説明に使うサンプルテキスト
次の26行からなるテキストを使って説明します。

```:sample.txt
I like apples.
I like bananas.
I like carrots.
I like durian.
I like eggs.
I like fish.
I like grapes.
I like honey.
I like ice cream.
I like jellybeans.
I like kiwi. 
I like lemons.
I like mangoes.
I like nectarines.
I like oranges.
I like peaches.
I like quail eggs.
I like raspberries.
I like strawberries
I like tomatoes.
I like udon noodles.
I like vegetables.
I like watermelons.
I like x-mas cookies.
I like yogurt.
I like zucchini.
```

## カーソルを移動させる
- ファイルを開くとファイルの一番左上にカーソルがあります。下の図を参考に移動さたい方向のキーを押してカーソルを移動させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589583/9a3636eb-5cc5-0179-500f-2b5b00803a8b.png)

:::note
キーを1回押すごとにカーソルが1つ動きます。キーを押したままにすると、カーソルが連続して移動します。
:::

## カーソルをページ単位で移動させる
:::note warn
ここでは練習用にターミナルで表示できる行数が6行となるようターミナルの高さを短くしています。
:::

`sample.txt`を開きます。すると下図のようにファイルの先頭にカーソルがあたった状態で表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589583/22967006-5c71-882b-7bdc-984e797ba48e.png)

:::note warn
カーソルの位置が違う場合は`gg`(後述)を押してください。
:::

- `<CTRL>`を押しながら`f`を押します。すると、次のページが表示されるのがわかります。
- `<CTRL>`を押しながら`b`を押します。すると、前のページが表示されるのがわかります。

:::note
f → forwards 「次の」という意味の頭文字です。
b → backwards 「前の」という意味の頭文字です。
なお、キーを押したままにすると連続してページが移動します。
:::

## カーソルを単語単位で移動させる
- ファイルの先頭にカーソルを移動させます。この時`w`を押します。次の単語の先頭にカーソルが移動することがわかります。このように`w`を押すと単語単位でカーソルが移動します。
:::note warn
カーソルの位置が違う場合は`gg`(後述)を押してください。以降同様です。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589583/90481de3-c37c-a25b-c4a8-50c5c01fe9d1.png)

- ファイルの先頭にカーソルを移動させます。この時`2w`と入力します。すると2単語目の先頭にカーソルが移動することがわかります。このように`w`の前に数値を入れると`w`の操作を指定した回数分(=今回の場合は2回)実施してくれます。
- 今回の場合は移動する単語数が少ないのでありがたみは少ないですが、移動する単語数が多い場合は数値に指定による移動は便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589583/ae0c4870-aa9e-ae41-dd3b-669543e2e745.png)

- 次に`b`を押します。すると前の単語の先頭にカーソルが移動することがわかります。このように`b`を押すと単語単位でカーソルが移動します。

:::note
w → word 「単語」という意味の頭文字です。
b → back 「戻る」という意味の頭文字です。ここでは「単語単位で戻る」の「b(戻る)」と解釈すると覚えやすいかもしれません。
:::

### `w`と`W`の違い／`b`と`B`の違い
- 今回のサンプルではわかりにくいですが、`w`や`b`を何度も押していくと、ピリオドにカーソルが止まることが確認できます。このように`w`や`b`はピリオドも1つの単語として認識します。(そのように認識する文字はピリオドの他にもあります。)
- もしピリオドを1単語としてカウントしたくない場合は、代わりに`W`や`B`を使います。文字と文字の間のスペースを目安に単語をカウントします。

## 特定の行にカーソルを移動させる
- ファイル操作をしている時、ファイルの先頭行の行頭にカーソルを移動させたい時があります。その時は`gg`と入力します。

- 一方でファイル操作をしている時、ファイルの最終行の行頭にカーソルを移動させたい時があります。その時は`G`と入力します。

:::note
gg → 「go」(移動する)が関連していると思われますが、由来については不明です。このまま覚えましょう。
:::

- `gg`は、`1gg`と書いても同じです。`gg`の前に数値を指定するとその行に移動します。例えば`13gg`とすると13行目に移動します。あらかじめ移動したい行がわかっている場合は便利です。

## 関連記事
[Vimの基本操作① -ファイルを作成する・編集する・保存する-](https://qiita.com/sugachan-qiita/items/b3bea942fc563b4e0cae)
Vimの基本操作① -ファイルを作成する・編集する・保存する-

## この記事のゴール
- vimでファイルを開く。
- vimでファイルを編集する。
- ノーマルモード、インサートモード、コマンドモードを切り替える。
- vimでファイルを保存する。

## この記事を読むにあっての前提条件
- ターミナルの起動方法は知っている。
- vimがインストールされている。

## 実際に試す際の注意事項
- `<ENTER>`はキーボードのエンターキーを押すという意味となります。
- `<ESC>`はキーボードのエスケープキーを押すという意味となります。

## ファイルを開く
例として`sample.txt`という名前でファイルを新規に作成したいとします。次のように入力します。

```
vim sample.txt<ENTER>
```

## ファイルを編集する
- 例としてファイル`abc`と入力したいとします。
`vim sample.txt<ENTER>`でファイルを開いた状態で、実際に`abc`と入力してみます。
すると、`abc`が入力できないことがわかります。vimにはモードという概念がありファイルを開いた直後はノーマルモードと言うモードになっています。そのためそのままでは文字を入力することができません。

- 文字を入力するためにはインサートモードと呼ばれるモードに着かえてあげる必要があります。インサートモードに切り替えるためには`i`を押します。
:::note 
i → insert 「挿入する」という意味の頭文字です。
:::

- インサートモードに切り替わると画面左下に`-- INSERT --`と表示されてるのを確認してください。

- インサートモードに切り替わるのを確認出来たら実際に`abc`と入力してみます。今度は入力できたはずです。

## ファイルを保存する
- ファイルの編集が終わったら次はファイルを保存します。vimでファイルを保存するときはノーマルモードに戻ってからファイルを保存するコマンドを入力します。(現在はインサートモードなので、このモードのままではファイルを保存できません。)
- そのためインサートモードを終了させてノーマルモードに戻してあげる必要があります。
- `<ESC>`を押下するとインサートモードが終了しノーマルモードになります。
````
abc<ESC>
````
- ノーマルモードに戻ったら、次のコマンドを入力します。入力した内容でファイルが保存されます。
````
:wq<ENTER>
````
::: note
: → コマンドモードにするときに入力します。通常画面の左下側に表示されます。
w → write「書き込む」という意味の頭文字です。
q → quit「やめる」という意味の頭文字です。
:::

## (補足)文章編集途中で最初からやり直したくなったら
- 慣れないうちは、文章を編集中に変なキーを押してしまい意図しない内容が入力されてしまい「最初からやり直したい」と思う時があるかもしれません。
- その場合は、下記のコマンドを入力します。

````
:q<ENTER>
````
::: note
:(コロン) → コマンドモードにするときに入力します。通常画面の左下側に表示されます。
q → quit「やめる」という意味の頭文字です。
:::

::: note warn
上記のコマンドはノーマルモードで入力します。`<ESC>`を押すとノーマルモードになります。vimを使うのは初めての場合は今どのモードなかもよくわからないかも知れません。その場合はとりあえず`<ESC>`→`:q<ENTER>`と押すと覚えましょう。なお`<ESC>`は何回押しても問題ありません。途中でわからなくなったら`<ESC>`を(何度か)押して`:q<ENTER>`を押して最初からやり直してください。
:::

## 関連記事
[Vimの基本操作② -ファイルの中でカーソルを動かす-](https://qiita.com/sugachan-qiita/items/7909aa007f59a3b64571)
コンパイル可能なPython?! Mojoに「こんにちは、世界」してみた。

# Mojoとは
Mojo is a new programming language that bridges the gap between research and production by combining the best of Python syntax with systems programming and metaprogramming. With Mojo, you can write portable code that’s faster than C and seamlessly inter-op with the Python ecosystem.

Mojoは、Python構文の長所とシステムプログラミング・メタプログラミングを組み合わせることで、研究と生産のギャップを埋める新しいプログラミング言語です。Mojoを使えば、Cよりも高速で、Pythonエコシステムとシームレスに相互運用できる移植性の高いコードを書くことができます。

だそうです。

# 前提条件
* Dockerデスクトップがインストール済み
* VS Codeがインストール済み
* VS CodeにDev Containers拡張機能がインストール済み

クリーンなLinux環境が必要なだけ。いや別に、クリーンでなくてもいい。

# インストール

VS CodeのRemort Exploreタブから、「Ubuntu」コンテナを新規構築する。

次に、bashを立ち上げて下記のコマンドを実行し、mojoをインストールする。

```
$ curl https://get.modular.com | MODULAR_AUTH=mut_0d36a6cf423045b0a7a96fa2f0b187eb sh -
$ modular install mojo
$ echo 'export MODULAR_HOME="$HOME/.modular"' >> ~/.bashrc
$ echo 'export PATH="$MODULAR_HOME/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
```

# こんにちは、世界
下記のスクリプトを「hello.mojo」として保存する。私は、この過程でVS CodeのMojo拡張機能（とEmacs Friendly Keymap拡張機能）をインストールした。
```Mojo
fn main():
    print("Hello, world!")
```

下記のコマンドを実行して「Hello World」を出力する。
```
$ mojo hello.mojo
Hello, world!
```

下記のコマンドを実行して「hello.mojo」をコンパイルする。（ここがPythonからの進化）
```
$ mojo build hello.mojo
```

下記のコマンドを実行してコンパイル産物を実行する。
```
$ ./hello
Hello, world!
```

# もっと知りたい
[公式サイト](https://docs.modular.com/mojo/)に聞いてください。気が向いたら翻訳するかも。
スプライト画像とは？

## 目次
1. スプライト画像とは？
2. 従来の画像ファイルダウンロードの問題点
3. どうやって解決するのか？
4. スプライト画像の実装
5. 参考文献


## 1. スプライト画像とは？
スプライト画像とは、使用する複数の画像を一つの画像にまとめて必要な部分を使用するテクニックです。

## 2. 従来の画像ファイルダウンロードの問題点
ウェブページに複数の画像が使用される場合、ウェブブラウザはサーバーにリクエストして全ての画像ファイルを一つづつ受け取る必要があり、この時にオーバーヘッドが発生します。これは、サーバーにリクエストして受け取る画像が多いほどウェブページのローディング速度が遅くなることを意味します。

## 3. どうやって解決するのか？
複数の画像を一つの画像にまとめて、画像をダウンロードするためのサーバーリクエストをできるだけ減らす。モバイル環境のように限られたリソースを使用するプラットフォームでは、ウェブページの読み込み速度を向上させる効果があります。また、多くの画像ファイルを管理する必要がなく、いくつかのスプライト画像ファイルだけを管理すればいいので、管理が楽になります。

![Screen Shot 2023-09-11 at 8.57.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3529304/0d00b4b0-cbf4-905a-01f3-02c231550e2e.png)



## 4. スプライト画像の実装

#### 1.background-positionを使用
CSSクラスを作成し、スプライトの背景画像を指定します。
```css
.icons {
  background: url(myfile.png);
  display: inline-block;
  height: 20px;
  width: 20px;
}
```
スプライト画像で使いたい画像領域だけ`background-position`を指定して表示します。
```css
#icon1 {
  background-position: -20px 0px;
}

#icon2 {
  background-position: -40px 0px;
}
```

#### 2. object-positionを使用
`img`タグに画像を読み込みます。
```css
<img  src='sprite.png' alt='Icons'>
```
スプライト画像で使用したい画像領域だけを`object-position`を使って表示します。
```css
img {
  object-fit: none;
  object-position: 0 0;
  width: 100px;
  height: 100px;
}
```

## 5. 参考文献
- [Implementing image sprites in CSS - MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Images/Implementing_image_sprites_in_CSS)
- [Spriting with \<img> - CSS Tricks](https://css-tricks.com/spriting-img/)
- [System icons - Material Design](https://m2.material.io/design/iconography/system-icons.html#design-principles)
Freenomの現在

# はじめに
本記事は無料でドメインが取得できるサービスとして知られているFreenomについて記載しています。

Freenomで管理しているドメインの有効期限が迫っていたため、ドメインの更新をするために、更新作業を行ないました。

ドメインの更新作業は問題なかったのですが、Freenomでは現在新規登録ができないできないように見えたのが気になり調べてみました。

端的に言うと、本記事執筆時点で新規のドメイン登録はできないと思われますが、既にドメインを保持している場合、更新することで利用し続けることはできます。

本記事では、Freenomの現在と、ドメインの更新方法について記載しています。

## Freenomの現在
[freenom](https://www.freenom.com/)にアクセスして、新しい無料ドメインを検索します。

レスポンスがやたら遅く、検索結果の画面を確認しても全て「利用不可」と表示されます。
なお、サインインした状態でドメインを検索すると、以下のメッセージが表示されました。

![スクリーンショット 2023-09-11 12.09.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/24b929a7-14a1-0e6f-5c31-94644fdcb64f.png)

翻訳すると最初の一文は「重要なお知らせ:技術的な問題のため、Freenom アプリケーションの新規登録は一時的に停止されています。」と解釈できます。

検索結果について気になったため、調べたところ[「Metaがサイバースクワッティングの疑いでドメインレジストラ・Freenomを提訴」](https://gigazine.net/news/20230309-freenom-sued-by-meta/)の記事を見つけました。

上記記事を参考にKrebs on Securityのブログを参照すると、ドメイン名登録業者のFreenomはMetaによって、サイバースクワッティング違反と商標侵害を理由に訴訟されたことで、新規ドメイン名の登録が停止されているようです。

この訴訟では、Interisle Consulting Groupが実施したドメインの悪用に関する2021 年の調査(PDF) が指摘されています。調査結果からFreenomが運営するccTLDは、フィッシャーによって最も悪用されたTLDのトップ10のうち5つを占めていることが判明したとのことです。

## ドメインの更新方法
Freenomでドメインを既に持っている場合は、更新することで引き続き利用が可能です。以下にドメインの更新方法について記載します。

[freenom](https://www.freenom.com/)にログイン後、「Renew Domains」を選択します。

![スクリーンショット 2023-09-03 20.30.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/71753960-914e-94f5-58e0-53cfac1f7cf9.png)


現在管理しているドメインの一覧が表示されるため、更新対象のドメインの「Renew This Domain」を押します。

![スクリーンショット 2023-09-03 20.20.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/6d23755d-a8ee-6159-4d18-65961a573672.png)

デフォルトは1ヶ月になっているため、1年間利用する場合は「12 Months @ FREE」を選択します。

![スクリーンショット 2023-09-03 20.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/0dbca7db-9152-1756-a8ad-8885d870542d.png)

期間を確認後、「Order Now」を押します。

![スクリーンショット 2023-09-03 20.21.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/2f75bceb-2993-2135-b926-3ff861ae51fc.png)

以下の様な画面が表示されると、ドメインの更新は完了です。

![スクリーンショット 2023-09-03 20.21.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/8ebaf2ec-d05d-ca08-ecd7-f4d0f31c101d.png)

「My Domains」の画面からExpiry dateの期間を見ると、1年延長されたことが確認できます。

![スクリーンショット 2023-09-03 20.32.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/ff8c5339-ce9d-544d-d899-f02cd08243ef.png)

# おわりに
本格的なビジネス用途での利用については考慮が必要だと思いますが、無料で利用できるため、個人利用など低コストでドメインを取得したい場合などには、利用価値があると思います。

Freenomのトップページは、世界中の写真が表示されています。
本記事に載せているキャプチャは日本の写真です。

ノスタルジーな感じが漂いますが、場所は東京の新宿ですね。
M2 macでxdebugがインストールできなくて困った話

# 結論
sudo 付けたら行けた。
```
> sudo pecl install xdebug
```
# 経緯
`pecl install xdebug`すると、エラーが出るし、手動でビルドするかー。

# 環境情報
```
> sw_vers
ProductName:		macOS
ProductVersion:		13.5.2
BuildVersion:		22G91

> php -v
PHP 8.1.23 (cli) (built: Aug 31 2023 18:43:16) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.23, Copyright (c) Zend Technologies
    with Xdebug v3.2.2, Copyright (c) 2002-2023, by Derick Rethans
    with Zend OPcache v8.1.23, Copyright (c), by Zend Technologies
```

# 手動でビルドするも

手動でビルドしようと思い実行
```
> git clone https://github.com/xdebug/xdebug.git
> cd xdebug
> phpize
> ./configure
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for a sed that does not truncate output... /usr/bin/sed
checking for pkg-config... /opt/homebrew/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking whether the C compiler works... no
configure: error: in `/path_to_dir/xdebug':
configure: error: C compiler cannot create executables
See `config.log' for more details
```

`C compiler cannot create executables`か、config.logを見るか...
```
...
configure:3263: /usr/bin/gcc -V >&5
clang: error: argument to '-V' is missing (expected 1 value)
clang: error: no input files
configure:3274: $? = 1
configure:3263: /usr/bin/gcc -qversion >&5
clang: error: unknown argument '-qversion'; did you mean '--version'?
clang: error: no input files
configure:3274: $? = 1
configure:3263: /usr/bin/gcc -version >&5
clang: error: unknown argument '-version'; did you mean '--version'?
clang: error: no input files

```

これかな？と思いつつ、ググると「'-V'や'-qversion'は昔のコマンドです」という情報がたくさん出てくる。
２日間に色々解決策を試すも、エラーの解消が出来ず。

# 解決編
寝て起きた時、なんとなくsudoしてみた。（本当はよくない）

```
> sudo ./configure
Password:
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for a sed that does not truncate output... /usr/bin/sed
checking for pkg-config... /opt/homebrew/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for cc... cc
checking whether the C compiler works... yes
``` 

行けた！
あとは、makeだけ。

```
> make 
...
(cd .libs && rm -f xdebug.la && ln -s ../xdebug.la xdebug.la)
/bin/sh /Users/path/dev/xdebug/libtool --mode=install cp ./xdebug.la /Users/path/dev/xdebug/modules
cp ./.libs/xdebug.so /Users/path/dev/xdebug/modules/xdebug.so
cp: /Users/path/dev/xdebug/modules/xdebug.so: Permission denied
make: *** [/Users/path/dev/xdebug/modules/xdebug.la] Error 1
```

む、結構行けてるということは、peclにsudoつければいけるかも。

```
> sudo pecl install xdebug
...
Build process completed successfully
Installing '/opt/homebrew/Cellar/php@8.1/8.1.23/pecl/20210902/xdebug.so'
install ok: channel://pecl.php.net/xdebug-3.2.2
Extension xdebug enabled in php.ini
```


## 感想
sudo付けたら解決する問題は稀によくある。
スッキリわかるJava入門 第３版を読んでみて- part18 -まだまだ広がるJavaの世界

# はじめに
こんにちは　◤●ㅅ●◥ﾉ
今回はスッキリわかるJava入門の最終章となります。
この章ではさらに高度なJavaプログラミングの世界と可能性について学びました！

## 第１８章　まだまだ広がるJavaの世界
### 1.ファイルを読み書きする
多くのプログラミング言語はファイルを「少しずつ読んだり書いたり」するための機能を備えている
　→ __ストリーム__ という考え方が必要になる

ストリーム...イメージは情報が流れてくる小川

テキストファイルから文字を読み込む...java.io.FileReader
ファイルに文字を書き込む...FileWriter

java.ioパッケージにあるさまざまなクラスを活用すると、より高度な入出力処理が可能になる

### 2.インターネットにアクセスする
インターネット上のWebページの内容を取得するためにJavaはjava.netパッケージのクラスを使う
↓例
```
import java.io.InputStream;
import java.net.URL;

public class Main{
    public static void main(String[] args) throws Exception{
        URL u = new URL("https://book.impress.co.jp/");
        InputStream is = u.openStream(); //インターネットへ接続
        int i = is.read();
        while(i != -1){ //ページの終わりまで繰り返す
            char c = (char)i;
            System.out.print(c); //読んだ内容を画面に表示
            i = is.read();
        }
    }
}
```
ストリームはファイルやWebページ以外にも繋がっている
そしてこれまでに使っている「System.out」もストリームである
System.out.println()は画面につながっている小川に情報を流す命令

### 3.データベースを操作する
データベース...データを整理したり、格納したりするソフトウェアとデータの集合体
データベースに指示を送るのには __SQL__ を使用する

### 4.ウィンドウアプリケーションを作る
　__ユーザーインターフェース__ ...プログラムの見た目や操作性のこと
　文字ベースのもの... CUI
　デザインがあり、マウスで操作できるもの...GUI

### 5.スマートフォンアプリを作る
スマホで開発する場合それぞれの機種専用のプログラミングで利用するクラスがあり
それらを用いて開発を行う必要がある

### 6.Webサーバで動くJavaプログラム
__Webアプリケーション__ ...利用者がブラウザから入力した情報をサーバ側のプログラムで処理される仕組みを備えたWebサイトのこと
Webアプリケーションの開発には __サーブレット__というクラスが必要
　
## まとめ
今回で「スッキリわかるJava入門 第３版」の内容は終わりとなりました。
約１ヶ月間業務でJavaを使うことになりコードを見てもわからないから始まった勉強でしたが、Javaの３大機能やクラスメソッドなどについて知ることでどのような作りをしているのかということを学ぶことができました！
業務で使われているコードを見ながら今回のJava勉強で学んだことを活かして励んでいきたいと思います！

今回もありがとうございました！
ではまた〜　◤●ㅅ●◥ﾉ"
Falcon-180B 世界で最も大きなオープンLLM！


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225269/4850fb24-aad1-39b0-8cca-2064bae77d1c.png)

https://huggingface.co/spaces/tiiuae/falcon-180b-demo

## はじめに
人工知能の速変わりする世界で、アラブ首長国連邦（UAE）は再び、そのフラッグシップの大規模言語モデル（LLM）の高度な進化であるFalcon 180Bの画期的なリリースで波を起こしています。テクノロジー・イノベーション研究所（TII）によって開発されたFalcon 180Bは、単なる別のAIモデルではなく、生成型AIの景観を再定義するゲームチェンジャーです。では、Falcon 180Bを特別なものにするのは何であり、UAEやFalconに関連性がない場合でも、なぜそれに興奮すべきなのでしょうか？

## Falconとは
Falcon 180Bの世界に飛び込む前に、TIIの生成型AIへの道のりは、Falcon40Bから始まりました。これは、2023年5月にHugging Face LeaderboardのLLMでトップに立ち、オープンソースAIの世界において重要なマイルストーンとなりました。Falcon 40Bは、研究者や商用ユーザーにアクセス可能な最初のモデルの一つとなり、TIIの高度なAIへのアクセスを民主化するというコミットメントがFalcon 180Bの登場を準備しました。

## Falcon 180B
Falcon180B。この驚異的なAIモデルは、1800億のパラメータを搭載し、世界で最も強力なオープンアクセスLLMの一つとなっています。3.5兆トークンの広範なデータセットでトレーニングされたFalcon 180Bは、推論、コーディング、能力、知識テストなどさまざまなタスクで優れた性能を発揮するよう設計されています。それは単なる大きさだけでなく、能力も備えています。

競争を凌駕する
Falcon 180Bは、大きさやパワーを超えています。ベンチマークでは、メタのLLaMA 2などの著名な競合製品を凌駕し、Falcon 180Bの相対的にコンパクトなサイズに比べて、驚異的な成績を収めています。さらに、OpenAIの最新のGPT-4やGoogleのPaLM 2 Largeと肩を並べており、AIに関してはサイズだけがすべてではないことを証明しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225269/1e84886e-ca2a-637e-87cd-48535ef46651.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225269/32f5b9ad-04d1-2e30-7a36-3a97c0bd79e7.png)

Falcon 180Bを本当に特別にするのは、オープンソースの原則へのコミットメントです。このモデルは、Apache 2.0フレームワークに基づいた「Falcon 180B TIIライセンス」のもとで、研究者や商用ユーザーに利用可能です。このアプローチにより、Falcon 180Bは特権を持つ少数の人々の手に閉じ込められるのではなく、そのパワーを活用したいと考える誰にでもアクセス可能なリソースとなります。


## ハードウェア要件
さまざまなユースケースでモデルを実行するために必要なハードウェアについて、いくつかのテストを実行しました。これらは最小の数値ではありませんが、アクセスできる設定の最小の数値です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/225269/b6cdeb75-4574-4b8e-6406-2e9ee0925a60.png)


## まとめ

Falcon 180Bは、アラブ首長国連邦（UAE）のテクノロジー・イノベーション研究所（TII）が開発した世界一の大規模言語モデル（LLM）で、生成型AI分野に革命をもたらす存在です。このモデルは1800億のパラメータを搭載し、3.5兆トークンのデータセットでトレーニングされ、高度なタスクに優れた性能を発揮します。さらに、オープンソースの原則に基づき、誰もが利用できるように提供されています。Falcon 180Bは、競合製品に対抗し、その大きさと能力で注目されており、AI分野に新たな可能性をもたらしています。

参照：
https://huggingface.co/blog/falcon-180b
Dockerをインストールする方法

# はじめに
Dockerをインストールする方法をメモ程度にまとめる。
有償化されたDockerデスクトップの回避策。

# インストール方法
```bash
curl https://get.docker.com | sh
```
なお、インストール中にDockerデスクトップの使用を促すメッセージが出てストップするが、しばらくすると再開する。

# プロキシ設定
プロキシの設定は、`/etc/systemd/system/docker.service.d/override.conf`を作成し、以下のように記入する。
```bash:/etc/systemd/system/docker.service.d/override.conf
[Service]
Environment='http_proxy=http://proxy.server:8000'
Environment='https_proxy=http://proxy.server:8000'
Environment='HTTP_PROXY=http://proxy.server:8000'
Environment='HTTPS_PROXY=http://proxy.server:8000'
Environment='no_proxy=http://no.proxy.server:8000'
```
シェルスクリプトにすると以下のようになる。
```bash
#!/bin/bash
touch /etc/systemd/system/docker.service.d/override.conf
echo "[Service]" >> /etc/systemd/system/docker.service.d/override.conf
echo "Environment='http_proxy=http://proxy.server:8000'" >> /etc/systemd/system/docker.service.d/override.conf
echo "Environment='https_proxy=http://proxy.server:8000'" >> /etc/systemd/system/docker.service.d/override.conf
echo "Environment='HTTP_PROXY=http://proxy.server:8000'" >> /etc/systemd/system/docker.service.d/override.conf
echo "Environment='HTTPS_PROXY=http://proxy.server:8000'" >> /etc/systemd/system/docker.service.d/override.conf
echo "Environment='no_proxy=http://no.proxy.server:8000'" >> /etc/systemd/system/docker.service.d/override.conf
```

# 参考
https://docs.docker.com/engine/install/ubuntu/#install-using-the-convenience-script
table view

UITableViewでセルをタップしたときに色が変わらないようにすることはできます。通常、UITableViewのセルが選択されたときに色が変わるのは、デフォルトの挙動ですが、これをカスタマイズできます。

セルの選択時に色が変わらないようにするには、以下の方法が考えられます：

1. セルの選択スタイルをNoneに設定する：
   UITableViewのセルの選択スタイルをNoneに設定することで、選択時に色が変わらなくなります。これはUITableViewCellのselectedBackgroundViewプロパティをnilに設定するか、Interface Builderで"Selection"を"None"に設定することで行えます。

2. UITableViewDelegateを使用して選択時の挙動をカスタマイズする：
   UITableViewDelegateの`tableView(_:didSelectRowAt:)`メソッドを実装し、セルが選択されたときの挙動を自分で制御することもできます。この方法を使用すると、選択時にセルの色が変わらないだけでなく、さまざまなカスタムアクションを実行できます。

どちらの方法を選んでも、セルの選択時に色が変わらないようにすることができます。選択スタイルをNoneに設定する方法は、簡単に実現できる一方、カスタム挙動が必要な場合は UITableViewDelegate を使用する方法が適しています。
Kor: LLMベースのデータ抽出

## 初めに

LLMは伝統的にテキストデータを扱うために設計されています。これは、テキストから構造化データを抽出しようとする際に不利になります。彼らはしばしば根底にある文脈を捉えたり、パターンを識別したり、スキーマによって表されるエンティティ間の関係を推測するのに苦労します。

しかし、これらの課題にもかかわらず、既存のLLMは、適切なツールがあれば、テキスト入力と構造化データとの間のギャップを埋めるのに十分なパワーを持っています。LangChainフレームワークの上に書かれたシンプルなライブラリであるKorは、LLM支援型のデータ抽出の手間を軽減できるツールの一つです。

## Korとは

Korは、Pythonライブラリであり、LLMを使用してデータから構造化データを抽出するための組み込みサポートを提供します。データ抽出を支援するために、LLMの上に以下の機能を追加します。

- 型定義、フィールドの説明、および抽出例を使用してデータスキーマを定義するサポート。
- 組み込みの抽出プロンプトを提供します。また、カスタムプロンプトを追加することもサポートしています。
- データを変換するためのCSVまたはJSONデータエンコーダを使用します。
- スキーマに従って抽出されたデータを検証します。
- 抽出エラーを処理します。

## Korの例

Installation
```python:
pip install kor
```

Kor style schema

```python:
from langchain.chat_models import ChatOpenAI
from kor import create_extraction_chain, Object, Text

llm = ChatOpenAI(
    model_name="gpt-3.5-turbo",
    temperature=0,
    max_tokens=2000,
    frequency_penalty=0,
    presence_penalty=0,
    top_p=1.0,
)

schema = Object(
    id="player",
    description=(
        "User is controlling a music player to select songs, pause or start them or play"
        " music by a particular artist."
    ),
    attributes=[
        Text(
            id="song",
            description="User wants to play this song",
            examples=[],
            many=True,
        ),
        Text(
            id="album",
            description="User wants to play this album",
            examples=[],
            many=True,
        ),
        Text(
            id="artist",
            description="Music by the given artist",
            examples=[("Songs by paul simon", "paul simon")],
            many=True,
        ),
        Text(
            id="action",
            description="Action to take one of: `play`, `stop`, `next`, `previous`.",
            examples=[
                ("Please stop the music", "stop"),
                ("play something", "play"),
                ("play a song", "play"),
                ("next song", "next"),
            ],
        ),
    ],
    many=False,
)

chain = create_extraction_chain(llm, schema, encoder_or_encoder_class='json')
chain.run("play songs by paul simon and led zeppelin and the doors")['data']
```

```結果:
{'player': {'artist': ['paul simon', 'led zeppelin', 'the doors']}}
```

詳細：
https://github.com/eyurtsev/kor
【電験３種】プログラマが挑戦【電気主任技術者】

# 1.受験経緯
・学生時代は電気工学を専攻していたので気になる資格だった。
・30を過ぎて、会社内だけでなく一般に繋がったなにかが欲しかった。
・自分は組込みプログラマだがハードウェア系にもフィールドを拡げたい。
・最近半年に１回の試験開催になったらしいので挑戦する

# 2.予備知識
・理論　三相以外は学生時代に電気回路があったので概ね大丈夫なはず。
・電力　１単位授業があったが内容を全く思い出せない。
・機械　モーターなどは全く分からない。業務上、制御やパワエレに関しては馴染みあり。
・法規　全く分からない。

# 3.１回目（作戦）
・４科目合わせるとすごい量なので、おそらくモチベーション維持が大事
↓
・最悪のシナリオは最初の受験で“０科目合格”になること。絶対にモチベ維持できない。
↓
・４科目同時受験はやめるが、何科目に絞る？ 毎回科目ごとに難易度のバラつきがあるらしく、１つに絞ったとき、その科目が高難易度になるとヤバい。
↓
・２科目づつ挑む。（余裕が出れば３科目もあり？）
↓
・まずは馴染みのある「理論」と、比較的簡単とされる「電力」にする。
↓
・あと、１科目でも落ちたときのことを考える。公式だけ覚えるような勉強方法だと次につながらない。本質的な理解をする勉強方法を意識したい。

# 4.１回目（勉強）
■参考書
　(1)過去15年の過去問集（電気書院）　理論、電力両方購入。実戦問題形式に慣れるため
　(2)これだけ電力（電気書院）　電力は素人なのでyoutubeでレビューを見て決定（理論は不要と判断）
　　　※合格後記　図など分かり辛い印象。しっかり理解したい自分には合わなかった。過去問と合わせて合格に連れて行く力はあるといえるが。

■スケジュール
(2023/1)　受験決意。ただ、2023/3の受験は申し込み期間過ぎており、2023/8受験を目標
(～2023/3)　『理論』過去問１通り、『電力』参考書の発電所、%インピーダンスまで（単元ごとに過去問も）
(～2023/6)　他のことで心が折れて手付かず
(～2023/8)　『理論』高難易度問題を飛ばしてもう１周過去問、『電力』残り単元と過去問もう１周
(2023/8)　受験

■工夫
　(1)電力は発電所に馴染みが無かったので、youtubeで映像をみたり、地元近辺のダムと方式をネット検索してみた。これだけでも結構頭に残った。
　(2)前半は図書館で土日にしか勉強してなかったが、後半は勉強スペースを借りて毎日90～120分勉強するようにした。図書館はテスト時期になると学生が多く、席が埋まっていたりうるさかったりするのもあった。
　(3)勉強スペースには行くクセが大事と考え、勉強が手に付かないと分かっていても行くようにした（ソファで寝て帰る日もあった）

# 5.１回目（試験、結果）
■試験
‐　理論　めっちゃ簡単だった。三相交流がスター型の抵抗のみというサービスっぷり。勉強しなくてよかったかも。
‐　電力　しっかりやった送配電の計算が出たので、手ごたえ自体はあり。

■結果
両方合格。実はネットで評判のよい解答速報（カフェジカ）を見て、その日のうちに合格が分かったので結果前に次の参考書を購入した。

# 6.２回目（作戦）
・残る機械、法規の両方に挑戦する
↓
・仮に落ちても頭に残るように、しっかり理解することを心掛ける
↓
・機械の参考書をパラ読するとボリュームが電力の2倍くらいに思えた。9月から手を付けることにした。

# 6.２回目（勉強）
■参考書
(1)過去15年の過去問集（電気書院）　前回役にたったので。
(2)完全マスター電験３種受験テキスト 機械（オーム社）　電力で使った「これだけシリーズ」は図や解説が貧弱なので、モーターのある機械に関しては不足と判断。ボリュームは多いが解説がしっかりしたものを評判を見て採用。
(3)完全マスター電験３種受験テキスト 法規（オーム社）　機械を終えた段階で非常に好印象だったので購入したが、法規おいてはムダな情報でポイントを見失うだけという印象。結局自分でまとめながらになっている。

　※合格後記　法規は参考書不要。結局法令なので、参考書も「法令にそう書いてあるので」以上のことを解説できず、全然補助になっていない。B問題については参考になるかも知れないが、そこまで多くないのでネット上の情報だけでもいいかと思う。
 
■スケジュール
(2023/9)　（機械）変圧器、直流機、誘導機、同期機について完了。参考書選択が良かったのか過去問は8割解けている。
(2023/10)　（機械）一通り参考書、過去問完了。電気化学のみ面倒すぎて雑に終える。
(2023/11)　（法規）勉強開始。電気事業法だけやったが、問題を繰り返し解くことでなんとなく入ってきた。
(2023/12)　（法規）電技の方に着手。数値が多く、こちらも問題を解きながら頭に入れ込んで行くしかなさそう。かなり地獄モード。とくに離隔距離は目的の電気の勉強ではないので覚えづらい。
(2024/1)　（機械）過去問２週目。忘れている箇所を直前に復習できるようにまとめた。変圧器、直流機、誘導機、同期機は２回やっておいた。ペンは進むなという印象。
(2024/2)　（法規）過去問を何度もやって、ようやく覚えはじめた。過去問類似でないとちょっと厳しい印象。計算問題は本当に落とせないので、数度繰り返す必要がある。
(2024/3)　（機械＆法規）過去問を反復。機械はかなり解けるようになっている。記憶から消えやすそうな法規を最後に行う予定。あとは体調だけ気を付ければ勝負になりそう
(2024/3)  受験
    
# 7.２回目（試験、結果）
■試験
‐　機械　１つ見落としあった程度。３問ほど新問があったが全部解けた。
‐　法規　歴代でも上位の簡単さに思えた。全て正解。

■結果
両方合格し、４科目全て合格。
機械は難しいイメージがあり、相当頑張ったがやり過ぎたのかも知れない。
頑張り過ぎたので本番ではかえって緊張してしまったが、始まると冷静になって挑むことができた。

# 8.勉強して良かったこと
・電気の基礎が一通り分かるイメージ。
　基礎的な回路は学生時代やっていたが、高圧に関わる箇所は単位になかったので新しく知ることが多かった。

　電気に関するものの見方は大分変わった印象。特に法規をやると、店舗のキュービクルに目が行くように。

・上期はメンタルがもたず休み休みだったが、下期は集中できた。
　とにかくルーチンワーク化できたのが大きい。１章ずつ丁寧に理解したので過去問を解くときも後戻りがなく効率的に学習できたと思う。例えば電機子反作用などは最初の理解で手を抜いてしまいそうだが、ちゃんと理解すればその後の論説で悩むことはない。

・会社に勤めると学問というフェアな場で真向勝負することはなくなる。
　久しぶりにそういった場へ出ることで職場に最適化されすぎた自分にとっていい作用があることを期待する。

・会社で同じタイミングに受験した同僚は上期に全科目落ちた（下期は受験せず逃亡）
　どこか自信過剰で、自分が理解できていないことに直面できなかったのが原因だと感じた。
　※ちなみにその人は「範囲が広い」とか「あまり勉強していない」とか言い訳ばかりしていた。

 こういった自分と向き合う力や計画的に取り組む力を見ることができるのは資格試験の面白いところかも知れない。
データセキュリティの最新トレンドとエンジニアの対策方法

データセキュリティは企業や組織にとって重要な課題であり、エンジニアにとっても欠かせないトピックです。この記事では、データセキュリティの最新トレンドを紹介し、エンジニアが対策すべき方法について解説します。クラウドセキュリティ、データプライバシー、セキュリティインシデント対応などのトピックに焦点を当て、最新の脅威や攻撃手法についても解説します。また、エンジニアがデータセキュリティを考慮したシステム設計や開発を行う際のベストプラクティスについても詳細に紹介します。データセキュリティに関心のあるエンジニアにとって有用な情報を提供する記事です。

## データセキュリティの最新トレンド

### 1. クラウドセキュリティ
近年、多くの企業や組織がクラウドへの移行を進めています。しかし、クラウド環境は従来のオンプレミス環境とは異なるリスクを持つため、セキュリティ対策が必要です。

**トレンド**: 
- クラウドネイティブアプリケーションの増加
- マルチクラウドとハイブリッドクラウドの採用

### 2. データプライバシー
GDPRやCCPAなど、データプライバシーに関する法律や規制が強化されています。企業は、これらの規制を遵守するための対策が求められます。

**トレンド**: 
- プライバシーファーストのアプローチ
- データの最小化と生存期間の管理

### 3. セキュリティインシデント対応
セキュリティブリーチやインシデントが増加している現代において、迅速かつ効果的な対応が必要とされています。

**トレンド**: 
- 自動化されたセキュリティインシデント対応
- セキュリティオペレーションセンター(SOC)の導入

## エンジニアの対策方法

### 1. クラウドセキュリティ
- **最小権限原則**: 必要最低限の権限のみを付与し、不要なアクセスを避ける。
- **エンドポイントセキュリティ**: クラウド環境への接続元のセキュリティを強化する。

### 2. データプライバシー
- **データ暗号化**: 個人情報や機密データを暗号化し、不正アクセス時のリスクを軽減する。
- **アクセスログの監視**: データへのアクセスログを監視し、不正なアクセスや漏洩を早期に検知する。

### 3. セキュリティインシデント対応
- **インシデント対応プラン**: 事前に対応プランを策定し、迅速な対応を可能にする。
- **継続的な教育**: エンジニアやスタッフへのセキュリティ教育を継続的に行い、意識を高める。

以上のように、データセキュリティのトレンドやエンジニアの対策方法にはさまざまな側面があります。エンジニアとしては、常に最新の情報を取得し、適切な対策を講じることが求められます。

# まとめ
データセキュリティは現代の企業や組織にとって重要な課題であり、以下の主要なトレンドが見られます。

1. **クラウドセキュリティ**: クラウドネイティブアプリケーションの増加やマルチクラウド、ハイブリッドクラウドの採用が進む中、最小権限原則やエンドポイントセキュリティの強化が求められています。

2. **データプライバシー**: プライバシー法の強化に伴い、プライバシーファーストのアプローチやデータの最小化が重要となっており、データ暗号化やアクセスログの監視が必要です。

3. **セキュリティインシデント対応**: セキュリティブリーチの増加に伴い、インシデント対応プランの策定や継続的な教育が重要です。

エンジニアは、これらのトレンドを理解し、適切な対策を講じることで、データセキュリティを確保することが求められます。

# 最後に
エンジニアの皆さん、エンジニア未経験の皆さん、若手エンジニアの皆さん、勉強方法について悩みがあればなんでも気軽に質問して下さい！
これからも記事を書いていきますので、モチベーションアップのためフォロー、イイねお願いします。
AWS Certified DevOps Engineer - Professional (DOP-C02)を更新しました

# はじめに
AWS Certified DevOps Engineer - Professionalが失効間近のため更新しました。

# 教材
1. [Tech Stock | AWS WEB問題集で学習しよう](https://techstock.jp/exam/dop/)
    - 有償のおなじみのやつです。
    - 553問(79セクションx7問)です。
    - 他者の合格記を見ると好評でしたので、Udemyは受講せず、これだけ勉強しました。結構よかったかと思います。
    - 誤答が多々ありましたので修正してもらいました。
1. [試験問題サンプル](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-devops-pro/AWS-Certified-DevOps-Engineer-Professional_Sample-Questions.pdf)
    - 無料の公式の試験問題サンプルです。
1. [Skill Builder: AWS Certified DevOps Engineer - Professional Official Practice Question Set (DOP-C02 - Japanese)](https://explore.skillbuilder.aws/learn/course/14541/)
    - 無料の公式問題集です。
    - 20問です。
1. [Skill Builder: AWS Certified DevOps Engineer - Professional Official Practice Exam (DOP-C02 - Japanese)](https://explore.skillbuilder.aws/learn/course/14812/)
    - 有料の公式問題集です。
    - 75問です。
    - 幾つか"AWS WEB問題集で学習しよう"と内容が重複していますが、解説がしっかりしています。
    - "AWS WEB問題集で学習しよう"だけでも良いですが、お金があれば、より合格率を高めるために受けても良いと思います。

# 感想
- "AWS WEB問題集で学習しよう"のおかげで難しい問題はありませんでした。1周は1時間強で、見直し15分となります。
Aivenプラットフォームにおけるユーザー管理の合理化

<font color="Grey">*[Streamlined user management in the Aiven Platform](https://aiven.io/blog/streamlined-user-management-in-the-aiven-platform)の翻訳です。*</font>

2023年9月5日

# Aivenプラットフォームでユーザー管理を合理化

組織単位、ユーザー、グループを一元化し、スケーラブルなユーザー管理とアクセス管理を実現します。

大規模な組織では、Aiven Platform上のさまざまなプロジェクトやサービスへのユーザーとそのアクセスを効率的かつ柔軟に管理する必要があります。このような組織では通常、複数のプロジェクトに異なるアクセスレベルのユーザーが多数存在するため、誰が何にアクセスできるかを把握することが困難です。その結果、業務に支障をきたしたり、セキュリティやコンプライアンスに問題が生じたりする可能性があります。


この課題に対処するため、私たちは**集中型組織ユーザーとグループ**を導入します。これらの機能は、ユーザーとアクセス管理プロセスを合理化し、プラットフォーム上でのセットアップをより簡単に拡張し、組織全体にわたってユーザーとそのアクセス許可を可視化します。


組織ユーザーとグループは、今年初めに発表された[organization](https://aiven.io/blog/introducing-organizations-and-units-in-aiven)のコンセプトに基づいています。さらに、当時からベータ版として提供されていた組織単位機能は、現在一般提供されています。


##組織ユーザー


ユーザーを組織全体で[一元管理](https://docs.aiven.io/docs/platform/howto/manage-org-users)できるようになり、ユーザーを追跡する管理負担が軽減され、インフラをより安全に保つことができます。


ユーザーは、電子メールを使って組織に招待される。招待を承認すると、管理者はその組織内の特定の組織単位、プロジェクト、サービスへのアクセスを許可し、Aiven Platformでアクティブな認証方法、二要素認証のステータス、グループメンバーシップ、最終アクティブステータスを確認できます。


## グループ


[ユーザーグループ](https://docs.aiven.io/docs/platform/howto/list-groups)は、組織単位、プロジェクト、サービスに対するユーザーのアクセスを効率的かつ簡単に制御する方法を提供します。新しいグループ機能は、古いチームコンセプトに取って代わるものです。チームとは異なり、グループは組織全体で共有されるため、1つのグループを作成して、すべての組織単位で使用することができます。これにより、アクセス管理が容易になり、ユーザーが必要なリソースに対して適切なアクセス許可を持つことができるようになります。


グループには、次のようなユーザー・エクスペリエンスの向上もあります：


* ワンクリックでユーザーを検索し、追加できます。
* グループ内でユーザーのプロフィールを開くことができます。
* グループ内の全ユーザーのステータスと最新のアクティビティを一目で監視できます。


ユーザーエクスペリエンスを向上させるために、今すぐグループに切り替えてください。また、ユーザーやグループを外部のIDプロバイダーと同期するなどの今後の機能にもご期待ください。


## 組織単位がGAに到達


[組織単位](https://docs.aiven.io/docs/platform/concepts/projects_accounts_access)により、プロジェクトやサービスの階層を絞り込むことができます。この階層構造により、ニーズに合わせてアカウント構造を編成する柔軟性が高まります。たとえば、本番環境とテスト環境のワークロードを、同じAivenの組織内にある異なる組織単位に簡単に分割できます。


組織単位は今年の初めからベータ機能として提供されています。グループの導入により、一般的に利用できるようになりました。


##始める


強化されたユーザーエクスペリエンスをお楽しみください。[Aiven Console](https://console.aiven.io/)にログインし、組織の管理ページに移動して開始します。


ユーザーとグループの詳細については、[ユーザーとアクセス管理ドキュメント](https://docs.aiven.io/docs/platform/howto/list-user) をご覧ください。
Kotlinでリストを分解代入するときのエラーについて

## 問題点

- Kotlinでは、分解代入という機能を使って、複数の変数に一度に値を代入することができます。
- しかし、リストの要素数が5より多い場合は、分解代入ができません。
- なぜなら、リストはデフォルトではcomponent1()からcomponent5()までの関数しか持っていないからです。
- これらの関数は、分解代入の際にリストの各要素を返す役割を果たします。
- したがって、以下のように書くとエラーが発生します。

```kotlin
val (a, b, c, d, e, f) = listOf(1, 2, 3, 4, 5, 6) // エラー: Destructuring declaration initializer of type List<Int> must have a 'component6()' function
```

## 解決方法

- このエラーを回避する方法はいくつかあります。
- 一つは、data classを使うことです。
- data classは、自動的にcomponentN()関数を生成してくれるクラスです。
- 例えば、以下のように書くことができます。

```kotlin
data class Data(val a: Int, val b: Int, val c: Int, val d: Int, val e: Int, val f: Int)
val (a, b, c, d, e, f) = Data(1, 2, 3, 4, 5, 6) // OK
```

- もう一つは、リストに対してcomponent6()関数を拡張関数として定義することです。
- 拡張関数とは、既存のクラスに新しい関数を追加することができる機能です。
- 例えば、以下のように書くことができます。

```kotlin
operator fun <T> List<T>.component6() = get(5) // リストの6番目の要素を返す関数
val (a, b, c, d, e, f) = listOf(1, 2, 3, 4, 5, 6) // OK
```

以上が、Kotlinでリストを分解代入するときに発生するエラーに関する説明です。

## 参考文献
OpenAI. (2023). BingAI (2023年9月11日版) [Large language model]. https://www.bing.com/ai
RaspberrPi2にWi-Fiドングル(WI-U2-433DMS/N)を使うまでに悩んだ事

On-The-Goは使えない
USB Ethernet/RNDIS Gadgetは使えない
Raspberr Pi ImagerでOSはRaspberrPi OS 32bit
Raspberr Pi Imagerでの初期設定をユーザー名やパスワードにSSHが使えるように設定をする(piユーザーは廃止されました)
Raspberr Pi ImagerでmicroSDを書き換えろ
一時的にネットワーク回線に繋がるようにLANケーブルをつなぐ
ルーターからPi2を探す。IPを調べておく。

引用した
https://qiita.com/mitoneko/items/47841692945acbb657da

$ git clone https://github.com/aircrack-ng/rtl8812au.git
$ sudo apt-get install dkms
$ cd rtl8812au
$ sudo make dkms_install
$ sudo reboot

再起動するとドライバが有効になって使えるようになっています。
リモートデスクトップを入れてデスクトップを表示
$ sudo apt -y install tightvncserver xrdp

Windowsのリモートデスクトップで接続出来ます。
.cornerRadiusが非推奨になった

## Before
```swift
Text("Test")
    .padding()
    .background(Color.black)
    .foregroundStyle(.white)
    .cornerRadius(40) // 非推奨
```

## After
```swift
Text("Test")
    .padding()
    .background(Color.black)
    .foregroundStyle(.white)
    .clipShape(RoundedRectangle(cornerRadius: 40))
```

## まとめ
いつからかわかりませんが、Xcode15 beta8にアプデしたら非推奨になっていたので同じ結果になるように対応しました！

## 非推奨記事
https://developer.apple.com/documentation/swiftui/view/cornerradius(_:antialiased:)