OmniAICreator/Qiita-1.07M huggingface dataset:
contabo VPSにxrdpをインストールしてみた


参照サイト
https://www.youtube.com/watch?v=OEK86061KEU
https://novicengineering.com/ubuntu_mozc_install/

contabo VPSにxrdpをインストールしてみた。
Youtube動画のコマンドをそのまま入力して構築できた。

```
sudo apt-get update 
 sudo apt-get upgrade
 sudo apt-get install ubuntu-desktop
 sudo apt install gnome-software
 sudo apt-get install xrdp htop  

 sudo rm /usr/share/polkit-1/actions/org.freedesktop.color.policy
 sudo adduser remote
 sudo usermod -aG sudo,adm remote 
 sudo reboot
```

日本語環境をインストール
```
$ sudo apt install ibus-mozc 
$ ibus restart 
$ gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'jp'), ('ibus', 'mozc-jp')]"
```
VBAでスクレイピング(Selenium)


参照サイト
https://nkmrdai.com/vba-selenium-reference/#VBA%E3%81%A7Selenium%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97

VBAでスクレイピングをしようと思い調べていたところ
Seleniumがよさそうだったのでインストールしてみる。

# SeleniumBasic
## ダウンロードする
https://github.com/florentbr/SeleniumBasic/releases/tag/v2.0.9.0
SeleniumBasic-2.0.9.0.exe

## インストールする

下記フォルダにインストールされる
C:\Users\%username%\AppData\Local\SeleniumBasic

# ChromeDriver
## Chromeのバージョンを確認する

今回はメジャーバージョンが107である。

<img width="400" alt="chrome-ver1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/0b4893e1-281e-d1b6-4c35-abe1e1d01e0f.png">
<img width="400" alt="chrome-ver2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/66ff860f-dfc8-1760-502d-eaca342929cf.png">


## ダウンロードする

Chromeのバージョンに対応したChromeDriverをダウンロードする

今回は107である。

https://chromedriver.chromium.org/downloads

<img width="400" alt="chromedriver" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/fb0a8b4e-9e9e-e35d-0cd9-c9a09224f7b8.png">

## SeleniumBasicに保存する

<img width="400" alt="selenium-folder" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/716a2c9c-0b3e-43ae-31b0-53973f2483a4.png">

# Excel
## 参照設定する

<img width="400" alt="vbe" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/9f5af553-2ed6-13af-20b2-9cbaed594b12.png">
<br>
<img width="400" alt="refset" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/9d024b43-1d0b-60b7-2372-f1c93292c1eb.png">
contabo VPSにVNCパスワードを設定してみた


VNCで接続しようとしたところサーバーのパスワードではログインできなかった。
調べるとVNC用のパスワードを設定する必要があることが分かった。

# パスワードを設定する
 VPS controlを開く

- Manageをクリックする

- VNCパスワードをクリックする

 <img width="400" alt="vncpass" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/b1ae6f3c-bfdd-c83f-82c3-a883446d363b.png">


- パスワードを入力する

<img width="400" alt="vncpass2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/6a55a382-2bb6-5fa4-903a-af697ea9f98d.png">

# VNCで接続する
- サーバーIPアドレスを入力
<img width="400" alt="vnc1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/42f456ca-2f54-fdea-fa9d-e1fe584029ce.png">

- VNCパスワードを入力
<img width="400" alt="vnc2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/ba188faa-6724-f769-28c6-fb893f7c7e82.png">

- 無事接続できた
- サーバーアカウントを入力

<img width="400" alt="vnc3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/3fb08593-679a-6d50-a8b8-0b9291817c50.png">

- ターミナルソフトでログインしたときと同じ表示がされた

<img width="400" alt="vnc4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/fa656f30-3f04-2876-8c23-517dcd8cdd54.png">
海外格安VPS ContaboがBlack Fridayをしていたので申し込んでみた


海外格安VPSのContaboがBlack Fridayをしていたので申し込んでみた。

# Black Friday
通常のセールではVPSは対象にならないようですが
今回はSetup FeeとLocation Feeが無料になるようです。

<img width="400" alt="Black Friday Deals" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/62a5997c-0640-3a4f-d489-3f50b5444ee7.png">

・Setup Feeは12か月未満の契約で加算される
・Location Feeはドイツ以外の場所を選択した際に加算される

# 料金表
一番安い＄8.49でも8GBメモリと200GB SSDと
個人の趣味でやるにはいいお手頃価格。

<img width="400" alt="priceList" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/678826c8-d2ab-8d5f-717f-9f052ff09eca.png">


# 設定

シンガポールにしたかったが半額なので、アメリカ西海岸にした。

<img width="300" alt="conf1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/55c710c5-53d8-99c5-fcf2-ce1ddfcf1db2.png">
<br>
<img width="300" alt="conf2" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/c1ad9d84-1fd2-e048-abb2-21e9b1a2c97e.png">
<br>
<img width="300" alt="conf3" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/4392f09a-b4a9-7f61-5614-dfa4a2aeb817.png">
<br>
<img width="300" alt="conf4" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/8dbaa747-ba72-bd40-80ee-be0b814f94b9.png">

# Welcome Mail
料金の支払いが完了するとすぐにWelcome Mailがきた

<img width="300" alt="welcomeMail" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/9f1b3e0c-f9ac-15dd-c319-6daaa1fa6364.png">


# control panelにログイン

control panelにログインしてログイン情報を確認する

<img width="300" alt="controlPanel" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/2891ca4f-40a9-5f58-e073-a8355a543a81.png">

