OmniAICreator/Qiita-1.07M huggingface dataset:
Amazon Linux 2023でPostfixを使用してメールサーバーを構築する方法

こんばんは。

今日は「Amazon Linux 2023でPostfixを使用してメールサーバーを構築する方法」について説明します。

# Amazon Linux 2023の更新
まず、システムを最新の状態に更新します。

```bash
sudo dnf update -y
```

# Postfixのインストール
Postfixはメール転送エージェント（MTA）で、以下のコマンドでインストールできます。

```bash
sudo dnf install postfix -y
```

#Postfixの設定
インストールが完了したら、Postfixの設定ファイルを編集する必要があります。主要な設定ファイルは/etc/postfix/main.cfです。

```
sudo vi /etc/postfix/main.cf
```

以下の主要な設定を確認または追加します：

```
# ホスト名の設定
myhostname = mail.example.com

# ドメイン名の設定
mydomain = example.com

# Postfixがメールを送信できるネットワークの設定
mynetworks = 127.0.0.0/8, [::1]/128, <your_server_ip>/32

# メール送信を許可するドメインの設定
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# ルートユーザーのメール転送設定
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# メールボックス形式の設定
home_mailbox = Maildir/

# SMTPDバナーの設定
smtpd_banner = $myhostname ESMTP $mail_name
```

# ファイアウォールの設定
Postfixが外部からアクセスできるようにファイアウォールのルールを設定します。

```bash
sudo firewall-cmd --permanent --add-service=smtp
sudo firewall-cmd --reload
```

# Postfixサービスの起動と自動起動の設定
Postfixサービスを起動し、システム起動時に自動的に開始するように設定します。

```bash
sudo systemctl start postfix
sudo systemctl enable postfix
```

# システムメールのテスト
Postfixが正しく設定されているか確認するために、テストメールを送信します。

```bash
echo "Test mail from postfix" | mail -s "Test Postfix" your_email@example.com
```

このコマンドは、mailコマンドを使用してテストメールを送信します。mailコマンドは別途インストールが必要な場合があります。

```bash
sudo dnf install mailx -y
```

# ログの確認
Postfixが正しく動作しているか確認するために、ログを確認します。

```
sudo tail -f /var/log/maillog
```

この設定により、基本的なPostfixメールサーバーが構築されます。必要に応じて追加の設定を行うことも考慮してください。特に、セキュリティを強化するためにTLS認証の設定などが推奨されます。

今日は以上です。

ありがとうございました。
よろしくお願いいたします。
3DアバターをARで動かしたいよーーー！

こんばんは！
野球好きのりまきです。甲子園が終わってしまいました。
京都国際高校優勝おめでとうございます！！

## 野球が好きすぎてARで試合に参加したくなる
野球への愛が止まらない。
より没入感を感じで、より選手の気持ちになりたい。

もっと野球で感情を揺さぶられて、選手と一体感を感じたいと思うようになりました。

私の分身をグラウンド上に表すにはどうしたらいいのか。。。

VRだとバーチャルなのでリアルな体験はできない。
だとしたらARじゃないか！？

ARでグラウンド上に私を表示させて試合に参加させるプロジェクト開始！！

## 3Dアバターを作る
ARとかVRとか開発したことないのでアバター作るのも苦戦するのかなと思いましたが、素晴らしいアプリ発見！

https://in3d.io

スマホで撮影するだけで3Dアバターが作れます。
メチャクチャカンタン！！
スマホを固定して撮影するだけです。

https://x.com/n0rimaki_san/status/1826460206622278051?s=46&t=YNvek3uK3__EUWrx4wzhzQ

身体を撮影するのある程度広い場所があった方がいいです。

https://x.com/n0rimaki_san/status/1826465415746506951?s=46&t=YNvek3uK3__EUWrx4wzhzQ


## アバターを球場に連れて行く
アバターを球場に表示させよう！と喜び勇んで行きました！

表示するタイミングや場所を理解するまで時間がかかりました。

アバター表示するのに「床」が必要という基本的なことを知らなかった。

グラウンドを床と認識してくれなかったので、グラウンドに表示することが出来ませんでしたが、スタンドの床には表示出来ました！

![IMG_8824.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784193/7240b913-967b-5474-87e7-e2acd0147bc5.jpeg)

次にアバターに動作をつけます。
そのために、アバターをエクスポート。

アバターの挙動をUnityで開発する前提でエクスポートする形式を選択します。

いくつか形式があるのですが、調査しきれてないので調べて形式を決めます！

現状はアプリに登録されている挙動のみ表示できます。

https://x.com/n0rimaki_san/status/1822974667793252650?s=46&t=YNvek3uK3__EUWrx4wzhzQ


## これから進めたいこと
野球の守備と攻守交代をしたいので、「守る」「走る」「ハイタッチする」動作をつけます！

スマホでAR表示できるようにします。

まずは平面でアバターを表示して動作を確認することまで進めたいと思います！
【Go】deferを理解しよう！〜初学者向けガイド〜

# はじめに
 本記事では、Go言語の`defer`について、基本的な特徴を3点紹介します！

# deferの特徴
## 1. 関数の実行を遅延させる
deferは、Goのキーワードの一つで、関数の実行を遅延させるために使用されます。具体的には呼び出し元の関数が終了する直前に、指定した関数を実行することができます。これによって、リソースの解放や後処理を簡潔に行うことができます！

例えば、以下のソースコードを見てください：

```go
package main

import (
	"fmt"
)

func main() {
    fmt.Println("A")
    defer fmt.Println("B")
    fmt.Println("C")
}
```

このコードの実行結果は次のようになります：
```
A
C
B
```
deferを使った行は、関数の終わりに実行されるため、`B`が最後に出力されます。

## 2. deferの関数の実行順序はLIFO(後入れ先出し)
複数のdeferを使うとどうなるでしょうか？次のソースコードを見てください：

```go
package main

import (
	"fmt"
)

func main() {
    defer fmt.Println("0")
    defer fmt.Println("1")
    defer fmt.Println("2")
    fmt.Println("Main")
}
```
このコードの実行結果は次のようになります：
```
Main
2
1
0
```

複数のdeferがある場合、後から宣言されたものが先に実行されます。これはスタックのようにLIFO（後入れ先出し）で実行される為です。

## 3. 引数の評価タイミングはdeferの宣言時

次に、deferと関数の引数の評価タイミングについてです。次のソースコードを見てください：

```go
package main

import (
	"fmt"
)

func printMessage(message string) {
    fmt.Println(message)
}

func main() {
    msg := "Hello"
    defer printMessage(msg)
    msg = "Goodbye"
}
```

このコードの出力は`Hello`でしょうか？、`Goodbye`でしょうか？
実行結果は次のようになります：
```
Hello
```

deferによって遅延実行されるのは関数自体であり、引数はその場で評価されます。その為、deferを宣言した時点の`Hello`が出力されます。

# まとめ
deferの基本的な特徴を3点紹介しました。deferはリソース管理や後処理を簡潔に行うことができます。是非、皆さんも活用してみてください！
【pyenv】このエラーが出たとき→「デジタル署名されていません。このスクリプトは現在のシステムでは実行できません。」

検索してもあまり出てこなかったので、備忘録代わりに書いておきます。

## エラー内容
```python
pyenv : ファイル ~\.pyenv\pyenv-win\bin\pyenv.ps1 を読み込めません。ファイル ~\.pyenv\pyenv-w
in\bin\pyenv.ps1 はデジタル署名されていません。このスクリプトは現在のシステムでは実行できません。スクリプトの実行および
実行ポリシーの設定の詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照
してください。
```

## 解決方法

**実行ポリシーを「RemoteSigned 」としたのに実行できないとき**

簡単です。pyenv.ps1を直接見にいって、
- プロパティ→下の部分で許可設定をする

これで完了。

対症療法的なやり方だけど、困っていた人の助けになれば。
インタプリタ言語とコンパイラ言語の違いをシステムコールから眺める

# 概要
プログラミング言語は、PythonやJavaScriptに代表されるインタプリタ言語とCやC++に代表されるコンパイラ言語の2つに分類されます。インタプリタ言語は逐次解釈されながらプログラムが実行される言語であり、コンパイラ言語はコンパイラによりソースコードが機械語に変換され、それをCPUが実行する言語です。
この違いを実際に呼び出されるシステムコールの違いから見てみようというのが本記事の目的です。

# straceコマンドについて

straceコマンドは、プログラムが発行するシステムコールと受信するシグナルを追跡するためのツールです。デバッグやパフォーマンスの分析に非常に有用です。以下は基本的な使い方です。

```bash
strace -o <出力ファイル名> <コマンド>
```

# 実験
本実験はUbuntu(WSL2)で動作させています。
Hello, World!と出力するプログラムをPythonとC++で用意します。

```python:python
print("hello, world!")
```
```cpp:C++
#include<iostream>

using namespace std;

int main(void){
    cout << "Hello world!" << endl;
    return 0;
}
```
C++のプログラムはコンパイルし、<ファイル名>.oというファイルを生成しておきましょう。
```bash:コンパイル
g++ -o hello hello.cpp
```
それぞれ実行時間を測りながら実行してみましょう。
```bash:Python(インタプリタ言語)
time python3 hello.py
```
```bash:C++(コンパイラ言語)
time ./hello
```
Pythonでは0.030s、C++では0.014sでした。

インタプリタ言語のPythonより、コンパイラ言語のC++の方が実行が速い様子を確認できます。では実際に発行されているシステムコールに違いはあるのでしょうか？straceコマンドで確かめてみましょう。
```bash:Python(インタプリタ言語)
strace -o python.log python3 hello.py
```
```bash:C++(コンパイラ言語)
strace -o cpp.log ./hello
```
これらを実行するとpython.logとcpp.logという2つのファイルが出来ています。このファイルにプログラムが実行される際に発行されたシステムコールが記載されています。行数だけ見ると、自分の環境ではpythonが500個のシステムコール、C++が70個のシステムコールを呼び出していました。
単純にシステムコールを呼び出す回数がインタプリタ言語であるpythonだと多いですね！ここからも実行速度がコンパイラ言語の方が速いというのが直感的に分かります。

