OmniAICreator/Qiita-1.07M huggingface dataset:
paizaに挑戦して気づいた課題

>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼
https://twitter.com/takeshi_program

おつかれさまです。
今日はpaizaのコーディング課題について挑戦したので、その時の気づきを記事にしました。ちなみに私はpaizaランクCでしたが、本記事の3つの対策をしてBにランクアップできました。

是非参考にして頂ければ嬉しいです🥺

### はじめに
本記事は以下の読者様が対象です。
<br>

* <b>paiza Cランカー
* <b>プログラミング初心者
* <b>コーディングが遅いと感じている人

### 先に結論
この3つをやるだけでCランカーの頃と比べてコーディングが早くなりました。
* <b>変数名、関数名を直感的に分かりやすいものにする。<b/>
* <b>putsやprintfメソッドで途中経過を書いておく<b/>
* <b>arrayの組み込みメソッドについて把握する

### 気づいた課題
自分がpaizaのコーディング中に気づいた課題が以下です。
* 組み込みメソッドを調べるのに時間が掛かっている
* 組み込みメソッドで楽したいため検索するが、それに時間が掛かっている
* プリコンパイル時のエラーなのか、コンパイル時のエラーなのかわからない
* 英語に翻訳する際に時間が掛かる
* その都度変数の中身を確認している
* 目標のデータ構造が分からないままコーディングしてる
* 最後の出力する際にどのメソッドを使えばよいか決めてない
* コードを書いている途中で何がしたいのかが分からなくなって迷子になっている。

### 各課題の対策
* 組み込みメソッドを調べるのに時間が掛かっている
    * <b>対策: </b>   組み込みメソッドについて把握する
* 組み込みメソッドで楽したいため検索するが、それに時間が掛かっている
    * <b>対策: </b>   組み込みメソッドについて把握する
* プリコンパイル時のエラーなのか、コンパイル時のエラーなのかわからない
    * <b>対策: </b>putsやprintfメソッドで途中経過を書いておく
* 英語に翻訳する際に時間が掛かる
    * <b>対策: </b>英語力をつける
* その都度変数の中身を確認している
    * <b>対策: </b>putsやprintfメソッドで途中経過を書いておく
* 目標のデータ構造が分からないままコーディングしてる
    * <b>対策: </b>どんな出力が欲しいか全体像を描き、逆算して考える。
* 最後に出力する際、どのメソッドを使えばよいか決めてない
    * <b>対策: </b>どんな出力が欲しいか全体像を描き、逆算して考える。
* コードを書いている途中で何がしたいのかが分からなくなって迷子になっている。
    * <b>対策: </b>変数名、関数名を直感的に分かりやすいものにする。

### 効果のあった対策3選
1週間でそれぞれの対策に取り組んでみて、即効性のあったものが以下の3つでした。
<br>

* <b>コードを書いている途中で何がしたいのかが分からなくなって迷子になっている。<b/>
     * <b>対策: </b>変数名、関数名を直感的に分かりやすいものにする。<b/>

* <b>その都度変数の中身を確認している。<b/>
    * <b>対策: </b>putsやprintfメソッドで途中経過を書いておく<b/>

* <b>組み込みメソッドを調べるのに時間が掛かっている<b/>
    * <b>対策: </b>   組み込みメソッドについて把握する

<br>
<br>
<br>

### 各対策に取り組んだ感想

* <b>変数名、関数名を直感的に分かりやすいものにする。</b>
色んな技術記事に「命名は大事ですよ～」と書かれているものを見たことはありましたが、実際にpaizaの課題でそれを痛感できました！！
この対策をしてみて、自分の中で良い命名の定義がはっきりとしました。


「良い命名とは」
コードを確認しなくても、その変数にはどんなデータが入っているのかが分かる名前であること

この定義を意識することによって、いちいち変数やメソッドの中身をチェックしなくなりました、
（良いメソッド名を設定すると、引数はどんなデータ構造で渡したらよいか、どんなデータが戻ってくるのか一目でわかるようになりました。）

* <b>putsやprintfメソッドで途中経過を書いておく</b>
どうしても良い命名をしていても値の中身を確認しておきたい事ってありますよね？その時に例えば以下のようなコードを自分は入れるようになりました。
``` ruby
array_index
puts "array_index #{array_index}"
```
以前は
``` ruby
puts array_index
```
としか書いておらず、エラーが発生する度にputs書いて、解決したら消して、みたいなことしていました。

式展開を使うことでより分かりやすくプリントデバッグができ、putsを書く回数が減ったし迷子にならないようになりました。

* <b> 組み込みメソッドについて把握する</b>
これが一番効果があったかもしれません。ただ、自分が覚えたのは全体のほんのちょっとだけ、しかもarrayの組み込みメソッドの一部のみです。
私は覚えるのが苦手な質なのでarrayメソッドを層別して覚えました。
私がmiroでarrayメソッドを層別したものがあるので、これを使えば皆さんも覚えやすくなると思います。👍
https://miro.com/app/board/uXjVPHfC2SM=/?share_link_id=698813666816

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534058/f47d54a2-d5b6-76e7-cd4f-48300f14ac9f.png)

### おわりに
いかがでしたでしょうか？
この記事が参考になれば幸いです。😆😆😆
ひとまずBへのランクアップは3つの事をやるだけ誰でも到達できると思います。

ちなみに、現在Aへのランクアップを目指して頑張っていますが、結構難しいですね。
オブジェクト指向でコーディングしないとさすがにきつくなってきました。
あと、テストがクリアできないという現象も発生しているので、根本的に何かが足りない気がしています。

またAへのランクアップ記事を書きたいと思いますので、おたのしみに～
TailwindcssがContainer Queriesを実装したので試してみた

## はじめに
Tailwincss v3.2.0がリリースされ、いくつかの機能が新しく追加されたようです。その中でも気になったContainer Queriesを今回は試してみたいと思います。

https://tailwindcss.com/blog/tailwindcss-v3-2



https://github.com/tailwindlabs/tailwindcss-container-queries

## Media Queriesとの違い
結論からいうと、Media Queriesはwindowのサイズを参照し、Container Queriesは指定した親要素のサイズを参照します。共通している点は、条件を満たした場合は指定したCSSを適用し、満たさない場合は適用させないという点です。

## Conteiner Queriesを試してみる
### インストール
では早速Tailwindcssをインストールしていきます。
```
npm install tailwindcss@3.2.0
npm install @tailwindcss/container-queries
```
### configに追記
tailwind.config.jsのpluginsに下記を記述します。
```js:tailwind.config.js
module.exports = {
  plugins: [
    require('@tailwindcss/container-queries'),
  ],
}
```
これで準備は出来ました。では実際にスタイルを実装して試していきたいと思います。
## スタイルの実装
記述する方法は、基準としたい親要素に`@container`を記述し、適用させたいユーティリティの先頭に`@`をつけます。
```html:index.html
<div class="flex flex-col gap-4 p-4">
    <div class="@container w-[300px]">
        <div class="bg-green-300 @[300px]:bg-gray-300 p-8">
            Container Queries適用
        </div>
    </div>
    <div class="w-[300px]">
        <div class="bg-yellow-300 p-8">
            300pxの要素
        </div>
    </div>
</div>
```
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884805/d1903908-0474-59bc-00e5-bad74293ee1e.png">

 `@container`で基準とした親要素のサイズを変えてみます。

```html:index.html
<div class="flex flex-col gap-4 p-4">
<!--200pxに変更-->
    <div class="@container w-[200px]">
        <div class="bg-green-300 @[300px]:bg-gray-300 p-8">
            Container Queries適用
        </div>
    </div>
    <div class="w-[300px]">
        <div class="bg-yellow-300 p-8">
            300pxの要素
        </div>
    </div>
</div>
```
<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884805/ea0d6730-2fe7-0152-d2b0-5eb2eab13fd1.png">

無事動きました！指定した親要素の幅を変更することで適応するCSSを出し分けることができています。

## まとめ
今回はTailwindcssに実装されたContainer Queriesを使ってみました。ReactやVueのようなコンポーネントライブラリではwindowのサイズより親要素のサイズを参照した方が都合がいい場合があるのではないかと思います。そんな時にContainer Queriesを用いて記述量を減らし、より快適に開発をしていきたいです。

## 最後に
### GoQSystemでは一緒に働いてくれる仲間を募集中です！
ご興味がある方は以下リンクよりご確認ください。


https://goqsystem.recruit.site/?qiita=3efbb01a8a05768eaa78
【GitHub】VScodeからGitHubとSSH接続する

## 前書き
VScodeからGitHubとSSH接続する方法がわからなかったので調べてみた。タイトルにはVScodeと記述しているが、特にVScodeに限った話ではないので、様々なアプリケーションやサービスでも同様である。

# SSH接続とは
SSHは「Secure SHell」の略で、暗号技術を用いてSecure（安全）な通信を可能にするプロトコル（データをやり取りする際の決まり事）。自分のPCからサーバにリモートログインしたり、ファイルを転送する際に使用されるのが最も一般的である。

## 公開鍵認証方式
公開鍵認証は「秘密鍵」と「公開鍵」という２種類の鍵のペアを用いて行う認証方式である（鍵と言っているが実態はファイル）。サーバにログインするユーザーは事前にキーペア（秘密鍵と公開鍵）を作成しておく。そのうちの公開鍵をサーバに登録しておいて秘密鍵は自分のPC内に保管しておく。サーバにログインするときは、自分が持っている秘密鍵で署名を作成し送信する。サーバーは受け取った署名をペアとなる登録済みの公開鍵で検証し、成功した場合に限りログインを許可するという仕組みである。

