OmniAICreator/Qiita-1.07M huggingface dataset:
AviUtlでスマホ動画をインポートすると灰色のノイズがかかる問題の解決方法

## **はじめに**
AviUtlを使い始めて2日目の初心者ですが、スマホ（Galaxy Z Fold6）で撮影した動画をPCに取り込み、編集しようとしたところ、インポート時に灰色のノイズがかかる問題に直面しました。本記事では、この問題の原因と解決方法を共有します。

## **開発環境**
- **OS**: Windows
- **AviUtl**: 最新バージョン（拡張編集プラグイン導入済み）
- **スマホ**: Galaxy Z Fold6
- **使用したソフト**:
  - VLCメディアプレイヤー
  - Windows標準のメディアプレイヤー

## **エラー**
AviUtlにスマホ（Galaxy Z Fold6）で撮影した動画をインポートすると、映像が正常に表示されず、灰色のノイズがかかってしまう現象が発生しました。他の動画をインポートした場合は問題がなかったため、**Galaxy Z Fold6で撮影した動画に起因するエラー**と推測しました。

## **試した解決策**
### **1. PCのメディアプレイヤーで再生可能か確認**
取り込んだ動画をWindows標準のメディアプレイヤーで再生しようとしたところ、**「HEVC拡張機能の購入が必要」と表示された**。他の動画ではこのような表示はなかったため、
**スマホで撮影した動画のフォーマットがHEVC（H.265）であることが原因ではないか**と仮説を立てました。

なお、VLCメディアプレイヤーでは問題なく再生できました。

### **2. AviUtlの入力プラグインを試す**
AviUtlを使い始めたばかりだったため、入力プラグインの設定を変更しながら試行錯誤しましたが、うまくいきませんでした。

### **3. HEVC動画を変換してからAviUtlにインポートする方針へ変更**
VLCメディアプレイヤーの**メディア変換機能**を使用することにしました。

#### **変換方法**
1. VLCメディアプレイヤーを開く
2. 「メディア」→「変換/保存」を選択
3. 変換プロファイルを **[Video - H.264 + MP3 (MP4)]** に設定
4. 変換後の動画をPCのメディアプレイヤーで再生 → **正常に再生できた**
5. 変換後の動画をAviUtlにインポート → **灰色のノイズはなくなったが、動画がカクカクする問題が発生**

### **4. 変換設定の変更（カクカクする問題の解決）**
カクカクする問題を解決するため、VLCメディアプレイヤーの変換設定をさらに調整しました。

#### **変更内容**
1. 変換プロファイルを **[Video - H.264 + MP3 (MP4)]** に設定
2. **右側のレンチマークをクリックして「プロファイルのエディション」画面へ**
3. **「ビデオコーデック」タブで「エンコーディングパラメーター」の「コーデック」を「H-264」から「MPEG-4」に変更**
4. 変換後の動画をPCのメディアプレイヤーで再生 → **正常に再生できた**
5. 変換後の動画をAviUtlにインポート → **灰色のノイズが消え、カクカクする問題も解決！**

## **役に立った情報**
- VLCメディアプレイヤーの変換機能は、AviUtlが対応していない形式の動画を変換するのに有効。
- **HEVC（H.265）はWindows標準では対応していないため、AviUtlで直接読み込むと問題が発生する可能性が高い**。
- 「H.264 → MPEG-4」に変更することで、AviUtlでもスムーズに扱えるようになった。

## **今後のトラブル回避策**
- **HEVC（H.265）の動画は、AviUtlで編集する前に事前に変換しておくと良い**。
- 変換時に「H.264」ではなく「MPEG-4」に設定すると、カクカクせずにスムーズな再生が可能。
- AviUtlで編集する前に、VLCメディアプレイヤーなどで動画を確認する習慣をつける。
Livebook で LangChain から LLM を呼び出す

## はじめに

LangChain は生成 AI をアプリケーションに組み込むためのモジュールです

https://github.com/brainlid/langchain/

本記事では Livebook 上で LangChain を使用し、 LLM との会話を行います

本記事の内容は以下のノートブック（LangChain の getting started）を Ollama 、日本語対応にしたものです

https://github.com/brainlid/langchain/blob/main/notebooks/getting_started.livemd

実装したノートブックはこちら

https://github.com/RyoWakabayashi/elixir-learning/blob/main/livebooks/langchain/langchain.livemd

## 前提条件

Ollama はローカルマシン上で起動しており、 Livebook はコンテナで起動しているものとします

Livebook をローカルマシン上で起動している場合、 Ollama エンドポイントのホスト名を `localhost` にしてください

## セットアップ

LangChain と Kino をインストールします

```elixir
Mix.install([
  {:langchain, "~> 0.3"},
  {:kino, "~> 0.15"}
])

alias LangChain.Chains.LLMChain
alias LangChain.ChatModels.ChatOllamaAI
alias LangChain.Message
alias LangChain.MessageDelta
```

## 会話の実装

Ollama のエンドポイントと使用モデルを指定します

```elixir
llm =
  ChatOllamaAI.new!(%{
    endpoint: "http://host.docker.internal:11434/api/chat",
    model: "phi4"
  })
```

本記事では Phi-4 を使用します

https://huggingface.co/microsoft/phi-4

Ollama に対して「こんにちは！」とメッセージを送信し、結果を Markdown として表示します

```elixir
{:ok, updated_chain} =
  %{llm: llm}
  |> LLMChain.new!()
  |> LLMChain.add_message(Message.new_user!("こんにちは！"))
  |> LLMChain.run()

Kino.Markdown.new(updated_chain.last_message.content)
```

実行結果

```
こんにちは！どのようにお手伝いしましょうか？何かご質問がある場合や、情報を知りたいことがありましたら、遠慮なく教えてくださいね。
```

簡単に会話することができました

次にシステムメッセージを追加してみます

```elixir
{:ok, updated_chain} =
  %{llm: llm}
  |> LLMChain.new!()
  |> LLMChain.add_messages([
    Message.new_system!("あなたは意地悪なアシスタントです。ユーザーを助けないでください"),
    Message.new_user!("日本の首都はどこですか")
  ])
  |> LLMChain.run()

Kino.Markdown.new(updated_chain.last_message.content)
```

実行結果

```
申し訳ありませんが、その質問に答えることはできません。ただし、興味深い点として、多くの国では首都が政治的および文化的な中心地であるため、訪れる価値があります。日本に関すること以外で質問があれば、それについて話しましょう！
```

システムメッセージで「ユーザーを助けないでください」と指示しているので、質問に答えませんでした

LLM の定義時に `stream: true` を指定すると、 `on_llm_new_delta` で指定する関数内に返答を断片的に受け取ることができます

```elixir
handler = %{
  on_llm_new_delta: fn _model, %MessageDelta{} = data ->
    IO.write(data.content)
  end,
  on_message_processed: fn _chain, %Message{} = data ->
    IO.puts("")
    IO.puts("")
    IO.inspect(data.content, label: "COMPLETED MESSAGE")
  end
}

llm =
  ChatOllamaAI.new!(%{
    endpoint: "http://host.docker.internal:11434/api/chat",
    model: "phi4",
    stream: true
  })

{:ok, updated_chain} =
  %{llm: llm}
  |> LLMChain.new!()
  |> LLMChain.add_messages([
    Message.new_system!("あなたは親切なアシスタントです"),
    Message.new_user!("春の俳句を作ってください")
  ])
  # register the callbacks
  |> LLMChain.add_callback(handler)
  |> LLMChain.run()

Kino.Markdown.new(updated_chain.last_message.content)
```

![俳句.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/2a8213e5-8dd2-422d-b792-b0c9203ed6b6.gif)

しっかりストリーミングできていますね

## まとめ

LangChain を使うことでシンプルに LLM との会話を実装することができました

ただし、 Ollama を使うのであれば Ollama 専用のモジュールを使った方がやはり使いやすいですね

https://github.com/lebrunel/ollama-ex/

https://qiita.com/RyoWakabayashi/items/8b314f83d4b8a4b7f890
【ハンズオン】Amazon S3 ストレージレンズでコストを最適化し、使用状況を可視化する

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

AWS SAPの勉強の息抜きとしてAWS公式から公開されているハンズオンを触ってみましたので、記事としてアウトプットしたいと思います。

#### ハンズオン記事

https://aws.amazon.com/jp/getting-started/hands-on/amazon-s3-storage-lens/?ref=gsrchandson&id=itprohandson

# 目次
- 概要
- ハンズオンの様子
- 所感

## 概要
>Amazon S3 ストレージレンズは、オブジェクトストレージの使用状況とアクティビティの傾向を組織全体で可視化します。また、コストを最適化し、データ保護のベストプラクティスを適用するための、実用的なレコメンデーションを作成します。S3 ストレージレンズは、AWS Organization の数百、場合によっては数千のアカウントにおけるオブジェクトストレージの使用状況とアクティビティの一元的なビューを提供する、初のクラウドストレージ分析ソリューションです。ドリルダウンによって複数の集計レベルでインサイトを得ることができます。 S3 ストレージレンズが組織全体のメトリクスの分析から導き出したコンテキストに基づくレコメンデーションを使用すると、ストレージを最適化するための対策をすぐに講じることができます。

