OmniAICreator/Qiita-1.07M huggingface dataset:
投稿マラソン19/38記事目 折り返し地点

## 遂に折り返し地点に

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/422aa4fc-7440-f7cf-2ff9-d1b1ab8195d2.png)

2024年6月10日から始めている投稿マラソン、ようやく半分の19記事目、折り返し地点にきました。

これでハーフマラソン賞の「Qiita Engineer Festa オリジナルグッズ」獲得が決まりました。
Qiitaさん、ありがとうございます。楽しみにしています。

ここでは、前半に書いた記事で比較的、反応の良かった記事をピックアップし、内容の補足を記載したいと思います。

## やる気という不安定なものに頼らないテクニック

https://qiita.com/koji-yamauchi/items/e4a2aca8da1a2be187a4

多くの事を漫画から学びました。
「人生とは何か」は、古谷実の漫画の一貫したテーマであり、私の価値観に少なからず影響を与えていると思います。

先生の作品の引用が皆の心を魅了したのか、無気力人間に共感を得たのか、これまでの記事で一番反応があった記事となりました。

人から聞く話であったり、自分の身近ではないものの、客先でたまに見かける光景として、「依頼した仕事は断る、または放置して、ゲームなどの他のことを業務中にずっとやっている」という事例があります。

きっと、 “仕事の時間” という割り切りが出来ていなかったり、責任をうまく捉えられていないのだと思うのですが、組織だけでなく、一番は本人にとって勿体ないことだなと思います。

そういう人は「趣味の時間じゃないから、しゃーなしやるか」と割り切って進めると良いよ、というエールのつもりで記事を作成しました。

## プロジェクトを推進する力とは何か

https://qiita.com/koji-yamauchi/items/99a7f1df2a68fbbea305

今回取り上げた記事の中では、一番人気のない記事ですが、一方で一番気持ちが入った記事でもあります。