:::note warn
公開鍵認証方式は、秘密鍵と公開鍵のペアによる暗号化・複合ではなく、署名・検証によって行われるものである。
:::
@angel_p_57様からご指摘いただき、記事を修正させていただきました。以下の記事にSSHの公開鍵について詳しく書いてあります。

https://qiita.com/angel_p_57/items/19eda15576b3dceb7608

#### 秘密鍵
* 誰にも知られてはいけない鍵が記述されているファイル。　
* PC側に置いておくもの

#### 公開鍵
* 人に知られてもよい (公開することが可能な) ファイル。
* サーバ側に置いておくもので、サーバにあらかじめ登録する必要がある。
::: note
例えば、銀行印による押印を行員がお届け済みの印影と照らし合わせて、本人確認をするようなものがこの公開鍵認証になる。
:::

## 公開鍵と秘密鍵を作成する
VScodeを開きターミナルでGitbashを起動する。
まずは、鍵を格納するフォルダに移動する。
```
$cd ~/.ssh
```
そして、下記のコマンドでカギを生成する。
```
$ssh-keygen -t rsa
```
実行してみると
```
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
```
と出てくるので、そのままエンター。

::: note warn
デフォルトでは鍵は「id_rsa」という名前だが、例えば名前を「id_git_rsa」に変更するなら
```
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_git_rsa
```
と入力する。(空白ならデフォルトの「id_rsa」のまま)　ちなみに、rsaはRSA暗号のことで暗号アルゴリズムの一つ。
:::

エンターを押したら
```
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```
と出てくる。ここではパスフレーズ(パスワードのようなもの)を設定できるが、無くても大丈夫なのでそのままエンターでＯＫ
すべて実行すると、~/.ssh内に「id_rsa」と「id_rsa.pub」が作成される。

::: note warn
すでに「id_rsa」を過去に生成している場合、上書きされてしまうので注意する。
:::

### GitHubに公開鍵を設定する

https://github.com/settings/ssh

上記からGitHubの設定画面に移動し、「New SSH key」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704823/34d49e12-13f8-00cc-bd0c-dd1103965730.png)
titleには、公開鍵の名前を(デフォルトのままなら「id_rsa」)、 keyには公開鍵の中身を記述する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2704823/9b7911f6-47c1-0ce2-b63d-069bb8c7fb31.png)
公開鍵の中身は下記のコマンドでクリップボードにコピーできる。
```
#Windowsなら
$ clip < ~/.ssh/id_rsa.pub 
#Macなら
$ pbcopy < ~/.ssh/id_rsa.pub
```
すべて記述完了したら、「Add SSH Key」をクリックして設定は完了。
SSH接続ができているか確認してみる。

```
$ ssh -T git@github.com
```
これで
```
Hi ユーザ名! You've successfully authenticated, but GitHub does not provide shell access.
```
と出てきたらSSH接続は成功。

## 引用
こちらの記事の内容は以下の記事から引用しています。鍵の名前を変更した際にうまくいかなかった場合なども詳しく書いてありますので、ご確認ください。


https://qiita.com/shizuma/items/2b2f873a0034839e47ce