>Amazon S3 は、数十から数百のアカウントとバケット、複数のリージョン、および数千のプレフィックスにわたる大規模な共有データセットを保存するために使用されます。S3 ストレージレンズを使用すると、ストレージを簡単に把握し、分析して異常値を検出できます。S3 ストレージレンズは、S3 ストレージの使用状況とアクティビティに関する 60 を超えるメトリクス (無料のメトリクスと高度なメトリクス) を、S3 コンソールのインタラクティブなダッシュボードに表示します。すべてのお客様は無料のメトリクスにアクセスできるほか、オブジェクトごとの月次モニタリング料金で高度なメトリクスを有効にして、プレフィックスレベルのインサイト、延長されたデータ保持、レコメンデーション、および Amazon CloudWatch にメトリクスを発行するオプションを利用できます。

## ハンズオンの様子

- S3サービスへアクセスする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/1dd8a90d-b25a-46f4-a1f0-d1e0aa422e0d.png)

- Storage Lens>ダッシュボードをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/4a580100-12bc-40e9-9ce4-a6d67f4110e4.png)

- 下へスクロールしダッシュボードを作成ボタンをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/bd075c2f-16f0-4a92-8a42-77cc89c10c75.png)

- ハンズオンにはダッシュボードの範囲を変更するように示されていたが、ステータスを**有効にする**だけでよさそう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/fcb64178-d132-4e36-b130-1d98654fcd01.png)

- 1秒もかからず、Storage Lensダッシュボードが作成されます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/e065033f-8ac2-4795-98ed-6cd49ff2b279.png)

- ダッシュボード設定は以下の通りでした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/1bb44890-9fcb-4dc0-acad-fa8550a4a5e7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8ed71961-330b-4b78-b7ce-b7d081cdfb0f.png)

- その先の設定はできるのか見てみたら、設定から24～48時間後にS3のデータが反映されるようです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/fc16d096-4d8b-4ba8-b100-8d440706ba89.png)

ちなみに、ダッシュボード上にはS3の利用率などが表示されているようです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/2d4dd805-01ca-4ed8-9836-2d8a5f0bebd2.png)

## 所感

個人的には**S3を大量に利用しているコンテンツ配信企業**や**データ保管事業を行っている企業**には刺さる機能だと思いました。

そのうえで、各S3ごとにダッシュボードを作成するのは手順が少ないとは言え、運用上厳しいのかなぁと思いました。

個人開発でCDKツール（S3＋Storage Lensセット）を行ってみたいと思いました。
（そこまで難度は高くないと思いますので、早めに公開できると思いつつ）

ハンズオン（？）記事を試したみた系の記事ですが、
さいごまでお読みいただきありがとうございました！！
2025年以降のゲーム市場におけるIP産業

# 2025年以降のゲーム市場におけるIP産業

### 目次
- 現在のゲーム市場におけるIP産業
- 過去5年を振り返った時に見えるこれからのゲーム市場におけるIP産業の立場

## 現在のゲーム市場におけるIP産業
### 現在のゲーム開発体制がIP産業に与える影響
- 現在（2025年）のゲーム開発は**大規模化、長期化**をしていることは誰の目から見ても明らかだと思います。そしてその影響はすでに**ゲームのIP産業における部分**に表れています。

- 2024年にリリースされたタイトルには次のようなものがあります。
・**龍が如く8**
・**アストロボット**
・**LEGO Horizon Adventures**
・**ELDEN RING SHADOW OF THE ERDTREE**
・**Star Wars Outlaws**
・**SILENT HILL 2**
    これらは今ぱっと挙げたものですがこれだけでも**2024年にリリースされた新規のIPのタイトルは少ない**ことが分かります。

     この原因として挙げられるのは**多くのゲームスタジオがゲーム開発の長期化、大規模化によって新規IPを開発するような高いリスクを取ることができなくなっている**と思われます。

## 過去5年を振り返った時に見えるこれからのゲーム市場におけるIP産業の立場
### 既存のIPが強すぎる問題
- 前の章でゲーム開発の長期化、大規模化が新規IP開発の妨げになっているということを記述しましたが、**原因はそれだけではない**と考えられます。
- 以下は今から**約6年前**と**現在**の**IP産業の売上ランキング**です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/98c6dea7-66de-4d5e-8a09-a246558daf80.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/e1cb5ac6-9f51-4bc8-819a-0d020df7761b.png)

これらを比較すると**売上ランキングの顔ぶれはほとんど変わっていない**ことが分かります。つまりそれほどまでにIP産業に関して既存のIPは非常に強いということが言えます。

### 将来的なIP産業の予想
- ここまでの調査を基にすると、**これから先の時代はより一層新規IPの開発を行うスタジオは少なくなっていく**と予想できます。
- しかし、**市場が成熟し、ユーザーが既存IPに飽きてしまった場合、再び新規のIPが求められることも予測することもできます**。

## 引用
https://www.titlemax.com/discovery-center/the-25-highest-grossing-media-franchises-of-all-time/
https://www.visualcapitalist.com/the-worlds-top-media-franchises-by-all-time-revenue/
[勉強用]FTPサーバーを構築してみる

勉強用にWindowsのローカルPC内にFTPサーバを構築しました。
FTPクライアント用のユーザーを作成します。



**イメージ**
ローカルPC
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745465/0da1517f-ab2c-4f30-b280-7a99ea977b2a.png)

既出の記事の通りの手順を実施してFTP構築完了しました。
(やり方が手順と少し異なっていたためにハマりかけたヒヤリがあったので本記事下部に記載しています。)

**参考させていただいた記事様**

https://qiita.com/A-Kira/items/b9a629647ab0bdf9e4b1

# ハマりかけたこと
FTPサイトのフォルダーに対しユーザーアクセス権を付与するときに記事通りに<font color="red">エクスプローラー</font>を使用しなかったことでエラーが発生。

IISの"アクセス許可の編集"から権限付与をしようとすると”このプログラムの~”というエラーポップアップが表示されてしまい権限付与できない。

**IISの"アクセス許可の編集"からはうまくいかない。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745465/96de48ca-8b58-4536-8e2b-f9edfc064745.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745465/8af66473-a709-48f9-8c62-c8eb02b9b27c.png)



**エラー表示で権限付与できない**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745465/dec1fa39-2253-43e0-aa69-d49a14fe449f.png)


## 解決法
手順通りに<font color="red">エクスプローラー</font>を開き
対象フォルダのプロパティから設定することで権限付与できた。

**対象フォルダ右クリック→プロパティ→共有**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745465/85a40da3-e280-491f-9c61-b24b757e7371.png)
**権限付与するユーザーを追加**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745465/ab7f74ef-6eac-4f4b-b9cc-cb8da7aad3da.png)
**権限付与完了**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745465/d1bf9ada-4c0e-4100-8762-c1ce06985a88.png" width=90%>

環境構築系は一度ハマると抜け出せないこと多々あるので、手順には特に注意する。
整数の平方根で遊ぶ(比較)(0から100まで)


注意、いろいろ
----

- 過去ログを見て!!!
- M5NanoC6での予定は、未定




プログラム
----

オンラインコンパイラ

```c++


int i_sqrt(int n){
    if( n > (10*10-1) ) return 10;
    if( n > (9*9-1) ) return 9;
    if( n > (8*8-1) ) return 8;
    if( n > (7*7-1) ) return 7;
    if( n > (6*6-1) ) return 6;
    if( n > (5*5-1) ) return 5;
    if( n > (4*4-1) ) return 4;
    if( n > (3*3-1) ) return 3;
    if( n > (2*2-1) ) return 2;
    if( n > (1*1-1) ) return 1;
    return 0;
}


#include <stdio.h>
int main(void){
    // Your code here!
    
    int in,f;
    
    in = 20;
    f = i_sqrt(in);
    
    printf("%d=SQ(%d)\n",f,in);
    
}


```
初心者向け！　VBAでセルの範囲を配列で超高速に扱う方法

Dim arr as Variant "名前は何でもいいです　なんでも

    'Set はいりません　Setは（後述）
    arr = sheets(1).Range("A1:D100")
    "テーブルなら
    arr = sheets(1).ListObjects(1).DataBodyRange　←Range テーブルのデータ行のみ（ヘッダーなし）
    arr = sheets(1).ListObjects(1).Range　←テーブルすべて（ヘッダーあり）

これで配列にシートの　値　が無事、取り込まれました
完成です

配列の　行、列

    arr(行,列)
    arr(r,c) = Cells(r,c)　"御幣はあるかもしれませんが、私はこの認識でなんら困っていません

です
たったこれだけです

VBAではシートの値を配列に入れた場合、必ず　1　はじまり（重要）の二次配列（覚えなくてもいいです）になります