Your servicesをクリック

<img width="300" alt="yourService" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/78e34366-c258-0875-8d8c-47f1ec7547ba.png">

# サーバーにログイン

Contabo用にカスタマイズされているみたいですね。

<img width="300" alt="login" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99234/7be10d9a-4c3f-cfa5-7771-705a8dbc27a1.png">
Eclipse workspaceのバックアップ


#　概要
Eclipse環境でデータをバックアップする

##　データをアーカイブする
```linux:
tar cfvz /home/`logname`/archive/eclipse`date +%y%m%d-%H%M`.tar.gz /home/`logname`/workspace
```

```linux:
tar cfvz $HOME/archive/eclipse`date +%y%m%d-%H%M`.tar.gz $HOME/workspace
```

### tar
#### アーカイブを生成・展開する

|オプション|説明|
|:--------|:----------------|
|c|新しくアーカイブを作成する|
|f|アーカイブファイル名を指定する|
|v|ファイルリストを表示する|
|z|gzip形式圧縮・展開する|

### date
#### 日時を表示・設定する

|オプション|説明|
|:--------|:----------------|
|+[format]|表示形式を形式で指定する|

|形式|説明|
|:--------|:----------------|
|%y|西暦下2桁|
|%m|月(mm)|
|%d|日(dd)|
|%H|時(hh)(24時間制)|
|%M|分(mm)|

### logname
#### 現在のログインユーザー名を表示する

### $HOME
#### ログイン中のユーザーのホームディレクトリを表示する
sin(x+y)「[演習]重積分1(体系大学数学)」をwolframalphaとsympyでやってみたい。

3Dプロットしたい。
wolframでできました。
sympyで
1回で、できませんでした。
分けたら、できました。

オリジナル

https://youtu.be/9JdLOOkYPfs?list=PLY-VuIxEYwBUAwzIP53NvoLZkwtvAWPeu

# wolframで

https://www.wolframalpha.com/input?i=integral_0%5E%28%CF%80%2F12%29+integral_x%5E%289+x%29+sin%28x+%2B+y%29+dy+dx+&lang=ja

https://www.wolframalpha.com/input?i=2%E9%87%8D%E7%A9%8D%E5%88%86&assumption=%7B%22F%22%2C+%22DoubleIntegral%22%2C+%22rangestart2%22%7D+-%3E%22x%22&assumption=%7B%22F%22%2C+%22DoubleIntegral%22%2C+%22rangeend1%22%7D+-%3E%22pi%2F12%22&assumption=%7B%22F%22%2C+%22DoubleIntegral%22%2C+%22rangestart1%22%7D+-%3E%220%22&assumption=%7B%22F%22%2C+%22DoubleIntegral%22%2C+%22integrand%22%7D+-%3E%22sin%28x%2By%29%22&assumption=%7B%22F%22%2C+%22DoubleIntegral%22%2C+%22intvariable2%22%7D+-%3E%22y%22&assumption=%7B%22C%22%2C+%222%E9%87%8D%E7%A9%8D%E5%88%86%22%7D+-%3E+%7B%22Calculator%22%7D&assumption=%7B%22F%22%2C+%22DoubleIntegral%22%2C+%22intvariable1%22%7D+-%3E%22x%22&assumption=%7B%22F%22%2C+%22DoubleIntegral%22%2C+%22rangeend2%22%7D+-%3E%229x%22&lang=ja

# sympyで
1回で、できませんでした。
分けたら、できました。
```python
from sympy import *
x,y =symbols('x y',real=True)
print("#",integrate(sin(x+y),(x,0,pi/12),(y,x,9*x)))
#
ans=integrate(sin(x+y),(y,x,9*x))
ans=integrate(ans,(x,0,pi/12))
print("#",ans)
# -sin(x) + sin(9*x) + sin(x + pi/12) - sin(9*x + pi/12)
# 1/5
```

# 参考

https://stackoverflow.com/questions/67390609/using-sympy-to-evaluate-a-double-integral


# つづく

https://qiita.com/mrrclb48z/items/194a29b547e5a42e40a9
preemptの設定

今回buildrootで作成した環境でデバドラをmakeした際に、
生成した.koをmodinfoで見てみるとvermagicにpreemptが入ってなかったので
preemptを入れるための手順を書き残す