具体的なシステムコールを見てみると、C++ではwriteシステムコールが呼び出されているのに対し、Pythonではreadシステムコールでプログラムが読み込まれたのちにwriteシステムコールで書き出している様子が分かります。
```bash:python.log(インタプリタ言語)
read(3, "print(\"hello, world!\")", 512) = 22
...
write(1, "hello, world!\n", 14)         = 14
```
```bash:cpp.log(コンパイラ言語)
write(1, "Hello world!\n", 12)           = 12
```


# まとめ

今回の実験では、インタプリタ言語であるPythonとコンパイラ言語であるC++の違いをシステムコールの違いから眺めてみました。結果として、C++の方が実行速度は速く、システムコールの呼び出し回数も少ないことが確認できました。たった数行のプログラムですが、たくさんのシステムコールが裏側では呼び出されていることも実感できます。
レビューコメントを長期的な成長に活かすためのテクニック

# 同じコメントを何度もされている。
レビュー者の思考を理解し、その思考をするための前提知識を学び
根本的な原因が同じレビューコメントを何度ももらわない様に気をつけていきたいですよね。

## 表面的にもらったコメントに対応する問題
> このパーツはキャッシュしておいて、次回実行時に再度計算されない様にしたほうが良い

あなたはシンプルにコメントに従って修正したとする。
確かに、このPullRequestではそれで完結するかもしれないが問題がある

### 問題点は以下2点
* レビュー者のコメントに至るまでの思考回路が理解できていない
* あなたはその思考をするための、前提知識を学んでおらず、成長していない。

## 思考回路を理解せず場当たり的に改善
このパターンはキャッシュするんだ、覚えておこう！
これで終わってしまう、確かにいつかは全パターン網羅できるかもしれないが。

ロジックを理解せず全パターン試してみるのは
確率の計算で全パターンを試験テスト中に試してみる様なもので再現性がない。

### Dパターンの実装時にキャッシュするか判断できそうですか？
* Aパターンはキャッシュ
* Bパターンはキャッシュ
* Cパターンはキャッシュしない

個別パターンだけ理解しても、応用が効かない。

## 聞くべきは、思考回路
相手はコードを見ていて、キャッシュしたほうがいいなと考えた。
そこにはキャッシュをすべき基準があり、その基準を満たしたのでコメントをしたわけだ。

> この処理はキャッシュしておいて、次回実行時に再度計算されない様にしたほうが良い

上記の質問が来た際に本当に行うべきは
「処理をキャッシュをする条件をどの様に判断していますか？」 と聞くことだ。

### 得られる回答例
* Aさん：計算コストが高いものは memo 化したい
* Aさん：計算しても、特に値が変わらないのにものは再度計算が走らない様にしたい
* Bさん：オブジェクトたくさん作っている処理はキャッシュしたいと思っている
* Cさん：ソートロジックとかはキャッシュしたかな〜
* Dさん：公式でキャッシュ基準に関する資料出てたよ！
* 全員：そんなものがあったんだ、知らなかった〜（みんなハッピー）

## 「計算コストが高そう」と気づく為の「前提知識」を知り、学ぶ
>計算コスト高いならキャッシュする

思考回路を聞いている中で 「計算コストが高そう」 と見積もってる人たちが居ます。
なぜ計算コストが高そうだと思えるのか、高そうだと思うものがどう言うものが理解する必要があります。

### 聞いてみましょう
Q：計算コストが高くなるのってどう言う時ですか？
A：リストコンポーネントで大量の項目をマップ処理する場合、各レンダリングサイクルで再計算が発生するため。

Q：その発想をする為に必要な前提知識って何かありますかね...?
A：Reactの関数型コンポーネントのライフサイクルの挙動を理解しておくと良いよ

## 勉強すべき「前提知識」が明確になる
ここまでの流れで、根本的な基礎知識として知らなければならないことが明確になります。

* 【学ぶべきこと】
    * 「Reactの関数型コンポーネントのライフサイクルの挙動」
* 【どのレベルまで？】
    *  「どう言った処理がレンダリングコストが高いのかを見積もれる様になるまで」
* 【どの様に？】
    * 「XXXXのサイトを見るといいよ」

### 勉強した項目とレビューの指摘が紐づく （リンクする）
何を、どれくらい細かく理解すべきなのかが明確になりました。
根本的な基礎知識を得つつ、同時に利用方法も既にに紐づいています（リンクされてる）

## 根本的な原因が同じレビューコメントを何度ももらわない為に。
指摘されてる人から見たら毎回違う指摘に見えてるでしょう。
でも指摘している側からすると「同じ」指摘です。

* ソートの時はキャッシュ
* 逆順ソートの時はキャッシュ
* リストコンテンツが多い時はキャッシュ
* 文言の表示だけはキャッシュしない
* ........etc

レビュー者の思考を理解し、その思考をするための前提知識を学び
根本的な原因が同じレビューコメントを何度ももらわない様に気をつけていきたいです。

## ただ基礎を勉強することとの違い
ただ、ライフサイクルを勉強してと言われて勉強していた場合、計算コストの見積もりとキャッシュをするかしないかの判断に使おうと言う発想に紐づきません。
きっと次回もコードで気付けずに、同じ指摘をされるでしょう。

「ライフサイクル」の理解だけでは、その基礎知識を使うことが出来ないので使い所
使い方を理解して初めて理解したと言う状態になれます。

* Aパターンはキャッシュ
* Bパターンはキャッシュ
* Cパターンはキャッシュしない

Dパターンの実装時、自分のコードを見て
「あ、もしかしたらこれレンダリングコスト高いかもな〜」

そう思える様になったら、レビューでもらったコメントを理解したということになりそうです。


## 会社の基礎研修
会社の基礎研修で何に使うか割らない基礎を勉強していると感じているかもしれません。
それは上記の具体的な利用方法や、コーディング時に気が付けるようになるという
紐付けがまだ薄いからかもしれません。
DBeaver 便利機能メモ

業務でDbeverを使用しており、「便利！」「こんな機能あるんだ😳」と思った機能をまとめました。
使用バージョン：24.1.5
公式サイト：https://dbeaver.io/

### テーマ変更
Light、Dark、Classicの3つから選択できます。
設定→ユーザーインターフェース→外観より操作可能です。
※選択したテーマを適用するには、DBeaverを再起動する必要があります。
![スクリーンショット 2024-08-23 17.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796543/af84e799-7901-36e1-14c9-0f43e93ffbeb.png)

### ER図を外部形式で保存
ER図を画像（PNG、GIF、BMP形式）または GraphML形式のファイルとしてエクスポートできます。
ツールバーのアイコンより操作可能です（下記画像参考）
![スクリーンショット 2024-08-23 17.21.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796543/3ed616d0-10c2-1afe-6903-f42934120a58.png)

### DDL表示
DDLを確認したいテーブルをダブルクリックし、プロパティのDDLタブから選択できます。
![スクリーンショット 2024-08-23 17.37.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796543/b9f8cd7c-aa60-1b8c-9f9a-9e6f6aa73952.png)

### 実行計画表示
実行計画を表形式で表示できます。
SQLエディタでクエリを記述し、左バーのアイコンをクリックすると表示されます。
実行計画の行をクリックすると、計画の右側のパネルでその詳細（統計情報）を見ることができます。
![スクリーンショット 2024-08-23 17.47.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796543/0fd0bccc-0f17-c30e-fb00-97ece406097a.png)

### 基本的なクエリをすばやく生成
テーブルを右クリックし、SQLの生成から基本的なクエリを選択できます。
![スクリーンショット 2024-08-23 17.52.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796543/d612ed3f-7cc5-d7c2-966b-77b545795e00.png)

### 素早く移動
__列指定__ 
ctrl+shift+GでGotoColumnモーダルを開き、カラム名を入力し、OKをクリックすることで、指定の位置に素早く移動できます。
テーブルに多くのカラムがある場合に便利です。
![スクリーンショット 2024-08-23 18.29.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796543/91d83929-89d7-6292-69ca-5defea9f752f.png)
__行指定__
ctrl+GでGotoRowモーダルを開き、行番号を入力し、OKをクリックすることで、指定の位置に素早く移動できます。
![スクリーンショット 2024-08-23 20.17.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796543/4fcf1000-d44a-7988-c2a2-aee3fe5a916c.png)

参考：
https://dbeaver.com/docs/dbeaver/
https://twitter.com/dbeaver_news
【備忘録】TS環境下でSplideを動かす

# はじめに
TypeScript環境下で`Splide`を動かす備忘録です。
同じissueも存在します。

https://github.com/Splidejs/react-splide/issues/76
# エラー内容
普通に`import`しようとするとこうなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3348923/20d03fa6-f91d-297b-4347-1c15cffc962c.png)

# 解決策
1.**react-splide.d.ts** を作成する
2.下記のように**中身**を記述する
```ts:react-splide.d.ts
declare module "@splidejs/react-splide";
```

# さいごに
公式のアップデートはストップしていますが、有志が作ってくれていそうです。
下記リポジトリも解決策になると思われます。
ちなみに下記リポジトリだと型が使えました

https://github.com/patrickn2/react-splide
初心者がとりあえずローカルLLMを触ってみる（Windows10×WSL2×Llama-3-ELYZA-JP-8B）

## 概要
- LLM初心者が、グラボ貧弱Win10のノートPCで軽量LLMが動くのか試してみた
- 手順はほとんど下記の通り。全手順を知りたい方はリンク先参照

https://qiita.com/s3kzk/items/3cebb8d306fb46cabe9f

- コマンドプロンプトで簡単に実行できるが、あえてWin上でWSL2使ってLinux環境立てて実行した
- ハマったところや、実際触ってみた感想などを記録に残してみる
:::note info
Ollamaは本来Windowsならコマンドプロンプトを使用して **インストール＋たったの2コマンドだけで簡単に構築可能。** 
今回は①最新モデル（執筆時点）で標準サポートではない特殊なLLMを使っていること、②著者が初心者でよく分かってなかったこと、以上の2点故に通常より回りくどい手順になっている。なので、初心者の方が『とりあえずローカルで気軽にLLM触ってみたい！』という場合は、まずは下記リンク先のような通常の手順で触れてみることをお勧めする。
:::