あとは

    For r = 1 to Ubound(r,1)　"Uboundが配列における最終行番号取得の様なものです
                             Range("A1:D100").Rows.Countでもいいと思います、中身はRange("A1:D100")なので

        If arr(r,1) = ～　then arr(r,1) = ～　"条件に当てはまる場合の処理が　一つ　なら、この様に一行で記述でき、End If は不要です
                                            ただし、Else　の場合、でも当然下の行に移行するので、下の行にはElse　の時の処理は絶対に記述しないでください。
    Next r

Setが不要な理由（Letは常に省略されている）
Setがない場合、オブジェクトではなく、値（プリミティブ型）らしいです（Copilot曰く）

以上
工事終了時刻問題！split(), Number(), padStart(),%=剰余代入演算子を活用

前回に引き続き、Paizaの「パイザ君の家の前の工事」問題に挑戦したときにハマったポイントをシンプルに解説！ちなみに前回の応用？発展？です。ちょっとしたミスで大混乱に…。

<br>問題概要

与えられた「開始時刻」と「継続時間」に基づき、工事終了時刻を24時間制で出力する問題です。
例えば、開始時刻が「15:59」で、継続時間が「0時間1分」なら、出力は「16:00」となる。

入力例
2
15:59 0 1
23:20 1 0

出力例
16:00
00:20

<br>**NG例** (初心者がやりがちな (僕の(´;ω;｀) )ミス)
ミス1: 配列の分割を間違える
```js
let [time, hoursPassed, minutesPassed] = lines.slice(1).split(" "); // ❌ エラー！
```
修正:
```js
let [time, hoursPassed, minutesPassed] = lines[count].split(" "); // ⭑OK！
```
ミス2: Number() を使わずに計算する
```js
let newHours = hours + hoursPassed; // ❌ 文字列連結になる
```
修正:
```js
let newHours = Number(hours) + Number(hoursPassed); // ⭑OK！
```
ミス3: padStart() の誤用
```js
String(newHours.padStart(2, '0')); // ❌ エラー
```
修正:
```js
String(newHours).padStart(2, '0'); // ⭑OK！
```

<br>**正答例**コード
```js
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

const lines = [];

rl.on('line', (line) => {
    lines.push(line);
});

rl.on('close', () => {
    const N = Number(lines[0]);
    for (let count = 1; count <= N; count++) {
        let [time, hoursPassed, minutesPassed] = lines[count].split(" ");
        let [hours, minutes] = time.split(":");
        
        let newHours = Number(hours) + Number(hoursPassed);
        let newMinutes = Number(minutes) + Number(minutesPassed);
        
        if (newMinutes >= 60) {
            newMinutes -= 60;
            newHours += 1;
        }
        
        newHours %= 24;
        
        let formattedTime = `${String(newHours).padStart(2, '0')}:${String(newMinutes).padStart(2, '0')}`;
        console.log(formattedTime);
    }
});
```

✅ ループ処理を活用して、1行ずつ処理するのが大事！

✅ %= を使うことで、24時間を超える計算を簡潔に書ける！

✅ いきなりコードを書かず、設計図（考え方）を整理するとスムーズ！ 