今回はandroid-kvmの環境を利用したので実施手順は以下
(android-kvmのbuildroot -> https://android-kvm.googlesource.com/buildroot/)

1. git clone https://android-kvm.googlesource.com/buildroot
1. cd buildroot
1. make linux-menuconfig
1. General Setup -> Preemption Model ↓

で、以下の３つが出てくるので、好きなものを選んだらOK

No Forced Preemption
Voluntary Kernel Preemption
Preemptible Kernel

ちなみに上記３つについて詳しくないので、ChatGPTさんに聞いてみたところ以下のように説明してくださいました。

No Forced Preemption（強制プリエンプションなし）
この設定では、カーネルが割り込みを受け付けたときに、実行中のプロセスを中断しないようにします。つまり、カーネルは、プロセスが完全に処理を終了するまで、その処理を中断することはありません。この設定は、リアルタイムシステムのような、高度に予測可能で安定したシステムに適しています。

Voluntary Kernel Preemption（任意のカーネルプリエンプション）
この設定では、カーネルは、実行中のプロセスを割り込むことができますが、プロセスが自発的に実行を中断するまで待ちます。つまり、カーネルは、プロセスが次の待ち状態になるまで、割り込みを行いません。この設定は、リアルタイム性を重視しなければならないが、安定性も必要な場合に適しています。

Preemptible Kernel（プリエンプティブカーネル）
この設定では、カーネルは、実行中のプロセスをいつでも割り込むことができます。つまり、カーネルは、プロセスがどのような状態にあっても、割り込みを行うことができます。この設定は、リアルタイム性を重視する場合に適していますが、安定性に影響を与える可能性があるため、慎重に使用する必要があります。

上記の設定は、システムの目的や要件に応じて適切に設定する必要があります。例えば、リアルタイムシステムでは、プリエンプションの制御が重要であり、安定性が重視される場合は、"No Forced Preemption"を設定することが望ましいでしょう。

とのことです。
わかりやすくて、勉強になる。
Carthageでxcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH解決

# 始めに
自分のメモ、備忘録です。
Carthageでプロジェクトにライブラリを導入する時に詰まったのでメモ。
```
xcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH
```
というエラーがターミナルででました。

# 解決方法

XcodeのPreferencesを開きLocationsを選択、Command Line Tools:から使用するXcodeのバージョンを選択してやり直したらエラー解消しました。
![スクリーンショット 2023-03-18 0.24.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/00e6e4ed-c274-306c-dd02-cdc0f19120c2.png)
ここをいじったことなかったので「Command Line Tools:」のとこが空白でした、Xcodeのバージョンを選択しました。
![スクリーンショット 2023-03-18 0.23.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/79bb8dd7-8207-5f85-c4a3-73fd24036865.png)
# 終わりに
Carthageでのライブラリ導入方法はこの記事の情報が新しくとても参考になりました！！
https://qiita.com/KaitoMuraoka/items/4904f67c58d93c677667
Xcode12以降からはcarthage update --platform iOSでなく
```
carthage update --use-xcframeworks
```
実行で.xcframeworkを作成し
GeneralからFrameworks, Libraries, and Embedded Contentセクションに、.xcframeworkを追加するだけになってます。
【Rails】エラー　「Webpacker::Manifest::MissingEntryError in」を解決した経緯

Rubyを初めて学習するために、Techpitのハンズオン講座にてRuby on railsのアプリ開発講座を受けていたところ、画面表示の段階で上記エラーで躓き、解決策が見つからなかったため、メモを記載する。

# 「Webpacker::Manifest::MissingEntryError in コントローラー名#アクション名」のエラーに遭遇

↓以下の記事を見ると原因は、`webpacker`をコンパイルしていないことのよう。

https://prograshi.com/framework/rails/webpackermanifestmissingentryerror/

# webpackerのコンパイルエラー

次に`webpacker`をコンパイルしたところ、以下のエラーに遭遇。

```ruby:コンパイルエラー

warning ../../package.json: No license field                                                                                                                    
Compiling...
Compilation failed:
yarn run v1.22.17
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.


warning ../../package.json: No license field
warning ../../package.json: No license field
error Command "webpack" not found.
```



↓解決策としては、以下がとても参考になりました。ありがとうございます。

https://dev.to/dani8439/rails-6-webpacker-manifest-missingentryerror-4fi7

https://qiita.com/RikuMoto/questions/e0c16642f85a0bb35bf2


まず、以下の順で実行した。
※`rails webpacker:install`を以前打っていた場合は途中処理が止まる。
すでに作られているファイルとconflictを起こすため。全てEnterを押してOverWriteする。


１．`rails webpacker:install`を実行

２．リポジトリの`node_modules`を削除

３．`public/packs`を削除

４．`yarn install`を実行

５．`bundle`を実行

６．`rails webpacker:install`を実行

７．リポジトリの`gemfile`に記載の、webpackerを'~> 4.0'から'~>5.0'に変更。

８．`bundle`を実行

９．`bundle exec rails webpacker:install`を実行

１０．`bundle exec rails webpacker:compile`を実行

１１．`rails s`


通常は上記でエラー解決できるはずだが、更新内容が反映されなかったため、
`rails restart`を実行により、反映された！

以上、自分なりの解決策がみつかった。
ChatGPTに聞きながらChatGPT APIの使用手順を書いてみた

OpenAIのAPIキーをPythonから使用するには、APIキーを環境変数に設定する必要があります。以下は、APIキーを環境変数に設定し、PythonでChatGPT APIを呼び出すための手順です。

# 1. OpenAIのAPIキーの取得

OpenAIのAPI KEYは、OpenAIのウェブサイトでアカウントを作成し、API KEYを生成することで取得できます。アカウント作成手順は以下の通りです。

- [OpenAIのウェブサイト](https://openai.com)にアクセスして、右上の「Sign up」をクリックします。
- 必要事項を入力して「Create Account」をクリックします。
- 登録されたメールアドレス宛に確認メールが送信されるので、メール内のリンクをクリックしてアカウントを有効化します。
- アカウントが有効化されたら、[OpenAIのダッシュボード](https://platform.openai.com/account/api-keys)にログインし、API KEYを生成します。

# 2. 環境変数の設定

環境変数にAPIキーを設定するには、以下の手順を実行します。

- Windowsの場合：コマンドプロンプトを開き、以下のコマンドを実行します。

```
setx OPENAI_API_KEY "YOUR_API_KEY"
```

このコマンドは、`OPENAI_API_KEY`という名前の環境変数を設定し、その値をAPIキーに設定します。`YOUR_API_KEY`は、OpenAIのAPIキーに置き換えます。

- macOSまたはLinuxの場合：ターミナルを開き、以下のコマンドを実行します。

```
export OPENAI_API_KEY="YOUR_API_KEY"
```

このコマンドは、`OPENAI_API_KEY`という名前の環境変数を設定し、その値をAPIキーに設定します。`YOUR_API_KEY`は、OpenAIのAPIキーに置き換えます。

# 3. `openai`パッケージのインストール

API KEYが取得できたら、次に`openai`パッケージをインストールします。pipを使用して以下のコマンドを実行します。

```
!pip3 install --upgrade pip
!pip3 install openai
```

# 4. PythonでAPIを呼び出す方法

APIキーを環境変数に設定したら、PythonでAPIを呼び出すことができます。以下は、APIを呼び出す簡単な例です。

```python:chatgpt_api.py
import openai
import os

openai.api_key = os.environ["OPENAI_API_KEY"]

content = "Hello, what can you do for me today?"

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "あなたはとても優秀なAIです。"},
        {"role": "user", "content": content},
    ],
    temperature=1
)

print(response.choices[0]["message"]["content"].strip())
```

この例では、OpenAIのAPIキーを`os.environ["OPENAI_API_KEY"]`から取得し、`openai.ChatCompletion.create`を使用してAPIを呼び出しています。APIキーは、先程設定した環境変数から取得されます。
Java_組み込みクラスを使ってみよう

paizaラーニングforTEAM Java入門編
レッスン8の#08

```Java:8-#08
// 組み込みクラスを使う
import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 標準入力からデータを読み込んで表示する
        Scanner sc = new Scanner(System.in); // Scanner型の変数sc_コンストラクタの引数はSystem.in
        ArrayList<String> team = new ArrayList<String>(); // 文字列を要素としたArrayListである変数teamを用意してArrayListオブジェクトを作成して代入
        // 標準入力から複数のデータを読み込む
        while (sc.hasNextLine()) {
            String player = sc.next(); // Scannerオブジェクトのnextメソッドを呼び出して変数playerに代入
            System.out.println(player + "は、荒野を歩いていた。");
            team.add(player); // teamオブジェクトのaddメソッドを呼び出す
        }
        
        for (String member : team) {
            System.out.println(member + "は、モンスターと戦った");
        }
    }
}
```
AWS 東京regionに一体何個のAZがあるのか？


東京リージョンでは、ap-northeast-1a から ap-northeast-1dまでの4つのAZがあるという記述はよく見かけると思いますが、
実際にAZ bが使えないような話もよく耳にしています。
一体どういうことなのかよくわからないため、いろいろ調べました。

https://blog.proglus.jp/2580/

# 実際に試してみる
新しいVPCを作る時に、該当のVPCが使えるAZが選択できます。
が、なぜか最大３つまでしか選択できず、AZ bはそもそも選択肢としても出てこないんだ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/1f121f0a-a93d-b9b1-9cc4-5467dffd3880.png)

# 調査
- 以下のコマンドを実施し、自分のAWSアカウントが使えるAZ一覧を確認
やはり`ap-northeast-1b`が使えない。

```
$ aws ec2 describe-availability-zones --output text
AVAILABILITYZONES   ap-northeast-1  available   ap-northeast-1a
AVAILABILITYZONES   ap-northeast-1  available   ap-northeast-1c
AVAILABILITYZONES   ap-northeast-1  available   ap-northeast-1d

```

https://qiita.com/tnir/items/7ac06bf5f3974477e09f

どうやらAWSアカウントによってすべてのAZが使えるわけではないようです。
3AZしか使えないAWSアカウントと4AZまで全部使えるAWSアカウントという２つのケースがあるらしいです。

- 4AZまで全部使えるAWSアカウントで確認した結果：
```
$ aws ec2 describe-availability-zones --output text
AVAILABILITYZONES   ap-northeast-1  available   ap-northeast-1a
AVAILABILITYZONES   ap-northeast-1  available   ap-northeast-1b
AVAILABILITYZONES   ap-northeast-1  available   ap-northeast-1c
AVAILABILITYZONES   ap-northeast-1  available   ap-northeast-1d
```

# 推測

- かなり前作られたAWSアカウントは`ap-northeast-1b`も使えますが、AZ bのリソースが足りなくて、しかもデータセンターの物理的な制約があり、それ以上拡大でないため、新規のAWSアカウントはすでにAZ ｂが使えないということじゃないでしょうか。
- 具体的にいつからのAWSアカウントはAZ bが使えないのかは不明です。知っている方がいらっしゃいましたら、コメントをお願いたします。
OSS開発に関わるためのアドバイス

私は、専門技術習得のため、業務外でOSSの開発に携わっています。世界中のエンジニアで使われているプロジェクトの開発に携われたり、Googleなど有名企業のエンジニアからレビューを受けたりできることは、エンジニアの成長につながると思い、OSS開発を続けています。

私がコントリビュートしたプロジェクトは以下の通りです。

■Kubernetes
https://github.com/kubernetes/kubernetes/pull/115800

■Flutter
https://github.com/flutter/flutter/pull/116654

■scikit-learn
https://github.com/scikit-learn/scikit-learn/pull/25146
https://github.com/scikit-learn/scikit-learn/pull/25156

■Transformers
https://github.com/huggingface/transformers/pull/20084

■gatsby
https://github.com/gatsbyjs/gatsby/pull/37041

■Deno
https://github.com/denoland/deno/pull/16482

■Lighthouse (Chrome)
https://github.com/GoogleChrome/lighthouse/pull/14479

■Typescript-eslint
https://github.com/typescript-eslint/typescript-eslint/pull/5894

■Tauri
https://github.com/tauri-apps/tauri/pull/6025

以下が主なアドバイスになります！ぜひ参考になればと思います！

## 簡単なイシューを見つけるようにしてください（good first issueラベルがあるもの）
最初は、完了できる問題を見つける必要があります。そうしないと、問題に取り組むことができません。ご存じのとおり、あるプロジェクトを理解するには時間がかかるため、ロジックなどの難しいコードを実装する場合は、より多くの時間を費やす必要があります。

good first issueラベルがあるイシューに取り組むことをお勧めします。ただし、good first issueラベルがあるものは、すぐにアサインされます。イシューを見つける別の方法は、リポジトリごとに検索することです。時間もかかりますが、まだアサインされていないものが必ず見つかります。

## プログラミング言語の選択肢を増やす
言語の選択を制限しないことも重要です。つまり、慣れていない言語のイシューを探すと選択肢が増えるということです。たとえば、私は Ruby に精通していますが、言語に関連する問題はほとんどありません。一方で、私は TypeScript があまり得意ではありませんが、上記のように、すでにいくつかの TypeScript のプロジェクトに貢献しています。

私の知る限り、フロントエンドの問題はロジックを必要とせず、通常は理解しやすいため、取り組むのが簡単です。さらに、フロントエンドの問題は、主に TypeScript と JavaScript で構成されており、言語の幅が少なく、ハードルが低いと思います。

## コントリビューションガイドを読む
イシューを見つけたら、コントリビューションガイドを確認する必要があります。これは、各プロジェクトには特定のルールがあり、それに従う必要があるためです。ローカルでテストする方法、ブランチに名前を付ける方法などを注意深く確認してください。加えた変更をプッシュした後も、CIのテストをパスしているかなどに注意する必要があります。

## よくコミュニケーションをとる
良好なコミュニケーションも重要なポイントです。周囲のサポートがない状態でイシューに取り組むため、OSS コミュニティに参加した直後に行き詰まってしまうことはよくあることです。レビュー担当者や問題を作成した人から、継続的または適切なサポートを受けられない可能性があります。このようなヘルプを受けるためには、参加したコミュニティがアクティブである必要があります。

## 結論
OSS コミュニティに参加することは、想像するほど難しくありません。皆さんも、多くのエンジニアが関わるプロジェクトでの実装を通じて、プログラミングスキルを磨いていけると思います。ここに書いたステップを踏んで、エンジニアスキルを伸ばしてください！


## その他
本記事は、自分が書いた英語の記事を日本語に翻訳したものです。もしご興味あれば以下もご覧ください。

https://shogohida-japan.medium.com/tips-to-take-to-join-oss-community-a41ed92d829c
vee validateでバックエンドのバリデーションメッセージと紐付ける

# 環境
vue2.6
Nuxt Bridge
vee-validate3
Laravel9

# 概要
フロントバリデーションメッセージだけではなくて、バックエンドで返却されるバリデーションメッセージもvee-validateの機能を使って表示させたいなってことがありましたので、ご参考程度に見てください。

# 手順
### 1.まずvee-validateを使う準備をします
まず必要なバリデーションとしてrequiredを使えるようにします。
ちなみに[ValidationObserver](https://vee-validate.logaretm.com/v2/guide/components/validation-observer.html)というものを使ってバックエンドのメッセージをセットします。

```vee-validate.js
import { defineNuxtPlugin } from '@nuxt/bridge/dist/runtime';
import { extend, ValidationProvider, ValidationObserver } from 'vee-validate';
import { required } from 'vee-validate/dist/rules';

export default defineNuxtPlugin((nuxtApp) => {
  extend('required', { ...required, message: '{_field_}を入力してください。' });

  nuxtApp.vueApp.component('ValidationProvider', ValidationProvider);
  nuxtApp.vueApp.component('ValidationObserver', ValidationObserver);
});
```

### 2.フロントバリデーションの設定をします
`ValidationObserver`でform全体を囲います。
`ValidationProvider`では`rules`で必須だけ設定しておきます。

```form.vue
<template>
    <ValidationObserver ref="observer">
        <form @submit.prevent="post()">
            <ValidationProvider
              v-slot="{ errors }"
              vid="email"
              rules="required"
              name="メールアドレス"
            >
              <input v-model="email" type="email" />
              
              <div v-if="errors.length > 0">
                {{ errors[0] }}
              </div>
            </ValidationProvider>
            <button type="submit">送信</button>
        </form>
    </ValidationObserver>
</template>

<script setup>
</script>

```
`name="メールアドレス"`とすることで、手順１で設定した`{_field_}を入力してください。`の部分にセットされます。
ただ、この時点でフロント側でのバリデーションメッセージは表示ができますが、バックエンドのメッセージは表示できないです。

### 3.送信ボタンが押された後の処理を書きます
ここで初めて、`ValidationObserver`でセットした`ref`を使います。

```form.vue
<template>
    ~省略~
</template>

<script setup>
const nuxtApp = useNuxtApp();
const observer = ref();
const email = ref();

const post = async () => {
  if (!(await observer.value.validate())) {
    return;
  }
  const params = {
    email: email.value,
  };

  try {
    await nuxtApp.$axios
      .$post('/api/post/', params)
      .then(() => {
        alert('更新しました。');
      });
  } catch (error) {
    if (error.response.status === 400) {
      observer.value.setErrors(error.response.data.errors);
      alert('入力内容を確認してください。');
    } else {
      alert('更新に失敗しました。');
    }
  }
};
</script>
```

`setErrors`というものを使うと、`ValidationProvider`でセットした`vid`または`name`とバックエンドから帰ってきたkey名が同じものを見つけてくれて、自動でセットしてくれます。

以下、公式より`setErrors`説明
> Sets error messages on validation provider instances, the key should match each provider's vid or name.

以上です！


https://vee-validate.logaretm.com/v3/overview.html#getting-started
レコメンドシステムについて解説してみた

# レコメンドシステムとは
レコメンドシステムはAmazon,楽天などのECサイトやYouTubeの広告表示にも使われている。
**「利用者の興味がありそうなもの・サービスを提供するシステム」**
でありインターネット社会において**ページランク**と並び最も広く使われているアルゴリズムだと思います。アルゴリズム自体はとてもシンプルなので理解しやすいと思います。![Screen Shot 2023-03-18 at 14.16.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153036/9266f4df-3a25-cf34-b733-f65fd9cd2fc6.png)
**画像引用元**
[レコメンドとは？マーケティングで活用できるレコメンドシステムを徹底解説](https://www.brainpad.co.jp/rtoaster/blog/detail1/)

# おすすめ度を計算してみよう！
実際に例題を用いて計算しアルゴリズムの全体像をつかみましょう！レコメンドシステムは内容に基づいて推薦を行うもの、訪問者の閲覧履歴や購買履歴などのサイト訪問者固有の情報を利用して推薦を行うもの、2種類があります。

### 内容に基づいて推薦するタイプ
内容に基づいたリコメンドシステムは、訪問者に関する情報は使用しないで単純に手元にある情報(ニュースサイトなどであれば記事に関する情報)から関連性のある内容を計算によって求めることができます。例えば、熊本にTSMCが進出する記事を読んでいて下のようなキーワードが思い浮かびます。
![Screen Shot 2023-03-18 at 15.21.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153036/53401eb4-c01c-e249-88ab-024221fa6b86.png)
サイト訪問者がTSMC進出に関する記事を読んでいて次にどういった記事を表示するか問います。


|        |    記事a    |    記事b    |  記事c   |  記事d  |
|:-------|:-----------:|:----------:|:-------:|:------:|
| 熊本    |      1      |      0      |    0   |   1    |
| 半導体  |      1      |      1      |    1    |   1   |
| 雇用創出 |     1      |      0      |    1    |   0    |
| 電子機器 |     0      |      1      |    1    |   1    |
| 地域活性 |     1      |      0      |    0   |    0    |
| 経済効果 |     1      |     0       |    0    |   1    |

記事aと記事bの関連性をそれぞれのキーワードのうち共通しているものの割合(2つの記事のキーワードの数のうち、共通して存在するキーワードの数の割合を計算する)によって決定するように決めた場合、記事同士の関連性は総当たりで計算することができます。
|       |    記事a    |    記事b    |  記事c   |  記事d  |
|:-------:|:-----------:|:----------:|:-------:|:------:|
| 記事a  |    1.000      |      0.167  |    0.333   |   0.500    |
| 記事b  |    0.167      |      1.000  |    0.333    |   0.333   |
| 記事c |     0.333      |      0.333  |    1.000    |   0.333    |
| 記事d |     0.500      |      0.333  |    0.333    |   1.000    |

この処理によって、記事aに近い内容の記事を近い順に並べることが可能になります。この場合では、記事aに近いものは順に**記事d>記事c>記事b**という並びになります。

# 訪問者固有の情報に基づいて推薦するタイプ
閲覧履歴や購入履歴などのサイト訪問者固有のデータを利用してより訪問者に適した推薦をするために**強調フィルタリング**というアルゴリズムが利用されます。先述の内容に基づいたリコメンドシステムは、記事間のキーワードの共通性を導き出して関連性を定義することで内容が近いものを抽出していました。
それに対し、訪問者固有の履歴情報と訪問者以外の情報についての共通性を利用して**相関分析**をすることで個別化された推薦を行います。
![Screen Shot 2023-03-18 at 18.10.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153036/d471bc69-2f6f-4243-1645-673eafa9a07f.png)
ターゲットである、サイト訪問者Xさんと、それ以外のA~Eさんが10ある商品についてその商品ページを閲覧後に購入したかどうかを0、1で示したデータがあるとする。データがないところはハイフンで示しています。ここで「Xさんの購買記録から、次にXさんにお薦めする商品として最もふさわしいのはどれか」という問題を解きます。まずXとその他のA~Eとの相関係数を求めます。ハイフンの部分は無視した**商品(2,3,8,9,10)** の5つに注目します。

![Screen Shot 2023-03-18 at 18.26.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153036/ee30751d-aa4b-198f-1723-c18e55486944.png)

すると、正の相関(同じ購買傾向がある)を持つもので**0.5以上**の人がC,D,Eの3人とわかります。
Xがまだ発見していない商品は **(1,4,5,6,7)** の5つあります。C,D,Eで記録があるものについて商品ごとに平均値を計算し、これをおすすめ度とすれば以下の結果となります。
![Screen Shot 2023-03-18 at 18.34.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2153036/d8d9781a-6f45-2e18-97ea-93f4aa99fdd9.png)
よってXさんにお薦めするものは**商品5**となります。
敵対的攻撃はムチ，アシスト攻撃はアメ！（Assistive Signals for Deep Neural Network Classifiersを読んでみた）

# はじめに
CVPR2021のワークショップに投稿された[Assistive Signals for Deep Neural Network Classifiers](https://openaccess.thecvf.com/content/CVPR2021W/LXCV/papers/Pestana_Assistive_Signals_for_Deep_Neural_Network_Classifiers_CVPRW_2021_paper.pdf)という論文が面白い技術を利用していたので，簡単に紹介したいと思います！この論文の技術が発展することで，自動運転の精度がさらに向上するかも...？
# 概要
忙しい人向けにこの論文の概要をスライドにまとめました． まずは，これについてざっくりと紹介します
![スクリーンショット 2023-03-18 17.20.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274897/ee0cf92d-6a7c-cd32-3a7f-137281fb06a7.png)

### どんな論文？？
深層学習の分野で有名なタスク「クラス分類」に対して**新しいアプローチ**を取り入れ，既存のモデルの性能を向上させたものです．

### 先行研究と比べて何がすごい？？
敵対的攻撃の逆である**アシスト攻撃**を初めてクラス分類モデルに取り入れました．そして，既存研究よりも性能を向上させました．

### 技術の手法や肝は？？
敵対的攻撃はモデルの損失を増加させるような摂動を加えるというものですが，アシスト攻撃はその逆で，損失を減少させるような摂動を加えるというものです．簡単にいうなら，
>敵対的学習（敵対的攻撃を用いた学習）＝ モデルにムチを打って頑丈に育てる
>アシスト攻撃 ＝ モデルにアメを与えながら甘やかして育てる

みたいな感じです．

### どうやって有効だと検証した？？
オブジェクトの一部または全体にアシスト攻撃を施してクラス分類を行い，性能の向上を示しました．

# アシスト攻撃
では，アシスト攻撃とはなんぞやと．それを説明する前に[敵対的攻撃](https://arxiv.org/pdf/1412.6572.pdf)について軽く紹介します．敵対的攻撃とはAI君を騙すような攻撃をするということです．下の画像を見てみましょう．

![スクリーンショット 2023-03-18 18.05.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274897/046b5a5a-2316-6d98-4710-51efde7bac3b.png)

この画像が何を意味するかというと，ある優秀なAI君は左の画像をパンダと認識するのですが，それに真ん中のノイズを加えた右の画像をテナガザルとして認識してしまうということです．

右の画像は人間にはパンダにしか見えないのですが，AI君は真ん中のノイズに大きな影響を受けて間違ってまうのです！

では，**AI君を騙すのではなくサポートするようなノイズを加えることで性能が向上するのではないか？？この考えがアシスト攻撃です！！**

# 実験
下の画像が実験結果です．左の3Dオフジェクトに真ん中のノイズを加えたものが右のオブジェクトです．右のオブジェクトをよくみてみるとノイズがくっ付いているのがわかります．オブジェクトの上に書かれている数字がオブジェクト分類名とそのスコアです．

![スクリーンショット 2023-03-18 18.24.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3274897/2b9c82fb-8fbc-a8aa-5fd6-8c61ca118c8f.png)

真ん中の空母がわかりやすいですね，オリジナルのAI君は空母を空母として分類してくれません．しかし，アシスト攻撃によって生成したノイズを加えるとちゃんと分類できていますね！！

この技術で生成したノイズを自動車全てにくっつけることができれば，車は車を認識しやすくなり，自動運転の技術は向上するかもしれませんね
Googleデジタルマーケティング＆Eコマース： 有料ソーシャルメディアの活用方法

# はじめに

”Googleデジタルマーケティング＆Eコマース プロフェッショナル認定証"　の受講が完了しました(2022/3/3)。私がこのコースから得られた素晴らしい体験を、テーマごとに分割して、わかりやすくご紹介しています。興味を持たれた方は、是非下記を受講してみてください。

https://jp.coursera.org/professional-certificates/google-digital-marketing-ecommerce

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/24ea32fb-2fb3-bdb2-462a-4ffc4d60a96f.png" width="800">

# オーガニックと有料ソーシャルメディアの連携

オーガニックと有料ソーシャルメディアは連携し、どちらも強力なソーシャルメディア戦略の重要な部分となります。

オーガニック・ソーシャルメディアは、

- 新規顧客やフォロワーの獲得
- ブランドのプロモーション
- オーディエンス・リサーチ

のために利用できます。これらの目標を達成するために、有料ソーシャルメディアも利用することができます。有料のソーシャルメディアもまた、いくつかの異なる目標を達成するために使用することができます

| ソーシャルメディア | 活用 | 
| :--- | :--- | 
| オーガニック |コミュニケーションと関係構築を通じて顧客とのつながりを育むのに理想的です。 | 
| 有料 | ブランドの認知度を上げ、特定のオーディエンスをターゲットにし、コンバージョンを促進するのに適しています。 | 

# 有料ソーシャルメディアの活用方法

### <font color="MediumBlue">オーガニックをブーストする</font>

分析ツールを使って、ターゲットオーディエンスに最も共感されるコンテンツを特定することができます。そして、ペイドメディアの予算から、パフォーマンスの高いオーガニック・コンテンツを後押しし、より多くの人にリーチできるようにすることができるのです。

- 例えば、Hootsuiteのプロモーション機能のようなツールを使って、トップ投稿を選択してブーストしたり、選択した基準に基づいて成功した投稿をブーストする自動トリガーを設定したりすることができます。

### <font color="MediumBlue">類似したオーディエンスをターゲットにする</font>

有料ソーシャルメディアを利用することで、より正確に理想の顧客をターゲットにすることができます。既存の顧客について収集したデータを使用して、類似したオーディエンスを作成することができます。類似したオーディエンスは、まだあなたのブランドを紹介したことがない、似たような属性と行動を持つ人々で構成されます。

- 例えば、過去6ヶ月以内に貴社から購入したことがある顧客に類似したオーディエンスを作成することができます。そうすれば、そのオーディエンスに関連性の高い広告を作成することができます。

### <font color="MediumBlue">A/Bテストを使って最適化する</font>

広告を出す前に、A/Bテストを使って最適化することができます。ソーシャルメディアでは、A/Bテストは、2つのバージョンの広告を比較して、どちらがより高いコンバージョン率を持っているかを判断することを含みます。

ソーシャル広告にはお金がかかるので、そのお金がうまく使われていることを確認したいものです。ソーシャルメディア広告に多額の予算を投じる前に、少人数のオーディエンスで広告をテストし、その効果を確認することができます。
- A/Bテストでは、広告のメッセージ、コールトゥアクション、コピーライティング、ビジュアル、配置、フォーマットの強度を評価することができます。
- また、広告をさまざまな人口層でテストすることもできます。

テストの結果に基づいて、あなたはそのパフォーマンスを向上させるために広告を調整することができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/6e3dd362-b904-784e-4b53-37e130cb6e29.png" width="600">

### <font color="MediumBlue"></font>

オーガニック投稿のA/Bテストは、どのコンテンツが最もパフォーマンスが高いかについての貴重な洞察を提供することができます。これは、あなたが促進するために支払うべきコンテンツや広告に含めるべき要素についての意思決定を支援することができます。

### <font color="MediumBlue">リマーケティングする</font>

ソーシャルメディア上の広告をリマーケティングすることで、より多くのコンバージョンを促進することができます。リマーケティングを通じて、すでにあなたのビジネスに馴染みのある人々にリーチすることができます。

- 例えば、ある人があなたのサイトでジーンズをショッピングカートに入れましたが、購入に至らなかったとします。リマーケティング広告で、そのジーンズや類似の商品をソーシャルメディアのフィードに表示することで、コンバージョンステージに移行させることができるかもしれません。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/faed897a-b3fd-025a-b94d-08f8c96da86c.png" width="600">

:::note info
特定の目標を達成するために戦略的に使用する場合、有料ソーシャルメディアは、マーケティングファネルを通じて顧客を移動させるのに非常に効果的です。
:::
[備忘録].profileファイルが行方不明になった問題


### 解決したかった問題
WSLでBashを使っており、Bashの勉強の一環として、.profileに環境変数を追加し、常に使用できるようにする作業をしていた。しかし、何らかの問題によって.profileファイルが見つからなくなってしまった。

### 行っていた操作と問題の発生
bashのコマンドラインで

```
code ~/.profile
```

と入力し、vscodeで.profileファイルを開いた。
次に、ファイルの中に
```
export x=1000
```
という行を追加して保存を押し、VScodeを閉じた。
次に、Bashを一度終了してから再度開き、
```
echo $x
```
と入力したところ、1000という値が表示されたため、環境変数が正常に設定されたことが確認できた。
しかし、次にもう一度"code ~/.profile"と入力したところ、新しい.profileが作られるようになってしまい、環境変数を設定した.profileは行方不明になってしまった。


### 考えたこと、試してみたこと
・.profileを誤って削除してしまったのでは？
→削除の操作はしておらず、環境変数も有効なままのため考えにくい。

・mv .profile ~でホームディレクトリに移動させることを試みたが、Enterを押しても反応しなかった。

### 解決した時に行った操作

・find . -name .profileコマンドでパスが取得できたので、cdコマンドでprofileのあるディレクトリに移動した。
→cd ~でホームディレクトリに移動
→code ~/.profileで正常に開けるようになっていた。


### 疑問点
・ファイルの移動の操作はしていないはずなのに、なぜかかなり下の階層にあるms-vscode.js-debugというフォルダに.profileが入っていた。

・.profileがホームディレクトリに戻った理由も不明。historyコマンドで操作履歴を確認しても、mv .profile ~のような移動操作が表示されておらず、バグで表示されていないだけで実際には行えていたのか疑問が残る。
【Flutter】カメラが起動されたとき等に画面表示の向きを変える方法

## 概要

先日、FlutterのアプリでQRコード起動の機能を追加した際、起動したカメラの向きを調整したいことがありました。

## 解決方法

[RotateBox](https://api.flutter.dev/flutter/widgets/RotatedBox-class.html)を使って画面を回転させることができます。
もっと良い方法もありそうですが、とりあえずこれを使って解決することができました。

```dart
Widget build(BuildContext context) {
    return RotatedBox(
        quarterTurns: -1,
        child: Scaffold(
          body: Column(
            // ...省略
```
Java_メソッドのオーバーロードを理解しよう

paizaラーニングforTEAM Java入門編
レッスン8の#07

```Java:8-#07
// メソッドのオーバーロード

public class Main {
    public static void main(String[] args) {
        attack();
        attack("スライム");
        attack(10);
        attack("ドラゴン", 3);
    }
    
    public static void attack() {
        System.out.println("勇者は、敵を攻撃した。");
    }
    
    // 攻撃する相手も引数で指定したい
    // オーバーロードを使う
    // 引数の数やデータ型によって呼び出されるメソッドが区別される
    public static void attack(String target) {
        System.out.println("勇者は、" + target + "を攻撃した。");  
    }
        
    public static void attack(int number) {
        System.out.println("勇者は、" + number + "匹の敵を攻撃した。");  
    }
    
    public static void attack(String target, int number) {
        System.out.println("勇者は、" + number + "匹の" + target + "を攻撃した。");  
    }
}
```