特に「[比較的うまくいったケースは何が違ったか](https://qiita.com/koji-yamauchi/items/99a7f1df2a68fbbea305#%E6%AF%94%E8%BC%83%E7%9A%84%E3%81%86%E3%81%BE%E3%81%8F%E3%81%84%E3%81%A3%E3%81%9F%E3%82%B1%E3%83%BC%E3%82%B9%E3%81%AF%E4%BD%95%E3%81%8C%E9%81%95%E3%81%A3%E3%81%9F%E3%81%8B)」の節で書いた下記の太字は、これまでの経験で、“マジでこうだから”という気持ちで記載しています。


* **覚悟を見せると、顧客は自分の強力な味方になってくれます。**
* **一番に当事者意識をもっている自分自身がやるべきことを知っています。**
* **一方、口下手でも誠実さは一挙手一投足から伝わります。これは信頼に繋がり、信頼は潤滑油になります。**
* **深く考え、起点となる欲求から意味のある成果物や手法が生まれます。**

これらは私がいつも言っていることなので、身近な人間からは「また言っているな〜」と思うかもしれませんが、本当に大切なことだと考えています。

また、誠実さが一挙手一投足から伝わるように、いくら文章能力が低くても熱意は文章から滲み出るものだとも考えています。
引き続き、なるべく多くの熱意を込めて、投稿マラソンを走り切るつもりです。

## 既存チームにジョインするときに気をつけていること

https://qiita.com/koji-yamauchi/items/4ba85aa1c86e7b16bae2

この記事でここまで反応があると思っていませんでした。
新しくチームにジョインする側、新しいメンバーを迎える側になることは、日々の仕事の中で日常的なことのため、共感を得やすかったのかなと思います。

弊社では、プログラムのコードを書くこと自体が仕事だとは捉えていません。（勿論それ自体も大切ですが）
顧客への価値の提供を強く意識しています。

このため、上記の記事のように既存チームにジョインする場合は、「そもそも私達に何を求めているか？」「期待に添えているか？」「どうあるべきか？」というのをよく考え、ときには率直に聞いたりします。

本当の価値につながるならば、レガシーなシステムでも、泥臭い作業でも良いのです。
なんならプログラムコードの提供や直接的な設計書でなくても良いかもしれません。
このあたりの考え方は、3年程前の記事になりますが下記に記載したものから大きく変わっていません。

https://www.wantedly.com/companies/add-more/post_articles/334584

## 後半戦に向けて

失速しないように引き続き頑張っていこうと思います。
今更聞けないACID特性について解説

## はじめに

データベースの分野において、特にトランザクション管理に関連する基本的な概念の一つが「ACID特性」です。このブログでは、ACID特性が何であるか、その重要性、そしてそれぞれの特性について詳しく解説します。また、ACID特性を持つデータベースと持たないデータベースの例も紹介します。

## ACID特性とは？

ACIDとは、データベーストランザクションの信頼性と整合性を保証するための4つの特性、つまり**Atomicity（原子性）**、**Consistency（一貫性）**、**Isolation（独立性）**、**Durability（持続性）**　を指します。これらの特性を満たすことで、データベースは予期しない障害が発生しても、データの整合性を保つことができます。

### 1. Atomicity（原子性）

原子性は、トランザクションが「全て成功する」か「全て失敗する」かのいずれかであることを保証します。トランザクション内のすべての操作は一つの単位として扱われ、途中で失敗した場合は、そのトランザクションによるすべての変更がロールバックされます。

**例**: 銀行口座間の資金移動
- 口座Aから$100引き出し、口座Bに$100入金。
- 途中でエラーが発生した場合、どちらの操作もキャンセルされ、最初の状態に戻ります。

### 2. Consistency（一貫性）

一貫性は、トランザクションが開始される前後でデータベースが常に正しい状態を保つことを保証します。トランザクションが成功した場合、データベースの整合性制約（例: 外部キー、ユニークキーなど）がすべて満たされる状態に保たれます。

**例**: 銀行口座の総額
- トランザクション前後で銀行全体の預金総額が一致することが保証されます。

### 3. Isolation（独立性）

独立性は、複数のトランザクションが同時に実行される場合でも、それぞれのトランザクションが他のトランザクションの影響を受けないことを保証します。これにより、各トランザクションが単独で実行された場合と同じ結果を得ることができます。

**例**: 商品の在庫管理
- 同じ商品を同時に購入するトランザクションがあっても、在庫数が適切に更新されるようにします。

### 4. Durability（持続性）

持続性は、トランザクションが成功した後、その結果が永続的に保存されることを保証します。システム障害が発生しても、成功したトランザクションの結果は失われません。

**例**: データの永続化
- トランザクションがコミットされた後、サーバーがクラッシュしても、データベースはそのトランザクションの変更を保持します。

## ACID特性の重要性

ACID特性は、データベースの信頼性と整合性を保証するために不可欠です。これらの特性が守られることで、データベースは以下のような利点を提供します：
- **データの信頼性向上**: データの一貫性と整合性が保たれるため、ユーザーやアプリケーションはデータの正確性を信頼できます。
- **障害耐性の向上**: システム障害が発生しても、データの整合性が保証されます。
- **同時実行性の管理**: 複数のユーザーやプロセスが同時にデータベースにアクセスしても、データの整合性が損なわれません。

## ACID特性を持つデータベースの例

1. **PostgreSQL**
   - オープンソースのリレーショナルデータベースであり、ACID特性を完全にサポートしています。トランザクションの一貫性と信頼性が高く、多くの企業や組織で使用されています。

2. **MySQL（InnoDBエンジン使用時）**
   - MySQLは多くのストレージエンジンをサポートしていますが、InnoDBエンジンを使用することでACID特性を提供します。これにより、安全で信頼性の高いトランザクション処理が可能です。

3. **Oracle Database**
   - 商用のリレーショナルデータベースで、ACID特性を高いレベルでサポートしています。特に大規模な企業向けに多くの機能を提供しています。

## ACID特性を持たないデータベースの例

1. **Cassandra**
   - 分散型のNoSQLデータベースで、高いスケーラビリティと可用性を持ちますが、ACID特性のうち特に強い一貫性と独立性は提供しません。最終的な一貫性を重視しています。

2. **MongoDB**
   - ドキュメント指向のNoSQLデータベースで、柔軟なデータモデルとスケーラビリティを持ちますが、トランザクションの扱いは限定的で、従来のACID特性を完全には提供しません。バージョン4.0以降でマルチドキュメントトランザクションがサポートされていますが、リレーショナルデータベースほど強力ではありません。

3. **Redis**
   - インメモリ型データベースで、主に高速なデータアクセスを提供するために設計されています。ACID特性のうち、Durability（持続性）がオプションであり、通常は高いパフォーマンスを優先するために完全な持続性を保証しない設定で使用されます。

## まとめ

ACID特性は、データベーストランザクションの基本的な要件であり、データの整合性と信頼性を保証します。これらの特性を理解し、データベース設計や運用に活用することで、堅牢で信頼性の高いシステムを構築することができます。ACID特性を持つデータベースと持たないデータベースの違いを把握し、用途に応じた適切なデータベースを選択することが重要です。

データベースにおけるACID特性を再確認し、実際の設計や開発に役立ててください。どんなシステムでも、データの信頼性と整合性は成功の鍵となる要素です。
できませんでした。4次関数と接線 積分「2016 名古屋市立大前期【1】」をChatGPTとsympyでやってみたい。

・**仕切り直し？？？** でやっています。毎回、MathMLに1行を追加しています。

# オリジナル
・鈴木貫太郎 様 (0:00〜10:45) 

https://youtu.be/PMCUACAe-3s

・大学入試数学問題集成 様＞ 前期【1】　テキスト
　＞数学入試問題さんの解答(PDF)へ

https://mathexamtest.web.fc2.com/2016/201611491/2016114910100mj.html

# ChatGPT-3.5先生へ。(1回目)できませんでした。
~~・回答は英語です。~~
　~~はじめから、「日本語で」を追加してもいいです。~~
???いつもと違いました。　

・ページのソースを表示です。MathMLです。
　省略しようと思いましたが、大学入試数学問題集成 様 の全文から必要部分の抜粋です。
```
<div class="qbody">
<p class="slevel"><a name="q-0101" 
id="q-0101"></a><span 
class="qnum">【１】</span>　関数<math 
xmlns="http://www.w3.org/1998/Math/MathML">
<mspace width=".2em"></mspace><mrow><mi>f</mi>
<mo>&af;</mo><mo stretchy="false">(</mo><mi>x</mi>
<mo stretchy="false">)</mo><mo>=</mo><msup><mi>x</mi>
<mn>4</mn></msup><mo>-</mo><mn>2</mn><mo>&it;</mo>
<msup><mi>x</mi><mn>2</mn></msup><mo>+</mo>
<mi>x</mi></mrow><mspace width=".2em"></mspace>
</math>について，次の問いに答えよ．</p>
<p class="s1level">(1)　曲線<math 
xmlns="http://www.w3.org/1998/Math/MathML">
<mspace width=".2em"></mspace><mrow><mi>y</mi>
<mo>=</mo><mi>f</mi><mo>&af;</mo><mo stretchy="false">(</mo>
<mi>x</mi><mo rspace=".2em" stretchy="false">)</mo></mrow>
</math>と<math 
xmlns="http://www.w3.org/1998/Math/MathML">
<mspace width=".2em"></mspace><mn>2</mn>
<mspace width=".2em"></mspace>
</math>点で接する直線の方程式を求めよ．</p>
<p class="s1level">(2)　曲線<math 
xmlns="http://www.w3.org/1998/Math/MathML">
<mspace width=".2em"></mspace><mrow><mi>y</mi>
<mo>=</mo><mi>f</mi><mo>&af;</mo><mo stretchy="false">(</mo>
<mi>x</mi><mo rspace=".2em" stretchy="false">)</mo></mrow>
</math>と(1)で求めた直線で囲まれた領域の面積を求めよ．
</p>
</div>
</div>
```
(抜粋)...
？？？(1) 接する直線の式は ｙ＝ｘ
？？？(2)面積=16√2/15 


以下、不思議？？？
```
グラフを作図して下さい。
```
```
増減表を表示して下さい。
```
```
増減表をお願いします。。
```
```
増減表の縦横を逆にして下さい。
```

もちろんです。増減表を縦横逆にして再作成します。
私は、あきらめました。


# ChatGPT-3.5先生へ。(2回目)sympyで、できませんでした。
```
sympyで
```
```
ソースコードだけで
```


・(抜粋)
・print文を、私が追加しています。
```python
import sympy as sp

# 変数の定義
x = sp.symbols('x')

# 関数 f(x) の定義
f = x**4 - 2*x**2 + x

# 導関数 f'(x) の計算
f_prime = sp.diff(f, x)

# f'(x) = 0 の解を求める
critical_points = sp.solve(f_prime, x)

# 2つの異なる解
x1, x2 = critical_points[0], critical_points[1]

# それぞれの点での y 値
y1 = f.subs(x, x1)
y2 = f.subs(x, x2)

# それぞれの点での接線の方程式を求める
tangent_line1 = sp.simplify(f_prime.subs(x, x1) * (x - x1) + y1)
tangent_line2 = sp.simplify(f_prime.subs(x, x2) * (x - x2) + y2)

# 交点を求める
intersection_points = sp.solve(f - tangent_line1, x)

# 面積の計算
area = sp.integrate(f - tangent_line1, (x, intersection_points[0], intersection_points[1]))

# 結果の表示
tangent_line1, tangent_line2, area

print("#",tangent_line1, tangent_line2, area)
```
？？？終了しませんでした。

# sympyで(オリジナル 様の方法で)
???勉強中です。判別式???

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。
・以下ができたら、助かります。指定と全部です

https://qiita.com/mrrclb48z/items/555d85face87552c34fb

https://qiita.com/mrrclb48z/items/5f57eac92aaca30e85c0
新卒エンジニアがFIREの夢を語る

# 挨拶
はじめまして！新卒エンジニアのヤピ丸です！！
毎日初めてのことばかりでバタバタな毎日ですが、イケてる社会人になるためにできることや学んだこと（技術的なことも少し）を情報発信していきますので

何卒よろしくお願いいたします！！


# **FIRE**ってなに？
**FIRE**とは**Financial Independence and Retire Early**のこと。
つまりお仕事に依存しない収入先を得て自由を手に入れるってことですね。

社会人一年目のペーペーが何言ってるんだと思うかもしれませんが夢は大きくもっていたいじゃあないですか！

# なんでFIREしたいの？
## 理由
実は**FIRE**そのものにはさほど魅力を感じていないんです…
ただ、いつでもそれができるだけの経済的な自立をしている状態が一番生産性を出せる状態だと思っているんです。

## きっかけ
**FIRE**を意識しだしたきっかけは知り合いのフリーランスのエンジニアの方に金持ち父さん貧乏父さんを薦められて読んだ時です。
その時から私の人生の目標は完全な経済的な自由を得ることになりました。

## 経済的な自由ってなに？
経済的な自由とは自身の所有する資産によって生み出されるキャッシュフローが自身の生活にかかる費用を超過していることだと私は考えています。
### 経済的な自由によるメリット
一番大きなメリットだと私が考えているのは、余裕を持てることです。
この余裕というのは金銭的な余裕はもちろん精神的な余裕が一番大きいと思っています。
先に述べた一番生産性が出せる状態だと考えている理由もこの部分になっています。
精神的な余裕を持っていると自身を俯瞰視することができ、そうすることで自身に何が必要か把握することができ、それを得るための資金と時間的な余裕はあるはずなので自身が**本当に必要**としていることに**自身のリソース**を使うことができます。
**この状態で生産性が低いわけがないと思いませんか！？**

# 今、私ができること
現状でできることは正直あまりないと思っていますその中で少ない資金を運用するために私がやるべきことは
1\. NISAへの投資
2\. 株式・金への投資
3\. 不動産を含めた投資やお金の勉強
このあたりが現実的なラインになると思います。

まだ学び始めたばかりなので様々なご意見あると思いますが、私が勉強してきた中のおすすめの投資先は
### リスクを取りつつ大きな利益を狙うなら
- 大和－一歩先いく　ＵＳ　テック・トップ２０インデックス
    - S&P500とかNASDAQ100は皆さん聞いたことあると思うんですけどその中でも成績上位の20社で構成された銘柄になります。
    - 今トレンドの分散投資の観点から行くと分散の幅が狭くリスクは大きくなりますが、期待値はかなり大きいです。
### 配当を狙うなら
- 各種ETFをお勧めします
    - 個人的にはインド株ETFが今後熱そうだなと思っていますが、REIT,米国ETFも資金状況によってはあり。
    - 私は資金が少なく配当のありがたみを感じることがあまりできないので現状そんなに好きではないので知識が薄いです…笑

### 不動産をやるとしたら
- 一戸建て投資
    - 自身で管理や修繕ができる技術や知識があればおそらく一番儲かります。
    - そうでない場合は労力が多く副業投資としては難易度が高いです。。

- アパート一棟投資
    - 資金力があるならこれが一番リスクとメリットのつり合いが取れています。
    - 資金の拡大スピードも高く、土地も残るので出口戦略も比較的安定していて、キャピタルゲインを狙えるのがかなり大きいです。。

- ワンルーム投資
    - これが一番現実的なラインになります。
    - 東京の人口増加によって築古物件でも比較的高値で貸し出すことができ、キャピタルゲインを狙うことは難しいですが、インカムゲインでの定期的な収入が見込めます。

#### P.S.
現在、日本の不動産市場は外国資本が多く参入してきているため、キャピタルゲインを狙おうとするにはかなりの資金力が必要だと思います。


# 終わりに
色々言いましたが、私が伝えたいことはただひとつです！！！

**経済的な自由を得た、イケてる社会人になるため一緒に頑張りましょう！！！**

# 参考
- [【特集】一歩先いく US テック・トップ20インデックス](https://www.daiwa-am.co.jp/special/ustechtop20/ "【特集】一歩先いく US テック・トップ20インデックス")
- [ETFとは？ | ETF（上場投資信託）](https://www.nikkoam.com/products/etf/about "ETFとは？ | ETF（上場投資信託）")
Laravelのエラーハンドリングとデバッグについてまとめてみた

# はじめに
こんにちは、Webエンジニアの岩田史門([@SI_Monxy](https://x.com/SI_Monxy))です！
今回はLaravelのエラーハンドリングとデバッグについて記事を書いてみました！
改善点や修正点があれば、コメントにて優しくご指導いただけると嬉しいです！

# 概要
Laravelを使った開発において、エラーハンドリングやデバッグは重要なスキルです。本記事では、Laravelでのエラーハンドリング方法やデバッグテクニックについて紹介します。サンプルコードも交えて解説します。

# エラーハンドリング
Laravelでは、app/Exceptions/Handler.phpでエラーハンドリングを行います。このファイルには、例外を報告したり、特定の例外をレンダリングするためのメソッドが含まれています。

## カスタム例外ハンドラー
独自のエラーハンドリングロジックを追加するために、Handlerクラスを拡張することができます。

```php
<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    public function render($request, Exception $exception)
    {
        if ($exception instanceof CustomException) {
            return response()->json(['error' => 'Custom exception occurred'], 400);
        }

        return parent::render($request, $exception);
    }
}
```

## カスタム例外クラスの作成
Laravelでは、独自の例外クラスを作成して特定のエラーハンドリングを行うことができます。

```php
<?php

namespace App\Exceptions;

use Exception;

class CustomException extends Exception
{
    // 独自のプロパティやメソッドを追加可能
}
```

## エラーログの設定
Laravelのconfig/logging.phpでエラーログの設定を行うことができます。

```php
'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['daily'],
    ],

    'daily' => [
        'driver' => 'daily',
        'path' => storage_path('logs/laravel.log'),
        'level' => 'debug',
        'days' => 14,
    ],
],
```

# デバッグテクニック
## Laravel Debugbar
Laravel Debugbarは、アプリケーションのデバッグを容易にするパッケージです。

```bash
composer require barryvdh/laravel-debugbar --dev
```

config/app.phpに以下を追加します。

``` php
'providers' => [
    // ...
    Barryvdh\Debugbar\ServiceProvider::class,
],

'aliases' => [
    // ...
    'Debugbar' => Barryvdh\Debugbar\Facade::class,
],
```

## dd()とdump()
Laravelには、dd()（dump and die）やdump()関数が用意されており、変数の内容をデバッグする際に便利です。

``` php
$users = User::all();
dd($users);
```

## Logファサード
LaravelのLogファサードを使って、ログメッセージを簡単に記録できます。

```php
use Illuminate\Support\Facades\Log;

Log::info('This is an informational message.');
Log::error('This is an error message.');
```

# まとめ
これらの技術を活用することで、Laravelでの開発がよりスムーズになるでしょう。エラーハンドリングとデバッグを適切に行うことで、コードの品質を向上させることができます。

# 参考
- [Laravel Documentation: Error Handling](https://laravel.com/docs/10.x/errors)
- [Laravel Debugbar GitHub](https://github.com/barryvdh/laravel-debugbar)
Python3: ファイルの行数を数える

## プログラム

```py:line_count.py
#! /usr/bin/python
#
#	text/line_count.py
#
#						Jun/24/2024
#
# --------------------------------------------------------------------
import	sys
import	subprocess
#
# --------------------------------------------------------------------
def count_lines(filename):
    try:
        result = subprocess.run(['wc', '-l', filename], capture_output=True, text=True)
        output = result.stdout.strip()
        line_count = int(output.split()[0])
        return line_count
    except FileNotFoundError:
        print(f"Error: ファイル {filename} が見つかりません。")
        return None
    except Exception as e:
        print(f"Error: {e}")
        return None
# --------------------------------------------------------------------
sys.stderr.write("*** 開始 ***\n")
file_in = sys.argv[1]
nn = count_lines(file_in)
print(nn)
#
sys.stderr.write("*** 終了 ***\n")
# --------------------------------------------------------------------
```

## 実行方法

```text
$ ./line_count.py in01.txt 
*** 開始 ***
501
*** 終了 ***
```
海外の金融商品や保険商品もAIがコントールしている!?

世界経済、金融、保険商品もAIでコントロールされている部分が多いのかなと思います。
その為、海外の保険商品を見ると、日本とは比較にならないような保険商品があったりするのです。

https://investor-brain.com/archives/3002
Azure Data Factory にて Salesforce コネクターを利用した際の no client credentials user enabled エラーへの対応方法

## 概要

Azure Data Factory にて Salesforce コネクターを利用した際の no client credentials user enabled エラーへの対応方法を共有します。Salesforce の接続アプリにおける`Client Credentials Flow`（`クライアントログイン情報フロー`）の`Run AS`（`別のユーザーとして実行`）にて実行ユーザーを設定していないことが原因のようです。

> {"error":"invalid_grant","error_description":"no client credentials user enabled"}

`Client Credentials Flow`の`Run AS`の項目を設定するためには、`Enable Client Credentials Flow`のチェックされていることが必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2bc5efe7-32f2-90ff-2057-c1bae2509d3d.png)

## エラーの手順

### 1. Salesforce にて`Client Credentials Flow`を有効化した接続アプリを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/02827ead-e8b3-8042-c9bc-f02b62f3e3d6.png)

### 2. Azure Data Factory にて Salesforce のリンクドサービスを作成してテスト接続がエラーとなることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0261c7e1-f127-e2fb-57f6-95a80d89437a.png)

## エラーへの対応方法

### 1. Salesforce にて接続アプリの`Client Credentials Flow`を有効化であることを確認し`Manage`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/02827ead-e8b3-8042-c9bc-f02b62f3e3d6.png)

### 2. `Edit Policies`（`ポリシーを編集`）を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ad199817-0f76-7d2d-5c45-ff83f6482cbe.png)

### 3. `Client Credentials Flow`（`クライアントログイン情報フロー`）の`Run AS`（`別のユーザーとして実行`）に実行ユーザを設定（右側にある虫眼鏡のボタンからユーザーを選択）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a6f5b920-9eef-010a-57bc-098c598cffc1.png)

### 4. Azure Data Factory からテスト接続が正常終了することを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6e37b569-d67f-572a-c4f2-9581c1232bdc.png)
[AWS #13] Amazon EC2

## はじめに
こんにちは
今回はコンピューティングサービス分野である **「Amazon EC2」** についてご紹介いたします。
## EC2
EC2とは **「Elastic compute cloud」** の略称であり、<font color=red>**「AWSが提供している仮想サーバーを構築することができるサービス」**</font>となります。

このEC2を使用することで、「Linux」や「Windows」などのOSを乗せたサーバーを**素早く構築**することができます。

:::note info
EC2を利用して構築したサーバーを **「インスタンス」** といいます。
:::
またEC2へのアクセス防御は、図のように **[セキュリティグループ](https://qiita.com/aoiku/items/dfba4584e6e472c8f28d)** という**仮想ファイアウォール**を使用します。
![AWS13_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/9cefc526-ab51-8625-755e-e9553aacb132.png)


## EC2のメリット
続いてEC2のメリットを大きく3点に分けてご紹介いたします。
**1.俊敏性**
**2.サイジング**
**3.コスト**

### 俊敏性
俊敏性とは、<font color=red>**サーバーの構築が短時間で完了すること**</font>を表します。
EC2の最大のメリットとも言える「俊敏性」は、数分でサーバを起動することができます。従って**物理サーバー（オンプレミス環境）と比べて <font color="c00000">大幅な時間短縮が可能**</font>となります。:clap:

:::note info
**サーバーの構築や運用にかかる<font color="c00000">時間を削減**</font>
:::
---
### サイジング
・サイジング → 運用するシステムやサービスの規模に合った**リソース（サーバーやネットワーク）を見積もること**、あるいは**用意しておくこと**を指します。

EC2では**必要な時にCPU、メモリ、ストレージ、リソースのスペックを変更できる**ため、 <font color="c00000">**余分なコストをかける必要が無くなります。**</font>
![AWS13_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806875/7672f4ef-9cb8-a32c-77a9-3e00e8f2737f.png)


:::note info
**状況に合わせたスペック変更ができる**
:::
### コスト
EC2はサーバーを使用した分だけ支払う、**「従量課金制」** となっています。
サーバーを使用した分にだけコストがかかるため、使用しない期間は、**インスタンスを <font color="c00000">停止することでコストを抑える</font>ことができます。**

※注意点ですが**予期しない急激なトラフィックの増加**には、**増加した分のデータ転送量に応じて費用が発生する**ため注意が必要となります。

さらにEC2の場合、**設備投資が発生しないこと**も魅力ポイントです。
オンプレミス環境の場合、サーバ本体や周辺のネットワーク機器に対する設備投資が発生しますが、Amazon EC2であれば不要になります。

:::note info
**従量課金制により費用を削減**
:::

## EC2の料金体系
EC2の料金体系には、大きく分けて3つのプランがあります。
### オンデマンドインスタンス
・利用した時間分の料金を支払う（もっともシンプル）
**使用した分だけ料金が発生**するため、<font color="c00000">**短期の利用**</font>に向いています。

<!--
 <font color="c00000"></font> 赤
-->

### リザーブドインスタンス
**・事前に1年または3年の利用を予約**
・オンデマンドインスタンスより**安価**である

従量課金ではなく<font color="c00000">**定額課金**</font>となります。事前に1年または3年の利用を予約することで、オンデマンドインスタンスよりも安価にインスタンスを利用することができます。

### スポットインスタンス
・インスタンスを <font color="c00000">**入札して利用する**</font>
・リザーブドインスタンスよりも安価である

スポットインスタンスは、AWS上で使用されていないインスタンスを入札して行うもので、リザーブドインスタンスよりも更に安価にインスタンスを利用することができます。

:::note warn
入札価格をスポットインスタンスの価格が**上回った場合**、AWSによってインスタンスの利用を <font color="c00000">**中断させられます**</font>
:::

## おわりに
ちょっとしたまとめになります。

:::note info
EC2はAWSが提供している**仮想サーバーを構築することができる**サービス
:::
:::note info
メリットとは **「俊敏性」「サイジング」「コスト」** などがある
:::
EC2は従量課金制で、オンプレミス環境のように初期費用や設定費用がかからず、コストを削減できるポイントがあります。さらにリソースを自由に補強できたり、幅広いシーンで活用できるサービスになっていることが分かりました。

最後までお読みいただきありがとうございました！

>日頃より活用している参考書です。
>> **「参考書」**
[AWS認定クラウドプラクティショナー改定第3版](https://x.gd/19i6N)
>
> **「AWS公式サイト」**
[AWS EC2](https://x.gd/0NtLL)
>
>> **「参考元」**
[Amazon EC2とは？](https://www.itechh.ne.jp/blog/column/ec2-explain.html)
>>
>> **「参考元」**
[Amazon EC2の特徴・メリットと料金体系](https://kurojica.com/server/blog/2729/)
>>
>> **「参考元」**
[Amazon EC2とは？初心者向けに基本情報やメリット・料金体系を解説](https://business.ntt-east.co.jp/content/cloudsolution/column-21.html#section-1)

> **「Youtube」**
[【CLF-C02：AWSクラウドプラクティショナー】第17回 Amazon EC2 (クラウドテクノロジーとサービス分野)](https://x.gd/isUzz)
js課題（009）進捗

お疲れ様です。

今日はjsの課題に取り組みました。
課題内容は、while文、for文で、日本の祝日すべてを繰り返し表示するといったものです。
if文はギリギリ覚えていましたが、もうwhile文、for文については学びなおさないと覚えてないレベルでしたので、テラコヤさんの教材を使って復習しながら進めました。

![スクリーンショット 2024-06-24 133838.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/e936d93d-4498-1f7a-3b42-2b38a611195b.png)
課題ページにあらかじめこのように祝日がすべて書き出してありましたので、「配列を使うんだな」というところまでは分かりました。
それから、最初の変数宣言にこの配列をコピペしたものを貼り、for文を作ろうと思い考えていると、単語を繰り返し表示したことがなかった私は「全部で16個だから、 i <= 16　とかでできるんじゃなかろうか」とか考え付いたのでやってみたところ、見事にReferenceError.（コード内の変数を参照に何らかの問題があるエラー）　をたたき出しました:relaxed:
<br>
一人で考えても限界がありましたので、もう素直に単語を繰り返し表示する方法を調べました。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/33277d95-ebc8-699f-699c-cd31674ec0ae.png)
![スクリーンショット 2024-06-24 132258.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/896b487c-ab06-3e68-78f5-e89aa4693e55.png)
調べて分かったことを書き出して length とかあったなーと思っていたら、次はSyntaxErrorが出ました:innocent:
この時すぐは分からなかったのですが、よく見たら for ではなくて fot になっていたせいでした。
式が間違ってないかに気をとられすぎていましたが、タイプミスでもエラーは起こります。
エラーを解消するとちゃんと表示されました。よくよく注意していきたいところです…
【エラー】インターフェイス'JSX.IntrinsicElements'が存在しないため暗黙的にJSXの要素の型は'any'になります

Githubから`clone` したプロジェクトの `App.tsx` を開くと以下のエラーが出てきました。
![スクリーンショット 2024-06-21 22.41.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668222/80a9dea3-110b-2197-d166-ba598ff0fa27.png)

### 原因
プロジェクトに`node_modules`が入っていないため。
Viteなどで立ち上げると本来入っているフォルダ郡ですが、クローンだと無いようです。

以下を参考に解決しましたので、備忘録として記載します。

https://qiita.com/ttf1998seiya/items/667e53b98e2f091f0143

## 解決手順
・yarnのバージョン確認
```
yarn -v
// 4.0.2
```
v2以降から、node_modulesの設計が実用的でないため作成しないようにしたらしいです。

・ディレクトリ直下に`.yarnrc.yml`を作成
```
cd プロジェクト名
touch .yarnrc.yml
```

以下を記述
```
nodeLinker: node-modules
```
![スクリーンショット 2024-06-23 0.05.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668222/5263b8f9-bd7a-298e-684e-a0091e941697.png)

・`yarn`をインストール
```
yarn install
```

![スクリーンショット 2024-06-23 0.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668222/e1b375ab-b775-d006-d5d3-f893deacf1ed.png)

`App.tsx` を見てみるとエラー表記がなくなりました。

## .ymlについて
様々な形式のデータを機械が理解できる形式に変換する(シリアライズ)ための言語です。人間にとっても理解しやすく構造データを表現できるよう標準化された形式になっています。

"YAML Ain't Markup Language" を略した頭字語になっており、ドキュメントではなくデータを対象としていることを強調した名前になっています(マークアップ言語ではない）

シンプルさと読みやすさを念頭に置いて設計されており「インデント」「キーと値」「直感的な表記規則」を利用した構文です。設定ファイルなど、幅広く使用されています。

記述等はこちらがわかりやすかったです。

https://circleci.com/ja/blog/what-is-yaml-a-beginner-s-guide/
[Swagger][OpenAPI]Swagger Editorとかで作ったJSONを各種コードに変換する方法

# 極力楽をしたい、コードなんか覚えたくない
自分は「車輪の再発明」的な無駄なことが大好きなので、既にこの世に出回りまくってるけど自分でも作ってみたいという、謎のやる気でプログラム組んでたりしますが、世の中にはそんな時間と労力の無駄を嫌う人が多数いるため、自動化とかAIとかにコード組んでもらってコピペするという風潮のようです。

仕方ないよね、これからプログラム始める人達は覚えることが多すぎるから、如何に楽に時短で済ませれるかがネックになるもんね。

そんなわけで、タイトルの通りOpenAPI形式で書かれたJSONファイルから、JavaやTypeScriptのコードを生成できるよっていうツールをご紹介。

# openapi-generator
まぁこれの紹介です。

https://openapi-generator.tech/

自分の場合はjsonファイルをAngular用に変換することが多いため、使い方とかそれの簡単なサンプルを。。。

## ざっくりフォルダ構成
rootDir/
|-swagger.json
|-openapi-generator-cli.jar
|-output/
　|-生成されたソース

## 手順
### まずはツールに喰わせるJSONを作る（色々と省略）
```json:swagger.json
{
  "openapi": "3.0.1",
  "info": {
      "title": "API定義",
      "description": "アプリで使用される REST APIです",
      "version": "v1.0"
  },
  "paths": {
      "/api/v1.0/hogehoge": {
        // 省略
      }
  }
}
```
ここらへんは設計書とかから自力で作るか、コードから作れる物もあったりしますので、そこら辺は自分で調べてね。
コードから生成するとか意味わかんね？と思った人もいるかも知れませんが、既にAPI（バック）自体は出来ていてソレをフロント（要はWeb画面やスマホ画面）から呼び出したいって時に、【フロント用のコード】を生成するためって言えば伝わるかしら？
いわゆるフロントとバックを分業してたりした時に、役立つって話ですよ。

### コードをぶっ叩く
自分の場合は、携わってるプロジェクト上、Javaが環境変数に登録されてることが多いため、jarファイルを使って以下のコマンドをぶっ叩いてコードを生成しています。

```powershell:powershellでぶっ叩くやつ
java -jar openapi-generator-cli.jar generate -i ./swagger.json -g typescript-angular -o ./output
```

- -i：食わせるjsonファイルを指定（パス指定）
- -g：オプションに作り体現を指定（どんな言語がいけるかは[ここ](https://openapi-generator.tech/docs/generators)参照）
- -o：コードの出力先を指定

他にも細かいオプションがあったりしますが、上記だけで十分必要最低限のコードは生成が出来ます。
※言語によっては細かい追加オプションが必要になるかも知れませんが。。。

# まとめ
ものすごくざっくりと使い方を記述しましたが要は、、、
__楽して不具合の少ないコードが生成できるんであれば絶対に利用したほうがいい！！__
2024/6/24主にITとかセキュリティの記事

日本IBM出身CIO　「突破力」で活躍(6/24)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600014/061900179/

サイバー攻撃者はいかに身元を隠すのか、画像にピクセル単位で情報を埋め込むことも(6/24)
https://xtech.nikkei.com/atcl/nxt/column/18/02805/061900006/

2つの高校で相次ぎサポート詐欺　個情委への報告が遅れて行政指導 長野県教育委員会(6/24)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600011/061900158/

セキュリティー・クリアランス（Security Clearance）(6/24)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600009/061700171/

知らぬ間に住民登録抹消、窓口支援SaaS導入の静岡県磐田市で起きた珍事の理由(6/24)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/09438/

実は多いITエンジニアの職種、フロントエンドとバックエンドは何が違う？(6/24)
https://xtech.nikkei.com/atcl/nxt/column/18/02845/052400001/

認証不正の原因は経営の怠慢　トヨタ会長発言への違和感(6/24)
https://xtech.nikkei.com/atcl/nxt/mag/nc/18/020600007/061700168/

Phoenix製「UEFI」に脆弱性 - TPM保護を回避されるおそれ
https://www.security-next.com/158794

5月のフィッシング報告、前月比34.6％増 - 過去3番目の規模に
https://www.security-next.com/158751

「Jupyter Server Proxy」にXSS脆弱性 - アップデートにて修正
https://www.security-next.com/158800
Websocketハンズオン

## 概要
- **Websocketの概要**:
  Websocketは、双方向通信を可能にする技術。このハンズオンでは、ローカルネットワーク上で複数人が疑似チャットできる環境を構築する。
- **目標**:
  1. PythonでFastapiのWebsocketサーバーを立ち上げる。
  2. vscodeでDevcontainer開発環境を用いてnodeクライアントとしてWebsocket通信を行う。

※技術自体の詳細な説明は省略。GitやDocker、docker-composeの基本的なセットアップが済んでいることを前提とする。

## セットアップ
### サーバーのセットアップ
1. [リポジトリ](https://github.com/marcosanyo/websocket_server.git)をクローンする。
   ```sh
   git clone https://github.com/marcosanyo/websocket_server.git
   ```
2. ディレクトリに移動する。
   ```sh
   cd websocket_server
   ```
3. 特定のポートを指定したい場合は、`docker-compose.yaml`のポートを変更する。
   ```yaml
   services:
     websocket:
       ports:
         - "9001:9001"
   ```
4. Docker Composeでビルド＆立ち上げを行う。
   ```sh
   docker-compose up --build
   ```

### クライアントのセットアップ
1. [リポジトリ](https://github.com/marcosanyo/websocket_client.git)をクローンする。
   ```sh
   git clone https://github.com/marcosanyo/websocket_client.git
   ```
2. vscodeのホームディレクトリとして開く。
   ```sh
   code websocket_client
   ```
3. Visual Studio Codeで`ctrl+shift+P`キーから`Rebuild Container`を実行する。
   - Devcontainer拡張がインストールされている前提。

## 通信の確認
1. サーバーのローカルIPアドレスを調べる。
   - LinuxやWSL2の場合:
     ```sh
     ip route | awk '/default via/ {print $3}'
     ```
   - Macの場合:
     ```sh
     ipconfig getifaddr en0
     ```
2. クライアントのターミナルから以下のコマンドを実行する。
   ```sh
   wscat -c ws://<サーバーのIPアドレス>:9001/ws
   ```
   ※`<サーバーのIPアドレス>`には調べたIPアドレスを入力する。

3. 以下のように表示されれば接続完了。
   ```sh
   < Welcome, User1!
   < Server: User1 joined the chat
   ```

4. メッセージを入力しエンターを押すと、参加者全員にチャットが返る。
   ```sh
   > こんにちは
   < User1: こんにちは
   ```

## 備考
- 動作はMacで確認したが、LinuxやWindowsでも同様に動作するはず。
- WSL2ではWindows側にポートフォワーディングが必要な場合がある。`netsh`コマンドで対応可能らしい。(未確認)
  ```sh
  netsh interface portproxy add v4tov4 listenport=9001 listenaddress=0.0.0.0 connectport=9001 connectaddress=<WSL2のIPアドレス>
  ```
MacOSで何故かタブを押すとメニューバーに移動してしまう仕様をどうにかする方法

MacOSを使って作業をしているとき、Tabキーを押すと何故かキーボードが×印の閉じるボタンに飛んでしまうことはないでしょうか。
キーボードショートカットに変な設定していないのに、　と長い間悩んでおりました。

対策はシンプルです。
1. システム設定からアクセシビリティを開く
2. アクセシビリティからフルキーボードアクセスをオフにする
以上です。

フルキーボードアクセスのキーボードショートカットに慣れてらっしゃる方には不要だと思いますが、慣れていない方や以前からのショートカットに慣れているかたには必要な設定だと思います。

フルキーボードアクセスのキーボードショートカットの詳細は以下のURLに記載されておりますので、ご参照ください。
https://support.apple.com/ja-jp/guide/mac-help/mchlc06d1059/mac

悩まれたかたがたどり着きますように。
VFXGraphを最適化するために設定するべきもの

## 概要
VFXGraphを最適化するためここを設定、調整しておくと良いものを紹介します

## 環境
Unity2023.2.61f

## Capacityの設定
Capacity分だけメモリを確保してしまうのでなるべく小さくしましょう

![da315581-bbc3-458d-bae9-e6e8b068c74f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819930/bac7d3c7-62b6-12f2-b96b-4a515849282a.png)

VFX_Controlで適切なCapcityが確認できますのでそれを元に調整すると良いと思います

![64edaf3c-301b-491d-bb56-ebd7a183605c (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819930/6a0ae621-f808-905d-1fd3-22ab6b2cabfb.gif)

https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@15.0/manual/VisualEffectGraphWindow.html#vfx-control

## Boundsの設定
Boundはカリングの計算で使用します

Boundsの設定はAutomaticではなく手動(ManualかRecored)で設定しましょう
Automaticだと自動計算が処理負荷になります

![b6bc4c54-6114-4b8f-9b7b-393ed870eaa4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819930/97d2933e-d1c3-e29f-4f41-cb937bbf360e.png)

適切な値を設定したい場合はVFX_Controlで設定することが出来ます

![6e83cc84-b925-4867-bc78-a8e88712022e.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819930/af303c74-0795-aae5-a51c-f3b505520046.gif)

## インスタンス化してBatich処理を行えるようにする

同じVFXを使用する場合CPU負荷が軽減されます

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819930/9fdd25d0-2858-c696-c125-1e59ed5e373e.png)

https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@17.0/manual/Instancing.html


## エミッターの数を少しでも減らす

エミッターは**パーティクル生成数0でもCPU負荷が増加します**のでなるべく減らしましょう


![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3819930/3369f8f0-8348-1fd7-4cc8-63d8cf891a12.png)

## あとがき
VFXGraphを最適化するために設定するべきものを紹介しましたがこれらは他のパーティクルシステムでも活用できるところもあるので活用していただければと思います

unity6からはVFXGraphにプロファイリングツールが追加されるのでこれを活用して最適化をするのがよさそうです

https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@17.0/manual/performance-debug-panel.html
⑬１日１０分で理解するコンテナ技術入門 - Podのデプロイ -

[前回](https://qiita.com/goroneko/items/1c1caf6744f359914c30)は、Kubernetesの基本的な用語と主要なコンポーネントの役割について説明しました。今回は、nginxのPodを実際にデプロイしてみたいと思います。

KubernetesでPodなどのリソースをデプロイする場合、主に二つの方法があります。
1. `kubectl create`コマンドや`kubectl run`コマンドでデプロイする
1. マニフェストファイルを作成し、マニフェストファイルを指定して`kubectl create`もしくは`kubectl apply`を実行する

このそれぞれの方法を使ってPodをデプロイしてみます。

# 前提
Kubernetesのリソースを操作するには、`kubectl`というツールをインストールする必要があります。お使いのOSに合わせて、[ここ](https://kubernetes.io/ja/docs/tasks/tools/install-kubectl-linux/)を参考にしてインストールしてください。また、`kubectl`のバージョンはKubernetesクラスタのバージョンと合わせる必要がありますので、適宜置き換えてください。本稿では、v1.29.1を用います。

# ワンライナーでPodのデプロイ
マニフェストファイルを使わずにリソースを作成するには、基本的に`kubectl create`コマンドを使います。ですがPodに限り、`kubectl run`コマンドという簡単にPodが作成できるコマンドが用意されています。

`kubectl run`コマンドは、`kubectl run <pod-name> --image=<image-name>`でPodを作成できます。
```bash
kubectl run run-nginx --image=nginx:latest
```
作成したPodを確認するには、`kubectl get`コマンドを使います。`kubectl get`コマンドは、`kubectl get <resource-type>`でリソースの一覧を取得できます。
```bash
$ kubectl get pod # リソースタイプにPodを指定
NAME                    READY   STATUS    RESTARTS   AGE
run-nginx               1/1     Running   0          18s
```
作成した、`run-nginx`というPodが確認できます。

# マニフェストファイルを使ってPodのデプロイ
Kubernetesでは、基本的にすべてのリソースをマニフェストファイルと呼ばれるYAMLファイルで管理し、クラスタにこのYAMLファイルを適用することでリソースを作成します。

ワンライナーでPodを作成することも可能ですが、ここではマニフェストファイルを使って同様のPodを作成してみます。
```yaml:manifest-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: manifest-nginx-pod
spec:
  containers:
  - name: manifest-nginx
    image: nginx
```
上記のマニフェストファイルを保存し、以下のコマンドを実行します。
```
kubectl apply -f manifest-nginx.yaml
```
作成したPodを`kubectl get pod`で確認します。
```bash
$ kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
manifest-nginx-pod      1/1     Running   0          4s
run-nginx               1/1     Running   0          11m
```

# 注意点
今回nginxのPodを作成しましたが、まだこのPodは外部に対して公開されていません。そのため、下記のように`curl`コマンドを実行しても結果は返ってきません。
```bash
curl <IP>:80
```

# まとめ
今回はワンライナーでPodをデプロイする方法と、マニフェストファイルからPodをデプロイする方法を紹介しました。次回は、`Service`というリソースを作成し、外部からこのPodがアクセスできるようにしてみます。
【ChatGPT＋DALL-E3】動画から音声を抜き出す方法です。


　どうも、カーブミラーです。

　今回は、ほかの動画から、音声を抜き出す方法です。Dream Machineに音声を付けるために、自作の動画から音声を分離する必要が出てきたために調べました。

:::note info
本記事は、ChatGPT（有料版）
＋DALL-E3で行なっております。
画像はありません。あしからず。
:::

　さて、
　　ニュースがないので、
　　　本題です。

　今回は、
　　動画から、
　　　音声を抜き出す方法です。

　目的は、
　　Dream Machine用に
　　　過去の自作の動画から
　　　　音声を取得する必要が
　　　　　出てきました。

　この元動画はあるのですが
　　含めた歌や音楽は
　　　この動画にしかなかったり、
　　　　どこに収納したのか
　　　　　忘れていたり、と
　　　　　　困ってしまいました。

　そこで
　　調べたところ、
　　　ChatGPT（GPT-4o）ならば
　　　　Pythonのライブラリを
　　　　　使用すれば、
　　　　　　動画から音声を
　　　　　　　取り出せることが
　　　　　　　　わかりました。

　ほかのツールを
　　わざわざ使う必要がないのは
　　　ありがたいことですよね😸
***
　では、やり方です。

　まずは、セッションが
　　GPT-4oであることを
　　　確認します。

　次に、
　　動画をアップロード。

　下記のPromptを入力。
```Text:動画から音声を抜き出すPrompt
MoviePyを使って、動画から音声を取得してください。
```
　これで、送信。

　しばらくすると
　　ダウンロードリンクが
　　　出てきますから、
　　　　ダウンロードします。
　　　　　MP3ファイルになります。

　出来上がった音声ファイルを
　　確認してください。

　はい、終了。
***
　ここで
　　助言をひとつ。

　MoviePyなどのライブラリを
　　使う際は、GPT-4oは
　　　エラーがあっても
　　　　何度も違う方法を
　　　　　模索する傾向があります。

　原因はわかりません。

　しかし、
　　回避方法は
　　　あります。

　必ず新しいセッションにして、
　　最初からやりましょう。

　この方法で
　　うまくいかなかったことは
　　　今までありませんでした。
　　　　自分だけかもしれませんけど😅
***
　次回は、
　　逆に、音声を
　　　無音の動画に、
　　　　入れてみたいと
　　　　　思います。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Sourcetreeでスタッシュ（stash）の中身が見れなくなった不具合の解決方法

![スクリーンショット 2024-06-24 110814.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1470013/01afd1ac-cdb6-cb08-cbcd-cb9d9ae7c0ab.png)
Sourcetree（Windows版）を最新版にアップデートしたところ、今まで確認できていたスタッシュの中身が突然見れなくなりました。（バージョン3.4.18.0）

https://jira.atlassian.com/browse/SRCTREEWIN-14306
どうやら不具合として報告があって、バージョン3.4.17で修正されたようです。

https://product-downloads.atlassian.com/software/sourcetree/windows/ga/ReleaseNotes_3.4.17.html
>Fixed: Clicking on a stash no longer shows the changed files or diffs.

あれ？でもこちらのバージョンは**3.4.18**なので修正されてるはずなんですが？？
先ほどのjiraのチケットを再度確認すると、
https://jira.atlassian.com/browse/SRCTREEWIN-14306?focusedId=3390045&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-3390045
> Issue is closing as it is working fine on latest Git version. 
> So we are advising to use latest git.

とあるので、WindowsのGitを最新版にすれば良いとのこと。
こちらのGitのバージョンを確認すると、`git version 2.31.1.windows.1`なので結構古い。
とりあえず最新版（バージョン2.45.2）をインストール。
これでスタッシュが表示できるはず。
↓
![スクリーンショット 2024-06-24 110814.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1470013/01afd1ac-cdb6-cb08-cbcd-cb9d9ae7c0ab.png)
あれ？？
一応PC再起動してみても変化無しだったので、これは詰んだか？
とりあえず先ほどのjiraのチケットを再度確認すると気になる記述を発見。

https://jira.atlassian.com/browse/SRCTREEWIN-14306?focusedId=3389052&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-3389052
> In the Sourcetree settings it's set to use System Git.

何やら使用するGitを選べるっぽい？
Sourcetreeのオプションで、GitタブのGitバージョンの項目を見てみると、
![スクリーンショット 2024-06-24 115148.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1470013/4a2cb580-6099-a3ef-cd68-f4c5a29d0a90.png)
これか！
現在は内蔵のGitを使っているので、Git for Windowsの方に切り替えるためSystemをクリック。
これでどうだ？
↓
![スクリーンショット 2024-06-24 115657.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1470013/8ef1ad73-378c-0fa4-caab-1603a68ab52e.png)
出た！
めでたしめでたし。
ルーティングとコントローラーの基本

ルーティングとコントローラーの基本周りのメモ。

### 目次

1. ルーティングの基本
2. コントローラーの基本
3. GETリクエストとPOSTリクエストの処理
4. 小さなプロジェクトの例

### 1. ルーティングの基本

Laravelのルーティングは、ユーザーのリクエストをどのコントローラーメソッドで処理するかを定義します。ルートの定義は、`routes/web.php`ファイルに行います。

### シンプルなルートの定義

```php
Route::get('/hello', function () {
    return 'Hello, World!';
});
```

このルートは、ユーザーが `/hello` にアクセスしたときに「Hello, World!」というメッセージを表示します。

### ルートにパラメーターを渡す

```php
Route::get('/user/{id}', function ($id) {
    return 'User '.$id;
});
```

このルートは、ユーザーが `/user/1` のようにアクセスすると、「User 1」と表示されます。

### 2. コントローラーの基本

コントローラーは、ルートがリクエストを処理するためのロジックを含む場所です。まず、コントローラーを作成しましょう。

### コントローラーの作成

ターミナルで以下のコマンドを実行します。

```bash
php artisan make:controller UserController
```

これで、`app/Http/Controllers/UserController.php` ファイルが作成されます。

### コントローラーのメソッド定義

`UserController` にメソッドを追加して、リクエストを処理するロジックを記述します。

```php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function show($id)
    {
        return 'User '.$id;
    }
}
```

### 3. GETリクエストとPOSTリクエストの処理

### GETリクエストのルート定義

```php
Route::get('/user/{id}', [UserController::class, 'show']);
```

このルートは、`UserController` の `show` メソッドを呼び出します。

### POSTリクエストのルート定義

次に、POSTリクエストを処理するルートとメソッドを定義します。

```php
Route::post('/user', [UserController::class, 'store']);
```

`UserController` に `store` メソッドを追加します。

```php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function store(Request $request)
    {
        $name = $request->input('name');
        return 'User '.$name.' created!';
    }
}
```

### 4. 小さなプロジェクトの例

最後に、シンプルなプロジェクトを作成して、ルーティングとコントローラーの基本を確認しましょう。

### プロジェクト：シンプルなユーザー管理

1. `routes/web.php` にルートを定義

```php
Route::get('/user/{id}', [UserController::class, 'show']);
Route::post('/user', [UserController::class, 'store']);
```

1. `UserController` にメソッドを定義

```php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function show($id)
    {
        return view('user.show', ['id' => $id]);
    }

    public function store(Request $request)
    {
        $name = $request->input('name');
        return view('user.store', ['name' => $name]);
    }
}
```

1. ビューを作成

`resources/views/user/show.blade.php`

```
<!DOCTYPE html>
<html>
<head>
    <title>User Show</title>
</head>
<body>
    <h1>User ID: {{ $id }}</h1>
</body>
</html>
```

`resources/views/user/store.blade.php`

```
<!DOCTYPE html>
<html>
<head>
    <title>User Store</title>
</head>
<body>
    <h1>User {{ $name }} created!</h1>
</body>
</html>
```

これで、シンプルなユーザー管理システムが完成しました。GETリクエストでユーザーIDを表示し、POSTリクエストで新しいユーザーを作成できます。

### まとめ

Laravelのルーティングとコントローラーの基本についてまとめてみました。これらの基本を理解することで、より複雑なアプリケーションの構築が可能になると思っています。
Windows10のセーフモードを起動する5つの方法とは？起動後にやるべき7つのことも詳しく解説–情報システム部門を刺激するメディア「情シスのじかん」より

「情シスのじかん」は、情報システム部門のプロフェッショナルを対象としたメディアです。実務に役立つノウハウや革新的なアイデアを提供し、学びとネットワーキングの場を提供することを目指しています。最新の技術動向やベストプラクティス、成功事例を通じて、情シス担当者のスキルアップをサポートします。

ここで、Qiitaの読者の皆様向けに、「情シスのじかん」で公開された記事をピックアップ＆サマリ紹介します！Qiitaは技術者向けの情報共有プラットフォームとして、より実践的で具体的な技術情報を提供する場です。情シスのじかんは、特に情報システム部門に特化した内容を中心にしていますが、両者の強みを活かして、プロフェッショナルの皆様に有益な情報をお届けします。

### Windows10のセーフモードを起動する5つの方法とは？起動後にやるべき7つのことも詳しく解説
![windows10safemode_情シスのじかん.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/a11740d5-5be1-8c84-164f-a47acdc99b96.png)

この記事では、新しいシステムやデバイスの初期設定の基本手順とその重要性について解説しています。初期設定は、セキュリティの確保やパフォーマンスの最適化に直結するため、正確かつ迅速に行うことが求められます。初期設定の具体的なステップやチェックリストも提供されており、新人のIT担当者にも役立つ内容です。

https://josys.wingarc.com/josys-keyword-safemode

### 情報システム部門を刺激するメディア「情シスのじかん」とは？
![情シスのじかんbyWingArc1st (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/89afaa7e-b941-a10a-c813-8485daca4502.png)

初めまして、『情シスのじかん』です。
近日遂に、日本中の情シス部門のあなたを刺激するメディアが発足します！🚨
さぁ、テクノロジーを飼い慣らし、仕事や生活の質を向上させ、一緒に未来を切り拓きましょう。皆様の生活リズムに合わせた情報発信で、常に寄り添い、共に未来を切り拓くためのメディアです。

ぜひ、情報システム部門の皆様の活動の取材をさせてください。

https://josys.wingarc.com/about
Windows10のサポート終了はいつ？バージョンごとの期限一覧やWindows11へのアップデ―ト方法を徹底解説–情報システム部門を刺激するメディア「情シスのじかん」より

「情シスのじかん」は、情報システム部門のプロフェッショナルを対象としたメディアです。実務に役立つノウハウや革新的なアイデアを提供し、学びとネットワーキングの場を提供することを目指しています。最新の技術動向やベストプラクティス、成功事例を通じて、情シス担当者のスキルアップをサポートします。

ここで、Qiitaの読者の皆様向けに、「情シスのじかん」で公開された記事をピックアップ＆サマリ紹介します！Qiitaは技術者向けの情報共有プラットフォームとして、より実践的で具体的な技術情報を提供する場です。情シスのじかんは、特に情報システム部門に特化した内容を中心にしていますが、両者の強みを活かして、プロフェッショナルの皆様に有益な情報をお届けします。

### Windows10のサポート終了はいつ？バージョンごとの期限一覧やWindows11へのアップデ―ト方法を徹底解説
![11b2650cf9bbe78c7fe88c4a0253530a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/d5153e97-e492-d6f4-d374-a22bcc9291ec.jpeg)

この記事は、2025年10月14日に予定されているWindows 10のサポート終了についての情報と、それに伴う対策を詳しく解説しています。サポート終了後はセキュリティリスクが高まるため、早めの移行計画が求められます。Windows 11へのアップグレード方法や、移行の際の注意点なども紹介されており、IT管理者にとって必須の内容です。

https://josys.wingarc.com/josys-keyword-wiindows10-end

### 情報システム部門を刺激するメディア「情シスのじかん」とは？
![情シスのじかんbyWingArc1st (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/89afaa7e-b941-a10a-c813-8485daca4502.png)

初めまして、『情シスのじかん』です。
近日遂に、日本中の情シス部門のあなたを刺激するメディアが発足します！🚨
さぁ、テクノロジーを飼い慣らし、仕事や生活の質を向上させ、一緒に未来を切り拓きましょう。皆様の生活リズムに合わせた情報発信で、常に寄り添い、共に未来を切り拓くためのメディアです。

ぜひ、情報システム部門の皆様の活動の取材をさせてください。
https://josys.wingarc.com/about
【Python】パスとフォルダ操作

Pythonでパスとフォルダを操作するには、主に`os`モジュールと`pathlib`モジュールを使用します。`pathlib`モジュールは比較的新しく、より直感的な操作が可能です。ここでは両方を紹介します。
# パスの操作
まず、現在の作業ディレクトリを取得する方法から見てみましょう。
```python
import os
from pathlib import Path

# osモジュールを使用
current_dir_os = os.getcwd()
print(f"現在のディレクトリ (os): {current_dir_os}")

# pathlibモジュールを使用
current_dir_pathlib = Path.cwd()
print(f"現在のディレクトリ (pathlib): {current_dir_pathlib}")
```
# ファイルやフォルダの存在確認
次に、特定のファイルやフォルダが存在するかどうかを確認する方法を見てみましょう。
```python
import os
from pathlib import Path

# ファイルパスを指定
file_path = "example.txt"

# osモジュールを使用
if os.path.exists(file_path):
    print(f"{file_path} が存在します")
else:
    print(f"{file_path} が存在しません")

# pathlibモジュールを使用
path = Path(file_path)
if path.exists():
    print(f"{file_path} が存在します")
else:
    print(f"{file_path} が存在しません")
```
# フォルダの作成
新しいフォルダを作成する方法を紹介します。
```python
import os
from pathlib import Path

# 新しいフォルダ名
new_folder = "new_directory"

# osモジュールを使用
if not os.path.exists(new_folder):
    os.mkdir(new_folder)
    print(f"{new_folder} を作成しました")
else:
    print(f"{new_folder} は既に存在します")

# pathlibモジュールを使用
path = Path(new_folder)
if not path.exists():
    path.mkdir()
    print(f"{new_folder} を作成しました")
else:
    print(f"{new_folder} は既に存在します")
```
# ファイル一覧の取得
特定のディレクトリ内のファイルとフォルダの一覧を取得する方法を見てみましょう。
```python
import os
from pathlib import Path

# osモジュールを使用
print("osモジュールを使用:")
for item in os.listdir():
    print(item)

# pathlibモジュールを使用
print("\npathlibモジュールを使用:")
current_dir = Path(".")
for item in current_dir.iterdir():
    print(item)
```
これらの例を通じて、Pythonでのパスとフォルダ操作の基本を理解していただけたかと思います。`pathlib`モジュールは、より直感的でオブジェクト指向的なアプローチを提供しており、多くの場面でosモジュールよりも使いやすいです。
######
参考)　[東京工業大学情報理工学院 Python早見表](https://chokkan.github.io/python/index.html)
【障害】JSPでDTOの値が取得できない

## JSPって使ってますか？

日々時代遅れの技術でエラーが発生した時のことを備忘録として書いています。

今日はJSPのEL式でDTOの値が取得できなかったエラーについて共有します。

性格が完璧主義と真逆なのでスクリーンショットなどは撮っておりません。ご容赦ください。

## DTOの値がJSPで取得できない理由とは

その理由は**DTOの中にgetterが含まれていない**からです。
DTOをみてみましょう
【Python】ファイル操作

# ファイルを開く
`open()`関数を使ってファイルを開きます。
`'w'`モードは書き込みモードで、ファイルが存在しない場合は新規作成します。
`with`ステートメントを使うと、ファイルを自動的に閉じてくれるので便利です。
```python
# 'w'は書き込みモード、'r'は読み込みモード、'a'は追加モード
with open('example.txt', 'w') as file:
    file.write('こんにちは、Python！\n')
    file.write('ファイル操作を学んでいます。')
```
# ファイルを読み込む
`'r'`モードでファイルを開きます。
`read()`メソッドでファイルの内容全体を読み込みます。
```python
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
```
# ファイルに追加する
`'a'`モードは追加モードで、既存のファイルの末尾に新しい内容を追加します。
```python
with open('example.txt', 'a') as file:
    file.write('\n新しい行を追加しました。')
```
# ファイルを1行ずつ読み込む
ファイルオブジェクトを直接イテレートすることで、1行ずつ読み込めます。
`strip()`メソッドで各行の末尾の改行文字を削除しています。
```python
with open('example.txt', 'r') as file:
    for line in file:
        print(line.strip())  # strip()で行末の改行を削除
```
# ファイルが存在するか確認する
`os.path.exists()`関数を使ってファイルの存在を確認できます。
```python
import os

if os.path.exists('example.txt'):
    print('ファイルが存在します。')
else:
    print('ファイルが存在しません。')
```

# ファイルを削除する
`os.remove()`関数でファイルを削除できます。
```python
os.remove('example.txt')
print('ファイルを削除しました。')
```
これらの操作を組み合わせることで、様々なファイル処理が可能になります。
ファイル操作を行う際は、以下の点に注意しましょう：

ファイルを開いたら、必ず閉じるようにしてください（`with`ステートメントを使うと自動的に閉じてくれます）。
存在しないファイルを読み込もうとするとエラーが発生するので、事前に存在確認をするのが良いでしょう。
ファイルの削除は取り消せないので、慎重に行ってください。
# withステートメント使ったファイル操作
`with`は、Python のコンテキストマネージャ（context manager）と呼ばれる機能を利用するための構文です。ファイル操作において、このことができるのはファイルの開閉を制御するためでありとても便利です。
- **自動リソース管理**
ファイルなどのリソースを自動的に管理します。
ブロックの終了時に、自動的にファイルを閉じます。これにより、開発者がファイルを閉じるエラーを防ぐことができます。
- **例外処理の簡略化**
`with`使用しない場合は、`try-finally`ブロックを使ってファイルを確実に閉じることをおすすめします。
`with`同意しない場合は、この処理が行われるため、コードがシンプルになります。
- **コンテキストマネージャの仕組み**
コンテキストマネージャプロトコルを実装したオブジェクトと連携します。
このプロトコルは、`__enter__`と`__exit__`メソッドを変更します。
`__enter__`メソッドはリソースの設定（ファイルを開くなど）を行います。
`__exit__`メソッドはリソースのクリーンアップ（ファイルを閉じるなど）を行います。
- **汎用性**
ファイル操作が可能、データベース接続、ロック機構、ネットワーク接続など、様々なリソース管理が可能です。
- **可読性の向上**
リソースの利用範囲が明確になり、コードの意図が理解しやすくなります。
- **エラー処理**
例外を除いて、`__exit__`メソッドが呼び出され、リソースが適切に解放されます。

`with`は、リソースマネジメントに関するコードを簡略化でき、同時にリソースリークのリスクも減らすことができます。これは、特にファイル操作やデータベース操作など、リソースの適切な開放が重要な場面で非常に役立ちます。

初心者にとっては、まず間違いなく`with`基本的な使い方を覚え、その便利さを認識する必要があります。その後、必要に応じて、カスタムのコンテキストマネージャの作成方法などの高度な使い方を学んでいく必要があります。

```python
# withステートメントを使用しない場合
file = open('example.txt', 'w')
try:
    file.write('Hello, World!')
finally:
    file.close()

# withステートメントを使用する場合
with open('example.txt', 'w') as file:
    file.write('Hello, World!')

# withステートメントの内部動作（簡略化）
class FileManager:
    def __init__(self, filename, mode):
        self.filename = filename
        self.mode = mode
        self.file = None
    
    def __enter__(self):
        self.file = open(self.filename, self.mode)
        return self.file
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.file:
            self.file.close()

# カスタムのFileManagerを使用
with FileManager('example.txt', 'w') as file:
    file.write('Hello, World!')
```
######
参考)　[東京工業大学情報理工学院 Python早見表](https://chokkan.github.io/python/index.html)
Windows環境でのpythonでのファイルパス指定


この記事では、Windows環境でのファイルパス指定方法と、pydicomを用いたDICOMファイルの読み込み方法について解説する。特に、ファイルパスをPythonコードで正しく指定する方法に焦点を当てる。

## Windowsのファイルパスを指定

### パスをコピーする方法

1. 指定したいファイルを右クリック
2. 「パスとしてコピー」を選択

この手順で得られたファイルパスをPythonでそのまま使用することはできない。バックスラッシュをエスケープする必要があるか、Pythonの生文字列（raw string）を使用することでエスケープを避けることができる。以下に修正したコードを示す。

### 修正方法

1. バックスラッシュをエスケープする
2. 生文字列を使用する

以下に2つの方法を示す。

### 1. バックスラッシュをエスケープする方法

以下のコードは、pydicomを使ってDICOMファイルを読み込む例だ。

```python
import pydicom
from matplotlib import pyplot as plt

dcmfnm = 'C:\\path\\to\\your\\dicom\\file\\example.dcm'
ds = pydicom.dcmread(dcmfnm)
print(ds)
```

### 2. 生文字列を使用する方法

```python
import pydicom
from matplotlib import pyplot as plt

dcmfnm = r'C:\path\to\your\dicom\file\example.dcm'
ds = pydicom.dcmread(dcmfnm)
print(ds)
```

### ファイル名の確認

指定しているパスがファイルではなくディレクトリになっている可能性もある。DICOMファイルのフルパスを指定していることを確認する。例として、ファイル名が`example.dcm`であると仮定すると、以下のようになる。

```python
import pydicom
from matplotlib import pyplot as plt

dcmfnm = r'C:\path\to\your\dicom\file\example.dcm'
ds = pydicom.dcmread(dcmfnm)
print(ds)
```

このように、DICOMファイルのフルパスを正しく指定することでエラーを回避できる。ファイルパスが正しいことを再度確認し、上記のいずれかの方法で実行してみてほしい。
FreeBSD/mipsでSMP

MIPSにはR4000(1991年)の頃からマルチCPUの対応があり、SOCでもマルチコアのものがあります。

FreeBSD/mipsアーキテクチャの場合、core間割り込み(Inter Processor Interrupt:IPI)をソフトウエア割り込みの２本のどちらかか、ハード割り込みのクロックを除く5本のどれかで行うことができるようです。


まずSMPオプションを追加してカーネルをビルドします。

必要な関数を入れたファイルを追加します。

カーネルを起動するとmips/mips/mp_machdep.cのcpu_mp_start()->start_ap()がよばれてセカンダリーのCPUが起動されます。

start_ap()はCPUごとに作られたplatform_start_ap()をよびます。

platform_start_ap()では初期化をしてセカンダリーのCPUを上げてmips/mips/mpboot.Sのmpentryに飛ばします。mpentryはmp_machdep.cのsmp_init_secondary()をよんで待機状態になります。

デバイスのコンフィグレーションが終ると待機状態を抜けてスケジューラに組み込まれます。

BCM338Xを対応させるためにlinux方面のコードを見てみます。

BCM338XはBCM63XXとほぼほぼ同等のよう。だた細かくいじられてるので、違うところがあるのかもしれない。

Broadcomが書いたもの(smp-brcm.c)と、Linux本家にコントリビュートされたもの(smp-bmips.c)は違っていて、Broadcomの方がシンブルに書かれているので、そちらを参考にします。

セカンダリーの起動はsmp-brcm.cの中でinstall_smp_boot_ex_handler()で例外ハンドラをメモリ(0x80000200)に書き込んでおいて、ソフトウエア割り込み0を上げて起動しているようです。書きこみ時はキャッシュされないように0xa0000200に書き込みします。

Linux方面のコードを見るとIPIは1本でやるケースと2本でやるケースがあるようだ。また割り込みの振り分けはプロセッサー毎の機能で処理されてるようだ。

BroadcomのソースでBMIPS4350対応したコードがsmp.cというファイルでありました。Linuxに入ってるのはこちらを参考にしたものと思われます。

BCM3383はBCM3380とは仕様が変わっているようです。

BCM3383もデフォルトではBCM3380と同じ仕様で動いてるようです。この仕様はソフトウエア割り込みを2本使い交互に割り込みが上がるようにルーティングされています。これだと2CPUまでしかサポートできないのでBCM3383では新しい仕様がサポートされたのではないかと思われます。

platform_processor_id()はCOP0のBroadcom拡張($22)にありそうなのですが、わからなかったので3の31ビット目がboot cpuを示すようなのでそれで判断しました。これだと2CPUしか対応できません。:(

Linuxにはsmp_processor_id()という関数があるのですが、どこで処理されているものなのかわかりません。

IPIはCPU0で割り込み上げてCPU1で拾えるのとこれの逆ができればいいのだと思うが。処理の中身はFreeBSD側にあるのだと思う。

![MIPS_MP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/9d1f7097-5e6c-f64c-ba56-2ba21b6ac51f.png)

FreeBSD/mipsでは相手のCPU構造体のpc_pending_ipisに命令を入れて、割り込みを上げて、割り込みが入ったCPUはその命令を拾って処理をします。

とりあえずBCM3380の機能で実装してBCM3383で確認したのですが、動きません。IPIは動いているのですがpc_pending_ipisが渡らないようです。SOC固有のキャッシュの制御が必要なのかもしれません。(2024/06/27)

オリジナルのコードがソフトウエア割り込み1本で書かれていたので、同じにしてみましたが動きません。(2025/01/27)

BCMの設定でI,Dキャッシュを有効にしないとSMPは動くのですが、むちゃくちゃ遅いです。

mp_machdep.cを逆アセンブラしてみました。ll/scでatomicな処理になっています。

```
00000398 <ipi_send>:
 398:   c0820078        ll      v0,120(a0)
 39c:   00a21025        or      v0,a1,v0
 3a0:   e0820078        sc      v0,120(a0)
 3a4:   1040fffc        beqz    v0,398 <ipi_send>
 3a8:   00000000        nop
 3ac:   08000000        j       0 <cpu_mp_announce>
 3b0:   8c840024        lw      a0,36(a0)
```

https://openwrt.org/docs/techref/hardware/soc/soc.broadcom.bcm63xx/smp

CP0_BCM_CFG_DCSHENを設定しないととっても遅いですがloginまで進めます。ただタイマーが狂ってしまうみたいで、300秒が一瞬でカウントされloginできません。(2025/2)
Xにバックエンド向けのWeb開発ロードマップに関するツイートがあった

Xで下記のツイートが流れてきました。

https://x.com/Nameless_SN/status/1801887367160336537

バックエンドエンジニアの方は以下のスキルはありますでしょうか？

1. バージョン管理
2. HTTPSへの理解
3. Web APIの知識
4. プログラミング言語
5. データベース
6. キャッシュ戦略
7. サーバに関する知識とデプロイメント

# 必要なスキルの説明
サーバーサイドエンジニアに必要なスキルとして挙げられている項目について、詳細な説明を加えてみます。

### 1. バージョン管理 (gitなど)
- **概要**: ソースコードのバージョン管理システムを使用して、コードの変更履歴を管理し、チームでの共同作業を円滑に進めるためのスキル
- **具体例**: Gitを使用してコードのリポジトリを管理し、ブランチを切って新機能を開発し、プルリクエストを通じてコードをレビューする

### 2. HTTPSへの理解
- **概要**: HTTPSはHTTPのセキュリティ拡張であり、データの暗号化と認証を提供する
- **具体例**: SSL/TLS証明書の設定、HTTPS通信を行うためのサーバー設定、セキュリティのベストプラクティスの理解

### 3. Web APIの知識
- **概要**: 他のサービスと連携するためのインターフェースであるWeb APIの設計、開発、使用に関する知識
- **具体例**: RESTful APIやGraphQLの設計、JSONやXMLのデータフォーマットの理解、APIのバージョニングや認証方法（例: OAuth）の実装

### 4. プログラミング言語
- **概要**: サーバーサイドのロジックを実装するためのプログラミング言語に精通する
- **具体例**: Python, Java, Ruby, JavaScript (Node.js), Goなどの言語でのコーディングスキル

### 5. データベース
- **概要**: データの保存、管理、取得を効率的に行うためのデータベースに関する知識
- **具体例**: SQL（MySQL, PostgreSQL）やNoSQL（MongoDB, DynamoDB）の使用方法、クエリの最適化、インデックスの設計

### 6. キャッシュ戦略
- **概要**: データアクセスのパフォーマンスを向上させるためのキャッシュの利用方法に関する知識
- **具体例**: RedisやMemcachedの利用、キャッシュの無効化ポリシー、キャッシュヒット率の最適化

### 7. サーバに関する知識とデプロイメント
- **概要**: サーバの設定、管理、およびアプリケーションのデプロイメントに関するスキル。
- **具体例**: Linuxサーバの管理、DockerやKubernetesを用いたコンテナ化とオーケストレーション、CI/CDツール（Jenkins, GitHub Actions）の利用

---
「使えるよ！」という観点では
バージョン管理、プログラミング言語、データベースはあると思います。

基本情報レベルであれば、
HTTPSへの理解、Web APIの知識などがある方がいらっしゃると思います。

HTTPS、キャッシュに関しては
転職活動で、面接の時に聞かれることがあると思います。

いくつか質問をネットから拾いましたので、ご自身で各分野の理解ができているか確認してみてください。

# 問題

### HTTPS
HTTPSとは何ですか？その基本的な役割を説明してください。

SSL/TLS証明書の役割を説明し、その種類についてもいくつか例を挙げてください。

HTTPSとHTTPの違いを技術的に説明してください。

HTTPS通信を確立する際のハンドシェイクプロセスを簡潔に説明してください。

HTTPSで使用される主要な暗号化技術を2つ挙げて、それぞれの概要を説明してください。

SSL/TLS証明書をサーバーにインストールする手順を簡単に説明してください。

SSLストリッピング攻撃とは何ですか？その対策方法についても説明してください。

HSTS (HTTP Strict Transport Security) とは何ですか？その利点を説明してください。


# おわりに
今回は@Nameless_SN さんのポストをもとにWeb開発のロードマップについてのお話でした。

ツイート主さんは[zen](https://zenn.dev/)に記事を投稿されているようです。

https://zenn.dev/nameless_sn