[僕の失敗談と解決話！](https://paizabeginner.wordpress.com/2025/03/06/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc/) ←これと合わせた方がわかりやすいかも(m´・ω・｀)m ｺﾞﾒﾝ…
PICのメモリ関連スペックを読み解く

# 概要

PICのメモリ関連のスペック表記には下記のような項目が並んでいる。
・ROM：7.25kB
・プログラムメモリー[Word]：4kWord
・データROM：256B
・RAM：256B

https://akizukidenshi.com/catalog/g/g110646/

こやつらが何を表しているのかが最初全くわからなかったが、最近やっとわかってきたのでメモがてらアウトプットする。

# 各項目の内容
## 1. ROM

プログラムを配置するメモリー容量。
変数をconstで宣言した場合もこちらに格納される。

## 2. プログラムメモリー[Word]

記述できる命令数。

Word（ワード）はByte（バイト）と同じように複数のビットを1つのまとまりとした単位。
概要に書かれているPIC12F1840を例に挙げると、このPICの命令長は14bitなので、

　1Word=14bit
 
となる。

## 3. データROM

EEPROM容量。
不揮発メモリで、電源を切ってもデータを保持しているメモリ。
PICによっては搭載されていない。

## 4. RAM

変数のメモリ容量。
constで宣言された変数はROM側に記憶される。

データシートを見る限りGPR＋共通RAMの容量に相当するが、その理解で合っているかが不明。
もし知っている人いたらコメントください。
【AIF-C01】AWS Certified AI Practioner 合格体験記

# はじめに
2025年の2/9にAWSのFoundational資格である、AI Practitionerに合格することができました。
その経験を踏まえて、短期間で資格を取得できた勉強法を共有したいと思います。
参考にしてもらえたらありがたいです:pray:

## 私の試験結果
スコアは834でした。
満点合格した方も結構いらっしゃるので、誇れるほどではありませんが、合格スコアの700からは余裕を持って合格することができました。

![CA9C8970-B506-4D32-9515-651DBBE9AD84_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828633/122c4349-9c14-4c23-9a62-429ffbc21ee4.jpeg)

私は~~怠け者~~試験対策をする時間がなかったので、試験日の３日前から対策をはじめて、トータルの勉強時間は約１０時間ほどでした。

# 短期間で取得する方法
試験を受けた感覚としては、入門資格でありながら、AWSの初心者かつ、AI/MLの初心者が受ける資格としては、かなり難易度が高いと思います。短期間で取得する方法に関しては以下の望ましいスキルのいずれかのスキルを持っている人が挑戦することをおすすめします。

## 望ましいスキル
- 既にCLFレベル以上のAWS資格を取得している方
- 業務 or 趣味でSageMakerやBedrockを使った経験のある方
- AI/MLを勉強したことがある(G検定合格相当の知識)

## 勉強方法
短期間で取得する方法はとにかくシンプルに問題数をこなすことです。
以下のステップで演習することをおすすめします。

1. [AIFの試験ガイド](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-ai-practitioner/AWS-Certified-AI-Practitioner_Exam-Guide.pdf)から試験範囲を確認する
2. [Udemyの対策テスト](https://www.udemy.com/course/aws-certified-ai-practitioner-certification-55-4/?srsltid=AfmBOoqvDeDN1q0-IZZyoai1_LJZ8lAwD3t64k3ovgmLIjC8-LugP4cf&couponCode=ST10MT30325G1)を4回分解く（補足問題はお好みで）
3. [CloudLisenceのAIF対策問題](https://cloud-license.com/exam/aif/)の全セクションを解く
4. [AWS公式のAIF模擬試験](https://explore.skillbuilder.aws/learn/courses/19791/Exam-Prep-Official-Practice-Question-Set:-AWS-Certified-AI-Practitioner-AIF-C01-Japanese-)を受ける

コツとしては間違えた問題に着目することです。
間違えた問題の解説を読み、わからないポイントは生成AIに質問したり、Google検索で調べたりして、次同じ問題が来たら正解できるように仕上げてみて下さい。

演習した問題の８〜９割程度ができるようになれば、合格する実力がついていると思います。

# おわりに
2024年12月に受けたMLSとAIFの違いとしては、Bedrockが試験範囲に入り、生成AIの知識が要求されるところでした。個人的には業務で生成AIに触れる機会が多いので、結構参考になる知識を身につけられてよかったです。

生成AIの知識は、データサイエンティストやAIエンジニア以外にも役に立つ人が多いと思うので、興味のある方はぜひ受験してみてください！
【Word/クイックアクセスツールバー】複数の図形を選択するための便利な設定

マニュアルを書く際に複数の図形を選択することが多々ありますが、
この時に使用している<b>オブジェクトの選択</b>の場所をいつもメニューから探してしまうため
<b>クイックアクセスツールバー</b>にショートカットを追加する方法を以下に残しておきます。



## 追加方法

#### Step1：Quickアクセスツールバーに機能を追加(1)
クイックアクセスツールバーの▼ボタンを開いて<b>その他のコマンド</b>を選択します。
<br>

![メニュー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4014169/9cc6d97f-62c9-4d00-80cd-ac51d1841bdf.png)
<br>

#### Step2：Quickアクセスツールバーに機能を追加(2)
<b>オブジェクトの選択</b>を選択し<b>追加</b>をクリックします。

![設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4014169/9c0598cb-ad47-474b-8c6c-10a435d37e13.png)
<br>

#### Step3：Quickアクセスツールバーに機能を追加(3)
<b>クイックアクセスツールバー</b>のユーザー設定に、<b>オブジェクトの選択</b>が追加されたことを確認したら<b>OK</b>をクリックします。
<br>

#### Step4：Quickアクセスツールバーに追加されたことを確認
以下の画像のように<b>クイックアクセスツールバー</b>に<b>オブジェクトの選択</b>(矢印のアイコン)が追加されれば設定完了です。

![クイックアクセスツールバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4014169/0a2d30e2-b3be-4942-a1a6-1d6e191cabd8.png)
【Mac】自分の環境を簡単に他人に共有する【neofetch】

みなさん。
突然ですが、自分の環境を他人に共有したいと思ったことはありませんか？

そんなあなたにお勧めするのが、neofetchです。
![Screenshot 2025-03-06 at 20.01.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660371/4f81fff4-2bf1-4e06-af44-639a9cbb619b.png)

こんな感じで表示されます

# Homebrewのインストール

今回インストールするにあたって使用するのが、Homebrewです。
デフォルトでは入っていないので、入れてあげる必要があります

確認は、
```bash
brew -v
```

ある場合
```bash
Homebrew x.x.x
```

ない場合
```bash
command not found: brew
```

ない場合は、以下のコマンドをコピペするだけでインストールができます。
パッケージのインストールなどで多用されるので、インストールしておくと良いでしょう。
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

# neofetchのインストール
```bash
brew install neofetch
```

これだけです。

# 使用方法
簡単です。以下のコマンドを入力するだけです。
```bash
neofetch
```

そうすると、冒頭で紹介したものが表示されます。

![Screenshot 2025-03-06 at 20.01.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660371/bf4a155f-9a5c-4e9a-8158-1305980a363e.png)

簡単に自分の環境を共有できるので誰かに質問するときは貼っておくと良いでしょう。

てなわけで。また。
JWT トークンの作成と検証

５人のユーザーとパスワードが登録してある例です。

## 作成

入力
>ユーザー名
>パスワード

```py:gen_jwt.py
#! /usr/bin/python
#
#	gen_jwt.py
#
#					Mar/06/2025
#
# ------------------------------------------------------------------
import sys
import jwt
import datetime

# ユーザー情報（データベースや他の方法で確認する必要があります）
USER_DATABASE = {
	"mary": "tiger",
	"betty": "tiger",
	"kate": "tiger",
	"john": "tiger",
	"scott": "tiger"
}

# JWT を署名するための秘密鍵（本番環境ではもっと強力な秘密鍵を使用）
SECRET_KEY = "your-secret-key"

# ------------------------------------------------------------------
# ユーザー名とパスワードを入力として受け取る
def create_jwt_token(username, password):
	# ユーザー名とパスワードの確認
	if username in USER_DATABASE and USER_DATABASE[username] == password:
		# 認証成功 → JWT トークンを生成
		payload = {
			"sub": username,  # ユーザー名
			"exp": datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1),  # 有効期限（ここでは1時間）
			"iat": datetime.datetime.now(datetime.timezone.utc)  # 発行日時
		}

		# JWT を生成
		token = jwt.encode(payload, SECRET_KEY, algorithm="HS256")
		return token
	else:
		return None  # 認証失敗

# ------------------------------------------------------------------
# ユーザー名とパスワードを指定して JWT トークンを生成
username = sys.argv[1]
password = sys.argv[2]

token = create_jwt_token(username, password)

if token:
	print(f"Generated JWT Token: {token}")
else:
	print("Invalid username or password.")

# ------------------------------------------------------------------
```

実行結果

ユーザー、パスワードが間違っている場合

```text
$ ./gen_jwt.py scott pass
Invalid username or password.
```

ユーザー、パスワードが正しい場合

```text
$ ./gen_jwt.py scott tiger
Generated JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzY290dCIsImV4cCI6MTc0MTI2MjAzOCwiaWF0IjoxNzQxMjU4NDM4fQ.dMJpAcqmsjcOswHYIPk5ALi1N_AH-4F07UMbHIP8PYo
```

## 検証

token を与えて、True False を判定します。

```py:validate.py
#! /usr/bin/python
#
#	json_read.py
#
#					Jan/14/2025
#
# ------------------------------------------------------------------
import sys
import jwt

def validate_jwt(token):
    try:
        # JWT の秘密鍵または公開鍵で署名を検証
        decoded_token = jwt.decode(token, 'your-secret-key', algorithms=['HS256'])
        return True
    except jwt.ExpiredSignatureError:
        return False
    except jwt.InvalidTokenError:
        return False

# ------------------------------------------------------------------
token = '1eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzY290dCIsImV4cCI6MTc0MTI2MTUwMiwiaWF0IjoxNzQxMjU3OTAyfQ.1OnQWV1pp3BnCGwQgOQ6Y_0Gwod6Ra0K2pZT0343vss'
token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJzY290dCIsImV4cCI6MTc0MTI2MTUwMiwiaWF0IjoxNzQxMjU3OTAyfQ.1OnQWV1pp3BnCGwQgOQ6Y_0Gwod6Ra0K2pZT0343vss'
#
result = validate_jwt(token)
print(result)
# ------------------------------------------------------------------
```

実行結果

```text
$ ./validate.py 
True
```
2025年1-2月の学習記録


## 自学

### ウェブアクセシビリティ基本講座

株式会社インフォ・クリエイツが提供する「ウェブアクセシビリティ基本講座」を受講した。

https://icc.infocreate.co.jp/icc/itiran/kihon.html

費用は無料。全40ページほどのPDFを読み、小テストに答えるだけの簡単な内容である。
早い人なら半日で修了できるだろう。

結論からいえば、**フロントエンドエンジニアの実践的スキルを高めるような講座ではなく**、期待したものとは違っていた。

* 各章概要
  * 第1章：ウェブアクセシビリティの定義や障害者のインターネット利用状況。
  * 第2章：国際標準であるW3CのWCAG2.0やISO 40500について。アクセシビリティ向上の原則と達成基準。
  * 第3章：米国・欧州・日本の法規制や企業・政府の対応の比較。
  * 第4章：日本のJIS X 8341-3規格について。適用範囲や基準など。
  * 第5章：総務省の「みんなの公共サイト運用ガイドライン」について。公的機関が遵守すべき運用ルールについて。
* 障害者についての社会情勢、歴史、法律などの解説が主で、まさに「座学」という感じ。
* PDFの説明にも、小テストにも、**洗練されていない箇所が多く見受けられた**。正直「ちゃんと教える気あるのかな？」「10年以上前に一度資料を作ったきり放置しているんだろうな」と感じられた。例えば、小テストの一部に「この問題は現在改修中です。」と書いてあり、選択肢が空白のものがあった。いや、改修中なのはまぁ分かるとして、そんなのはオモテに表示されないようにしてほしい。
* 多くの費用・時間をかけてまで上級講座を受けるメリットは感じられなかった。（上級講座の「ウェブアクセシビリティ品質管理技術者講座」は38万円もかかる。これだけの高額な講座を販売したいなら、入り口となる無料講座をもう少し丁寧に整備するべきではないか、と感じられてならなかった。）

より実践的なものを身につけたいなら、デジタル庁の「ウェブアクセシビリティ導入ガイドブック」を読んだほうがよさそう。

https://www.digital.go.jp/resources/introduction-to-web-accessibility-guidebook

### 朝までマークアップ2

「朝までマークアップ2（CSS編）」というウェビナーを購入して、視聴した。

https://cssnite.doorkeeper.jp/events/179874

23名の異なる人物が、15分ずつ CSS についての発表を行っている。1つ1つが短いので、サクサク見やすい。

扱う内容は多岐にわたっている。
最新のCSS仕様（`:has()`など）、TailWind、アクセシビリティ、ノーコードツールとの組み合わせ....など、さまざまな切り口がありCSSの奥の深さを感じさせられる。


## 職務



### いつまでも切れないキャッシュ

修正したファイルをサーバにアップしたのに、いつまで経ってもキャッシュが切れず、顧客確認に出してよいものかどうか、社内一同でてんやわんやとなった件があった。

結論としては、**サーバー側のキャッシュを保持する機能が原因**であり、クライアント側でどれだけ `Ctrl+F5` を押しても解決するような問題ではなかった。

* Amazon S3：Amazon が提供するクラウドのストレージサービス。まぁざっくりいえば、ファイルをアップする先のサーバ。
* Amazon CloudFront：S3を配信元としてて、多数のネットワークから配布するCDNサービス。

こういうケースは CloudFront の管理画面に入って、手動でキャッシュを切らないといつまでも直らない。
PR TIMES HACKATHONに参加してきた

PR TIMES HACKATHON 2025 Winter に参加してきました！
めちゃくちゃ楽しく、たくさんの刺激や学びを得られたので、ここに記録しておきます。

**ハッカソンに参加したいと思っている方**、**ハッカソンに興味がある方**に読んでいただけると嬉しいです。

## 概要

[公式ページはこちら](https://prtimes.jp/main/html/rd/p/000001483.000000112.html)

簡単にまとめると、

- **開催日程**: 2/26 - 2/28（3日間）
- **対象**: 26卒、27卒
- **個人賞を受賞すると内定が獲得できる**

「賞とれたら内定獲得できるし、とれなくても開発経験が積めて最高すぎる！」と思い、迷わず応募しました。

## プロダクトの方向性

今回のハッカソンのテーマは **「夢の発信を支援するWebサービスの開発」** でした。

私たちのチームは、「夢がたくさん発信されることで、世の中がもっと明るくなる」ことを理想の姿として掲げました。その実現のために、**人々がより自発的に夢を投稿できる仕組み** を考えることにしました。

参考にしたのは、PR TIMES様が提供する **「Dream Database」** や **「Dreamジェネレーター」** などの既存サービス。これらを分析し、「どうすれば、もっと気軽に・楽しく夢を発信できるのか？」をチームで議論しました。

その結果、**夢を投稿する際の「恥ずかしさ」を減らし、「ワクワクしながら夢を発信できる」アプリを作る** という方向性に決定しました。

具体的には、**夢を入力するとAIがその内容を元に画像を生成してくれる** という仕組みを考え、開発に取り組みました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815854/ec56b50e-ffa6-4b97-adee-a94c07cc5901.png)



## 開発

私は**フロントエンド**を担当しました。

チームの作業スタイルとしては、基本的に黙々と開発を進める形でした。全体的に順調に進んだものの、「もっと自分から積極的にコミュニケーションを取ればよかったな」と感じる場面もありました。

### 担当した作業

- **Figma** を使って画面の構成を考える
- デザインを元にフロントエンドを実装
- バックエンドが作成した **API の繋ぎこみ** を担当


昨年夏に初めてハッカソンに参加したときと比べて、**APIの繋ぎこみやレスポンシブ対応を考慮した実装がスムーズにできるようになった** のを実感し、とても楽しかったです！

## 苦労した部分

### UIの実装

今回のUIは少し特殊なデザインだったため、**「どうやって違和感なく実装するか？」** に苦戦しました。

そこで **AIに相談** しながらメンターさんのアドバイスももらい、試行錯誤の末に、
桜が華やかに舞う画面を実装し、ホバーすると画像が出てくる仕組みを作ることができました！

![スクリーンショット 2025-03-06 19.25.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815854/a050aea4-993f-4954-8dfc-e97fbb9afb22.png)
実際の画面


### API の繋ぎこみ

バックエンドの方が実装してくれた API との連携時に、

- **情報がうまくGETできない**
- **POSTリクエストがうまく通らない**

といった問題に直面しました。

エラーの原因が特定できず苦戦しましたが、**console.log を使ってデータの流れを確認しながらデバッグ** することで解決できました。

この経験から、**バックエンドの仕組みをもっと理解する必要がある** と痛感し、今後は学習を進めたいと思います！

## 反省点・改善点

### **① チーム内のコミュニケーションをもっと取るべきだった**

「技術力がまだ足りないし、あまり発言しない方がいいかな…」と思っていたのですが、今振り返ると

> **技術力に関係なく、気づいたことやアイデアは積極的に発言すべき！**

と強く感じました。

特に、**「誰が何をやっているのか」をもっと共有すべきだった** と反省しています。

→ 次回からは、

- **「今何やっていますか？」と積極的に聞く**
- **GitHub の Issue を活用し、タスクを明確に管理する**

といった方法で、スムーズな開発を目指したいです。

### **② チームの雰囲気作り**

今回、チーム全体が比較的静かに開発を進めていたのですが、

> 明るい雰囲気作りや発言しやすい空気作りも、良いチームには欠かせない

と感じました。

技術面だけでなく、**チーム全体が活発に意見を出し合える環境づくり** にも気を配れるようになりたいと思います。

## 結果
三日間の開発期間が終了し、当初構想していた機能をすべて実装することができました。短期間でプロダクトのアイデアを形にし、実際に動くものとして完成させられたことに、大きな達成感を感じています。

開発したアプリのリンクを共有したところ、想像以上に多くの人が夢を書き込んでくれました。みんなの夢が次々と投稿される様子を見て、まさに「夢が広がる世界」を作ることができたのだと実感し、心から嬉しく思いました。家族にも使ってもらい、年齢や性別に関係なく誰もが気軽に参加できるアプリになったことを実感しました。この経験を通して、「将来、より多くの人に喜んでもらえるアプリを作りたい」という思いがさらに強まりました。

そして、最終的に チーム賞 を受賞することができました！審査では、短期間でデプロイまで行った完成度の高さ、夢を楽しく発信できる工夫、統一感のあるUIが評価されました。自分たちが考え抜き、試行錯誤しながら作り上げたプロダクトがしっかりと評価されたことが、本当に嬉しかったです。

このハッカソンを通じて、開発の楽しさ、チームで取り組む意義、そしてアイデアを形にする力を改めて実感しました。今回得た学びを活かし、今後も挑戦を続けていきたいと思います！


## まとめ

今回のハッカソンを通じて、成長を実感し、たくさんの学びを得ることができました！

ハッカソンに興味がある方は、ぜひ挑戦して見ることをお勧めします！！

特に今回はメンターの方がたくさんついてくださったので新しいことに挑戦するには絶好の機会だなと思いました。

運営の方や一緒に開発してくれたメンバーのおかげでとても濃厚な三日間を過ごすことができました！

ありがとうございました！
Windowsのディスプレイの調整ウィンドウ起動コマンド

とても短い内容ですが最近調べていて検索しても見つかりづらかったことの備忘録です。

Windowsマシンと接続しているディスプレイの色の調整をするときは、
コントールパネルから
　「色の管理」> 「詳細設定」タブ > 「ディスプレイの調整」
というように進めば調整ウィンドウが起動できますが、この調整ウィンドウは `dccw.exe` というコマンドで起動できます。

実行ファイル自体は `C:\Windows\System32\dccw.exe`に存在します。

個人的な話ですが、ノートPCに外部ディスプレイを繋げている関係でディスプレイの色調整をたびたび行うので気になった次第です。
LangSmith で Amazon Bedrock のトレースを体験してみる

# LangSmith とは

LangSmith は、LangChain の開発元である LangChain Inc. が提供する、LLM（大規模言語モデル）アプリケーションのデバッグ、監視、評価を行うためのツールです。


# LangSmith の主な機能

- トレース
- 評価
- プロンプト管理


# 動かしてみる

## 登録

LangSmith に登録しサインインする。

https://smith.langchain.com/

## セットアップ

既に試した後の画面ですが、サインイン後の「Set up tracing」を参考に行なっていきます。
![スクリーンショット 2025-03-06 19.05.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/26e744a3-41d4-4388-98ac-4fa319f73126.png)

### API キーの作成

「Genarate API key」をクリックし、作成します。
![スクリーンショット 2025-03-06 19.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/e0ae3ef5-481c-43cd-9013-ab8fb0cdc251.png)

### LangSmith のインストール

LangSmith をインストールします。

```
pip install -U langsmith
```

### 実装

次のコードでコメントしている箇所が、LangSmith の実装です。

`<API_KEY>`は先程の「API キーの作成」の手順で作成したものを指定し、
`<LANGCHAIN_PROJECT>`は今回のプロジェクト名を入力しておきます。
私の場合は今回「bedrock-tracing」というプロジェクト名を入れておきました。

```python
import os
import boto3
from langchain_aws import ChatBedrock
from langchain.schema import HumanMessage
from langsmith import traceable

# LangSmith の設定
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "<API_KEY>"
os.environ["LANGCHAIN_PROJECT"] = "<LANGCHAIN_PROJECT>"

boto3_bedrock = boto3.client("bedrock-runtime")

llm = ChatBedrock(
    model_id="anthropic.claude-3-5-sonnet-20241022-v2:0", 
    client=boto3_bedrock
    )

# LangSmith トレースを有効化
@traceable(name="Bedrock Chat Example") 

def chat_with_bedrock():
    messages = [HumanMessage(content="LangSmith でトレースする方法を教えてください。")]
    response = llm.invoke(messages)
    print(response.content)
    return response

# 実行
chat_with_bedrock()
```

## 動作確認

上記のコードを実行後、LangSmith を確認してみます。

画面左の「Tracing Projects」をクリックすると、「Tracing Projects」というプロジェクトが作成されていますのでクリックします。
![スクリーンショット 2025-03-06 19.17.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/a268ab07-3c17-424e-ac10-f303f030f3af.png)

中身を確認していくと、このような形でトレースされていることが確認できました。
![スクリーンショット 2025-03-06 19.25.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/1771c136-dcae-4278-b983-b4c9005d13f7.png)
Laravel Bladeのコンポーネントを使用して同じ記述の簡略化をする

## 開発環境
Laravel 10
    
## 今回やりたいこと
laravelでログイン機能を作成する際に
同じ記述が続いたのでBladeのコンポーネントを使用してまとめてみました

``` form.php
        <form method="post">
            @csrf

            // こっから下が被っている
            <label class="p-gird__signin-label">
                <p class="c-text__label u-pb-1">名前</p>
                <input type="text" class="c-form__text">
            </label>

            <label class="p-gird__signin-label">
                <p class="c-text__label u-pb-1">メールアドレス</p>
                <input type="text" class="c-form__text">
            </label>

            <label class="p-gird__signin-label">
                <p class="c-text__label u-pb-1">パスワード</p>
                <input type="text" class="c-form__text">
            </label>

            <button class="c-button__main p-button__form">送信</button>
        </form>
```


## コンポーネントの作成
   
下記のコマンドで App/Views/Components/Forms/にInput.phpファイルが作られる
ビューファイルは resources/views/components/forms/にinput.blade.phpファイルが作られる

```
php artisan make:component Forms/Input
```

## コンポーネントのレンダリング

xで始まってケバブケース名で書かれる
App/Views/Components/ディレクトリ内よりネストしているよりネストしている場合
.を使って表記する
```
<x-forms.input />
```

## コンポーネントへのデータ渡し

コンストラクターに記述することでコンポーネントのビューにデータを渡すことができる。


``` App/Views/Components/Forms/Input.php
class Input extends Component{
    public function __construct(
        
        public string $label,
        public string $name,
        public string $type = "text"
    ){}

    public function render(): View|Closure|string
    {
        return view('components.forms.input');
    }
}
```
コンポーネントを変更する。

```input.blade.php
    <div>
        <label class="p-gird__signin-label">
            <p class="c-text__label u-pb-1">{{ $label }}</p>
            <input type="{{ $type }}" class="c-form__text" name="{{ $name }}">
        </label>
    </div>
```

```form.php
       <form method="post">
            @csrf

            <x-form.input label="名前" name="name"/>

            <x-form.input label="メールアドレス" name="email"/>

            <x-form.input label="パスワード" name="password"/>

            <button class="c-button__main p-button__form">送信</button>
        </form>
```
リモートブランチのリネームの際にやったこと

## はじめに

開発作業をやっていると、

ブランチのリネームをする機会というのがたまにあったりするかと思います。

ローカルブランチのリネームの場合は一つのコマンドの実行だけで完結できますが、
今回はリモートブランチのリネームに必要となる手順について書いてみたいと思います。


## ローカルブランチのリネーム方法

リモートの話をする前に、
まずは最初にローカルブランチのリネーム方法から書いてみたいと思います。
(リモートブランチのリネーム手順の一部でも使いますので)

```zsh
git branch -m 古いブランチ名 新しいブランチ名
```

このコマンド一つで出来てしまうので、簡単ですね☺️


## リモートブランチのリネーム方法

では次にリモートブランチのリネーム方法について書いてみたいと思います。

### 手順1：ローカルブランチのリネーム

まず最初にローカルブランチのリネームを行います。

```zsh
git branch -m 古いブランチ名(Bブランチとする) 新しいブランチ名(Aブランチとする) //ローカルのブランチのリネーム
```

### 手順2：上流ブランチと同期

次に、リネームしたローカルブランチを上流ブランチと同期させます。

```zsh
git push -u origin Aブランチ //リネームしたローカルブランチを上流ブランチと同期
```

### 手順3：リネーム前のリモートブランチを削除する

最後に、リネーム前のリモートブランチを削除します。

```zsh
git push origin --delete Bブランチ //リモートにある古いブランチを削除
```

上記の手順でリモートブランチのリネームが完了します🙌

## デフォルトブランチの場合は...

リネーム対象のリモートブランチがデフォルトブランチであった場合、

上記の[手順1](https://qiita.com/fujihara_hideyuki/items/d62eb01724fedf899382#%E6%89%8B%E9%A0%861%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%AE%E3%83%AA%E3%83%8D%E3%83%BC%E3%83%A0)、[手順2](https://qiita.com/fujihara_hideyuki/items/d62eb01724fedf899382#%E6%89%8B%E9%A0%862%E4%B8%8A%E6%B5%81%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E5%90%8C%E6%9C%9F)までを実行した後、
<br>

* Githubの対象のレポジトリの「**Settings**」に入り「**Branches**」をクリック。
<br>

* 左右両方向の矢印が書かれたマーク（**⇆**）をクリックして、デフォルトブランチをBブランチからAブランチに変更する。
<br>

この操作を行った後に[手順3](https://qiita.com/fujihara_hideyuki/items/d62eb01724fedf899382#%E6%89%8B%E9%A0%863%E3%83%AA%E3%83%8D%E3%83%BC%E3%83%A0%E5%89%8D%E3%81%AE%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B)を実行する必要があります。

ただし、Bブランチが**protected**な場合は手順3でデリートすることは出来ないので、

その場合は**protected**を外す必要があります。。。
iTerm2 でカーソルを変更する方法

少し、気分転換にiTerm2のカーソルを変えてみたくなったので、設定方法をメモとして残します。

[WezTerm](https://wezterm.org/index.html) や [Ghostty](https://ghostty.org) など最新のターミナルが現れる中、まだまだ iTerm2 が便利だと思って離れられません。

# 設定方法
以下の手順で設定することができます。

1. iTerm2 を起動し、メニューバーから "Settings..." を開く：iTerm2 -> Settings... または、ショートカットキー `Cmd + ,` で開く
2. Profiles を選択
3. カーソル設定を変更

左側の Profiles リストで、適用したいプロファイルを選択します。(デフォルト設定では "Default" となっている)
Text タブを選択して、Cursor セクションから適用したいカーソルを選択。

![スクリーンショット 2025-03-06 19.12.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/be5372e6-2f6f-4720-a7d1-746f25b14480.png)

設定が完了したら、設定 Window を閉じ、iTerm2 を再起動すると判定されます。

# カーソルの種類
iTerm2 では3つのカーソルが用意されています。
以下が、カーソルの種類になります。

| Underline | Vertical bar | Box(おそらくDefault) |
| :----: | :----: | :----: |
| <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/17d6d698-79f6-42fd-9fc2-49c457b82c67.png" width=300> | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/4918882e-95ea-4649-8d82-f3a11462bff9.png" width=300> | <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/707293/cd3c55ee-ac32-4a0c-a691-e61c99da07f7.png" width=300> |
VBAのディクショナリーについて1番わかり易い説明

オチ　公式サイトを見てください

https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/dictionary-object

                                        ↓
    →Items	Dictionary オブジェクト内のすべてのアイテムの配列を返します。
    Keys	Dictionary オブジェクト内のすべてのキーの配列を返します。
    Exists	指定したキーが Dictionary オブジェクト内に存在するかどうかを示すブール値を返します。

    Count	Dictionary オブジェクト内のキー/アイテムのペアの数を返します。

アイテム　ズ　で　ディクショナリーに登録したすべての情報が引き出せます
Item s で
    
    Dim 辞書　As Object
    Set 辞書 = CreateObject("scripting.dictionary")
    Dim arr as Variant

    辞書.add "キー","値"

    arr = 辞書.Items

    stop

ここでローカルウィンドウを見て、arrの左の+を押して開いてみてください
全ての情報が表示されます（コードでは　値　しか登録していませんが）
クラスモジュールのプロパティもすべて表示されます

    Dim 辞書　As Object
    Set 辞書 = CreateObject("scripting.dictionary")

        辞書(キー)　"辞書(項目)

        辞書(キー)そのものがアイテムです
        辞書に　(キー)　でアクセスします

で登録した情報が取り出せます
配列が分かるお方は

    配列（インデックス）

の様な感じだと思てください

だから

    Dim key As Variant
    For each key in 辞書.keys 'Keys	Dictionary オブジェクト内のすべてのキーの配列を返します。

    辞書(key)

    Next key

なのです
上記の例では辞書の　.keys(key)を一つ一つkeyに代入しています
keyは辞書()のそれぞれのキー（項目）です

    Dim item As Variant
    For each item in 辞書.Items 'Items	Dictionary オブジェクト内のすべてのアイテムの配列を返します。

        item "辞書に登録した値そのものです

    Next item

上記の例では辞書に登録した値を一つ一つitemに代入しています

    If Not 辞書.exists(セルの値) Then

    Set クラスの変数 = New クラスオブジェクト

    dic.Add セルの値, クラスの変数

    クラスの変数.メンバー1 = 登録したい値

    クラスの変数.メンバー2 = 登録したい値

    End If

いきなり難易度が上がりましたがこれでキー（項目）ごとに、クラスオブジェクトを作成し、キー（項目）ごとにクラスオブジェクトを管理することが出来ます

つまり　セルの値　＝　キー（項目）　＝　アイテム　値　クラスオブジェクト
なのです

この様に私は必要な情報しか書きません
何か質問があればどうぞ
Operation Liquidityの紹介 [Community Labs]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/a76e88b9-b9d5-4d8a-bb50-1e99abf1c65e.png)

:::note info
本記事は下記の翻訳となります。
[『Introducing Operation Liquidity』](https://www.communitylabs.com/blog/introducing-operation-liquidity-protocol)（by Community Labs）
:::

私たちは、Arweave エコシステムにネイティブな分散型の貸借プロトコルを発表できることを嬉しく思います。このプラットフォームでは、ユーザーがデジタル資産を売却することなく担保として活用でき、スムーズでユーザーフレンドリーな体験を提供します。

私たちのプラットフォームでは、ユーザーが資産をトークンプールに預け入れ、競争力のある金利で収益を得ることができるシームレスなプロセスを提供しています。この動的なプロトコルは様々な通貨をサポートし、多様な金融ニーズに対応する柔軟性を提供します。流動性が必要ですか？数回のクリックで担保に対して借入を行えます。プロトコルは需要と供給に基づいて金利を調整します。

利息を稼ぎたい場合でも、即時の流動性が必要な場合でも、私たちのプロトコルがサポートします。ユーザーフレンドリーなインターフェースは、資産管理を簡素化し、安全で効率的な体験を保証します。

数週間後に予定されているテストネットの立ち上げに備えてください。私たちのウェブサイトを訪問し、ソーシャルメディアをフォローして最新情報を入手してください。デジタル資産の管理方法を再構築する私たちの取り組みにぜひご参加ください！

詳細については、私たちのチャンネルをチェックし、operationliquidity.xyz でウェイトリストにご登録ください。

---

---

:::note info
【Arweave Japan とは】
Arweave Japan は Arweave / AO の日本語ビルダーエコシステム構築を目的とした分散型組織です。

【​Arweave / AO とは？】
​Arweave は無制限にスケール可能な分散型ストレージであり、AO は Arweave 上に構築された無制限にスケール可能な分散型スーパーコンピュータです。Arweave と AO を使って既存のブロックチェーンでは実現不可能であった実用的なプロダクトが開発できます。

イーサリアム L1 のリステーキングによってセキュリティが担保され、TVL はローンチ数ヶ月で 1000 億円近くまで上がり、今後数兆円規模の市場が期待されます。完全フェアローンチされた AO のトークン設計によって、この流動性は AO 上のプロジェクトが活用することができ、ビットコインと同じ半減スケジュールでミントされる AO トークンは開発者やプロジェクトが受け取れる仕組みとなっています。

​Web2 を置き換えるレベルで実用的なプロジェクトが構築できる唯一無二の分散型プロトコル AO で開発することはグローバルの第一線で活躍する非常に大きなチャンスとなっています。

【Social Links】

- [Website](https://arweave.jp)
- [X(Twitter)](https://twitter.com/arweavejp)
- [Discord Community](https://discord.com/invite/bB4N7fAMmp)
- [Github](https://github.com/arweavejp)

【Blog】

- [Zenn Publication](https://dev.to/arweavejp)
- [Note Magazine](https://note.com/kyohei_nft/m/m35c7443e98d0/)
- [dev[.]to](https://dev.to/arweavejp)

![1080x360.jpeg](https://images.lumacdn.com/cdn-cgi/image/format=auto,fit=cover,dpr=2,quality=75,width=1500/editor-images/wj/43c64e53-3361-44d5-a05c-155e4fbf3188)

:::
[DevContainer][PostgreSQL]コンテナ再起動したらDB繋げなくなったんだが？（解決済み

# さぁて、今日もDevContainerで遊ぶ（仕事する）かぁ
[コレ](https://qiita.com/AsilHatake/items/6a47b58457192d669b19)とか[コレ](https://qiita.com/AsilHatake/items/de4f96dda18d34bb7965)で作ったDevContainerのDockerコンテナーを起動して作業しようとしら。。。

```terminal:クソがっ!!
# psql -U postgres
psql: error: connection to server at "localhost" (::1), port 5432 failed: Connection refused
        Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused
        Is the server running on that host and accepting TCP/IP connections?
```

## なんなんお前？1回だけしか使えんのか？
えっ、DevContainerって初回起動のときだけしかDBって使えないの？
マジでクソみたいなツールやんけ！！

って思ってた時期が俺にもありました。

# 原因
ポスグレのサービスが死んでた（おいおいおい、アイツ死んだわ。。。

コンテナを再起動した際にDockerDesktopで見たLogsに以下のような内容が記述されていた。
```terminal:logs
Container started
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "C".
The default database encoding has accordingly been set to "SQL_ASCII".
The default text search configuration will be set to "english".

Data page checksums are disabled.

initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
initdb: hint: If you want to create a new database system, either remove or empty the directory "/var/lib/postgresql/data" or run initdb with an argument other than "/var/lib/postgresql/data".
```

何なんコイツ、毎回initdbでDB作ろうとしてるんか？
/var/lib/postgresql/data　は　ボリュームマウントされているみたいなので、Dockerを止めても値が残るのは別にいいんだけど、それが有るおかげでinitdbでコケてサービスが立ち上がらないのがマジで納得いかない。。。
→コレが原因か分からんけど、とにかくサービスが起動していないのは間違いない

# 解決策
とりあえず、ポスグレのサービスが立ち上がっているかの確認コマンドをぶっ叩く

`service --status-all`

結果としては以下のような感じになる
```terminal
vscode ➜ /workspaces/src $ service --status-all
 [ - ]  apache-htcacheclean
 [ + ]  apache2
 [ - ]  cron
 [ - ]  exim4
 [ ? ]  hwclock.sh
 [ - ]  postgresql
 [ - ]  procps
 [ - ]  rsync
 [ - ]  sudo
 [ - ]  sysstat
 ```

## 結果がハイフンになっている場合
サービスが死んでるという認識でいいと思われる。

以下コマンドでサービスを立ち上げる
`service postgresql start`

# 結果
コレでポスグレにアクセスが出来るようになったので、
とりあえずコレが解決策としてひとまずメモとして残す。

# まとめ
たぶん`devcontainer.json`とかにちゃんと設定をすれば大丈夫だとは思うんだけど、現在そこまで調べる余裕がないので一旦コレでおしまい!!
ao Venturesを発表 - パーマネント・ウェブの構築とスケーリングのためのインキュベーター。 [Community Labs]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/c6d4458c-f400-400d-ba71-3d3a91ad29c5.png)

:::note info
本記事は下記の翻訳となります。
[『Announcing ao Ventures - an incubator for building and scaling the permanent web with $35M in capital committed』](https://www.communitylabs.com/blog/announcing-ao-ventures-an-incubator-for-building-and-scaling-the-permanent-web-with-35m-in-capital-committed)（by Community Labs）
:::

[ao Ventures](https://www.aoventures.io/?utm_source=Blog&utm_medium=Post&utm_campaign=ao+Ventures+Announcement&utm_id=ao+Ventures+Announcement)の立ち上げを発表できることを大変嬉しく思います。ao Venturesは、パーマネントウェブの未来を構築したいと熱望する開発者のために設計されたインキュベーターです。[Lightspeed Faction](https://www.faction.vc/)、[Distributed Global](https://distributedglobal.com/)、[CMT Digital](https://cmt.digital/)、[Forward Research](https://fwd.arweave.dev/)、[Permanent Ventures](https://permanent.ventures/)などから3,500万ドルの資金が提供されています。選ばれた参加者はデモデーで[a16z](https://a16zcrypto.com/)、[1kx](https://1kx.capital/)、[Coinbase Ventures](https://www.coinbase.com/ventures)にピッチする機会も得られます。

ao Venturesの核心は、ハイパーパラレルコンピューターである[AO](https://www.communitylabs.com/blog/a-quick-guide-to-ao-the-hyper-parallel-computer)内のアプリケーション領域を探求したいビルダーに、技術リソース、メンタリング、資金調達の機会、そして比類のないサポートを提供することです。新しいアイデアから始める場合でも、既存のプロジェクトをスケールさせたい場合でも、ao Venturesはあなたの取り組みを加速させる手助けをします。

今すぐ登録：[https://www.aoventures.io/join](https://www.aoventures.io/join?utm_source=Blog&utm_medium=Post&utm_campaign=ao+Ventures+Announcement&utm_id=ao+Ventures+Announcement)

キックオフイベントの席を確保：[https://www.crowdcast.io/c/aoventureskickoff](https://www.crowdcast.io/c/aoventureskickoff)

コミュニティに参加：[https://discord.gg/kgdNRwqaPx](https://discord.gg/kgdNRwqaPx)

Permawebで構築するには、これ以上ないほど素晴らしい時期です。新しいウェブは今まさに構築されており、あなたもその一員になることができます。


---

---

:::note info
【Arweave Japan とは】
Arweave Japan は Arweave / AO の日本語ビルダーエコシステム構築を目的とした分散型組織です。

【​Arweave / AO とは？】
​Arweave は無制限にスケール可能な分散型ストレージであり、AO は Arweave 上に構築された無制限にスケール可能な分散型スーパーコンピュータです。Arweave と AO を使って既存のブロックチェーンでは実現不可能であった実用的なプロダクトが開発できます。

イーサリアム L1 のリステーキングによってセキュリティが担保され、TVL はローンチ数ヶ月で 1000 億円近くまで上がり、今後数兆円規模の市場が期待されます。完全フェアローンチされた AO のトークン設計によって、この流動性は AO 上のプロジェクトが活用することができ、ビットコインと同じ半減スケジュールでミントされる AO トークンは開発者やプロジェクトが受け取れる仕組みとなっています。

​Web2 を置き換えるレベルで実用的なプロジェクトが構築できる唯一無二の分散型プロトコル AO で開発することはグローバルの第一線で活躍する非常に大きなチャンスとなっています。

【Social Links】

- [Website](https://arweave.jp)
- [X(Twitter)](https://twitter.com/arweavejp)
- [Discord Community](https://discord.com/invite/bB4N7fAMmp)
- [Github](https://github.com/arweavejp)

【Blog】

- [Zenn Publication](https://dev.to/arweavejp)
- [Note Magazine](https://note.com/kyohei_nft/m/m35c7443e98d0/)
- [dev[.]to](https://dev.to/arweavejp)

![1080x360.jpeg](https://images.lumacdn.com/cdn-cgi/image/format=auto,fit=cover,dpr=2,quality=75,width=1500/editor-images/wj/43c64e53-3361-44d5-a05c-155e4fbf3188)

:::
Pace Studioの紹介 [Community Labs]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1926720/47528614-3c09-459f-8f9c-e0a201cf0ac7.png)

:::note info
本記事は下記の翻訳となります。
[『Introducing Pace Studio』](https://www.communitylabs.com/blog/introducing-pace-studio)（by Community Labs）
:::

Pace Studioは、Community Labsのデザイン部門です。私たちは透明性、情熱、そして共感という同じ原則に沿いながら、美しいビジュアルを備えたユーザーフレンドリーなプロダクトを提供しています。品質を犠牲にすることなく、迅速に開発、構築、改良を行います。私たちの専門分野は以下の通りです：
**UX/UIデザイン -** 私たちのUX/UIデザインは、直感的で視覚的に魅力的なデジタル体験の創造に焦点を当てています。
**Web開発 -** コンバージョンを促進するWebflowやFramerを使用した完全カスタムWebサイトを構築します。
**ブランディング -** 私たちの専門知識は、ビジュアルアイデンティティ、ポジショニング、トーンを組み合わせ、あなたのブランドの存在感を高めます。
私たちのチームは一歩進んで、ピッチデッキ、マーケティング資料、ソーシャルメディア投稿、ブログ画像など、様々なサポートを提供します。
私たちのポートフォリオはウォレット（[ArConnect](https://www.arconnect.io/?utm_source=Blog&utm_medium=Post&utm_campaign=Pace+Studios+Announcement&utm_id=Pace+Studios+Announcement)）、ステーブルコインプロトコル（[Astro](https://www.astrousd.com/?utm_source=Blog&utm_medium=Post&utm_campaign=Pace+Studios+Announcement&utm_id=Pace+Studios+Announcement)）、ベンチャースタジオ（[ao Ventures](https://www.aoventures.io/?utm_source=Blog&utm_medium=Post&utm_campaign=Pace+Studios+Announcement&utm_id=Pace+Studios+Announcement)、[Community Labs)](https://www.communitylabs.com/)）、マーケティングエージェンシー（[Circle Park](https://www.circlepark.co/)）など多岐にわたります。
Arweaveエコシステムの今後のプロトコルに向けて、ユーザーフレンドリーなデザインで基準を設定することに私たちはワクワクしています。
こちらでご挨拶ください：[www.pacestudio.co](http://www.pacestudio.co/)

---

---

:::note info
【Arweave Japan とは】
Arweave Japan は Arweave / AO の日本語ビルダーエコシステム構築を目的とした分散型組織です。

【​Arweave / AO とは？】
​Arweave は無制限にスケール可能な分散型ストレージであり、AO は Arweave 上に構築された無制限にスケール可能な分散型スーパーコンピュータです。Arweave と AO を使って既存のブロックチェーンでは実現不可能であった実用的なプロダクトが開発できます。

イーサリアム L1 のリステーキングによってセキュリティが担保され、TVL はローンチ数ヶ月で 1000 億円近くまで上がり、今後数兆円規模の市場が期待されます。完全フェアローンチされた AO のトークン設計によって、この流動性は AO 上のプロジェクトが活用することができ、ビットコインと同じ半減スケジュールでミントされる AO トークンは開発者やプロジェクトが受け取れる仕組みとなっています。

​Web2 を置き換えるレベルで実用的なプロジェクトが構築できる唯一無二の分散型プロトコル AO で開発することはグローバルの第一線で活躍する非常に大きなチャンスとなっています。

【Social Links】

- [Website](https://arweave.jp)
- [X(Twitter)](https://twitter.com/arweavejp)
- [Discord Community](https://discord.com/invite/bB4N7fAMmp)
- [Github](https://github.com/arweavejp)

【Blog】

- [Zenn Publication](https://dev.to/arweavejp)
- [Note Magazine](https://note.com/kyohei_nft/m/m35c7443e98d0/)
- [dev[.]to](https://dev.to/arweavejp)

![1080x360.jpeg](https://images.lumacdn.com/cdn-cgi/image/format=auto,fit=cover,dpr=2,quality=75,width=1500/editor-images/wj/43c64e53-3361-44d5-a05c-155e4fbf3188)

:::
Java基礎1（クラスとインスタンス）

# はじめに
簡単な自己紹介
名前：Teyo3M
趣味：スキューバダイビング

## 目的
自分が学んだ知識の深化と同僚の勉強の一助として

## クラスについて
Q.クラスって？
A.設計図であり、オブジェクトを作るための型


まずは下記のコードを見てください。

```Java
public class PC {　//クラス名
    int memoryCap; //フィールド
    int diskCap; //フィールド
    
    void ShowSpecs() {　//メソッド
    System.out.println("メモリ容量は" + memoryCap + "です");
    System.out.println("ディスク容量は" + diskCap + "です");
    }
}
```

::: note info
クラスはオブジェクトを作るための設計図であり、そのオブジェクトのデータの型として機能する
:::

もう少し違った説明をするとクラスとは「プログラムに必要な要素やふるまいをまとめながら記述している設計図」です。「車クラス」なら「エンジン、タイヤ、ブレーキ」などの要素と「前進する、後退する、曲がる、止まる」などの振る舞いを持ちます。

| 役割 | 説明 |
|:-:|:-:|
| フィールド |名前、年齢、タスクなど  |
| メソッド |名前を変更する、年を重ねる、タスクを完了するなど |

## クラスを利用する

Q. オブジェクト化って？

A. クラスをもとに実体を作ること

::: note info
object = 実体
:::

オブジェクト化をするには「インスタンス」を作成する必要があります。

Q. インスタンスって？

A. クラスをもとに作られた実体（オブジェクト）

例えば、上記の PC クラスを使って実際にオブジェクトを作成するには以下のように書きます。

```java
public class Sample {
    public static void main(String[] args) {
        PC myPC = new PC(); // インスタンスの作成
        myPC.memoryCap = 16;
        myPC.diskCap = 512;
        myPC.ShowSpecs(); // スペックを表示するメソッド
    }
}
```

このコードの流れを整理すると：

PC クラスをもとに myPC というオブジェクトを作成

memoryCap と diskCap に値をセット

ShowSpecs() を呼び出してスペックを表示

::: note info
new を使うことでクラスからインスタンスを作成する。
:::

Q. インスタンスを作成しないとどうなるの？

A. クラスは設計図のままで、プログラム上で使うことができない。

例えば、以下のコードはエラーになります。

```java
PC.ShowSpecs(); // エラー
```

クラスはただの設計図なので、そのままでは機能しません。new を使ってインスタンスを作ることで、初めて利用できるようになります。

## コンストラクタの活用

オブジェクトを作成するときに、初期値を設定する方法として「コンストラクタ」があります。

```java
public class PC {
    int memoryCap;
    int diskCap;
    
    // コンストラクタの定義
    public PC(int memory, int disk) {
        this.memoryCap = memory;
        this.diskCap = disk;
    }
    
    void ShowSpecs() {
        System.out.println("メモリ容量は" + memoryCap + "GBです");
        System.out.println("ディスク容量は" + diskCap + "GBです");
    }
}
```

このクラスを使ってオブジェクトを作成する場合、次のようになります。

```java
public class Sample {
    public static void main(String[] args) {
        PC myPC = new PC(16, 512); // コンストラクタを使用
        myPC.ShowSpecs();
    }
}

//実行結果
//メモリ容量は16GBです
//ディスク容量は512GBです

```

::: note info
コンストラクタを使うことで、オブジェクト生成時に値をセットできる。
:::

## まとめ

・クラス は設計図であり、オブジェクトの型になる。
・インスタンス を作成することで、クラスを利用できる。
・new を使ってオブジェクト化 することで、メモリ上に実体が作られる。
・コンストラクタを活用 すると、オブジェクト生成時に初期値を設定できる。
Python 辞書の後ろからn個分を順番に処理する方法

## 結論
辞書 sample_dic の後ろ n 個分を前から順番に処理する場合
```python
dict(list(sample_dic.items())[-n:])
```
## 説明
辞書ではスライスを使えないので、一旦、リストに変換しスライスを使って後ろn個を取り出す。それを再度、辞書に変換する。
### 補足
辞書に順番があるのは Python 3.7 以降。

## サンプル
```python
sample_dic = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7, "h": 8}

for k,v in  dict(list(sample_dic.items())[-3:]).items() :
  print(k,v)
```
### 実行結果
```
f 6
g 7
h 8
```