## おわりに
実際に手を動かしてみることで、それぞれ単語の意味や使い方がよく分かった。SSH接続にもメリットがあれば、デメリットもあるのでもっと詳しく特徴を勉強して、用途や目的に応じてそれぞれの認証方式を正しく使い分けれるようになっていきたい。
## 参照サイト
- [ CLOUD NAVI 用語集　SSH公開鍵認証とは](https://pfs.nifcloud.com/navi/words/ssh.htm#:~:text=%E3%80%8C%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%80%8D%E3%81%A8%E3%81%AF,%E4%BF%9D%E7%AE%A1%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)
- [「よく分かる公開鍵認証」～初心者でもよくわかる！VPSによるWebサーバー運用講座(2)](https://knowledge.sakura.ad.jp/3543/)

https://qiita.com/angel_p_57/items/19eda15576b3dceb7608

https://qiita.com/shizuma/items/2b2f873a0034839e47ce
Djandoクラスビューの fileds と form_class 属性は一方のみでOK

Udemyで公開している[Djangoコースの一つ](https://www.takux.one/#django-ecweb-vegeket)で Djangoのクラスビューにおけるクラス変数、`fields` と `form_class` について質問をいただいた内容について、ここでご紹介いたします。

質問としては

> SignupViewにはfieldsがなくて、AccountUpdateViewにはfieldsがあるのはなぜでしょうか？
> 

というような内容のものでした（言葉は一部省略しています）。

該当のコードは以下です。

```python
# 該当箇所のみ抜粋

class SignUpView(CreateView):
    form_class = UserCreationForm  # この属性
    success_url = '/login/'
    template_name = 'pages/login_signup.html'
    ...

...

class AccountUpdateView(LoginRequiredMixin, UpdateView):
    model = get_user_model()
    template_name = 'pages/account.html'
    fields = ('username', 'email',)  # この属性
    success_url = '/account/'
    ...
```

正直にお伝えすると、コース作成から現時点で大分日が経っていて、こちらになぜそうしたのかを覚えていませんでした。

ということで、調べ直してみると、

[公式ドキュメント](https://docs.djangoproject.com/en/4.0/topics/class-based-views/generic-editing/)にもしっかり記載されていました。

> The `fields` attribute works the same way as the `fields` attribute on the inner `Meta` class on `ModelForm`. Unless you define the form class in another way, the attribute is required and the view will raise an `ImproperlyConfigured` exception if it’s not.
If you specify both the `fields` and `form_class` attributes, an `ImproperlyConfigured` exception will be raised.
> 

つまり、`form_class`属性を記載しない場合は`fileds`属性は必須で、かつ両方指定はできない、ということになります。

form_classではforms.pyなどで作成したクラスを渡します。そのクラス内でもfiledsを指定するので、重複を避けるため、どちらかだけでいいということになります。
WindowsでPython venv仮想環境作成

Windowsの方がPythonの仮想環境を作る場合、はじめに警告文が出たりしてどうするのか聞かれることがあったので、手順を残しておきます。


まず PowerShell を開き、下記内容を実行してください。


> 💡 **仮想環境構築が初めての場合** 初めて Windows で仮想環境を作成しようとすると PSSecurityException が発生することがあります。その場合は次のコマンドを実行してください。

```
Set-Executionpolicy RemoteSigned -Scope CurrentUser
```

仮想環境の作成は次のコマンドを入力します。うまくいくと venv というフォルダが作成されます。

```
python -m venv venv
```

仮想環境のアクティベート（有効化）は次のコマンドを実行します。

```
venv\Scripts\activate
```

うまくいくと PowerShell 内の表記に `(venv)`と記載されます。
Android studioアプリ開発の解説動画を観て、おみくじアプリを作りました（追記:機能を付け加えました）。

<h3>今の自身のレベル</h3>
<ul>
<li>paizaラーニングのJava入門編6まで学習した</li>
<li>入門編7に入る前に、Cランクレベルアップメニューをした</li>
</ul>

<h3>なぜ入門編を終わらせる前にアプリ開発を学習したいと思ったのか</h3>
paizaラーニングである程度、プログラミングらしいことができるようになってきたので、実際に動くものをパソコンで作ってみたいと思ったからです。

<h3>学習させていただいた解説動画</h3>
こちらの解説動画で学習させていただきました！<br>Android Studioを使ったアプリ開発を勉強するにあたって、Android特有の関数(AndroidSDK)が分からない…という壁にぶち当たっていたのですが、こちらの解説動画では、それについてどのように作用するのかなど細かく解説されており、詰まらずにアプリを完成させることができました！

https://youtube.com/playlist?list=PLfrvxnJUaviWXfZiJ6kCCUOidM5omF-t5

<h3>出来上がったもの</h3>

![omikuji.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2916537/96be63d2-9f5e-d117-b232-8a9a249b6ec7.gif)

<h3>この解説動画を学習して学んだこと</h3>
<ul>
<li>基本的なAndroidSDK</li>
<li>ボタンの作成方法</li>
<li>ボタンを押した後の処理方法</li>
<li>トーストの出し方</li>
<li>画面遷移の方法</li>
</ul>

<h3>これからやりたいこと</h3>
おみくじを引いて結果が出るところまで作ってみたところ、もう一度おみくじを引きたくなりました。次は、解説動画通りに作ったおみくじアプリに、戻るボタンを取り付けることを目標にしたいと思います。

<h3>(追記)戻るボタンを取り付けてみました</h3>

![omikuji_return.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2916537/9733f3cd-0b19-f29c-7560-2195bfea7633.gif)
「ソフトウェアアーキテクチャ・ハードパーツ」を読んだので、その感想など

[ソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析 | Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani, 島田 浩二 |本 | 通販 | Amazon](https://www.amazon.co.jp/dp/4814400063)

<img src="https://m.media-amazon.com/images/I/41kBThOzlFL._SX389_BO1,204,203,200_.jpg" width=40% />

を読み直したのでその読書感想文です。

> 本書は、読者が自身のアーキテクチャ上の難題に対して効果的なトレードオフ分析を行い、より良い決定ができるようにするための書籍です。
本書では、サービスの粒度やデータの所有権、コードの再利用やワークフローの調整、可用性や信頼性の実現といった現代のソフトウェアアーキテクチャの難題と、それに対するさまざまなアプローチやパターンを紹介します。そして意思決定を難しくするトレードオフについて、モノリスを分解しマイクロサービスアーキテクチャに再構築する例を通して詳しく説明します。
『ソフトウェアアーキテクチャの基礎』の著者らによる現代的なトレードオフ分析とその実践を学べる本書は、現代のソフトウェアアーキテクチャに関わるソフトウェア開発者にとって必携の一冊です。


「読み直した」というのは[「ソフトウェアアーキテクチャの基礎」](https://qiita.com/e99h2121/items/1844f5ed8da453a6dfb0)
に引き続きありがたくもこの本の査読に参加させていただいたからであります。

## 短い感想

- [「ソフトウェアアーキテクチャの基礎」を読んだので、その要点 - Qiita](https://qiita.com/e99h2121/items/1844f5ed8da453a6dfb0) の続編。アーキテクトの仕事の難題をストーリー仕立てで追体験できる。
- 「ハードパーツ」。難題、ということになる。実際に胃が痛くなる部分が色々。だけではなく「堅い部分」(ソフトウェアアーキテクチャという「ソフトウェアの中のハード（硬い）な部分」) という意味とのこと。
- トレードオフを探る。アーキテクチャは「ベスト」を探れるものではなく、ケースバイケースであったり、その係数が色々。「どちらかを立てるとどちらかが立たなくなる」選択の連続と表現されている。
- Architecture Decision Records を残しながら物語が進む。参考:
    - https://adr.github.io/
    - [アーキテクチャの「なぜ？」を記録する！ADRってなんぞや？ - Qiita](https://qiita.com/fuubit/items/dbb22435202acbe48849) ... こちらにテンプレート多数
    - [アーキテクチャに関するドキュメントの残しかた - ADRとARCHITECTURE.md テンプレート - Qiita](https://qiita.com/e99h2121/items/f508ef4c9743b8fc9f5b)
- こんな読書会もあったようだ
    - [第1回 Software Architecture: The Hard Parts 読書会@リモート - connpass](https://javaee-study.connpass.com/event/228183/)
- 「最悪でないもの」を探るべく対話を繰り返しながらトレードオフの選択をしていく。
- 大団円。「我々のアーキテクチャはほかのものとは違いすぎるので一般的なアドバイスに頼ることはできない」「トレードオフ分析という大変な作業を常に行わなければならない」しかし、「それはデメリットではなくメリット」
    - 次元を分離してトレードオフ分析を行う方法を皆が学べば、自分たちのアーキテクチャについて具体的なことが分かるようになる。
- 今回も、査読は大変楽しかった！！！


## 参考
- [Software Architecture: The Hard Parts | Architecture The Hard Parts](https://architecturethehardparts.com/)
- [O'Reilly Japan - ソフトウェアアーキテクチャ・ハードパーツ](https://www.oreilly.co.jp/books/9784814400065/)
- [『ソフトウェアアーキテクチャ・ハードパーツ』 - Don't Repeat Yourself](https://blog-dry.com/entry/2022/10/23/015429)
- [『ソフトウェアアーキテクチャ・ハードパーツーー分散アーキテクチャのためのトレードオフ分析』 - snoozer05's blog](https://snoozer05.hatenablog.jp/entry/2022/10/27/112254)
- [ソフトウェアアーキテクチャ・ ハードパーツ: Software Architecture The Hard Parts - Speaker Deck](https://speakerdeck.com/snoozer05/20221129-software-architecture-the-hard-parts)

以上です～
BlenderをglTFに変換する際、Area Lightは使えない

## この記事の概要

ある日BlenderからglTFに変換してthree.jsで使おうと思っていた際、光源が上手く読み込めませんでした。
軽く調査してみたので記事にしました。

## glTFにはArea Lightに相当するものがない

glTFにて用意されているLight Typeは以下の3つです。[^light-types]

[^light-types]: https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/README.md

- Directional
- Point
- Spot

このうち、DirectionalはBlenderでいうSunに該当し、あとの2つは同名のものがあります。

このように、Area Lightに相当するものがないため使えません。
Blenderでデータを作る時点で他のLightを使って制作するしかなさそうです。

ただし、将来的には実装されるかもしれません。
2022年10月31日現在、Proposalは存在しています。[^proposal]

[^proposal]: https://github.com/KhronosGroup/glTF/pull/1948

## three.jsで読み込んでみた際の見た目

オマケ程度ですが、何かの役に立てばと思い載せておきます。
自動でDirectional / Point / Spot Lightに変換されるわけでもなく、ただただ反映されないだけです。

オブジェクトとライトを次のように配置し、ライトの種類だけを変えます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/b564550b-7bd3-4987-7b91-df208c60daf9.png)

| Directional (Sun) | Point | Spot | Area |
| --- | --- | --- | --- |
| ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/2d7c5020-d26d-18c4-eddf-db4458986ba6.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/1a5f0b16-c40e-8600-f46d-1cae069e5d26.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/345b14bc-22f1-6331-083a-4081c2eb87df.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/42dcc5ae-e28e-ded7-f228-df9240d50545.png) |

検証した際のコードは以下です。

```javascript
import * as THREE from "three";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";

const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.physicallyCorrectLights = true;
renderer.outputEncoding = THREE.sRGBEncoding;
renderer.toneMapping = THREE.ACESFilmicToneMapping;

const renderArea = document.getElementById("render");
renderArea.appendChild(renderer.domElement);

const scene = new THREE.Scene();

const camera = new THREE.PerspectiveCamera(
  25,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);
camera.position.set(0, 5, 14);
camera.lookAt(0, 1, 0);

const ambientLight = new THREE.AmbientLight(0x404040, 2);
scene.add(ambientLight);

const loader = new GLTFLoader();
loader.load(
  "assets/light.glb",
  function (gltf) {
    scene.add(gltf.scene);
    render();
  }
);

function render() {
  renderer.render(scene, camera);
}
```

---

最後まで読んでくださってありがとうございます！
Twitterでも情報を発信しているので、良かったらフォローお願いします！

https://twitter.com/xrxoxcxox

Devトークでのお話してくださる方も募集中です！

https://jobs.qiita.com/employers/qiita-inc/dev_talks/489
2022/10/31主にITとかセキュリティの記事

大手ECで使用の入力フォームプログラム改ざん、3800件以上のクレカ情報など流出(10/29)
https://www.zaikei.co.jp/article/20221029/695256.html

サイバーセキュリティ政策
https://www.meti.go.jp/policy/netsecurity/index.html#partnership

じゃらんを偽るフィッシング確認、注意を(10/29)
https://news.mynavi.jp/techplus/article/20221029-2498590/

ＪＡ大潟村不正アクセス　身代金要求型ウイルスの攻撃と発表(10/29)
https://www.sakigake.jp/news/article/20221029AK0007/

グーグル、イーサリアムノードのホスティングサービスを開始(10/29)
https://coinpost.jp/?p=402231

「ロックダウンモード」って何ですか? - いまさら聞けないiPhoneのなぜ(10/29)
https://news.mynavi.jp/article/20221029-iphone_why/

日本の暗号資産オンチェーン取引が1年間で倍増、NFTにも30％の「アップル税」【10/22～10/28のトップニュース】(10/29)
https://www.coindeskjapan.com/164153/

Googleが64bitのみのAndroidスマートフォンのメリットなどを説明(10/29)
https://www.helentech.net/news-26371/

北朝鮮のスパイ組織、韓国を標的としたAndroidマルウェアを配布(10/29)
https://news.mynavi.jp/techplus/article/20221029-2497750/

若い世代でも被害者が急増！迷惑電話対策アプリ「Whoscall」が公開した詐欺電話、詐欺SMSの実態(10/29)
https://dime.jp/genre/1489629/
PowerApps 参照型,ID連携どちらを採用すべきか

表結合を行う場合、参照型とID連携の２択があるが、基本的に参照型を利用するのがよい理由としては、コードが短くならからである。１対多の場合大差がないが、多対多にするとだんぜん参照型の方がローコードになる。またモデル駆動型を併用して開発するのであれば、これも参照型にするしかない。

参考文献：https://m365powerapps.kagoyacloud.com/ ←　よくまとまってます
Ubuntuのデスクトップ環境をBudgieに切り替える

```
# パッケージを最新に更新
sudo apt update
sudo apt upgrade

# budgieをインストール
# インストール中になんか聞かれるので`lightdm`を選択
sudo apt install ubuntu-budgie-desktop

# OS再起動
sudo reboot
```

再起動後、`Sorry Ubuntu 2x.xx had Experienced an Internal Error`というエラーが発生することがあるので一部パッケージをパージする
```
sudo apt purge gnome-tweaks 
sudo apt purge gnome-shell-extensions
```

めっちゃ綺麗なのでお勧めです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582097/f474b3c3-ddd5-27e2-41fe-b27c22e6d897.png)
openFOAMソルバーの改造_scalarTransportFoam編

なんでソルバー改造？
--
現在openFOAMを趣味で使っており、interFoamのチュートリアルの改造で遊んでます。
しかし、チュートリアルだけをいじってるとこんな感情が浮かんできます。
「呪文多すぎてなにが起きてんのか分かんねぇ・・・」と。

「・・・チュートリアルの中身、もっといえばソルバーの中身はどうなって動いてるんだろう??」と。

ということで、**もうソルバー改造に手を出せば色々分かるのでは！！？？** と血迷った結果がこの記事の執筆背景になります。

この記事の目指すところ
--
とはいえ、いきなりinterFoamとかいうVOF法（気液・液液界面を表現できる計算手法）の塊に手を突っ込むのはヤバそう。そこで、最も単純（そう）なソルバーを使用することにしました。そのソルバーが **scalarTransportFoam** です。

 **※これ以降、scalarTransportFoamの改造を解説しているオープンCAE学会Shibata Takahiro氏の動画を参考にしています。** 

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


scalarTransportFoamソルバーに対して、以下二点の変更を行ってみます。

* 移流拡散方程式を改良して、スカラー量の湧き出し点を作る
* 新しいソルバー用のチュートリアルケースを作成する。

このソルバーはスカラー量の移流拡散方程式を解くだけっぽいのですが、改造を行っていくなかで把握出来たこのソルバーの変数設定方法や、主要なソルバー部分以外の変更必要箇所なども記載していきます。

開発環境
-
ソルバー改造時の開発環境は以下の通りです。
* OS : Ubuntu 20.04LTS
* openFOAM : openFOAM-v2112(ESI版)

大まかなソルバー改造手順
-
1. ソルバーがあるディレクトリに移動
    ~~~
    $ cd $FOAM_SOLVERS
    ~~~

2. basicディレクトリに移動
    ~~~
    $ cd basic/
    ~~~
3.  scalarTransprtFoamフォルダを新しいソルバー名(例：scalarTransprtFoam2）にしてコピー・保存
    ~~~
    $ sudo cp -r scalarTransportFoam scalarTransportFoam2
    ~~~　
4. scalarTransportFoam2ディレクトリ内のファイル名や、ファイルの内容を新しいソルバー名に合わせる 

ディレクトリ構造は以下の通りで、fileの内容とscalarTransportFoam.Cのファイル名を書き換える。
scalarTransportFoam
├── Make
│   ├── files   ←内容を以下のように書き換える
│   └── options
├── createFields.H
└── scalarTransportFoam.C   ←ファイル名をscalarTransportFoam2.Cに書き換える

//scalarTransportFoam.C

EXE =$(FOAM_APPBIN)/scalarTransportFoam
⇓
scalarTransportFoam2.C

EXE = $(FOAM_APPBIN)/scalarTransportFoam2




5.createField.HとscalarTransportFoam2.Cを所望の形に修正
後に詳細を記載する。

6.コンパイルを行う
~~~
$ wmake
~~~

※ファイル編集の権限がなかった場合、以下を実行する。
~~~
sudo chown -R ユーザー名 ~openFoamまでのPATH
~~~

scalarTransportFoam2.Cの変更点
-
このファイルでは以下のような移流拡散方程式を定義しています。

https://ja.wikipedia.org/wiki/%E7%A7%BB%E6%B5%81%E6%8B%A1%E6%95%A3%E6%96%B9%E7%A8%8B%E5%BC%8F

```math 
\frac{dT}{dt} + \nabla\cdot(\phi T) - \nabla^2(D_T T) = S
\\
T:スカラー量\\
\phi: 速度ベクトル\\
S: スカラー量のソース
```
もともとのscalarTransportFoam.CファイルではSの項が単純に表記されていないため、以下の部分をこのように書き換える。
~~~
while (simple.correctNonOrthogonal())
        {
            fvScalarMatrix TEqn
            (
                fvm::ddt(T)
              + fvm::div(phi, T)
              - fvm::laplacian(DT, T)
             == S



            );

            TEqn.relax();
            
            TEqn.solve();
            
        }
~~~

これによって、スカラー量の湧き出しが計算できるようになりました。

createField.Hの変更点
-
scalarTransportFoam2.CでSという新たな変数を作ってしまったので、このファイルで定義する必要があります。
ファイル中にはTやUを設定している箇所がありますので、Tに関するコードをコピーして以下のように変換・貼り付けます。

~~~
Info<< "Reading field S\n" << endl;

volScalarField S 
(
    IOobject
    (
        "S",
        runTime.timeName(),
        mesh,
        IOobject::MUST_READ,
        IOobject::AUTO_WRITE
    ),
    mesh
);


~~~

変更は以上です。

チュートリアルケースの修正
-
明日修正
Oculus Quest (2 or pro)でImmersedにWifiDirectで接続してレイテンシ5ms位にした覚書

#  経緯
個人的にVR環境で作業すると集中力が上がる＆目の負担が減るので、VRでいい環境を作れないかなーと試行錯誤していました。

QuestからAirLinkでPCに接続して旧Oculusホームで使う仮想デスクトップは、レイテンシ低いし操作性も良かったのでそこそこ作業出来てたのですが、周りの環境（景色）を変えられないのと、パススルー機能が使えず一部ショートカットなどの操作に難があったのであと一歩という印象でした。

Immeresedを試した所、操作性は若干慣れが必要なものの景色をある程度選べるのと、パススルー機能に対応している為、機能としては十分だったのですが、WI-FI-5(5G hlz)の接続でもレイテンシが20ms程になってしまい、ペンタブ作業などだとやや遅延が気になっていました。

## 「WifiDirect」っていうのだと早くなるかも？
Immeresedのヘルプの中で、「もしネットワークが遅い様だったらWiFi Direct試してみてね」という記載がありそこで初めて「WifiDirect」という規格がある事を知ります。
【公式のヘルプ】
https://medium.com/immersedteam/wi-fi-direct-8ec23c74fdab

どうもWifiDirect自体があまり普及していない規格のようで、ググっても情報が少なかったのですが、一旦ルータを経由するよりも、直接PCと対象機器間をWifi接続するので早い模様。。

## PC用のWifiドングルを購入
自分のPCをWifi接続できるようにWifiDirect対応のUSBドングルを探したのですが、商品説明などに「WifiDirect対応」という記載のある商品が殆ど存在せず。
どうも自分の理解だと（間違ってるかも…）子機/親機両対応のドングル(自分自身がホットスポットになれるもの)ならWifiDirectにも対応しているという認識で、今回は下記のものを購入。

https://www.amazon.co.jp/gp/product/B09Y199KQX/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1

　※PCによっては初めからWifi機能内蔵しているものもあるかもしれません。

## ドライバインストール
届いたUSBドングルに付属のCDメディアにドライバ類が入っているのでまずはインストール。
ユーティリティ立ち上げてモードの設定が出来るのですが、アクセスポイントではなく、**「クライアント」を設定。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232924/9c114411-5fb5-e84a-34b8-0eaa38e15201.png)
　※はじめアクセスポイントかな？と思って色々試していたのですが、うまく接続出来ず。。クライアントにしたら上手く接続できました。

## ImmersedでDirectWifiの設定
「Immersed Agent」起動後「Wi-Fi Direct」のボタンクリックで各種設定が出来ます。
「SSID」と「Passphrase」に初期値が入ってますが、そのまま使っても、自分で値を入力・設定してもOK。（後ほどOculus側のWifi設定でこの設定を入力します。)

ウィンドウ右の「Start」ボタンをクリックすると下段のstatusの所に「Wi-Fi Direct is started」とメッセージ出る筈なので、これでImmersed上でWifi Directが利用出来る状態になっている筈です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232924/7d58849c-4a8d-6fa2-19f4-c5baa7fee282.png)

## Windows側で設定の確認
ウィンドウズアイコンを右クリック→設定→ネットワークとインターネットの中に「モバイル ホットスポット」という項目が増えている筈。
「インターネット接続を他のデバイスと共有します」をオンに。
「ネットワーク名」と「パスワード」に先程Immersed Agentで設定したSSIDとPWが表示されていればOKな筈です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232924/03fc9eb4-07d5-9fe4-6a16-61691ea69ff8.png)

## Oculus側でWifiの設定
あとはOculus側で新しいWifiスポットに接続する設定をしてあげればOK。
リストに出てこない場合は+ボタンで新しいネットワークを追加から、先程設定した「SSID」と「PW」を入力。無事Wifiマークが付けばWifiDirect経由でImmersedに接続出来るようになっている筈……です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232924/fbf0a843-fee6-a212-4610-2301e1043a85.png)

<iframe width="560" height="315" src="https://www.youtube.com/embed/ON36uNLNj3g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
　※パススルーごとキャプチャする方法が分からなかった為、VR内しか写っていませんが…、実際には手元にパススルー設定してキーボードとペンタブが見えています。

## あとがき
この記事は色々試してみてたまたま上手く行った手順を覚え書きとして残したものになりますので、何か間違いなど気づかれた方はツッコミ頂けると助かります…。

みなさん、良いVRライフを！
macOSのcloud9上でのショートカットキー

マウスを買うのを忘れていて、ずっとキーボードのみで操作していたからこそ気づいた、
cloud9を触っている中で発見したショートカットキーを書いて行きます。
今後追加して行きます。


・Command + } 
右のタブに移動


・Command + {
左のタブに移動


・Command + Shift + 矢印
全文、もしくは１行選択


・Command + Option + 上下矢印
１行ごと上下にコピペ


・Option + 上下矢印
１行ごと上下に移動
技育祭2022秋参加してみた

## はじめに
本記事では技育祭で得た情報について整理します。主に業界理解やキャリア系のセッションに参加しました。内容は個人的な解釈も少なからず含みますのでご注意ください。


## 技育祭とは
サポーターズが運営する国内最大規模の就活セミナー。
2022年秋で５回目の開催だそうです。技育祭の由来は「Geek」からきているそうで、サポーターズの社長さんがお風呂に入っているときに思いついたそうです。（後夜祭のクイズイベントで出題されていました。）

## 「エンジニア」という職の細分化
近年では、エンジニアと一口に言っても扱う分野などによって様々な職が存在する。

- フロントエンド
- サーバーサイド
- iOS、Android
- SRE
- インフラ
- ビジネスアナリスト　等々…

就職の際にそれぞれ採用枠が用意されていることが多いため、どの職に向かうか決める必要がある。

## 「サービス思考」か？「テック思考」か？

1. 就社思考＞就職思考
2. 特定の業種、プロダクトに関心がある
3. 技術は手段＞技術は目的
4. 追走力＞探求力 

この４問について〇が多ければサービス思考寄りで、×が多ければばテック思考寄り。
サービス思考のなかでも、何を大事にするかによってさらに細分化されている。（ユーザー価値、プロセス品質、ビジネス成長　など）
テック思考でも役割によって、リードエンジニア、テックリード、マイスターエンジニアなどがある。

## 面接のポイント
#### NGな例
- 根拠のないアピール
- 会社に迎合しすぎてしまう
- 相手の聞きたいことを理解せず自分の伝えたいことを伝えようとする

#### 大事なこと
- 一つのメッセージを伝えることを意識する
- 面接官が知りたいことを伝える
- よく見られたいという思いを捨てる

## 就活には成果物はほぼ必須
就活の際必ず見られるのが成果物。勉強した痕跡なども成果物になる。俗にいうポテンシャル採用は心意気の話ではなく、「この短い期間でこういったことを勉強し今はアプリの作成をここまで進めている」というような成果物ベースの話。

## 「やりたいこと」を仕事にするために

1. まず「覚悟」を決める
2. 自分がワクワクするアウトプットをする
3. SNSに発信する
4. 「やりたいこと」を言語化する
5. 自分を活かせる環境への門をたたく 


## おわりに
現在活躍されている方々やエンジニアを目指す学生たちを見て刺激を受けました。オンライン開催ということで気軽に参加できるのもよいと思いました。自分はこういったイベントに参加するのは初めてでしたがとても面白かったです。



### 補足 
今回登壇されていたイワケンさんがイベント時のスライド資料を[twitter](https://twitter.com/iwaken71/status/1586380642811420672?s=20&t=V-vvixgXBKjuXXljIqI8lg "当該ツイートのリンク")にて公開しています。
JAVAの命名規則について

こんにちは。
現在JAVAを独学で勉強中で、気づいたことがあったので、同じところでつまづかない人が出ないようにとメモを残しておくことにしました。

結論から言うと、クラス名をファイル名(拡張子を除く)と同じ名前にしないとコンパイルエラーが出ました。
そのプロセスのお話になります。

<h1>目次</h1>
1. 動作環境<br>
2. 例文<br>
3. 検証手順<br>
4. 検証結果<br>
5. 検証結果からの考察<br>
6. 結論<br>

<h1>1.　動作環境</h1>
✔️cloud9<br>
✔️Linux<br>
✔️JAVA"11.0.2"

<h1>2. 例文</h1>

```JAVAの構文.java
public class クラス名{
 public class void main(String... args){
  処理内容
 }
}

```
上記構文に従って、

```PracticeScript.java
public class PracticeScript{
 public class void main(String... args){
  System.out.println("こんにちは");
 }
}
```
```PracticeScript2.java
public class Sample{
 public class void main(String... arg){
  System.out.println("こんにちは");
 }
}

```
このようなファイル名のものを用意し、class名を、ファイル名と同名、もしくは別の名前で用意しました。

<h1>3. 検証手順</h1>
ターミナルにて、linuxコマンドのtouchコマンドでファイルを用意<br>
↓<br>
検証対象となる二つのファイルに、クラス名以外は同じ条件でコーディング<br>
↓<br>
javacコマンドで二つのjavaファイルをコンパイル<br>
↓<br>
一つはコンパイル成功、クラス名が違うファイルのコンパイルは失敗<br>
成功した方は.classファイルが作られる<br>
↓<br>
コンパイルに成功したファイルのみjavaコマンドで実行⇨ターミナルに出力結果が表示される




<h1>4.　検証結果</h1>
ターミナルに何も表示されなければ、コンパイルは成功し、.classの拡張子のファイルが作られます。<br>
クラス名とファイル名（拡張子を除く）が違うものをコンパイルしようとしたら、コンパイルエラーとなりました。<br>

<h1>5.　検証結果からの考察</h1>
コンピュータは0と1の概念しか持たないので、プログラミング言語を理解できません。
コンピュータでプログラムを実行する前に、コンピュータがわかるように0と1に変換する工程が必要で、
その工程がコンパイルと言います。
javac　ファイル名.javaでファイル名を参照し、コンパイルを実行し、.classファイルが作られます。このクラス名を作る時、どの処理をコンパイルすれば良いか判断するものとして、頭のclass名を参照しているものだと認識しています。（誤っていたらすみません。）

<h1>6.　結論</h1>
クラス名とファイル名(拡張子を除く)は一緒にしましょう。
【VitisHLS】hls::streamを用いた関数のis private within this context

```cpp
#include "sample.hpp"

void add_st (
    hls::stream<my_axis> in_a,
    hls::stream<my_axis> in_b,
    hls::stream<my_axis> out_res
){

    my_axis a, b, res;

    in_a.read(a);
    in_b.read(b);
    res.data = a.data + b.data;
    res.user = a.user;
    res.last = a.last;
    out_res.write( res );

}

void top_func(
    hls::stream<my_axis>& in_a, 
    hls::stream<my_axis>& in_b, 
    hls::stream<my_axis>& out_res
){

    #pragma HLS INTERFACE axis port=in_a
    #pragma HLS INTERFACE axis port=in_b
    #pragma HLS INTERFACE axis port=out_res
    #pragma HLS DATAFLOW

    add_st( in_a , in_b , out_res );
}
```

```bash
error: ‘hls::stream<__STREAM_T__, 0>::stream(const hls::stream<__STREAM_T__, 0>&) [with __STREAM_T__ = hls::axis<unsigned int, 32ul, 0ul, 0ul>]’ is private within this context
```

原因：&の付け忘れ

```cpp
void add_st (
    hls::stream<my_axis>& in_a,
    hls::stream<my_axis>& in_b,
    hls::stream<my_axis>& out_res
){
...
```


エラー文が微妙に分かり辛い。
フィールド（列）の順番を入れ替える(SPSS Modeler データ加工逆引き7-14)

# フィールド（列）の順番を入れ替える

![スクリーンショット 2022-10-27 14.12.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c8b37641-eeff-9f99-6a4c-cb1c6020abab.png)


## 1.想定される利用目的

・列展開よって増えた列の表示上の整理
・集計表の確定

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/field_order.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-10-27 16.58.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0dc8197e-eec2-d97b-2b10-c563ae1a6683.png)

a.入力するデータは以下の通りです。顧客に割り振られたクラスタ番号を最後尾から２列目に、購入金額の合計を最後尾に変更します。
![スクリーンショット 2022-10-27 14.14.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/4ade46e9-b25f-2054-5ee2-6d113235046b.png)

b.[フィールド順序]ノードを編集します。
![スクリーンショット 2022-10-27 14.15.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e31c02d2-3db8-4b21-d05b-e3f4961d1531.png)

[テーブル]を実行します。
![スクリーンショット 2022-10-27 14.15.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e9ae9914-5a1e-07e7-890b-c298d162bf09.png)

#### 注意事項

テーブル表示の列をドラッグすると一時的には入れ替えができますが、集計表など固定化したい場合にはフィールド順序ノードを利用します。


## 4.参考情報

#### [フィールド順序]ノードを扱った記事

https://qiita.com/416nishimaki/items/55b035e939498ce790a6

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008
SOTAを獲得した言語モデルLukeを触ってみた(python, transformers, 固有表現認識)

こんにちにゃんです。
水色桜（みずいろさくら）です。
今回はstudio ousia社の開発したLUKE (Language Understanding with Knowledge-based Embeddings) を触ってみようと思います。
# Luke
Lukeは新しい事前学習済み言語モデルであり、studio ousia社の論文で発表されました。Lukeは深い文脈化がなされたエンティティ表現であり、エンティティ認識self-attentionが使われています。（エンティティ：固有表現）２０２２年１０月２７日に日本語バージョンのLukeが無償公開されました。本記事では英語バージョンのLukeを用います（日本語バージョンは上手く動作しなかったため…）。日本語バージョンのLukeはJGLUEベンチマークに含まれる４つの日本語データセット（SQuAD v1.1 (extractive question answering), CoNLL-2003 (named entity recognition), ReCoRD (cloze-style question answering), TACRED (relation classification), and Open Entity (entity typing)）で既存の日本語モデルを上回る性能を示しました。
# 今回触ったプログラム
公式で配布されているプログラムを使わせていただきました。２つの固有表現の関係性を判定するプログラムです。そのプログラムに私なりの解説を加えてみました。

```python:entity_recog.py
from transformers import LukeForEntityPairClassification, LukeTokenizer

model = LukeForEntityPairClassification.from_pretrained('studio-ousia/luke-large-finetuned-tacred')  # モデルの設定
tokenizer = LukeTokenizer.from_pretrained('studio-ousia/luke-large-finetuned-tacred')  # トーケナイザ（形態素解析を行うもの）の設定

entity_spans = [(0, 3), (15, 29)]  # どの単語とどの単語の関係を調べるか入力する
text = 'Taro belong to Keio university'  # 解析したい文章
inputs=tokenizer(text, entity_spans=entity_spans, return_tensors="pt")  # テキストを形態素解析する
outputs = model(**inputs)  # モデルにかける

logits = outputs.logits  # logits(確率をマッピングした配列)を抽出
predicted_class_idx = int(logits[0].argmax())  # 最も確率の高いインデックスを取得

print("Predicted class:", model.config.id2label[predicted_class_idx])  # インデックスが表す関係性を表示
```

実行すると、

```
Predicted class: org:parents
```

となります。日本語で「母体」という意味で、所属を表す関係性であることが判別できています。
まだ、Lukeに関する記事や解説が少なく、公式からも供給が少ないため、ちょっととっつき辛いと感じました。
もし日本語バージョンでうまくいったらそれも公開するつもりです。
では、ばいにゃん～。

# 参考
LUKEを開発したstudio ousia社さんのGitHub
https://github.com/studio-ousia/luke
Vue test utilsのインスタンスプロパティ(Wrapper.vm)の型定義を拡張する

## はじめに
Vueでテストを書いている時、script setupで書いた変数にデータが格納されているか確認したい場合、wrapper.vm.変数名と書くことでアクセスできるが、型定義がない。その型定義を拡張する方法があったので備忘として記載。

## 方法
`@vue/runteime-core`の`ComponentCustomProperties`というインターフェースを拡張する 

```typescript
import { shallowMount, VueWrapper } from '@vue/test-utils'
import Index from './index.vue'

declare module '@vue/runtime-core' {
  interface ComponentCustomProperties {
    hoge: string
  }
}
const wrapper: VueWrapper = shallowMount(Index)
// エラーにならない
wrapper.vm.hoge
```

## 参考にした情報

`VueWrapper`の型から型引数`keyof ComponentCustomProperties`をたどりコメントを見たところ実装例の記載があった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581025/a7d674d7-e40b-8251-def8-6064fc8e330e.png)


## 余談
Vue3正式リリースされて随分と時間がたったけど、Vue test utilsに限らずVue3周りのツールはまだ未完成の部分があったり、ドキュメントが足りてなかったりしてつらい・・・
またVuetifyやNuxtもまだ正式リリースになっていない中サポート期限を迎えるVue2からVue3に乗り換えられるのだろうか・・・？
ビルドツール【Vite】について簡単にご紹介

# Viteとは？
「Vite（ヴィート）」とは2020年に発表されたわりと新しいフロントエンドのビルドツールで、開発者はVue.jsの作者であるEvan You氏です。
State of js 2021でも[ビルドツール部門の満足度](https://2021.stateofjs.com/ja-JP/libraries/build-tools/)は１位で注目を集めています。

# 特徴
開発時はビルドが不要です。「ES Modules」を利用して変更したファイルだけをコンパイルしてブラウザに送るので、大規模開発でも高速に動作します。

# 使い方
プロジェクト作成からサーバ起動してブラウザ確認するまでを説明します。
※Viteを事前にインストールすることなく実行できます。

### プロジェクト作成
```
npm init vite@latest
```
実行するとプロジェクト名やフレームワークの質問が表示されるので選択して進みましょう。
```
$ npm init vite@latest
Need to install the following packages:
  create-vite@3.2.0
Ok to proceed? (y) y
✔ Project name: … first-vite
✔ Select a framework: › Vanilla
✔ Select a variant: › JavaScript
```

### サーバ起動
まずは作成したプロジェクトディレクトリに移動して```$ npm install```を実行します。
次に```$ run dev```を実行すれば開発サーバが起動します。
```
$ npm run dev        

> first-vite@0.0.0 dev
> vite


  VITE v3.2.1  ready in 232 ms

  ➜  Local:   http://127.0.0.1:5173/
  ➜  Network: use --host to expose
```
Localのところに記載されている```http://127.0.0.1:5173/```にアクセスすれば以下のような表示がブラウザで確認できます。
![スクリーンショット 2022-10-31 0.07.15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/249131/2c485c20-c85a-b69f-c63c-ad268e583248.jpeg)


### ビルド
```
$ npm run build
```
上記のコマンドを実行するとビルドされたファイルが```dist```ディレクトリに出力されます。

### ビルド後の確認
```
$ npm run preview
```
上記のコマンドを実行することにより```dist```内のファイルをブラウザで確認することができます。
```
$ npm run preview

> first-vite@0.0.0 preview
> vite preview

  ➜  Local:   http://127.0.0.1:4173/
  ➜  Network: use --host to expose
```
[Rails] フォローとフォロワーを表示させる方法

# はじめに
この記事は、以下の記事でフォロー機能が出来ている前提で進めています。まだの人は、以下の記事を参考に実装してから、こちらの記事を読んでいただければと思います。
[Railsでフォロー機能を作成する方法【改】](https://qiita.com/shitan1941/items/ab713aa331ce586d1f5f)
それでは実装していきましょう。

# 実装
今回は、フォローとフォロワーを表示させるだけなので、すぐに終わります。
users/show.html.erb に以下のコードを追記して下さい。

```erb:users/show.html.erb
<!--省略-->
#追記箇所
<h2>フォロー数：<%= @user.followings.count %></h2>
    <% @user.followings.each do |u| %>
      <p><a href="/users/<%= u.id %>"><%= u.name %>さん</a></p>
    <% end %>
<h2>フォロワー数：<%= @user.followers.count %></h2>
    <% @user.followers.each do |u| %>
      <p><a href="/users/<%= u.id %>"><%= u.name %>さん</a></p>
    <% end %>
#ここまで
<!--省略-->
```

コントローラーやモデルに書く記述については [Railsでフォロー機能を作成する方法【改】](https://qiita.com/shitan1941/items/ab713aa331ce586d1f5f) を参考にしていただければと思います。
簡単に解説をすると、フォローしている人を表示する場合は、user.rbに記載されているfollowingsモデルにアクセスすれば、「自分がフォローしているUser達」の情報を取得することができます。フォロワーを表示する場合は、user.rbに記載されているfollowersモデルにアクセスすれば、「自分をフォローしているUser達」の情報を取得することができます。
また、フォロー・フォロワーの人の名前にリンクをつけたり、フォロー・フォロワーの人数も記載できるようにしています。

# さいごに
かなり短いですが、最後まで読んでいただきありがとうございました。
フォローとフォロワーを表示させたい方は、是非この記事を参考にしてもらえると嬉しいです。
また、間違いやその他意見など、ありましたらコメントいただけると幸いです。
XSSとCSRFの違い

# 登場人物
- 攻撃者
- 攻撃者のサイト
- 攻撃対象のサイト
- （攻撃対象のサイトの）利用者

# XSSとCSRFの違い
- XSS：攻撃者のスクリプトを攻撃対象サイトに置き、利用者に（リンクを踏ませる等により）実行させ、**攻撃者のサイトに誘導して何かさせる**（個人情報入力等）
- CSRF：攻撃者のスクリプトを攻撃対象サイトに置き、利用者に（リンクを踏ませる等により）実行させ、**攻撃対象のサイトで何かさせる**（良からぬ情報の拡散等）

# 対策
- アプリのクライアント側&サーバー側で、ユーザー入力を受け取る際にサニタイジングする
大学を主席卒業したけど、、



**「なんだこの記事、自慢かよ！！！」**

![c4af9c65.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861241/2094a7ab-229c-383f-4a9a-db6106cf6ea8.jpeg)

と思ったそこのアナタ、最近ずっと頭から離れないトピックなので記事書かせて下さい。ごめんなさいmm

思考の整理も兼ねて、友人との対話を思い起こす形で対話的に書いてます。一部の人には楽しめる内容かと思うのでぜひ。



## 何が言いたいの？

私はとある大学で成績が高かったみたいで主席卒業したのですが、結論から言うと、

**大学で成績取るくらいならもっとエンジニアの勉強とか遊びとかしてればよかったのかな？？**

と言いたいです。

## なんでそんなこと思うの？

主席卒業したところで、ゆーてメリットがあまりないからです。あるのは賞金数万円くらいとガクチカのネタくらい。

自分が定期考査の勉強している間、周りの人間はバイトや遊び、開発やインターンを楽しんでいました。大学生活を難しく考えてなさそうで、ちょっと羨ましかった。

就活する時も大学の勉強とかじゃなくて、留学とかサークル活動のこととか言いたかった

![gazou_0473.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861241/e28c0ecf-db5f-9f34-a59a-284e36f1668b.jpeg)


## じゃあなんでまじめに成績とってたん
中学の頃元々成績が最下位レベルで、**コンプレックス**みたいな**防衛本能**みたいなものがあったんだと思います。自分でもよくわかっていません。

きっかけは高校で友達とテストの点数を競ったときで、勉強して成績を取るっていう行為がただ楽しくてハマっていました。点数って目に見えるからね。

そこからなぜか、「低い成績を取ってはダメだ」という防衛本能が走り、大学でも何度もテスト勉強をサボろうとしましたが、結局勉強していました。

## まじめな人なんだね
肯定することに少々抵抗がありますが、自分でもそう思います

まあこんなボロクソ言ってるけど、シンプルに勉強が好きだったので大学で得た知識量には自信がある。

あ、今思い出したけど奨学金の審査にも成績使ったな。おかげさまで学費年間110万くらい給付してもらったぞ。

あと研究室の審査にも使ったな


## あれれ、記事を書いてる途中で考えが変わってきたぞ。

主席卒業はクソだっていう記事書こうとしてたけど、よく考えたら色々メリットあったみたいだし別に主席卒業べつにいいんじゃないか？

自分が好きでやってた知識量の向上が、周りから見たらすごいって思われただけだ

飲み会のネタにもなるし。


## 今回のトピック、結論づけるとすると？
**主席卒業は別に悪くない。**

**だが**

目指したその先に何があるのかはこれから考えないと**危険**な気がする。```「主席卒業してどうすんの？」```

自分は盲目に勉強をしていたら、たまたまメリットがついてきてラッキーだったケース。



だから、**「がむしゃらにできることをするのは悪くないんだけど、ざっくりでもいいから目的意識持っていこうね」**、って感じで結論づけた。


<!-- 
**「目的意識をもって結果を出すことはもちろん大事。しかし結果を出すルートはそれだけじゃなくて、好きなことがむしゃらに無心で続けて、それが結果につながることもあるから一概には言えないよ」**
-->

![85295848_220x148.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861241/b628e519-e444-fb2b-0c9c-b0309ba8806a.jpeg)


---


#### 2023/07/05 追記



大学院に進学したのですが、学部時代の成績が認められ**月20万円以上の給付奨学金**を頂けることになりました〜〜

学費以上なので、むしろお金もらいながら大学通えます！！最高！！！

---

#### 2023/07/12 追記

GPAのおかげで学生時代ラストチャンスの**交換留学に合格**することができました；；

出願にはTOEFLのスコアが最低80点必要なのですが、自分は**奇跡的にちょうど80点**だったので、成績でゴリ押したのは確実です笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/861241/4f517684-83fd-1503-d706-0f70f0da62aa.png)


成績が報われた感じがして嬉しい；；
【RSpec/Capybara】背景色などCSSまでテストしたい時の方法

## 解決したいこと

例えば、ユーザー一覧画面で、「**非アクティブなユーザーの場合は背景色をグレーにして表示したい**」といった機能を実装したい場合、非アクティブなユーザーの場合は特定のクラス（`disable-user`とします）を付与してあげて、そのクラスに対してCSSで`background-color: grey`を指定する、という対応をとることがあると思います。

これをRSpecのsystem specでテストする場合、私が今まで経験したプロジェクトでは、「非アクティブな場合に`disable-user`クラスが付与されているか」、をテストするのがよくある方法でした。

しかし、ふと、「`disable-user`クラスが付与されている要素の背景色がグレーになっているか」というところまでテストできるのかな？と思って調べたところ、可能だったのでここで紹介しておこうと思います。

## 背景色をテストするコード例

```rb:system-spec
background_color = find('.disable-user').native.css_value('background-color')
expect(background_color).to eq('rgba(128, 128, 128, 1)')
```
`native`でネイティブオブジェクトを取得し、`css_value`で`gackground-color`を指定すると設定されている背景色が取得できました。
ちなみに`rgba(...）`の部分を`grey`にしたらテストは通らなかったです。

## 終わりに

先輩と話して、今回はsystem specではclassの確認まですれば良く、背景色の確認までやる必要はなさそう、ということで実際には使わなかったですが、勉強になりました。
より簡潔にテストできる方法があれば教えていただきたいです。
アウトプットを行うのではなく、状態を提示するということについて。 ~Qiita記事作成についての備忘録~

# 経緯
いつも頻繁にQiitaを更新している方がおり、「どうやったらそんなに沢山のアウトプットができているのだろうか？」と前々から疑問に思っていた。

今回我慢できず直接聞くことができたので、それについての備忘録としてこれを書こうと思う。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">いつも楽しく拝読させていただいています！<br>凄い頻繁にアウトプットをされていて尊敬しているのですが、アウトプットを頻繁にする上で意識していることなどありますか？</p>&mdash; saldra (@sald_ra) <a href="https://twitter.com/sald_ra/status/1586699557874053120?ref_src=twsrc%5Etfw">October 30, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

# 回答
ありがたいことに質問の回答をいただくことができた。曰く「出力を提示しているのではなく、状態を提示している」とのこと。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">出力を提示するのではなく、状態を提示することにより、私が評価した判断の妥当性を確認しやすくしようとしています。１００点満点中３０点または場合によっては１５点の状態を提示するようにしています。自分の中で１００点の状態になってから出力してもどれだけの労力がかかったか外から分からない。</p>&mdash; wocs2017 (@wocs2017) <a href="https://twitter.com/wocs2017/status/1586715115642318848?ref_src=twsrc%5Etfw">October 30, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

補足記事も書いていただいたのでリンクを貼っておく。

https://qiita.com/kaizen_nagoya/items/80b8b5913b2748867840

# 所感
kaizen_nagoya氏が大事にしているのはその時点その時点でのstate、つまりその時に自分が思ったことや脳内に書き留めていることの提示なのだと思う。
>今の瞬間で、あなたは何が世界一ですかということが問われます。　
具体的に言葉で問われなくても、態度で示される場合もあります。　
この瞬間で、世界位chいの判断は何かの評価をしなくてはいけない時に、その判断をできる状態になっているかを記録してあれば、　妥当性の確認の与件として利用できるかもしれません。　

これは自分になかった視点で、自分は世に出すのであればその時点での100点を提示するという前提で考えていたし、その結果今まで書いていた記事やツイートから今までの考えというのは残念ながら世に出ず、そのまま消えてしまっている。残念ながら自分も忘れっぽい性質のため、その時大事に思っていた価値観や考え方、そう思ったソースも綺麗に消えてなくなってしまっている。

今までQiitaは100点または120点を出さなければならないものだと思いながら過ごしていたが、一つの使い方としてその時点での自分の価値観や思っていること、脳内に貯めておいて今後も忘れたくないことの備忘録として活用することも面白いな、できればその備忘録で自分以外の誰か一人でも良いので参考になれば良いかな、というくらいの価値観で書くのもありだなと感じてきている。

取り敢えずこの感覚を忘れたくないので、stateを提示するという手法を取り入れる第一歩としてこれを投稿しようと思う。誤字や誤解があれば追記や修正は行おうと思う。

実はnoteには新社会人、新しくエンジニアになった際のstateを記述していた。その時は何となく書いだけだが、やはり振り返る際にこういうものがあると面白い。
https://note.com/saldra/n/ne84aca515658

>「社会人」というものになってから一番最初に気が付いた事は、時間も気力もあっという間になくなるし、戦略的に何かをしなければ何もすることはできないという事実だった。

じゃあ今仕事、エンジニアという職業について同じ感覚を持っているかというとそうではないかもしれない。戦略的に動かなくても動きさえすれば何かはできる、その代わり自分の時間を精一杯最高効率で動かしたい場合は最低限の戦略は必要である。というように、その時その時でやはり人間は感覚や考えていることは変わっている.
【Ruby】日時を任意のフォーマットで出力する

# 概要
Rubyで日時を出力する時の忘備録として記載する。
指定方法により時刻を format 文字列に従って文字列に変換した結果を返します。


```ruby
p t = Time.new(2001,2,3,4,5,6,"+09:00")  # => 2001-02-03 04:05:06 +0900
p t.strftime("Printed on %m/%d/%Y")      # => "Printed on 02/03/2001"
p t.strftime("Printed on %m/%-d/%_6Y")   # => "Printed on 02/3/  2001"
p t.strftime("at %I:%M%p")               # => "at 04:05AM"
p t.strftime("at %I:%M%#p")              # => "at 04:05am"
p t.strftime("%Y%m%d")           　　　　　　　　　　　　　　　　# => 20010203                  Calendar date (basic)
```


# 参考資料
* strftime
https://docs.ruby-lang.org/ja/latest/method/Time/i/strftime.html
Amazon EBS gp3のコストとパフォーマンス

# はじめに
Amazon EBS (Amazon Elastic Block Store) 
・耐久性に優れたブロックレベルのストレージボリューム。
・EC2インスタンスにアタッチして利用する。

# EBSの種類
[Amazon EBS ボリュームの種類 \- Amazon Elastic Compute Cloud](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-volume-types.html)

■ 汎用 SSD ボリューム
　・汎用 SSD (gp2) ボリューム
　・汎用 SSD (gp3) ボリューム — 最新世代の汎用 SSD ボリューム

■ Provisioned IOPS SSD ボリューム
　・Provisioned IOPS SSD (io2) ボリューム
　・プロビジョンド IOPS SSD (io2) Block Express ボリューム
　・Provisioned IOPS SSD (io1) ボリューム

■ スループット最適化 HDD ボリューム

■ Cold HDD ボリューム

# 特徴
**■ gp3**
最新世代の汎用 SSD ボリューム。
サイズに関係なく、IOPS：3000、スループット：125MB/秒。
追加料金で、最大IOPS：16000、スループット：1000 MB/秒のパフォーマンスが可能。
　 → **自分でパフォーマンス性能を設定する。**

# 東京リージョンの料金
[ハイパフォーマンスブロックストレージの料金 – Amazon EBS の料金 – Amazon Web Services](https://aws.amazon.com/jp/ebs/pricing/)

gp3のストレージ料金　**0.096USD/GB 月**

**【追加料金】**

>**IOPS**
無料の 3,000 IOPS、および 3,000 を超えた分について 1 か月におけるプロビジョンド IOPS あたり 0.006USD

>**スループット**
無料の 125 MB/秒、および 125 を超えた分について 1 か月におけるプロビジョンド MB/秒あたり 0.048USD

| IOPS | スループット | 追加料金 |
|:-:|:-:|:-:|
| 3000   | 125MB/秒  | なし       |
| 3000   | 128MB/秒  | 0.14 USD   |
| 3000   | 250MB/秒  | 6.00 USD   |
| 6000   | 250MB/秒  | 24.00 USD  |
| 16000  | 1000MB/秒 | 120.00 USD |

**【1ヶ月あたりの料金比較表】**
追加料金なしの場合、170GBまではgp2とほぼ同性能(※1)で使用できる。
ただし、170GBを超えてからパフォーマンスが少しずつ低下(※2)し、1000GBを超えるとさらに低下(※3)する。
※1 スループットが128MB/秒 → 125MB/秒に低下。
※2 500GBの場合、スループットが250MB/秒 → 125MB/秒に低下。
※3 2000GBの場合、IOPSが 6000 → 3000、スループットが250MB/秒 → 125MB/秒に低下。
| サイズ | 追加料金なしのgp3料金| gp2と同性能のgp3料金 | gp2料金 |
|:-:|:-:|:-:|:-:|
| 100GB  | 9.60 USD   | 9.74 USD   | 12.00 USD  |
| 170GB  | 16.32 USD  | 16.46 USD  | 20.40 USD  |
| 500GB  | 48.00 USD  | 54.00 USD  | 60.00 USD  |
| 1000GB | 96.00 USD  | 102.00 USD | 120.00 USD |
| 2000GB | 192.00 USD | 216.00 USD | 240.00 USD |

# まとめ
gp3はgp2と同性能のものでも安価に使えることが分かりました。
これまではなんとなくgp3のほうが良さそうだな～とgp3を使っていましたが、今回比較してみて、gp3の良さを知ることができました。
これからは自信をもってgp3を使っていこうと思います。

# 参考
[Amazon EBSのgp2・gp3の比較をもっと簡単に知りたい \- サーバーワークスエンジニアブログ](https://blog.serverworks.co.jp/ebs-gp3-vs-gp2)
[EC2作成時にデフォルトのままEBSを選ぶのはやめましょう \- CUEBiC TEC BLOG](https://cuebic.hatenablog.com/entry/2022/04/18/104026)
Node.jsでDatabaseに接続する

MySQLをインストールする
```
npm install mysql
```

app.jsにmysqlをimportする
```app.js
const mysql = require('mysql');
```
Databaseに接続する
```app.js
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'progate',
  password: 'password',
  database: 'list_app'
});
```

connection.query(A, B)
第一引数 A はクエリ
第一引数 B は関数の処理内容

jsファイルからクエリを流す
```app.js
  connection.query(
    //クエリ
    'SELECT * from items',
    //function
    (error, results) => {
      console.log(results);
      res.render('index.ejs');
    }
  );
```
特定条件の項目に対して列と値を追加

## 目的
特定条件の項目に対して列と値を追加

## コード
```Python
import pandas as pd

input_file = pd.read_csv('test.csv')
print(input_file)
input_file.loc[(input_file['name'] == 'Akebono') & (input_file['Weight'] == 90), 'Age'] = '31'
print(input_file)
```

## 出力結果
~~~
      name  Height  Weight
0  Akebono     170      65
1    Shota     171      59
2  Akebono     169      90
3   Yamato     175      50
      name  Height  Weight  Age
0  Akebono     170      65  NaN
1    Shota     171      59  NaN
2  Akebono     169      90   31
3   Yamato     175      50  NaN
【DVA対策】AWS Elastic Beanstalk デプロイ特性まとめ

# はじめに
AWS Elastic Beanstalkにおけるデプロイポリシーの理解

# Rolling
現在のインスタンスを利用して更新する
サービス停止が発生しない（が一時的に構成が弱くなる）
バッチサイズを指定する
デプロイしているインスタンスはサービス停止状態
新旧バージョンが混在する

イメージとしてはシステムが止まらないようにインスタンスを一部に切り分けで順番にバージョンアップしていく


<a id="#link2"></a>
# Rolling with additional batch
新しいのインスタンスを利用して更新する
サービス停止が発生しない（新たなインスタンスを使用する為構成も弱くならない）
バッチサイズを指定する
新旧バージョンが混在する

Rolling比べて、デプロイ中の構成が弱くならないのが特徴（インスタンス増えるので料金は上がる）

<a id="#link3"></a>
# All at once
デプロイの時間が一番短い
サービスの停止時間が発生する
同時にすべてのインスタンスにデプロイをかける


<a id="#link4"></a>
# Immutable
新しいAutoScalingGroupを作り出してそこでバージョンアップ処理を行う
新旧バージョンが混在する
TeratermのSSH秘密鍵ログイン時エラー集

◆環境
接続元：windows 10 Home 
接続先：VPSにインストールしているCentOS

以下のエラーを検知
```
SSH2秘密鍵の読み込みに失敗しました
error:0909006C:PEM:PEM routine:get_name:no start line
```

■ネットの解消法として
秘密鍵の"-----END OPENSSH PRIVATE KEY-----"の後に改行を入れることで解消できるとネットに記載があったが、解消せず。。

そのほかパーミッションやsshd_configの編集、.ssh/authorized_keysへのファイル追記を行っても上記のエラーが出てくるもの。


解消しないので、新しくTeratermから公開鍵を作成
⇒なぜか同様のエラー出力


■VPSの中で鍵を生成し、TeratermからWindowsフォルダへ鍵渡す作戦
⇒通常と逆のやり方で実施

```
一般ユーザーにて下記コマンド実施
$ ssh-keygen -t rsa
すべてEnterで実行

$ cd .ssh/
$ ll
-rw------- 1 user user 2602 Oct 27 18:45 id_rsa
-rw-r--r-- 1 user user  573 Oct 27 18:45 id_rsa.pub
$ cat id_rsa.pub > authorized_keys

```
TeratermからWindowsの個人フォルダへSSHSCP転送するも「認証に失敗しました」とのエラーが出力。

ここでエラーが変わったのはうれしいことですが、
いまだにログインできないのはなにか理由がある気がします。


エラーログを確認し、下記新しいエラーを検知
```
sshd[123302]: reprocess config line 133: Deprecated option RSAAuthentication
```

sshd_configにRSAAuthenticationを追加はしたけど、、
調べてみるとこのエラーは「RSAAuthenticationが非推奨(deprecated）だ、と指摘されているもの。
RSAAuthentication は SSH バージョン1のRSAのため、現在では危殆化しているため通常は使われない。」とのこと。


早速noへ変更し、プロセス再起動実施。

またもやログインできなかったので、
/var/log/secureを確認と同時にsshd_configのログレベルをデバックへ変更設定。

```
sshd[123225]:Received signal 15; terminating.
sshd[123313]:Received disconnect from XX.XX.XX.XX port 55781:11: authentication cancelled [preauth]
sshd[123334]:Failed publickey for user from XX.XX.XX.XX port 55941 ssh2: RSA 鍵内容
```
認証系で失敗しているのか？？
調べてもパーミッションなど修正などしかでてこない
確認してもパーミッションも記載の書き方と同様。。

⇒どうやらこのエラーは「サーバ上のホスト秘密鍵の権限が間違っている可能性がある」エラーらしく、早速思いついたのが、Windows側に保存してある秘密鍵のパーミッションってどうなっているんだ？

いずれの結果もできないため、いろいろ調べた結果
WindowsにインストールしたTeratermからでは鍵の作成ができないため、PowerShellから鍵作成を行い、設定ができましたのでこちらをご参照ください。

https://qiita.com/almajiro121212/items/3d65d9bf584eb7ccc4d0
Salesforce ClassicのカスタムリンクはLightningの実現

### 要件
クラシックSalesforceのサイドバーにカスタムリンクが表示されています。メールテンプレート文面がよく表せられ、メールに張り付けられる。
Lightningの場合、どう実現できますか。

### 案
よく使うため、ドキュメントにテキストファイルとして保存されている。カスタムリンクにそのURLをのっています。固定の場合、Lightning環境にリッチテキストで実現できる。

### 検証
①テスト用のテンプレート文面を用意する
②ドキュメントにアップロード
 Lightningにドキュメントタグがないので、クラシックに切替、操作する
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/da7a2d20-e13f-918d-1031-45c7bb824a66.png)
 File名などを参照
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/9193b9ff-a9fe-6c77-204a-12c6ed54d4fe.png)

③リッチテキストにHyplinkを編集する

　/servlet/servlet.FileDownload?file=xxx

### 備考
　上記方法は新しいタブを開けられるが、Popupかつ一般化にするため、LWCがいります。
Html
```
<a href={url} onclick={handleClick}>Account Home</a>
```

Js
```
   handleClick(){
        window.open('/servlet/servlet.FileDownload?file=0155g000000yjsQ','_blank',
        'height=600,location=no,resizable=yes,toolbar=no,status=no,menubar=no,scrollbars=1');
    }

```

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/801991/e8c4ec5d-16a2-4ba2-8525-22409ac1816c.png)
Django テーブルを削除する

# 不要となったテーブルを削除
`makemigrations`で、`No changes detected`と表示されることを確認。
```console
# python manage.py makemigrations
No changes detected
```

マイグレーション履歴を確認
```console
# python manage.py showmigrations
app
 [X] 0001_initial
```
マイグレーション履歴を削除
```console
# python manage.py migrate --fake app zero
Operations to perform:
  Unapply all migrations: app
Running migrations:
  Rendering model states... DONE
  Unapplying app.0001_initial... FAKED
```
マイグレーション履歴が削除されると[X]が[ ]になる。
```console
# python manage.py showmigrations
app
 [ ] 0001_initial
```
[ ]になったことを確認できたら、
migrationsディレクトリの中の、`__init__.py`以外を削除。

DB接続してテーブルを削除する。
```console
# python manage.py dbshell
sqlite> .tables
app_test  ←削除したいテーブル
sqlite> DROP TABLE app_test;
sqlite> .quit
```

models.pyとadmin.pyに削除したテーブルに関する記述があれば削除する。

以上です。
Windows10のPowerShellからVPSへ公開鍵設定


◆環境
クライアント元：Windows 10 Home
接続先：VPS CentOS

◆設定背景
WindowsにインストールしたTeratermにて鍵作成をしましたが、鍵の不一致とのエラーがでてしまったので、新しく鍵作成を行おうと思い、PowerShellから鍵を作成⇒VPSへ公開鍵を送る流れで対応を実施してみたいとおもいます。

◆設定
①スタートメニュー > Windows PowerShell を起動
バージョンをSSH
SSHのバージョンを確認を実施する。
```
PS C:\> ssh -V
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
PS C:\>
```
②公開鍵と秘密鍵の生成
```
PS C:\Users\user> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\user/id_ed25519):
Created directory 'C:\Users\user'.
Enter passphrase (empty for no passphrase):
SHA256:X+GNXXXXXXXGNlKXXKI5mXXTXaifDjMhDiXXXXXXXk user@XXXXXXXXXX
The key's randomart image is:
+--[ED25519 256]--+
|           鍵    |
|                 |
|                 |
|           .     |
|                 |
|                 |
|                 |
PS C:\Users\user>

```

③作成したフォルダの公開鍵をauthorized_keysへペーストを実施

==VPS側の操作==
```
# vi ~/.ssh/authorized_keys
↑
⇒この中に公開鍵を編集をする

# chmod 700 /.ssh
# chmod 600 /.ssh/authorized_keys
⇒パーミッションを上記へセット

```

===Windows PowerShell側の操作===
```
PS C:\Users\user> ssh -i id_ed25519 -p 22 user@XX.XX.XX.XX
Enter passphrase for key 'id_ed25519':←ここに鍵設定時に入力したパスワードを入力を行う
```
上記の操作でログインができましたら、公開鍵設定完了です！
最後にTeratermでもログインができるか確認を行いまして
ログインができましたら、設定完了です。