https://qiita.com/kit/items/cd3a7f8116982d61c06d


https://qiita.com/misu007/items/4d629957a2099abe875b

## 環境、バージョンなど
###### マシンリソース
OS：Windows10 Home 22H2
CPU：Intel Core i7-11370H
RAM：16GB
GPU：Intel Iris Xe Graphics

グラボはCPU内蔵型のヘコヘコスペックで、要求リソース高いゲームなんかだと画面がフリーズすることもよくあった。果たしてLLMは動くのか...？


###### WSL環境
WSL 2.2.4.0
Ubuntu　24.04LTS

###### 使用するLLM
Llama-3-ELYZA-JP-8B

https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/tree/main

Meta社のLlama-3-8Bをベースに、追加学習を行い日本語の入出力性能向上にフォーカスした軽量LLM。GPT-3TurboやClaude 3 Haikuに匹敵するレベルとのこと。（[プレス記事](https://prtimes.jp/main/html/rd/p/000000046.000047565.html)）
## それではやってみよう

### Ollmaインストール

Ubuntuのターミナルを開き、コマンド実行
```
$ sudo snap install ollama
```
helpのコマンドを打って、正しくインストールされたか見てみる
```
$ ollama --help
Large language model runner

Usage:
  ollama [flags]
  ollama [command]
...
```
オプションの例が表示されればOK

### Git LFSの導入
今回DLしたいモデル「Llama-3-ELYZA-JP-8B」は、軽量LLMながらそれでも4.92GBとデカい。
Hugging faceのリスト（下記画像）にもマークがあるように、大きいサイズのファイルを含むリポジトリは通常Git LFSを使って管理するらしく、 **ローカルにクローンする側も同様にGit LFSを導入しないといけないらしい。**
![202408231915.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/558099cc-d789-bba4-43a2-fb885d571ba3.png)

[Github](https://github.com/git-lfs/git-lfs/wiki/Installation)のページを参考に導入。
```
$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
$ sudo apt-get update
$ sudo apt-get install git-lfs
$ git lfs install
```
### LLMモデルのクローン
元記事にもあるように約5GBと大容量なので注意。
```
$ git clone https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF
```
以後は、元記事と同じ手順で進めた。エディタでModelfileを作成し、ollamaモデルの作成、実行。

### LLM実行結果
![202408231731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3539300/c0bf284b-3d55-74f7-0c16-adc5e674f895.png)

 **キチンと動いてくれた。** 応答速度はGPT-3.5と同じぐらい？リソースはメモリが怪しいぐらいで、フリーズしたりすることもなし。合格点だろう。
軽量がウリなので仕方ないが、やはりGPT-4oと比べるとまだまだハルシネーションは多かった。

## ちなみに
この「Llama-3-ELYZA-JP-8B」、今見たら **公式でサポートしていた** 。最初に手を動かす前にちゃんとチェックしような・・・
余計な手間をかけただけの無駄な時間になってしまったが、まあ色々学べたので勉強代ということで。

https://ollama.com/stfate/llama3-elyza-jp-8b

## 感想
- これまでLLMの推論は、チャット形式のGUIや、大手クラウド提供のLLMサービスをAPI叩いて利用することが多かったので、グラボしょぼいノートPCでローカルで実際に動いたのはなかなか感動した。
- 恥ずかしいことに、元記事主様の実行環境がMacOSだったので「UNIX環境要るのか～」と勝手に謎の勘違いをしてWSL2を使用したが、冒頭でも述べたように **WindowsでOllama使うならフツーにコマンドプロンプトでやった方が楽だし早い。**
よむリスト

### 本のリストを消しこみたい
今までたくさん本にお金をかけてきましたが、読破するのは少しです。

本を読んで消し込みする。だけの記事です。

11行目からリスト書くと冊数が数えやすいので

頑張ってここに何か書いています。今欲しいものはPS5です。

## 持ってる本のリスト
- HTML+CSSコーディングの強化書
- ノンデザイナーズ・デザインブック
- ゼロからわかるRuby超入門
- 安全なWebアプリケーションの作り方
- クリーンアーキテクチャ
- プロを目指す人のRuby入門
- 独習Python
- HTML+CSSデザインレシピ
- プリンシプルオブプログラミング
- できるCentOS6サーバー
- CSS3逆引きデザインレシピ
- マスタリングTCPIP
- jQuery最高の教科書
- Webデザイン良質見本帳
- HTML5&CSS3デザインブック
- CSS設計完全ガイド
- 確かな力が身につくJavaScript超入門
- JavaScript本格入門
- プロになるためのWeb技術入門
- アルゴリズム実技検定
- HTML5プロフェショナル認定試験レベル1
- HTML5プロフェショナル認定試験レベル2
- HTMLCSSデザインの教科書
- WordPressの教科書
- オラクルマスターSilverSQL
- スラスラわかるJavaScript
- 初めて学ぶソフトウェアのテスト技法
- 沈黙のWebマーケティング
- Pythonで学び直す高校数学
- リーダブルコード
- おうちで学べるデータベースのきほん
- はじめてのCSS設計
- React実践の教科書
- 教養としてのコンピューターサイエンス
- Web技術がしかりわかる教科書
- 基本情報技術者教室
- 影響力の武器
- バカと無知
- 小さなチーム大きな仕事
- 最強のコピーライティングバイブル
- 情熱プログラマー
- 7つの習慣
- フリーランスの教科書1年生
- フリーランスで行こう！
- TOEIC金の熟語
- 地図でスッと頭に入る47都道府県
- プリンシプルオブプログラミング
- ネットワークはなぜつながるのか
- Java言語で学ぶデザインパターン入門
- Webを支える技術
- 統計学入門
- はじめての統計学
- プロを目指す人のためのTypeScript入門
- 金より価値のある時間の使い方
- スッキリわかるJava入門実践編3版
- いきなりプログラミングAndroidアプリ開発
- iPhoneアプリ開発集中講座
- GitとGitHubの教科書
- Web製作と運用の基本
- HTML+CSS実践講座
- 動くWebデザインアイディア帳
- 俺の資料がダサすぎる！
- デザイナーじゃないのに！
- あたらしい、あしらい
- いろいろな、いろ。
- HTMLサイトをWordPressにする本
- 最強デザイン構図
- 銀行とデザイン
- 運の方程式
- ブスのマーケティング戦略
- ユーモアは最強の武器である
- アオアシに学ぶ「考える葦」の育ち方
- SQLゼロから始めるデータベース操作
- GitHub実践入門
- 新しいLinuxの教科書
- 最速の仕事術はプログラマーが知っている
- ミニマリスト式超自炊術
- ミニマリスト式超人生戦略術
- 成長マインドセット
- 才能の地図
- 書くのがしんどい
- 紙１枚！読書法
- 99%はバイアス
- YOURTIME
- 13歳からのアート思考
- 書く技術・伝える技術
- 観察力の鍛え方
- SearchInsideYourself
- 人生を変える言葉365
- BESTRONG
- やってはいけないデザイン
- 人に頼む技術
- 自分を操る超集中力
- 言葉にできるは武器になる
- 独習JavaScript
- 人を操る禁断の文章術
- YouTubeでビジネスを伸ばす動画の成功法則
- 速く製作なWeb製作のための実践的メソッド
- イシューから始めよ
- 渋谷で働く社長の告白
- こんな僕でも社長になれた

### 100冊~>目標は今年中
スタートは2024年8月23日、1日10ページでいいから読みましょう。できるよ・・きっと
【豆知識】 Google のクライアント ID やシークレットにアクセスする方法について

# はじめに
Google認証機能周りを調べているときにいろんなコードを参考に、亀さんペースで進めてるわーちゃんと申します。Google認証周りのコードは調べれば調べるほど無限に出てくるのでは？と思っています。
今回はGoogle のクライアント ID やシークレットにアクセスする方法のなかでも`credentials`を使用したコードを調べてみたので、アウトプットしたいと思います


## 環境
- Windows, WSL
- Docker
- Ruby 3.2.3
- Rails 7.1.3


## 早速私がであったコード3つ紹介
`Rails.application.credentials` を使用して Google のクライアント ID やシークレットにアクセスする方法として、以下の3つの書き方がありましたので、それぞれの特徴と違いについて説明したいと思います。

### 1. `Rails.application.credentials.dig` を使用する方法
```ruby
config.google.key = Rails.application.credentials.dig(:google, :google_client_id)
config.google.secret = Rails.application.credentials.dig(:google, :google_client_secret)
```

**特徴:**

- **安全性**: 存在しないキーにアクセスしようとした場合、`dig` メソッドは `nil` を返すため、`NoMethodError` が発生しません。
- **エラーハンドリング**: キーが存在しない場合にエラーを回避するため、安全に使用できます。
- **冗長性**: 短いデータ構造に対しては少し冗長に感じるかもしれません。

### 2. 直接アクセスする方法

```ruby
config.google.key = Rails.application.credentials.google.google_client_id
config.google.secret = Rails.application.credentials.google.google_client_secret
```

**特徴:**

- **シンプル**: コードが短くなり、簡潔で読みやすいです。
- **エラーのリスク**: 存在しないキーにアクセスしようとすると、`NoMethodError` が発生する可能性があります。そのため、キーが必ず存在することが確実な場合に使用するのが適しています。

### 3. シンボルキーを使ったアクセス方法（3つの中では一番すっきりと見える）

```ruby
config.google.key = Rails.application.credentials.google[:google_client_id]
config.google.secret = Rails.application.credentials.google[:google_client_secret]
```

**特徴:**

- **中間の安全性**: キーが存在しない場合、`nil` が返されるため、`NoMethodError` は発生しませんが、`nil` によるバグが発生する可能性があります。
- **シンプルさと柔軟性**: 直接アクセスする方法よりも安全で、`dig` よりも少しシンプルです。ただし、データ構造が深くなる場合には冗長になる可能性があります。

### 結論: どれがいいのか？

- **安全性を重視する場合**: `Rails.application.credentials.dig` を使う方法がおすすめです。エラーハンドリングが自動的に行われるため、コードが安全です。
- **シンプルさを重視し、キーが必ず存在するとわかっている場合**: 直接アクセスする方法 (`Rails.application.credentials.google.google_client_id`) が適しています。
- **シンプルさと安全性のバランスを取りたい場合**: シンボルキーを使ったアクセス方法 (`Rails.application.credentials.google[:google_client_id]`) が良い選択肢です。

安全性を重視するか、コードのシンプルさを重視するかによって選択が異なりますが、一般的には `dig` を使用する方法が推奨されているそうです。


## おまけ（W使い）
```
  config.google.key = ENV.fetch('GOOGLE_CLIENT_ID') { Rails.application.credentials.dig(:google, :google_client_id) }
  config.google.secret = ENV.fetch('GOOGLE_CLIENT_SECRET') do
    Rails.application.credentials.dig(:google, :google_client_secret)
  end
```
**特徴:**
環境変数が存在する場合はその値を使用し、存在しない場合にはブロック内で指定されたRailsのcredentialsを使用します。ENV.fetch のブロック内で credentials をフォールバックとして利用することで、環境ごとに柔軟に設定を管理できます。
**使用場面**: 
本番環境と開発環境で異なる設定を使用したい場合に便利です。例えば、本番環境では環境変数を優先し、ローカル開発環境ではcredentialsを使用する場合などに適しています。

少し詳しく言い換えると。柔軟性を重視し、環境ごとの設定変更を簡単にしたい場合は、ENV.fetch を使用する方法がおすすめです。これにより、本番環境では環境変数を使用しつつ、ローカル環境ではcredentialsを使うといった設定が可能になります。

# さいごに
まさか3種類もコードの書き方が見つかるとは思っていませんでした。+W使いは驚きました。W使いの時はまた別のGemが必要になるそうですが、それはまた別の機会にお伝えすることができればと思います。
今回の記事が何か参考人になれば幸いです。
認定資格「DX推進パスポート１」取得報告：市場価値を高めるオープンバッジの魅力

![DX推進パスポート１_certificate.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82835/ffadc271-6036-808d-6257-362c9a90b1e4.png)


「DX推進パスポート１」の認定資格を取得しましたので、今回はその報告と、最近注目されているオープンバッジについてお話ししたいと思います。

## 「DX推進パスポート１」とは？
「DX推進パスポート１」は、デジタル・トランスフォーメーション（DX）を推進するための基礎知識を身につけたことを証明する資格です。DXの基本概念、業務改善の視点、データ活用の重要性など、現代のビジネスにおいて重要なテーマを学ぶことができます。

## オープンバッジの魅力
この資格取得に伴い、オープンバッジを発行してもらいました。オープンバッジとは、取得したスキルや資格をデジタルで証明するバッジのことです。このバッジはSNSやLinkedInなどで簡単に共有でき、透明性の高い形で自分のスキルをアピールできます。

### オープンバッジのメリット
1. **信頼性**: 発行元が認定しているため、第三者に対しても信頼性が高い。
2. **可視性**: デジタル形式であるため、オンライン上での共有が容易。
3. **記録性**: 取得したスキルや資格を一元管理でき、履歴書代わりにもなる。

## 市場価値の向上に繋がる理由
iOSエンジニアとして、技術スキルの向上はもちろん、業界動向やビジネス視点も重要だと考えています。DXの知識を得ることで、より広い視点からアプリ開発やサービス改善に取り組むことができるようになり、結果として市場価値の向上に繋がると期待しています。

オープンバッジを活用することで、これらのスキルや資格をアピールしやすくなり、より多くの機会を得ることができるでしょう。

## まとめ
「DX推進パスポート１」の取得は、エンジニアとしてだけでなく、ビジネスパーソンとしても重要なスキルセットを身につける良い機会となりました。今後も、オープンバッジを活用しつつ、自身の市場価値を高めていきたいと思います。

ご興味のある方は、ぜひオープンバッジの活用を検討してみてください！
ChatGPT-3.5先生へ「角の3等分線を、分度器を使わずに、コンパスだけで書く方法を教えて下さい。」

・改行を挿入していません。申し訳ありません。

# ChatGPT-3.5先生へ

***●user***
```
角の3等分線を、分度器を使わずに、コンパスだけで書く方法を教えて下さい。」
```
***ChatGPT-3.5***
```
角の3等分（角を三等分する）問題は、古代ギリシャの作図問題の一つで、定規とコンパスのみを使用して任意の角を正確に三等分することは不可能であることが数学的に証明されています。しかし、近似的に角を三等分する方法はコンパスを使って作図することができます。
...(省略)
```
```
本当ですか。
```
```
おっしゃる通り、私の説明は少し誤解を招くものでした。コンパスと定規のみを使用して任意の角を正確に三等分することは、数学的に不可能であると証明されています。この証明は、19世紀にピエール・ワンツェルによって行われました。
ただし、特定の角度（例えば、90度、180度など）は三等分が可能ですが、
...(省略)
```
```
文献を教えて下さい
```
```
参考文献
「ユークリッド原論」
著者: ユークリッド
概要: 古代ギリシャの数学者ユークリッドによる「原論（Elements）」は、幾何学の基本的な作図問題に関する古典的なテキストです。角の二等分や特定の角の三等分についても触れられています。

「幾何学的作図の数学的基礎」
著者: David E. Joyce
概要: 幾何学的作図に関する数学的基礎を解説しており、定規とコンパスによる作図問題の詳細な分析が含まれています。90度の角の三等分についても言及されている可能性があります。

「不可能な作図問題」
著者: Underwood Dudley
概要: この書籍では、古代ギリシャの作図問題や、それがなぜ不可能であるかについて詳しく解説されています。角の三等分問題もこの中で扱われています。

「代数学と幾何学」
著者: Michael Artin
...(省略)
```
```
90度の三等分方法をsympyで教えて下さい
```
（以下を、私は、実行していません。申し訳ありません。）
```python
from sympy import Point, Circle, Line, pi, rad
from sympy.geometry import intersection

# 直角の頂点
O = Point(0, 0)

# 直角の1辺 (OA) ともう1辺 (OB)
A = Point(1, 0)
B = Point(0, 1)

# 90度の角度
angle_AOB = pi/2

# 半径 1 の円を O を中心に作図
circle = Circle(O, 1)

# 円上にある点 C と D を求める (三等分の基準点)
C = Point(1, 0)  # OA上
D = Point(0, 1)  # OB上

# 90度を三等分するための基準点
# 角 AOB の三等分線を計算
angle_OAF = angle_AOB / 3
angle_OAG = 2 * angle_OAF

# 三等分線の終点
F = circle.arbitrary_point(angle_OAF)
G = circle.arbitrary_point(angle_OAG)

# 三等分線の作成
line_OF = Line(O, F)
line_OG = Line(O, G)

# 作図結果の表示
line_OF, line_OG
```
```
arbitrary　何ですか
```
```
(省略)
```

# リンク
ピエール・ワンツェル
ピエール・ヴァンツェル

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

https://ja.wikipedia.org/wiki/ピエール・ヴァンツェル

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

https://ja.wikipedia.org/wiki/角の三等分問題

https://www.kyoritsu-pub.co.jp/book/b10004716.html

# 過去問　類題
数学チャレンジ問題　∠の３等分の問題 ＜ YUUU0123 様　

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

【３】　＜　

https://mathexamtest.web.fc2.com/2012/201210000/2012100000100mj.html#top-0104

【５】　＜

https://mathexamtest.web.fc2.com/2015/201513460/2015134600200mj.html#'top-0205

google検索

https://cse.google.com/cse?cx=a8908fbc24340ebc5&q=%22%E4%B8%89%E7%AD%89%E5%88%86%E7%B7%9A%22&oq=%22%E4%B8%89%E7%AD%89%E5%88%86%E7%B7%9A%22&gs_l=partner-web.12..0i512i4i37j0i512l2j0i512i4i37j0i512j0i30l4j0i7i30.46272.50030.2.51542.5.5.0.0.0.0.571.1263.1j0j3j5-1.5.0.csems%2Cnrl%3D10...0....1j4.34.partner-web..8.14.5593.JoOh-pcpcCk
Qiitaでの記事がタイムラインに表示されない問題について考えてみた

# はじめに
最近、自分の書いた記事がQiitaのタイムラインに表示されないということに気づきました。
Qiitaの仕組みや他のサービスとの比較を通じて、この問題について考えたのをアウトプットします。

まず、問い合わせてみたところ、タイムラインに表示されるのは自分がフォローしているタグやユーザーの投稿だけであり、フォローされていないユーザーの記事はあまり目立たないということでした。

これは、多くの人にフォローされているタグをつけない限り、自分の記事があまり多くの人に見られないということだと推測できます。

# 他のサービスと比較
他のサービスと比較してみると、
- X(Twitter)では自分がフォローしたりよく見るユーザーの投稿が中心に表示されます。
- noteでは「今日のあなたに」というコンテンツをトップに表示し、いいね数の少ない記事も見ることができます。
- Zennでは「New Articles」があるものの、あまり目立たない印象です。

# 自分の認識の間違いを自覚
比較した内容を見て、正直ショックを覚えました。
WebエンジニアとしてWebサービスを開発していた経験もありますが、新規記事を積極的に表示する仕組みがないことに驚きました。

「全記事の中から新しいものを○件表示する」みたいな、一つ覚えみたいな機能があると思っていたのですが、実際にはそうではないようです。

# Qiitaの認識のリフレーム
そもそも、Qiitaというサービスに対する概念を自分の中でリフレームする必要があるかもしれません。技術記事の投稿サービスとしてだけでなく、コミュニティとして捉えることが必要かもしれません。積極的にフォローし、フォローされることで記事の露出を増やすことが重要なのかもしれません。

今回の問題に直面して、Qiitaに対する考え方やアプローチを改めて考え直す機会となりました。
今後、記事をより多くの人に届けられるよう努力するには、積極的にコミュニティ活動に参加することが必要だと感じました。また丁寧に質の高い記事を書いていくことでフォロワーを増やすことで多くの人の目に留まることになる。一石一丁ではないことを感じました。

読んでいただきありがとうございます。
bitlockerで暗号化されたディスクにWindowsを再インストール

# はじめに

新しいパソコンを買ったため、お古のPC(Surface 7 Pro)を初期化して、家族に引き渡すことにしました。

しかし、Bitlockerの回復キーを保存していなかったためいろいろと躓くこととなりました、、、、


# ターゲットとなる人

- Windowsの再インストールに失敗した人
- OSがうまく起動せず、Bitlockerで暗号化されたディスクにwindowsをインストールしたい人
- BitLockerを保存しておらず、すべて0から新たに始めたい人


# やりかた
1. コマンドを利用する


```
manage-bde -protectors -get <ディスク>:
```
上記のコマンドで、回復キーが分かるとこのことでしたが、私の環境ではできなかったので別の方法を試しました。


2．ディスクの初期化

今回の場合は、OSがうまく起動できなかったので"オプションの選択"画面からコマンドプロンプトを起動しました。

コマンドプロンプトが起動出来たら、次のコマンドを入力していきます。

1. コマンドプロンプトが起動したら、以下のコマンドを順番に入力します。

    ```shell
    diskpart
    ```

2. 次に、以下のコマンドを入力して、システム上のディスク一覧を表示します。

    ```shell
    list disk
    ```

3. 暗号化されたドライブのディスク番号を指定して選択します（例: ディスク1の場合）。

    ```shell
    select disk 1
    ```

4. 続いて、以下のコマンドを入力し、選択したディスク上のパーティションの一覧を確認します。

    ```shell
    list partition
    ```

5. 暗号化されたドライブのパーティション番号を指定して選択します（例: パーティション1の場合）。

    ```shell
    select partition 1
    ```

6. 最後に、以下のコマンドを入力し、選択したパーティションをNTFS形式でクイックフォーマットします。

    ```shell
    format fs=ntfs quick
    ```

その後は、USBやDVDからwindowsをbootさせて、先ほど初期化したディスクを選択してあげれば、windowsの再インストールができるはずです。


# さいごに

いろいろやり方を探しましたが、あまりいい情報が載っていなかったのでメモ程度として残しておきます。

# 参考にしたサイト様

[Windows10/11でBitLockerの回復キーがわからない・忘れた時の確認方法を徹底解説｜データ復旧 国内売上No.1【データ復旧.com】](https://www.ino-inc.com/data_check/pc/doesnt_know_bitlocker.php#10)
資格試験とキャリアパス

## なぜこの記事を書こうと思ったのか
この記事を書こうと思った理由は、私自身が資格試験を通じてキャリアを築いてきた経験があるからです。IT業界へのキャリアチェンジを考えている方や、スキルアップを目指している方に、資格取得がどのように自身のキャリアに影響を与えたかを共有したいと思いました。資格は多く取得しても実務と直結しないという声や、資格を持っていても実務で活用できていないという方もいるかもしれませんが、私自身は資格が非常に有用であると感じています。

## 資格試験をはじめたきっかけ
私は前職で車の部品営業をしており、IT業界への転職をしました。IT業界に転職するにあたり「ITパスポート試験」やAWSのクラウドプラクティショナーを勉強し始めました。IT業界への転職後はAWSの資格を中心に取得しています。

## 年齢と資格試験
AWSの認定試験を中心に資格を取得しましたが、AWSには各試験の合格率や資格取得年齢に関する統計がないため、参考までにIPAの国家試験の取得平均年齢および合格率の図表を作成しました。
![certification_age.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170341/97ffcc5f-7ecb-cbea-7ce2-b9760738d13d.png)
私は29歳の時から転職活動を始めましたが、その頃からキャリアパスを意識し、同年代、年下、年上の方がどのようなキャリアパスを歩んでいるのかに興味を持ち、意識するようになりました。

## 資格試験のメリット
私が資格取得を通して感じたメリットを紹介しますが、取得のタイミングや意図によってメリットは異なるかと思いますので、参考程度にお読みください。
### ①転職における活用
資格は転職市場での強力なアピールポイントとなります。専門性の高い資格はもちろん、エントリーレベルの資格（基本情報技術者試験、クラウドプラクティショナー、ソリューションアーキテクトアソシエイト）でも「意欲」や「勉強する習慣」を示すことができます。正直、実務においてはエントリーレベルの知識だけで太刀打ちできない業務が多いと思いますが、体系的な知識があることで、実務で問題に直面しても、調べたり考えたりすることができるようになりました。転職活動中も、資格取得を通じて培った知識は、面接において強みとなりました。

### ②検索力向上
開発においてわからないことを調べる際の検索スピードが上がったと感じています。資格試験では用語や定義を明確に理解する必要があり、出題者の意図を把握することが求められるため、IT分野の言語力が向上し、その結果として検索力が向上した可能性が高いです。試験勉強の意外な副産物ではないかと感じています。

### ③勉強する習慣
資格試験を通じて最も大きな成果は、「勉強する習慣」が身についたことです。以前は仕事から帰宅後に4時間ほどテレビやYouTubeに時間を費やしていましたが、今では毎日1～2時間程度を資格試験やIT関連の勉強に充てるようになりました。最初は勉強が辛かったものの、資格を一つ取得してからは勉強が習慣化し、毎日勉強することが当たり前になりました。
※もちろん、飲み会や予定がある日は勉強をしません。ストイックにしすぎると続かないので、適度に勉強を続けています。

:::note info
勉強する習慣がない方には、資格試験をおすすめします。多くの人がYouTubeなどで時間を費やしている中、共に一歩先へ進めればと思います！
:::

## 資格試験で勘違いしていたこと
### 資格と業務の関係
資格取得前は、業務と同じ範囲の資格を取得すれば、業務がスムーズになるかと思っていました。しかし、実際には業務理解や効率が劇的に改善されるわけではなく、解像度が少し上がった程度でした。この辺りに、資格取得者と資格を評価する方（転職先や上長）に乖離があると、「あの人は資格を持っているけど仕事はあまりできないよ」みたいなことを言われる気がします。キャリアパスを考える際には、資格取得後も客観的に自分の能力を見極め、転職活動や社内の面談で適切に自己アピールする必要があると感じています。
現在は、資格はあくまでもスタートラインに立つためのものであり、取得したからといってすぐに業務ができるようになるわけではないくらいの認識を持っています。


## 最後に
資格はキャリアを築く上で非常に有用なツールですが、資格取得がゴールではありません。資格を取得した後に、その知識をどのように活用し、自身のキャリアをどのように発展させるかが重要です。この記事が、皆さんのキャリアパスを考える一助となれば幸いです。私の記事では主にAWS認定試験に関する内容を発信していますので、もしよろしかったらお読みください。
ファイルのリネームがgitで差分認識されない？git mvを使おう


## はじめに

こんにちは。HRBrainでオウンドメディア・ランディングページの開発を担当している渡邉です。

先日、ファイル名を変更した際に、変更が差分としてGitに認識されないということがありました。

この記事では、Gitが差分を見逃す原因と、その対処法について解説しています。

## ファイル名の大文字と小文字を変更するケース

Gitプロジェクトの中で、`filerename.txt` を `fileRename.txt` にリネームしてみました。

しかし、ローカル環境ではファイル名が変更されていたにもかかわらず、Gitのステージングエリアにはその変更が反映されていません。

```bash
$ mv filerename.txt fileRename.txt
$ ls
fileRename.txt
$ git status
On branch main
nothing to commit, working tree clean
```

### なぜGitがリネームを見逃すのか？

それぞれのOSには何かしらのファイルシステムが使用されていますが、ファイルシステムの種類によっては、Gitがリネームを認識しない場合があります。

たとえば、MacOSで使用されているAPFS（※）やHFS+というファイルシステムがありますが、これは**ケースインセンシティブ**であり、大文字・小文字を区別しません。

※ 設定によりケースセンシティブへの変更が可能ですが、ここでは割愛します。

参考：[Macのディスクユーティリティで利用できるファイルシステムフォーマット - Apple サポート (日本)](https://support.apple.com/ja-jp/guide/disk-utility/dsku19ed921c/mac)

## 解決方法1： `git mv` を利用する

この問題を避けるには、ファイルをリネームする際に `git mv` コマンドを使うことです。

```bash
git mv filerename.txt fileRename.txt
```

このコマンドを使うことで、Gitはファイルのリネームを正しく認識し、差分として記録します。

```bash
$ git mv filerename.txt fileRename.txt
$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	renamed:    filerename.txt -> fileRename.txt
```

参考：[Git - git-mv Documentation](https://git-scm.com/docs/git-mv)

## 解決方法2: git configの設定変更

```bash
git config core.ignorecase false
```

このコマンドは、Gitがファイル名の大文字・小文字を区別するように設定を変更します。

```bash
$ mv filerename.txt fileRename.txt
$ git status
On branch main
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	fileRename.txt
```

この設定により、リネームが検知されるようになります。

ただし、リポジトリ内に`text.txt`と`Text.txt`などのようなファイルが共存する場合には、競合が発生する可能性があります。

また、プロジェクトのメンバー同士で設定を統一するなど、チーム全体での統一が必要になります。

参考：[Git - git-config Documentation](https://git-scm.com/docs/git-config#Documentation/git-config.txt-coreignoreCase)

## まとめ

ファイル名を変更するだけの単純な操作でも、ファイルシステムの違いによって差分として検出されないことがあります。

ファイル名の大文字・小文字を変更する場合は、`git mv` コマンドを使用することで、確実にリネームをGitに認識させることができます。

## PR

HRBrainでは一緒に働く仲間を募集しています。歴史に残るトライをしよう！

https://www.hrbrain.co.jp/recruit
【Rails】render textが使用できない

## はじめに
Railsのアップデート中にrender textを使用している箇所でエラーが出たので、その対応をまとめます。

## 問題
以下のように、render textを使用するとエラーが出ます。
```ruby
class TestController < ApplicationController

  def index
    render text: "Hello World"
  end

end
```

## 解決方法
Rails5系からrender textは使用できなくなりました。
代わりにrender plainを使います。
```ruby
class TestController < ApplicationController

  def index
    render plain: "Hello World"
  end

end
```

## 参考
https://zenn.dev/yukito0616/articles/3dfc26b6a8ff56

https://guides.rubyonrails.org/layouts_and_rendering.html#rendering-text
LinuxOS プロンプトの調査(新規ユーザ追加挙動)

# 前置き

こんにちは！
今回はLinuxOS(Ubuntu)を使ってプロンプトの調査を行います。

きっかけは、コマンドを使って新規ユーザを作ったのですが、その際に/home/直下に作成ユーザのディレクトリがありませんと表示されました。

```
# 実行コマンド

useradd user1 # ユーザ追加
passwd user1  # ユーザパスワード設定
su - user1　　# ユーザ切替

# 出力結果
su: 警告: ディレクトリを /home/user1 に変更できません: そのようなファイルやディレクトリはあ
$
```

また、画面上に表示されるプロンプトが下記の状態です。
デフォルトユーザではユーザ名やグループ名が表示され、プロンプトが異なることから調査しました。

```
# user1
$ pwd
/home/user1
$
```

# デフォルトシェルの調査
ユーザに設定されているシェルのタイプを確認します。

```
# user1で実行'$SHELL'はデフォルトで変数化されています

$ echo $SHELL
/bin/sh

# 既存ユーザで実施した結果
$ echo $SHELL
/bin/bash

#総括
設定されているシェルのタイプに乖離がある
```

# シェルの設定変更
user1のシェルをbashに変更します。


```
# user1でログインしてchshコマンドで変更
sudo chsh -s /bin/bash

# 実行結果
$ sudo chsh -s /bin/bash
[sudo] user1 のパスワード:
user1 は sudoers ファイル内にありません。この事象は記録・報告されます。
```

:::note warn
**注意**
管理者権限で実行できませんでした。
新規にユーザ作った際は、権限を与えておく必要あります。
:::

# 新規追加ユーザ用の権限付与

権限付与を行います。
上記で紹介したchshコマンドもrootユーザに切り替えてから再度実行します。

```
# rootユーザへ変更
$ su -

# rootユーザからuser1ユーザのシェル設定を変更(rootユーザ操作時のプロンプトは"$→#"に変わります)
# chsh -s /bin/bash user1

# user1をsudoグループに追加しsudo権限付与
# usermod -aG sudo user1

# user1へユーザ切替
# su - user1

# 出力結果
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

user1@devtech-022:~$

```
root同様の権限が与えられたといったテキストが表示された後、プロンプトも想定通りのユーザ名とホスト名が表示されるプロンプトへ変更されました。

最後にuser1のシェル設定を確認します
```
$ echo $SHELL
/bin/bash
```
設定が変わっていることを確認できました。

今回は新規作成したユーザプロンプトが見慣れたプロンプト表示と異なっていることから調査しました。

結論、設定したシェルの変更等で解決できそうです。
【Laravel】web.phpとapi.phpの違いを解説

## はじめに
`web.php`・`api.php`
2つのルーティングファイルが存在していることを知りました。わざわざ別で定義する理由がわからなかったため調べてみました。

## 違いは何？
2つの違いをいくつかの観点からみていきます。

### `web.php`について

<b>用途</b>
・ブラウザでアクセスするウェブページのルートを定義するのに適している

<b>特徴</b>
・セッション管理とCSRF保護が有効になっており、ステートフルな通信に適している

<b>ユースケース</b>
・ログインページ、ユーザー登録ページ、ダッシュボードなどに使われる


### `api.php`について

<b>用途</b>
・外部からの HTTP リクエストを受けて値を返却する場合に使用

<b>特徴</b>
・セッション管理とCSRF保護が無効であり、ステートレスな通信に適している

<b>ユースケース</b>
・フロントエンドアプリケーション（SPAなど）からのAPIリクエストを処理など

https://qiita.com/pyon141/items/b3a2d2865c70b6a73ae2

https://qiita.com/y-tkt/items/fe7e640d7e376aaf674e

## CSRFとは
CSRFは、サイバー攻撃のこと。Webアプリケーションの脆弱性を利用し、ユーザーが意図しない形で処理を実行する攻撃。

## ステートフルとステートレス
ネットワークにおける「ステートフル」と「ステートレス」とは、通信セッションの状態管理に関する概念である。

### ステートフルとは
「記憶力のあるコンピューター」のようなもの。話したことを覚えていて次に話すときにその情報を使う。

例：オンラインショップの、カートのように記憶してくれている

### ステートレスとは
「記憶力のないコンピューター」のようなもの。話をしたことを覚えていない。

例：自動販売機のようにジュースを買うたびにおかねを入れて選ぶ必要がある


## Laravel 11では存在しなくなった
現時点（2024/08/19）における、最新バージョンのLaravel11では、最初から存在しないみたいですね。

https://tobilog.net/10949/

ドキュメントをみてみたら以下のコマンドで追加できることがわかりました。

```linux
$ php artisan install:api
```



## おわりに

|  ファイル名   |  セッション管理   |  CSRF保護   |　ステートフル　|　ステートレス　|
| :---: | :---: | :---: | :---: | :---: | 
|  web.php   |⚪|⚪︎|⚪︎|×| 
|  api.php   |×|×|×|⚪︎|


`web.php` は、ブラウザからのリクエストを扱い、セッションやクッキーを利用するルートに向いています。

一方で、`api.php` は、APIリクエストを扱い、ステートレスなリクエスト処理に向いています。

それぞれの特徴を活かして使い分けていきましょう
第五回: HTMLとCSS

こんにちは、[株式会社カスタマトリックス](https://www.customatrix.co.jp/)の寺尾です。

こちらは **新卒社員と学ぶWEBプログラミング** 企画になります。
可能な限り毎日更新していくのでご期待ください。

本日は第五回、「**HTMLとCSS**」を説明していきます。
まずはWEBサイトの見た目を司る二つのプログラミング言語から勉強していきます。

前回はこちら
https://qiita.com/r-terao/items/d02ea64015f26b115300

第一回はこちら
https://qiita.com/r-terao/items/e6237c4dc59db9e96ec6

# HTML
WEBプログラミングの勉強をしていると必ず聞くHTML、何が凄くてこんなに長く使われているのかご存知でしょうか？

HTMLは「**ハイパーテキストマークアップランゲージ(HyperText Markup Language)**」という意味です。
これは「ハイパーテキストを記述するためのマークアップ言語」と翻訳する事ができます。

現在は「**HTML LS(Living Standard)**」が最新版です。

### ハイパーテキスト
ハイパーテキストは互いに関連する情報を含んだ文書を相互にリンクし、WEBサイト内であっても、WEBサイト間であっても情報を辿っていけるように考案されたシステムです。

例えば論文やプレゼン資料などを作成する際、参考資料を最後に記述しますよね？
これは論文同士がリンクされていると言えます。
現実世界上ではリンクされていても図書館などに行ってその論文を何とか探し出す必要がありますが、インターネット上ではリンク先にアクセスして論文をダウンロードする事ができます。
この情報の繋がりこそがWebなのです。

HTMLはハイパーテキストと名前に入っていますが、通信技術の発達した現在、テキストだけでなく画像や動画なども含めてハイパーメディアを取り扱う言語となっています。

### マークアップ言語
マークアップ言語とは、**コンピュータでも文の趣旨が分かるようにマークを付ける言語**です。

Webサイトのような「人に読ませる文章」には一般的に「見出し・本文・引用」などの趣旨の違う文章が雑多に含まれています。
当然コンピュータはどんな文字であっても0と1に変換して考えるため、どんなに気持ちを込めて見出しを書いてもそこに差を見出す事はできません。

マークアップ言語は「ここからここまでは見出し文だよ」とマークを付けてあげる事でコンピュータがWebサイトを表示する時に文字を強調したり検索性を向上させたり出来るようになるのです。

HTMLではこのマークの事をタグと呼び、`<></>`左記の記号で囲います。

```一例.html
<h1>これは見出しです。</h1>
<p>これは本文です。</p>
<button>これはボタンの中身の文字です</butoon>
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2273193/4b9b978a-8d55-e36b-f054-4d318bbe4ffa.png)


タグに囲まれた文章を「**要素**」と呼びます。
要素にはそれぞれ設定値として「**属性**」というものが存在します。
属性は全体で共通のモノだけでなく要素ごとにそれぞれ専用のモノや、自作する事も可能なため、今後必要に応じて紹介します。
最もよく使う属性は「**id**」「**class**」です。どちらも要素を探しやすくするための名前付けに使われるものですが、`id`は特別に他の要素の`id`と被ってはいけないというルールがあります。

ちなみに、可能な限りシンプルなテキストからマークアップテキストを生成するという逆転の発想で作られた「マークダウン」という言語もあります。
このQiitaの記事は一部マークダウン記法を利用していますね。

```マークダウン.md
# これは見出しです。  
これは本文です。
```

# CSS
CSSは「**Cascading Style Sheets**」と読み、「連続性のあるデザイン表」という意味を持ち、スタイルシート言語の一つです。

現在は「**CSS3**」が最新版です。（厳密にはバージョンとは違う考え方なので、一部はCSS4の機能も使えます）

「**このルールにあてはまる対象はこのデザインにする事**」というルールを作る言語になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2273193/cdb8d4b6-911f-3688-53ec-2699007a9729.png)

基本的には「**セレクタ**」とを覚える必要があります。
セレクタとは「**どの要素にデザインをあてるのか**」を記述します。基本的には`class` `id`などのタグの属性に対してデザインを適用します。

# まとめ
- HTMLとCSSを組み合わせると、デザイン豊かな文章をWEB上に公開する事ができる
- HTMLはタグ、属性を組み合わせてコンピュータでも理解できる文章を作成する
- CSSは様々な方法でデザインを割り当てる文章を判別する事ができる

WEBとは「**網、クモの巣**」といった意味があります。
HTMLのようなハイパーメディアの仕組みが、インターネット上で文書の網を形成し、それがWEBになっているのです。

HTMLとCSSができれば、簡単なWEBサイトであれば作成ができてしまいます。
次回からは頻出のHTMLタグやCSSプロパティを解説し、WEBサイトを作れるようになる事を目指していきます。

# おまけ
株式会社カスタマトリックスはエンジニアを募集しています！
完全未経験でも可！

- 新卒の方
https://www.customatrix.co.jp/newgrads/index.html

- 中途の方
https://customatrix.co.jp/career/index.html

https://www.instagram.com/cmx_pr/
私が覚えていられる Windows のショートカット集

Windows 端末のトラブルシューティングをするときによく使うショートカットをチートシートとしてまとめておきます。

自分の PC の場合は、タスク バーとかにアプリをピン留めしておけばいいのですが、他の人の端末での操作は、ショートカットを覚えておくと時短になります。

## ショートカット集
### 1. Windows のバージョン情報
>**Windows キー + r → winver**

表示される情報の OS ビルドをインターネットで検索するといつの更新プログラムが適用されている環境かわかります。

### 2. システムのプロパティ
>**Windows キー + r → sysdm.cpl**

昔はコンピューターを右クリック→プロパティで表示できたけど、今はできなくなってしましまった。

### 3. ローカル グループ ポリシー エディター
>**Windows キー + r → gpedit.msc**

グループ ポリシーを入れたら、どんな動作になるかよく検証します。

### 4. レジストリ エディター
>**Windows キー + r → regedit**

レジストリの値を見る、値を変更したりします。レジストリの直接変更は慎重に。

### 5. イベント ビューアー
>**Windows キー + r → eventvwr**

警告、エラーを確認します。
システム ログに記録される DCOM のエラーはよく無視します。

### 6. タスク スケジューラー
>**Windows キー + r → taskschd.msc**

定期実行したい処理を登録して自動化しています。

### 7. ディスクの管理
>**Windows キー + r → diskmgmt.msc**

ディスクの構成を確認します。構成を変更したいときは、[diskpart](https://learn.microsoft.com/ja-jp/windows-server/administration/windows-commands/diskpart) を使ったほうが色々できます。

### 8. リモート デスクトップ接続
>**Windows キー + r → mstsc**

リモート環境でのトラブルシューティングで必要です。

### 9. ネットワーク接続
>**Windows キー + r → ncpa.cpl**

ネットワーク アダプタの状態を確認してます。IPアドレスの確認や手動設定ができます。

### 10. タスク マネージャー
>**[Ctrl] + [Shift] + [Esc]**

Windows 11になって、GUI が変わりました。

### 11. メモ帳
>**Windows キー + r → notepad**

ちょっとメモしたいときにちょうどいいです。
Windows 11になって、UWP版が使えるようになりました。

### 12. スクリーンショット
>**Windows キー + [Shift] + s**

Windows 11向けに配信されている Snipping Tool を更新すると画面動画もとれるようになります。

### 13. コントロールパネル
>**Windows キー + r → control**

まだ設定アプリではなく、コントロールパネルを使いたいときがある。

### 14. インデックスのオプション
>**Windows キー + r → control.exe /name Microsoft.IndexingOptions**

インデックスファイルが肥大化している環境でインデックスの再構築をしたりします。

### 15. 青い or 黒い画面 (CAD)
>**[Ctrl] + [Alt] + [Del]**
:::note info
RDP接続中に接続先で青い or 黒い画面を表示したい場合は、**[Ctrl]＋[Alt]＋[End]** になります。
:::
以前は青い画面でしたが、Windows 11から黒い画面になりました。

![cad.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/d2dea8c0-1aa7-9d4a-d8e6-1653196d2840.png)
AppleシリコンでもhombrewでインストールしたCライブラリのパスを通す

# はじめに

homebrew でインストールしたCライブラリは`$(brew --prefix)/include` や `$(brew --prefix)/lib` にシンボリックリンクが張られる.

Intelでは `brew --prefix` が `/usr/local` だったため, コンパイラのデフォルトでパスに入っていた.
しかしAppleシリコンでは `brew --prefix` が `/opt/homebrew` のため, 自前でパスを追加する必要がある.

# 設定方法

コンパイル時のオプションで [`-I`](https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-I-dir) や [`-L`](https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-L-dir) を追加すればいいが,
毎回指定するのが煩雑な場合は [`CPATH`](https://clang.llvm.org/docs/CommandGuide/clang.html#envvar-CPATH) (または [`C_INCLUDE_PATH`, `CPLUS_INCLUDE_PATH`)](https://clang.llvm.org/docs/CommandGuide/clang.html#envvar-C_INCLUDE_PATH-OBJC_INCLUDE_PATH-CPLUS_INCLUDE_PATH-OBJCPLUS_INCLUDE_PATH) と [`LIBRARY_PATH`](https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html#index-LIBRARY_005fPATH) に追加することもできる.

## 全体 (シェル) で設定する場合

下記のようにシェルで実行するか, `~/.zprofile` に書く.

```zsh
if [[ -d /opt/homebrew ]] ; then # ifの条件は適宜編集するか削除する
  export CPATH="/opt/homebrew/include:${CPATH}"
  export LIBRARY_PATH="/opt/homebrew/lib:${LIBRARY_PATH}"
fi
```

<details><summary> なお参考で <code>brew shellenv</code> はこうなっている.</summary>

```zsh
export HOMEBREW_PREFIX="/opt/homebrew";
export HOMEBREW_CELLAR="/opt/homebrew/Cellar";
export HOMEBREW_REPOSITORY="/opt/homebrew";
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin${PATH+:$PATH}";
[ -z "${MANPATH-}" ] || export MANPATH=":${MANPATH#:}";
export INFOPATH="/opt/homebrew/share/info:${INFOPATH:-}";
```
</details>

また, 特定のCライブラリだけパスを通したい場合は, 下記のとおり.

```zsh
if [[ -d /opt/homebrew ]] ; then # ifの条件は適宜編集するか削除する
  export CPATH="$(brew --prefix googletest)/include:${CPATH}"
  export LIBRARY_PATH="$(brew --prefix googletest)/lib:${LIBRARY_PATH}"
fi
```

<details><summary> なおパスはこうなっている. </summary>

```console
$ ls -lhFG $(brew --prefix googletest)
lrwxr-xr-x@ 1 skkzsh  admin    27B  8 23 11:57 /opt/homebrew/opt/googletest@ -> ../Cellar/googletest/1.15.2

$ ls -1FG $(brew --prefix googletest)/
INSTALL_RECEIPT.json
LICENSE
README.md
include/
lib/
sbom.spdx.json

$ ls -1FG $(brew --prefix googletest)/include
gmock/
googlemock/
googletest/
gtest/

$ ls -1FG $(brew --prefix googletest)/lib
cmake/
libgmock.a
libgmock_main.a
libgtest.a
libgtest_main.a
pkgconfig/
```

</details>

## makeのときだけ設定する場合

`Makefile` に下記のように追加する.

```make:Makefile
ifeq ($(shell uname -p), arm)  # ifの条件は適宜編集するか削除する
    export CPATH := /opt/homebrew/include:$(CPATH)
    export LIBRARY_PATH := /opt/homebrew/lib:$(LIBRARY_PATH)
endif
```

# 確認環境
```console
$ g++ -v
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
```
Zennへの移行を考える

今日何気なしにXを見ていると、Qiitaについてのポストが目に入った。
「Qiitaはプログラミングとは関係ないポエム記事が増えてユーザーが減った」
「運営が変わって体制が悪くなった」
という声の中に
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">内容は気にせずとにかくアウトプットしようみたいな流行りが一時あって、qiitaに質が高いとは言えない記事が溢れた結果ユーザーが逃げたイメージ</p>&mdash; すぴる (@6b9mwdL9kO28025) <a href="https://twitter.com/6b9mwdL9kO28025/status/1826810859026612664?ref_src=twsrc%5Etfw">August 23, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

あ、これ…。
俺のことだ…。

今もこうやってプログラミングとは関係ないブログを書いているので現在進行形でやってしまっている…。

今後ブログを作ってプログラミング関係以外はそっちで活動するとはいえ、色々懸念点が見えてきてZennに移行しようかと考え始めたわけだ。
まだよく調べて比較して考えるが、おそらくZennに移行すると思われる。
PostgreSQLの「MERGE」コマンドを試してみた

# はじめに
PostgreSQLに「MERGE」というコマンドが存在することをつい先日知りました。
どうやら複数の操作（INSERT、UPDATE、DELETE）を一度に実行できる便利なコマンドらしいので、この機会に試してみたいと思います。
# テーブルの作成
まず、MERGEを実行するためのテーブルを用意します。
今回は、ワインの在庫管理を例として挙げます。

### wines テーブル作成
今あるワインのリストと、その在庫数を保存している
```sql
CREATE TABLE wines (
    winename VARCHAR(255) PRIMARY KEY,  -- ワイン名
    stock INT                           -- 在庫数
);
```
### wine_stock_changes テーブル作成
新しいワインの入荷や売れたワインの数を記録している
```sql
CREATE TABLE wine_stock_changes (
    winename VARCHAR(255),  -- ワイン名
    stock_delta INT         -- 在庫の増減数
);
```
### 初期データ投入
```sql
-- wines にデータを挿入
INSERT INTO wines (winename, stock)
VALUES ('Chardonnay', 10), ('Merlot', 5);

-- wine_stock_changes にデータを挿入
INSERT INTO wine_stock_changes (winename, stock_delta)
VALUES ('Chardonnay', 5), ('Merlot', -6), ('Cabernet', 10);
```

# MERGE

MERGE文の基本的な構文は以下のようになります。MERGE文を使うことで、ターゲットテーブルに対して条件に基づいて行の挿入、更新、削除を一度のステートメントで行うことができます。
```sql
MERGE INTO target_table AS t
USING source_table AS s
ON <join_condition>
WHEN MATCHED THEN
  <update_action>
WHEN NOT MATCHED THEN
  <insert_action>;
```
### 具体例：ワイン在庫の管理
wine_stock_changesからのデータを基に、winesテーブルの在庫を更新します。
```sql
MERGE INTO wines w
USING wine_stock_changes s
ON s.winename = w.winename
WHEN NOT MATCHED AND s.stock_delta > 0 THEN
  INSERT (winename, stock) VALUES(s.winename, s.stock_delta)
WHEN MATCHED AND w.stock + s.stock_delta > 0 THEN
  UPDATE SET stock = w.stock + s.stock_delta
WHEN MATCHED THEN
  DELETE;
```

新しいワインがwinesテーブルに存在しない場合...
* 新しい在庫変更情報（stock_delta）が0より大きい場合、新しいワインをwinesテーブルに追加する

新しいワインがwinesテーブルに存在する場合...
* 在庫変更情報（stock_Delta）を追加しても在庫数が0より大きい場合、在庫数を更新する
* 在庫変更後に在庫数が0以下になる場合、そのワインをwinesテーブルから削除する

# 実行結果
### 実行前 winesテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864680/1ddcb3d7-134e-ede2-00e4-828dcdcc505b.png)
### 実行後 winesテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864680/b0d732db-6e8e-79f8-9bb2-1bbf3f0c8e70.png)

wine_stock_changesの情報が更新、追加、削除されていることを確認。

# まとめ
MERGEコマンドを使うことで、複数のデータ操作を効率的に一つのSQLステートメントで実行できました。このコマンドを使って、複雑なデータ処理をより簡潔に実装してみましょう！

# 参考サイト
https://www.postgresql.org/docs/16/sql-merge.html
Claude 3.5がGPT-4より素晴らし！ これまでで最も強力な視覚モデルが無料で利用可能に




今日、AnthropicはClaude 3.5 Sonnetを発表しました。これは、Claude 3.5シリーズの最初の製品です。Claude 3.5 Sonnetは、業界の知能基準を引き上げ、さまざまな評価で競合モデルやClaude 3 Opusを上回りました。速度とコストは、ミッドレンジモデルのClaude 3 Sonnetと同等です。

Claude 3.5 Sonnetは、大学院レベルの推論（GPQA）、学部レベルの知識（MMLU）、およびコーディング能力（HumanEval）の新しい業界基準を設定しました。細かなニュアンス、ユーモア、複雑な指示の理解において顕著な進歩を示し、自然で親しみやすい語調で高品質のコンテンツを作成するのに優れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997148/24da2fbe-5b9a-26d6-5ebb-edef06454aa4.png)


Claude 3.5 Sonnetの処理速度はClaude 3 Opusの2倍です。この性能向上と手頃な価格により、コンテキストに依存する顧客サポートや多段階のワークフローの調整など、複雑なタスクに最適です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2997148/dd8ba6f7-ebb0-a1c8-36d9-bd0b3f45c9ec.png)


最先端の視覚機能
Claude 3.5 Sonnetは、これまでで最も強力な視覚モデルであり、標準的な視覚ベンチマークでClaude 3 Opusを超えました。これらの大幅な改善は、グラフやチャートの解釈など、視覚推論を必要とするタスクにおいて特に顕著です。Claude 3.5 Sonnetは、不完全な画像からテキストを正確に転写することもでき、これにより、リテール、物流、金融サービスなどの分野で、AIが画像、グラフィック、イラストからテキスト以上の洞察を得ることが可能になります。

1. 公式の無料利用: [【クリックしてアクセス】](https://claude.ai/login?selectAccount=true&returnTo=%2Fchats%3F)
2. Claude iOSアプリ: [【クリックしてアクセス】](https://apps.apple.com/jp/app/claude-by-anthropic/id6473753684)
Pythonのライブラリについてまとめる

## Pythonの概要
Python（パイソン）はインタープリタ型の高水準汎用プログラミング言語である。

### 特徴
Pythonはインタプリタ上で実行することを前提に設計している。以下の特徴をもっている:
* 動的な型付け
* ガベージコレクション
* マルチパラダイム
* モジュール・クラス・オブジェクト等の言語の要素が内部からアクセス可能であり、リフレクションを利用した記述が可能。

### 設計思想
Pythonの哲学は「あることをなすのに唯一の良いやり方があるはず」

### 標準ライブラリ
Pythonには「電池付属 ("Battery Included")」という思想があり、プログラマがすぐに使えるようなライブラリや統合環境をあらかじめディストリビューションに含めるようにしている。このため標準ライブラリは非常に充実している
* 正規表現
* OSのシステムコール
* XML処理系
* シリアライゼーション
* HTTP, FTP等の各種通信プロトコル
* 電子メールやCSVファイルの処理
* データベース接続 (SQLiteを標準で扱える)
* GUIフレームワーク (Tkinter)
* HTMLのパーサー
* Python自身のコードの構文解析ツール

### ライブラリ
Pythonは多様なコミュニティライブラリがある。
* 数値計算
    * 行列演算パッケージの NumPy
    * プログラミング数学、科学、工学のための数値計算 SciPy
* 機械学習・データサイエンス・AI
    * scikit-learn
    * TensorFlow
    * PyTorch
* データ解析ソフト pandas
* グラフ表示ソフト Matplotlib
* 描画ソフト Seaborn
* データ処理インタフェース IPython
* 数式処理機能 SymPy
* データ処理の高速化 PyPy
* Pythonアプリのコンパイルによる高速化 Numba
* 画像処理のための Python Imaging Library
* SDLのラッパである Pygame
* スクレイピングライブラリ Beautiful Soup
* クローリング、スクレイピング用のpythonフレームワーク Scrapy
* 離散事象シミュレーション SimPy
* OpenCLへのインタフェース pyOpenCL
* OpenGLへのインタフェース pyOpenGL
* OpenCVへのインタフェース pyOpenCV
* CUDAへのインタフェース pyCUDA
* 3Dグラフィックスやアニメーション VPython
* PyODE
* Python(x,y)
* Webアプリケーションフレームワーク
    * Bottle（ボトル） - https://bottlepy.org/docs/dev/
    * CherryPy（チェリーパイ） - https://cherrypy.org/
    * Django（ジャンゴ） - https://www.djangoproject.com/
    * Flask（フラスク） - http://flask.pocoo.org/
    * Pyramid（ピラミッド） - https://pylonsproject.org/projects/pyramid/
    * Plone（プローン） - https://plone.org/
    * Tornado (Webサーバ)（トルネード） - https://sites.google.com/site/tornadowebja/
    * Cyclone（C10K問題対応)（サイクロン） - http://cyclone.io/

## 参考
https://ja.wikipedia.org/wiki/Python

※利用の項目を読む良い
JavaScriptのデータ型一覧

# はじめに
JavaScriptは「動的型付け（Dynamic Typing）」で変数の型が実行時に決定される。
JAVAの「静的型付け（Static Typing）」とは違って型を明示的に宣言する必要はない。

ただし、どのようなデータ型があるか理解は必要なので基本的なことだが整理する。
また、「動的型付け（Dynamic Typing）」と「静的型付け（Static Typing）」の違いについても簡単に整理する。

# データ型
### プリミティブ型
数値（Number）
```javascript
let num = 1;
console.log(typeof num); // 出力: "number"
```

長整数（BigInt）
```javascript
let bigInt = 1234567890123456789012345678901234567890n;
console.log(typeof bigInt); // 出力: "bigint"
```

文字列（String）
```javascript
let str = "Hello, World!";
console.log(typeof str); // 出力: "string"
```

ブール（Boolean）
```javascript
let isTrue = true;
console.log(typeof isTrue); // 出力: "boolean"
```

未定義（Undefined）
```javascript
let undefinedVar;
console.log(typeof undefinedVar); // 出力: "undefined"
```

ヌル（Null）
```javascript
let nullVar = null;
// プリミティブ型"null"が"object"になるのは初期から存在するJavascriptのバグらしい
console.log(typeof nullVar); // 出力: "object"
```

シンボル（Symbol）
```javascript
let sym = Symbol('description');
console.log(typeof sym); // 出力: "symbol"
```


### オブジェクト型
オブジェクト（Object）
```javascript
let obj = { name: 'Mayumi', age: 25 };
console.log(typeof obj); // 出力: "object"
```

配列（Array）
```javascript
let arr = [1, 2, 3, 4, 5];
console.log(typeof arr); // 出力: "object"
```

関数（Function）
```javascript
function greet() {
  console.log('Hello, World!');
}
console.log(typeof greet); // 出力: "function"
```

クラス（Function）
```javascript
class MyClass {
    constructor() {
        this.name = 'example';
    }
}
console.log(typeof MyClass); // 出力: "function"
```

日付（Date）
```javascript
let now = new Date();
console.log(typeof now); // 出力: "object"
```

正規表現（RegExp）
```javascript
let regex = /ab+c/;
console.log(typeof regex); // 出力: "object"
```


## プリミティブ型とオブジェクト型
プリミティブ型：
　- 単一の値を持つ基本的なデータ型
　- 値そのものを直接格納
オブジェクト型：
　- 複数の値をキーと値のペアとして格納できる複雑なデータ型
　- 値の格納された値（メモリ上のアドレス）を参照格納


## 動的型付けと静的型付けの違いによる大きな特徴
JavaScriptは「動的型付け（dynamic typing）」で変数の型を明示的に宣言せず使用する。
JAVAは「静的型付け（Static Typing）」で変数の型を明示的に宣言して使用する。
上記特徴により関数を他の関数として定義したり、そもそも型の変換すら可能。

所感として、
- 処理途中で性質（関数や型）を変えるのは可読性を下げ不具合の原因になる印象が強い
- 動的型付けの特徴を積極的に機会は多くなさそうと感じるが違いの理解は必要そう

```javascript
// 関数定義
function greet(name) {
  return `Hello, ${name}!`;
}
// 関数呼び出し
console.log(greet('Mayumi')); // 出力: Hello, Mayumi!

// 関数修正
function greet(name) {
  return `Goodbye, ${name}!`;
}
// 関数呼び出し
console.log(greet('Mayumi')); // 出力: Goodbye, Mayumi!

// 関数を文字列型の変数に変更
greet = "Mayumi!";
// 変数の内容を出力
console.log(greet); // 出力: Mayumi!
```