OmniAICreator/Qiita-1.07M huggingface dataset:
Introduction to PHP for Beginners

![Introduction to PHP for Beginners.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943666/5b4f16b7-f5d0-406f-8da9-c07173b6b724.jpeg)

---

## Introduction to PHP for Beginners

### 1. What is PHP?

PHP, which stands for **Hypertext Preprocessor**, is a server-side scripting language that is widely used for web development. It allows developers to create dynamic web pages and interact with databases to display content on the fly. Originally created by **Rasmus Lerdorf** in 1993, PHP has since become one of the most popular languages for web development, powering major platforms like **WordPress**, **Facebook**, and **Wikipedia**.

Despite the rise of other programming languages, PHP is still a powerful and reliable option for building dynamic websites, especially when combined with other tools and frameworks like **MySQL** and **Laravel**.

### 2. Setting Up PHP on Your Local Machine

Before you can start writing PHP, you need to set it up on your local machine. Fortunately, there are easy-to-install packages like **XAMPP** and **MAMP** that bundle PHP, MySQL, and Apache together in one package.

#### Steps for Installation (Using XAMPP as an example):
1. **Download XAMPP** from the official website: [https://www.apachefriends.org/index.html](https://www.apachefriends.org/index.html)
2. Install it and launch the XAMPP Control Panel.
3. Start the **Apache** server (this is your local web server) and **MySQL** (if you plan to work with databases).
4. Open a web browser and go to `http://localhost/`. If you see the XAMPP welcome page, you’ve successfully set up PHP!

#### Verifying PHP Installation:
To make sure PHP is installed correctly, create a new file in the `htdocs` directory (found in the XAMPP installation folder) and name it `info.php`. Inside this file, write the following code:

```php
<?php
phpinfo();
?>
```

Now, open your browser and visit `http://localhost/info.php`. If you see a page full of PHP configuration details, it means everything is set up properly!

#### Your First PHP Script
PHP scripts are typically embedded into HTML. Here’s a simple PHP script that displays "Hello, World!" on your webpage:

```php
<?php
echo "Hello, World!";
?>
```

Save this as `hello.php` in the `htdocs` directory and visit `http://localhost/hello.php` to see the output. Congratulations, you’ve just written your first PHP script!

---
71歳の挑戦... Arduino IDE 2.0系の起動できない問題に対する一つの回答

　メインパソコンを windows11 に移行中ですが一つ困った事が。```Arduino IDE 2.3.4```が起動しないのです。```Arduino IDE 1.8.19```はちゃんと起動します。ネットでググると出てきますね。起動画面中央のアイコンが脈動するだけで一向に見慣れたエディター画面に移行しないという話が。

 ![Arduino起動画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3189926/1e3b11ed-c894-4336-a56d-4fc20633a420.jpeg)
ネットの情報ではプロキシの問題とか言われてます。これまではWiFi接続でしたが、新たな環境では近くに有線LANのコンセントがあるので、それに繋いでいるのが悪いのか？　ではと、WiFi接続してみるもだめ。旧PCはHomeエディションで、新PCがProエディションだからいけないのか？　何度も再インストールしてもだめ。プロキシに関しては全くわからないのでパス。諦めてました。でも諦めきれず...
　今までのパソコンでは相変わらずちゃんと起動するので、中を色々見直してみました。```arduino-cli.yaml```も見てみましたが、起動するしないに関わる変なところはなさそう。そこで、ダメ元で、旧PCのArduinoIDEのフォルダーを丸ごとコピーし

 ![Arduino2移動.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3189926/89706695-63a6-4510-81c8-04eb17a7d17d.jpeg)
新PCの、旧PC内と同じ場所にそのまま貼り付けました。起動しました（インストールしてないのに）。環境も見たところそのまま引き継げてます。```2.3.6```へのアップデート案内が表示されるので、ちょっと怖くはありましたがやってみました。新バージョンがインストールされて再起動がかかり、一瞬、変なウィンドウが明滅しましたが無事起動しました。書込みもできました。旧パソコンよ、有難う💛

![Arduino無事起動.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3189926/bb4b34e5-6377-461d-80c8-1078c9502d0b.jpeg)

![Arduino01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3189926/03d68a5e-f58b-488d-bc9d-350e7fb8f4ad.jpeg)

参考のため、旧、新PCの```arduino-cli.yaml```を示します。

```c:"C:¥Users¥(旧PCユーザー名)¥.arduinoIDE¥arduino-cli.yaml"
board_manager:
    additional_urls:
        - https://espressif.github.io/arduino-esp32/package_esp32_index.json
        - https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
        - https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
build_cache:
    compilations_before_purge: 10
    ttl: 720h0m0s
daemon:
    port: "50051"
directories:
    builtin:
        libraries: C:\Users\(USER_NAME)\AppData\Local\Arduino15\libraries
    data: c:\Users\(USER_NAME)\AppData\Local\Arduino15
    downloads: C:\Users\(USERNAME)\AppData\Local\Arduino15\staging
    user: e:\MySketch
library:
    enable_unsafe_install: false
locale: ja
logging:
    file: ""
    format: text
    level: info
metrics:
    addr: :9090
    enabled: true
output:
    no_color: false
sketch:
    always_export_binaries: false
updater:
    enable_notification: true
```
そして、単にフォルダーごと貼付け、起動できた後の新PCのものです。
```c:"C:¥Users¥(新PCユーザー名)¥.arduinoIDE¥arduino-cli.yaml"
board_manager:
    additional_urls: []
directories:
    builtin:
        libraries: C:\Users\(USER_NAME)\AppData\Local\Arduino15\libraries
    data: c:\Users\(USER_NAME)\AppData\Local\Arduino15
    user: d:\MySketch
locale: ja
```
こちらは```2.3.6```にアップデート、再起動後なので注意が必要かも知れません。

　今後どうなるかわかりませんが一安心。「ど素人考え」でうまくいった稀有な例ですね。何か参考になれば幸いです。お付き合いいただきありがとうございました。
Nim言語をJavaScriptにトランスパイルして、任意の深さでJSONを整形するWebアプリを作った

# 概要

以前、Nim言語の学習を兼ねて「[JSONの深さを指定して整形するCLIツール](https://qiita.com/tobita_yoshiki/items/375fcc79989a522eab45
)」を作りました。それなりに便利だったのですが、コマンドラインだとコピペがしづらかったり、手軽に使いたい場面で少し不便に感じることもありました。

そこで今回は、Nim言語をJavaScriptにトランスパイルし、Web上で誰でもすぐに使えるツールとして公開しました。

この記事では、技術的なポイントを交えつつ、実際に作ったものをご紹介します。

https://qiita.com/tobita_yoshiki/items/375fcc79989a522eab45

# デモンストレーション

https://depth-n-json-formatter.web.app/

![スクリーンショット 2025-04-16 22.05.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/422592/5128ad6c-6029-475d-afed-e31a7e421847.png)

指定した深さでJSONを整形できます。

# Nim言語をJavaScriptにトランスパイル

JSONをフォーマットする関数自体は以前に作成済みです。
今回は、それをJavaScriptから呼び出すための入り口(`jsonfmtjs.nim`)を作成しました。

ここでは[プラグマ](https://nim-lang.org/docs/manual.html#pragmas)を使って、
JavaScriptで`jsonfmt`という関数をexportしています。

```nim:jsonfmtjs.nim
from lib import fmt # 任意の深さでJSONをフォーマットする関数

proc jsonfmt(jsonString: cstring, depth: cint, indent: cint): cstring {.exportc.} =
    fmt($(jsonString), depth, indent)

{. emit: "export { jsonfmt };" .}
```

ビルドは以下のコマンドで行いました。

```
nim js -d:release jsonfmtjs.nim
```

これにより、`jsonfmtjs.js`というファイルが生成されます。

```javascript:jsonfmtjs.jsの末尾
function jsonfmt(jsonString_p0, depth_p1, indent_p2) {
  var result_553648134 = null;

    result_553648134 = toJSStr(fmt__lib_u745(cstrToNimstr(jsonString_p0), ((depth_p1) | 0), ((indent_p2) | 0)));

  return result_553648134;

}
export { jsonfmt };
```

あとはこれをフロントエンド実装から呼び出すことによって、
JSONを任意の深さで整形できます。

# フロントエンド実装からjsonfmtを呼び出す

フロントエンドはVue.js + TypeScriptで作りました。

`tsconfig.json`でJavaScriptの呼び出し許可し、
対象のJSファイルと型定義ファイルを配置してフロントエンドから呼び出すようにしました。

```json:tsconfig.jsonの一部
  "compilerOptions": {
    "allowJs": true,
  }
```

```javascript:jsonfmtjs.d.ts
declare module '@/jsonfmtjs.js' {
  export function jsonfmt(input: string, depth: number, indent: number): string
}
```

```typescript:フロントエンド実装App.vueの一部
import { jsonfmt } from '@/jsonfmtjs.js'

...

const formattedJson = computed(() => {
  try {
    return jsonfmt(jsonString.value, depth.value, 2)
  } catch (e) {
    console.error(e)
    return 'Failed to format json'
  }
})
```

# 今回実装したもののGitリポジトリ

* Nimの実装: https://github.com/cacapouh/jsonfmt
* フロントエンド実装: https://github.com/cacapouh/depth-n-json-formatter

# まとめ

今回は、以前Nim言語で作成したJSON整形ツールを、Web上で手軽に使える形に移植する取り組みをご紹介しました。

普段あまり触れる機会の少ないNim言語ですが、こうしたWebアプリ化も意外とスムーズにできる点は発見でした。

もし興味があれば、ぜひデモページも触ってみてください！

https://depth-n-json-formatter.web.app/

homebrewからCLIコマンドも利用可能です:

```
$ brew tap cacapouh/jsonfmt
$ brew install cacapouh/jsonfmt/jsonfmt
```
[PowerBI] 散布図を用いてポジションマッピングを行う

# 要件
- 4象限のポジションマップを作成する
- 4分割する定数線(Constant line)が描画されている
- 各象の点を異なる色に変更する


# 手順
## 1. 恒線の追加
   - 散布図を選択し、`Analytics`ペインを開く
   - `X-Axis Constant Line`を追加し、適切な値を設定
   - 同様に`Y-Axis Constant Line`を追加

## 2. 条件列の追加
   - `Table view`を開く
   - `Column tools`タブから、`New column`を開く
   - `Column =`から始まる計算式に条件（DAX）式（Data Analysis Expressions）を記載する
       ~~~sql:DAX
       ColumnName = SWITCH(
           TRUE(), 
           'Table'[X] < 50 && 'Table'[Y] < 50, 1,
           'Table'[X] < 50 && 'Table'[Y] > 50, 2,  
           'Table'[X] > 50 && 'Table'[Y] < 50, 3, 
           'Table'[X] > 50 && 'Table'[Y] > 50, 4 
        )
        ~~~
        or
        ~~~sql:DAX
        ColumnName = SWITCH(
           TRUE(), 
           'Table'[X] <= 50 && 'Table'[Y] <= 50, 1,
           'Table'[X] <= 50 && 'Table'[Y] > 50, 2,  
           'Table'[X] > 50 && 'Table'[Y] <= 50, 3, 
           'Table'[X] > 50 && 'Table'[Y] > 50, 4 
        )
       ~~~     
- `Table`[X]と`Table`[Y]には、条件に用いるカラム名を入力する（自動補完有）
- 保存して、`Report view`に戻る
## 3. 条件付き書式の設定
   - `Visualizations`ペインの`Format`ペインで`Markers`を選択
   - `Color`の`fx`(`Conditional formatting`)を開く
   - DAX式で指定した条件の`Rules`を作成する
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955010/d8589f1c-d159-4d8f-a3d9-1f53cf166d5c.png)
   - OKを押下して、条件を適応する

# 参考リンク
- [Power BI での散布図、バブル チャート、およびドット プロット グラフ](https://learn.microsoft.com/ja-jp/power-bi/visuals/power-bi-visualization-scatter)
- [如何用PowerBI制作四象限图？ - 知乎](https://zhuanlan.zhihu.com/p/628395899)
- [Power BIの散布図の使い方 マトリックス分析で多面的に分析しよう - ソフ蔵（ソフゾウ）](https://soft-zou.jp/2020/08/06/power-bi-case-scatter/)
【初心者向け】CI・CT・CDの関係とは？【DevOps】 


## CI・CT・CDとは？

CI・・・継続的インテグレーション
CD・・・継続的デレリバリー
CT・・・継続的テスト

この3つは、DevOpsの基盤です。
これらのプロセスをまとめて「CI/CDパイプライン」「DevOpsパイプライン」と呼ばれます。

### CIとは？

CIとは、複数の開発者や開発したコードをセキュリティが確保された一元管理のリポジトリ(GitHubなど)に自動的に統合(マージ)するソフトウェアの開発手法になります。
CIでは、コードへの変更を頻繁にリポジトリにマージします。

**Slack**や**Teams**などのコミュニケーションツールは、CIツールと統合されることが多く、開発チームにリアルタイムの更新情報を提供して、デプロイメント中に発生する問題への迅速な対応が可能なります。

### CTとは？

CTによって、開発ライフサイクルのすべての段階でのテストができます。

開発者がコードをリポジトリにコミットすれば、CTが自動にテストを開始し、コードが次の段階に進む前に、正しく動作するか？の機能を確認することができます。
こうしたテストが自動的に実施されることで、開発者は開発プロセスの早い段階で問題点を把握することができます。

CTは、DevOpsライフサイクル全体を通じてテストと検証が継続的に実施される状態を確保して、早急なフィードバックを可能にしてリリースまでの時間を短縮することができます。

CTのテストには以下の種類が入ります。

* 単体テスト
* 統合テスト
* 回帰テスト
* パフォーマンステスト
* セキュリティテスト

これらのテストに関して、さまざまな対象としているため、コードの品質と安定性を確保ができます。

### CDとは？

コードは実行可能状態です。本番環境にリリースできる状態であるということです。
本番環境へのリリースは、Terraform PocketなどのIacのツールが使用されることが多いです。

### CI/CT/CDのパイプラインのメリットについて

コードベースへの不適切な変更やエラーが発生しやすい変更に対しガードができ、コードのけ欠陥を早期に検出できます。
また、素早くフィードバックを返すことが可能です。フィードバックはメール、チャットツールなどからアクセスが可能です。
この迅速なフィードバックのおかげで開発スピードが上がり開発サイクルがの効率が上がります。

CI/CT/CDパイプラインでは、デプロイメントが自動化できます。
ソフトウェアを手作業リリースすると、人為的エラーが発生しやすいです。
リリースまで手順を自動化すれば、コードとリリースプロセスの両方が機能でき保証できます。
ブリッジSEとは？オフショア開発を成功に導く架け橋

近年、多くの企業がオフショア開発を導入し、コスト削減や人材確保を実現しています。その中で重要な役割を果たしているのが「ブリッジSE（ブリッジシステムエンジニア）」です。本記事では、ブリッジSEの役割や求められるスキル、メリットについて詳しく解説します。
ブリッジSEは、オフショア開発など海外諸国に委託するプロジェクトの橋渡し役を担うシステムエンジニアです。

![0_lmuZl3gzfGbwfpXv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4064357/1759e3ee-66db-4ec7-ae0b-f5ab0efb148a.png)

<b>■ ブリッジSEの役割とは？</b>
ブリッジSEとは、主に日本のクライアント企業と、海外のオフショア開発チーム（ベトナム、フィリピン、インドなど）の間をつなぐエンジニアです。プロジェクトにおいて、以下のような役割を担います：

クライアントの要件を正確にヒアリングし、海外チームに伝える
設計書や仕様書の翻訳・補足
進捗管理、品質チェック、課題管理
日本語と現地語（多くの場合は英語）の通訳・翻訳
ブリッジSEは、単なる通訳ではなく、技術的な理解力とコミュニケーション能力の両方が求められます。

<b>■ 求められるスキル</b>
ブリッジSEには、以下のスキルが求められます：

●　日本語能力（N1〜N2レベルが理想）
●　プログラミング・システム開発の知識（特にWebやモバイル）
●　英語力または現地言語力
●　コミュニケーション・調整能力
●　プロジェクトマネジメントの経験
また、文化の違いを理解し、柔軟に対応する姿勢も重要です。

<b>■ ブリッジSEを導入するメリット</b>
ブリッジSEを配置することで、オフショア開発の以下のような課題を解決できます：

●　コミュニケーションミスの減少
●　開発スピード・品質の向上
●　日本側の要望が正確に反映される
●　現地メンバーとの信頼関係の構築
結果として、コスト削減だけでなく、開発成功率も高まるのが大きな魅力です。

<b>■ ブリッジSEの今後の需要</b>
オフショア開発の普及と共に、ブリッジSEのニーズは年々高まっています。特にベトナムなどでは、日本語が話せて開発経験もある人材が増えており、日本企業との連携もスムーズに行えるようになってきました。

<b>■ まとめ</b>
ブリッジSEは、オフショア開発を成功に導くための重要なキーパーソンです。言語力・技術力・マネジメント力の3つを兼ね備え、日本と海外の間を「橋渡し」する存在です。これからのグローバル開発において、ますますその価値が高まっていくでしょう。

外注をご検討されている案件がございましたら、ぜひご相談させてください。
https://softwayvn.com/
マルチパラダイムプログラミングを学ぼう！【中級者向け】


こんばんは、韓国在住のsanaです！
プログラミングを勉強していると中級者としてのステップアップをしたくなりますよね？？

そんな方に中高級開発者として成長するための高度なプログラミング言語活用能力と、関数型、オブジェクト指向、LISPパラダイムが結合されたソフトウェア設計および実装能力を身につけることができる講義を紹介します！


このシリーズでは、 TypeScriptとCotlinを主要言語として使用していますが、 Java、C＃、Scala、Swiftなどの他の言語でも適用できる技術と概念について説明しています！:blush:


この講座を視聴したら、WebページまたはバックエンドサーバーにCI / CDを適用できます。単に学習用ではなく実際の現業で活用する方法でCI/CDを適用させることができるようになります。

今日CI/CDに関する記事も上げたのでそちらも読んでくださるとうれしいです！:information_desk_person_tone1:


https://u.inf.run/44AtL2a

今日一日お疲れ雅でした！アンニョン～！
SFCCでError while generating a content URLエラー

SFCCで以下のログが出たら、XXXというIDのコンテンツアセットがjaロケールで存在しない、の意

> Error while generating a content URL: The input object to obtain the attribute value must not be null., input content id=XXX, context id=ja java.lang.IllegalArgumentException: The input object to obtain the attribute value must not be null.
【Swift】キーボードを初回表示する際に時間がかかる

SwiftUIでアプリ開発時にビルド後一発目のキーボード表示に時間がかかっており、
対策はないか調べたので備忘録として残します。


## 原因
調べてみると結構旧知の現象みたいで、大きく分けると2つ原因があった。
#### ①初回リソースの読み込み
初回起動時にキーボードに関連するリソースを読み込む必要あり、
これに時間がかかることで遅延が発生してしまう

#### ②デバック
デバックでの起動時や、デバック中に遅延が起きる報告が多い
たしかにリリース版で動作させると軽くなった
リリースでは問題ないため、この原因は無視する

## 対策
#### 
主に①について対策する
アプリ起動時、またはTextFieldを表示した際に、あらかじめプレロードしておく方法が一般的な対策

#didFinishLaunchingWithOptions などでアプリの終了を検知して、
UITextFieldのfocusを一時的に有効化することでプレロードできる

```
let lagFreeField = UITextField()
self.window?.addSubview(lagFreeField)
lagFreeField.becomeFirstResponder()
lagFreeField.resignFirstResponder()
lagFreeField.removeFromSuperview()
```

参考
[Super slow lag/delay on initial keyboard animation of UITextField](https://stackoverflow.com/questions/9357026/super-slow-lag-delay-on-initial-keyboard-animation-of-uitextfield)
文字列の出現回数をentries()とlocaleCompare()でスッキリ解決！

どうも、Paizaで修行中の男子高校生です！

今回はPaizaの問題集から「文字列の出現回数を辞書順でカウントして出力する」という、データ構造（`Map`）の理解を深めるにはもってこいの問題に挑戦したよ！

## <br>🧩 問題の内容

文字列がN個与えられます。
各文字列の出現回数を、文字列の辞書順に出力してください。

<br>📥 入力例
```
5
bcd
abc
bcd
bcd
bcd
```
📤 出力例
```
abc 1
bcd 4
```

<br>

https://paiza.jp/works/mondai/data_structure/data_structure__dict_step3


## <br>👊 最初に書いたバージョン
```js
const rl = require('readline').createInterface({input:process.stdin});
const lines = [];

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

rl.on('close',()=>{
    const N = Number(lines[0]);
    const str = new Map();
    
    for(let i = 1; i <= N; i++){
        if(str.has(lines[i])){
            str.set(lines[i], str.get(lines[i]) + 1)
        }else{
            str.set(lines[i], 1);
        }
    }
    
    const keys = Array.from(str.keys()).sort();
    
    keys.forEach(a=>{
        console.log(a, str.get(a));
    });
});
```
正直、これでも正解出せたけど、`if`で分岐して`set`するのがちょっと面倒…

## <br>✅ スマートなバージョンはこちら！
```js
const rl = require('readline').createInterface({ input: process.stdin });
const lines = [];

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

rl.on('close', () => {
    const countMap = new Map();

    lines.slice(1).forEach(word => {
        countMap.set(word, (countMap.get(word) || 0) + 1);
    });

    [...countMap.entries()]
        .sort((a, b) => a[0].localeCompare(b[0]))
        .forEach(([word, count]) => {
            console.log(word, count);
        });
});
```


# <br>🔍 解説いっぱい！

## <br>🧠 countMap.set(word, (countMap.get(word) || 0) + 1)
```js
countMap.get(word)
```
→ 今までにその単語が登録されてればカウント（例：`3`）

→ 登録されてなければ `undefined`
<br>
```js
countMap.get(word) || 0
```
→ 未登録なら `undefined || 0 → 0` になる！

つまり… 「まだ出てきてなければ 0 からカウント開始」ってこと！

## <br>🔧 [...countMap.entries()]

`entries()` は `Map` の中身（`key`, `value`のペア）を取り出すメソッド。

`MapIterator` っていう特殊な形式だから、[`...`]（スプレッド構文）で 普通の配列に変換！
```js
const map = new Map();
map.set("apple", 3);
map.set("banana", 2);

const iterator = map.entries(); 
console.log(iterator); 
// → MapIterator { ['apple', 3], ['banana', 2] }

// スプレッド構文を使って配列に変換
const array = [...iterator];
console.log(array); 
// → [ ['apple', 3], ['banana', 2] ]
```

## <br>🔡 .sort((a, b) => a[0].localeCompare(b[0]))

`a` と `b` は `[word, count]` の形の配列。

`a[0]` が単語だから、それを `localeCompare()` で比較！
```js
console.log("apple".localeCompare("banana")); // -1（辞書順で前）
console.log("banana".localeCompare("apple")); // 1（後）
console.log("apple".localeCompare("apple"));  // 0（同じ）
```
通常の `.sort()` だけだと、日本語や他の言語でうまく並ばないこともある。

`localeCompare()` を使えば、**人間が読む「自然な並び」**になる！

## <br>🔁 .forEach(([word, count]) => { ... })

分割代入で `[word, count]` を取り出して、`console.log`！
```js
.forEach(([word, count]) => {
    console.log(word, count);
});
```

## <br>🎯まとめ：この一連の流れ、1行ずつちゃんと意味ある！
```js
[...countMap.entries()] // Map → 配列
  .sort(...)            // 辞書順ソート
  .forEach(...)         // 出力
```


<br><br>[僕の失敗談(´;ω;｀)と解決話🚀](https://paizabeginner.wordpress.com/2025/04/17/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%9a%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e5%87%ba%e7%8f%be%e5%9b%9e%e6%95%b0%e3%82%92entries%e3%81%a8localecompare%e3%81%a7/)
初心者から始めれるCI/CD入門・実践講座


こんばんは、韓国在住のsanaです！

今日は初心者でも始められるCI/CD入門・実践講座を２つおすすめします！:writing_hand:

まず簡単にCIとCDがどういうものなのかについて説明すると、

CI（継続的インテグレーション）は、複数の開発者が作ったコードを頻繁に統合するプロセスです。これによって、異なる部分のコードが正しく動作するかを早期に確認でき、エラーやバグを早く見つけて修正することができます！


CD（継続的デリバリー）は、開発したコードを迅速に統合して、すぐに提供するプロセスです。よって、開発が進むたびに新しい機能や改善がユーザーにすぐ届くようになります！

まとめると…
・CIはみんなが少しずつ作ったパズルのピースを毎日集めて、間違いがないか確認していくようなイメージで
・CDは作ったアプリをみんながすぐに使えるように公開するようなイメージです:point_up:



:one:　初心者でも理解できるCI/CD入門・実践
:star2:　これらがこの講座で学べる！！

（１）Github Actionsの基本概念
（２）Spring BootプロジェクトにCI/CD適用
（３）Nest.jsプロジェクトにCI/CDを適用
（４）Next.js プロジェクトに CI/CD を適用
（５）一般的なウェブプロジェクトにCI/CD適用

CI/CDの勉強を未経験で始めたとき講師が作る講座だからこそ、に感じた混乱を

https://u.inf.run/4igSnQL



:two:　CI/CDツール1位、GitHub Actionsのすべて！

この講座では、実用的なCI / CDシナリオ、モジュール化、およびバージョン管理方法を紹介し、クラウド環境での展開方法について学べます！

実用性中心のカリキュラム＋さまざまなシナリオベースのCI / CDの構築が学べるのがこの講義の特徴!!

https://u.inf.run/43S2UOY


ぜひ、視聴してみてください::woman_tone1::wave_tone1:
Vimプラグインのインストール方法メモ（pathogen.vim）

pathogen.vimは入れたけど、
プラグインをinstallするときどうすればいいんだっけ？
毎回忘れるので、メモ。

## 前提
- dotfiles を Git で管理している。
- pathogen.vim を `~/.vim/autoload` に配置済み。

## やること
プラグインリポジトリを.vim/bundleの下にサブモジュールとして追加する。

## 手順
例：mru.vim をインストールする場合
```bash
cd ~/dotfiles/.vim
git submodule add https://github.com/vim-scripts/mru.vim.git mru.vim
UTMOSのインストール

# UTMOSのインストール
非公式実装ですが，pytorchで動かしやすそうなので...
https://github.com/fakerybakery/utmos

## Fairseqをgithubから持ってくる
```
uv add git+https://github.com/facebookresearch/fairseq@v0.10.2
```
## utmosをインストール
```
uv add utmos
```

## Fairseqのライブラリをいじる

- .venv/lib/pythonxx/fairseq/data/indexed_dataset.pyの101行目と306行目にあるnp.floatの部分をnp.float32に変更

- .venv/lib/pythonxx/fairseq/checkpoint_utils.pyの225行目に"weights_only=True"を追加


で多分動く
RubyKaigi 2025 セッションレポート(Day 2)

# はじめに
こんばんは anakano です（@AkihiroEngBd)
RubyKaigi 2025 が始まりました :tada: 

https://rubykaigi.org/2025/

楽しみに松山入りすると、AWSの大規模障害も発生したりと歓迎されている雰囲気しか感じておりません！
~~（障害発生時には飛行機に乗っていたとは口が裂けても言えない）~~

# Day2 の今回見たセッション一覧
以下のセッションを見てきたので、報告します

## Running Javascript within Ruby
https://rubykaigi.org/2025/presentations/hmsk



### 概要
ruby 上で、js のコードを実行できるようにするライブラリを開発した。
https://github.com/hmsk/quickjs.rb
実際のコードをライブコーディングしていただきながら、function にて ruby の機能が使えるということでした。
ruby の機能とミックスしたものが書けていた。（ruby のエラークラスを js にて使っていた）
まだまだメンテナンスの人もいないため、コミッターを募集しているとのこと。


### 感想
ruby にて js のコードが動くようにするのは、めちゃめちゃ面白かったです。
簡易的なものの動作はかなり早かったので、js のコードを ruby で再現することもできそうだと感じてます。
このまま上手く開発が進むと、js の旨みと ruby の旨みの二つをミックスしたコードになっていくかもと期待を持てたのは個人的に嬉しい。
~~（js に苦手意識を持っているため）~~

## Improvement of REXML and speed up using StringScanner
https://rubykaigi.org/2025/presentations/naitoh

REXML の高速化がテーマ。

https://naitoh.hatenablog.com/entry/2024/12/30/152106

### 概要
REXML を昨年のLT から高速化したというお話。
セキュリティパッチが当たったことで、遅くなったため高速化できる箇所を探して高速化をし切った。
特に正規表現を使っているところが、遅かったため高速化するためにも StringScanner を利用して高速化させきった。
かなりの高速化を実現することができたため、その苦労がメインで会話されていた。

### 感想
RubyKaigi の他の方の発表を聞いた上で、高速化させているのはかなり強い。
サンプルで早くなっただけではなく、セキュリティ対応にも対策を打ちながら高速化を目指すのは、使う側としてはとても助かる。
XML 自体は、結構使っている会社もあると思うので、今後の需要も増えていきそうなイメージを持った。

## RuboCop: Modularity and AST Insights
https://rubykaigi.org/2025/presentations/koic

### 概要
 inject からのモンキーパッチに対応された。
今まで色々な人が非公式なモンキーパッチを実施していたが、もう少し整理するためにもモンキーパッチを利用しなくても意図した動きになるように修正をかけた。
今後はメンテナンスコストも考えて、Prism を使っていくため、ruby 3.5 から rubocop の挙動が変わる可能性ありそう。

### 感想
rubocop のメンテナンスを今まで人手でやってきたのが本当に頭上がらない。
今後も上手く開発されていくのと、parser のサポートがまた増えてくる時代が来るのか廃れるのかを楽しみに見ていきたい。

## Speeding up Class#new
https://rubykaigi.org/2025/presentations/tenderlove

### 概要
ruby → c → ruby という順番でコールした時に、それぞれが早くてもトータルのコストを考えると、 ruby → ruby → ruby とコールした方が早いケースもあるという流れでした。
その後、ruby の中で時間のかかっているのが、 initialize で上手くキャッシュも効かなかったため、Primitive を実装して Class.new で initialize がコールされないクラスを作った、
これによって、さらに高速化している。

### 感想
本当に日本語がうますぎて、聞いていて感心できるレベルだった。
class.new をハックするという考えがなかったため、如何にして高速化させるのかというのが重要になってくる。
これももちろん重要な基礎技術で、自分たちの周りにハックできるものがたくさんありすぎるので、自分も落ち着いたら commit してみたい。

## Making TCPSocket.new "Happy"!
https://rubykaigi.org/2025/presentations/coe401_

### 概要
TCP socket をruby に実装してコミッターになるまでのストーリーと苦労話がメイン。
RubyKaigi の発表から、色々なコミュニティの人のサポートを得て改善していった。
その中でも直前までバグを修正に取り組まれつつ、必要なライブラリのマニュアルを読み込むことで挙動の整理をされていた。
無事リリースを迎えて必要な情報を今後も整理しつつ進めていきたいと今後のエンハンスも進んでいきそう。

https://github.com/ruby/ruby/pull/12434

### 感想
かなり多くの人に囲まれながら、修正が進んでいるので本当に ruby コミュニティの仲の良さが感じられる時間だった。
TCP あたりは今後もニーズがあると思うので、ちゃんとエンハンスが進んでいってほしいです。

## LT
※一部のみ記載しておりますので、全て記載できておらず申し訳ありません :bow: 
### pickRabbit 
picoRuby のラズパイで動かす取り組み。
ゲームも実装したり、線を動かすこともできる。

### Road To RubyKaigi 
https://rubygems.org/gems/road_to_rubykaigi

ruby にてゲームを作って、音も作っている。
ルビイストの俳句も面白く、ゲームを実際に会場でもみれる形になりとても面白かった。

### Parser 時代を振り返る
lrama を使ってparse.y をちゃんと読むための方法を考慮された。
ご自身で見えるようなツールを作られて、ちゃんと読めるので多くの人がわかりやすい状態になった。

### ruby on Play Station
実際にPS1 でちゃんと動くものまで作成されていたのがすごい。
「今後PSにruby を使う人が増えていくでしょう笑」と発表されていたので、ruby でゲームを書くのは今後も発表がありそう。


 ## 最後に
 明日もまたレポートを出そうと思っていますので、ぜひみていただけると助かります。
 どんどんイベントにも参加していきますので、ぜひ認知いただけると嬉しいです。
 rubykaigi は明日までですが、まだ終わっていないので楽しんでいきましょう
Claude Codeをお手元のWindowsマシンで使う方法

# Cloude Codeヤバすぎるらしい。
開幕そうそう語彙力低めですが、今のプロジェクトがちょっと私のような初心者には手が負えなくなってきたので初めてAIエージェントを導入しました。

軽く触ってみたのですが正直【異次元】だったので導入方法を（自分が躓いたところも含めてまとめます。

# １．StoreからUbuntuをインストール
公式ページではなく、Windows Storeからインストールする点に注意。
(1敗)
インストールが終わったら管理者アカウントの登録を済ませましょう。

# ２．プロジェクトファイルのセットアップ
まず、使いたいプロジェクトディレクトリをUbuntu環境に入れます。

```
cp -r /mnt/c/banei-ai-predictor ~/hogehoge
```
で、そのフォルダに移動
```
cd ~/banei-ai-predictor
```

で、このままnpm installするとWindowsのexeが呼び出されてしまいます。
(n敗)

# ３．yarnでCloude Codeをインストール
githubのレポジトリを漁っていたらyarnでインストールするとハッピーになれるらしい。詳しい理由は一回スルーします。

```
# 1. Yarnをインストール
npm install -g yarn

# 2. yarnでインストール実行（npmではなく！）
yarn add @anthropic-ai/claude-code
```

# ４．npx claude devで立ち上げて初期設定！
ここまで来たらもうゴールです。
```
npx claude dev
```
これでClaude Codeのコンソールを立ち上げましょう。
ビジュアル設定まで終われば完了です。
Anthoropicのアカウント認証のリンクが出てくるので忘れずに行いましょう。

# 使い方例
![スクリーンショット 2025-04-17 161605.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3564568/3577686e-ad34-419e-bff1-124ee82b3da6.png)

LLMツールだと難しい複数ディレクトリの検索とかも出来て沼にハマりそうです。

# おわりに
### いかがでしたか？
正直僕はGithub Copilotから乗り換えようかと思うくらい高性能で便利です。

使い込んで裏技を見つけてみようと思います。
Ubuntu 25.04 へのアップグレード

ノートパソコンにインストールされている Ubuntu 24.10 を Ubuntu 25.04 にアップグレードしました。

## 準備

```bash
sudo apt update
sudo apt upgrade
sudo apt autoremove --purge
sudo apt clean
```

## アップグレード

```bash
sudo do-release-upgrade -d
```

次のエラーが出て失敗しました。

```text
アップグレードを中断しました。アップグレードには '/' に空き領域が 9,567 M 必要です。
'/' の空き領域を少なくとも 5,744 M 確保してください。
'sudo apt clean' 
を使って、以前のインストールに利用した一時的なパッケージを削除し、ゴミ箱も空にしてください。
```

この時の / の残量

```text
/dev/nvme0n1p8  60754732 53796432   3799724  94% /
```

## 対策

大きいパッケージを削除しました。

```text
Mariadb
PostgreSQL
Mono
Jdk
R 言語
elixir
```

削除したら必ず次を実行しました。

```bash
sudo apt autoremove --purge
sudo apt clean
```

## 再度の挑戦

/ の残量

```text
$ df -BM /
Filesystem     1M-blocks   Used Available Use% Mounted on
/dev/nvme0n1p8    59331M 48053M     8194M  86% /
```

パッケージを減らすと、アップグレードに必要な容量も減るようなので、これで
トライ

```bash
sudo do-release-upgrade -d
```

成功して再起動

## OS のバージョン

```text
$ cat /etc/os-release 
PRETTY_NAME="Ubuntu 25.04"
NAME="Ubuntu"
VERSION_ID="25.04"
VERSION="25.04 (Plucky Puffin)"
VERSION_CODENAME=plucky
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=plucky
LOGO=ubuntu-logo
```

/ の残量

```text
$ df -BM /
Filesystem     1M-blocks   Used Available Use% Mounted on
/dev/nvme0n1p8    59331M 48879M     7368M  87% /
```
【初心者向け】Pythonの仮想環境どれを使えば良い？

# はじめに
Pythonで開発を行う際に仮想環境の構築は必須事項かと思います。
しかし、`venv`や`pipenv`、`Poetry`、`conda`など多数のツールが存在しており、一体どのツールを使えば良いのか？どんな違いがあるのか？という疑問を持たれるかもしれません。(そんな私も疑問に思っていました)
そこで今回は、Pythonの各ツールの違いと私がよく使っている仮想環境ツールを紹介します。

:::note alert
あくまで私個人の見解ですので、これが正しいという事はありません。
仮想環境選びの参考程度にお読みください。
:::
# どんな種類がある？
恐らくよく使われているだろう物を選定していきます。
### venv
Python3.3から標準装備なっているので、追加でインストールする必要がありません。
また、シンプルな作りなので初心者でも扱いやすいです。
### uv
軽量で手軽にバージョン切り替えができる。
`.venv`フォルダが残らないのでディレクトリを綺麗に保てます。
### conda
Anacondaを入れるとcondaコマンドもインストールされます。
Python以外の言語も環境管理が出来るそうです。
# 筆者は何使ってるの？
私は、`venv`を使用しています。
標準装備なのと、学習コストの低さで選びました。
とても初心者向けだと思いますので、`venv`から学び、慣れてきたら他の仮想環境ツールにも触れてみると言うのも良いのかもしれません
MVVMは万能？

## 1. 序文
MVVM（Model-View-ViewModel）を活用している開発者のみなさん、日々お疲れ様です！アプリケーションの設計や構造を整理するために、MVVMを取り入れている方も多いと思いますが、果たしてその万能性はどうでしょうか？今回はMVVMが得意とする分野、不得意な分野を見ていきましょう。

## 2. MVVMとは、そもそも？
MVVMは、特にWPFやXamarin、最近ではWebアプリケーションのフレームワークでも活用されている設計パターンです。基本的に、Model（データ）、View（UI）、そしてその間をつなぐViewModel（データ処理とUIの橋渡し）という3つの主要な部分で構成されます。これにより、UIとロジックを分離し、コードの可読性や保守性を高めることができます。

## 3. MVVMはベストプラクティスか？
MVVMは多くの開発者にとって「ベストプラクティス」とされています。特に、業務アプリやシンプルなCRUD操作が中心のアプリケーションでは、その効果を発揮しやすいです。しかし、MVVMが全てのアプリケーションに適しているわけではありません。実際には、データのバインディングやViewModelの管理において、ある程度の制約があります。

## 4. MVVMには得意/不得意がある
MVVMは万能ではなく、得意なアプリケーションと不得意なアプリケーションがあります。得意なアプリケーションでは、UIとロジックを分離することで保守性が高まり、開発がスムーズに進みます。一方で、大量のメディアを扱ったり、リアルタイムの描画が求められるアプリケーションでは、その効果が薄くなり、逆にパフォーマンス問題を引き起こすことがあります。

## 5. MVVMが得意な分野
- 業務アプリ（軽いデータ構造／CRUD中心）
- UIは主に一覧表示と詳細表示の切替。
- データベースがアプリケーションの中心で、データ処理が効率的に行える。
- バインド対象はテキスト、数値、チェックボックスなどのシンプルなデータタイプ。
- SQLを利用してバックエンド処理を最適化し、UIは反映のみ。

## 6. MVVMが得意ではない分野
- 大量の画像・動画・メディアを扱うUI
    - 画像や動画のバインディングが原因でパフォーマンスに影響が出る。
    - 仮想化が効いていないと、Viewの生成が重くなり、UIの表示が遅延する。
  
- 高頻度でリアルタイム更新されるUI
    - MVVMのレイヤー構造により、データ反映に遅延が発生し、UI更新が追いつかない。
  
- アニメーションや動的演出が多いゲーム系UI
    - Viewにアニメーションや動的演出を加えると、パフォーマンスが低下する。
    - ゲーム系UIのようなスムーズな描画にはMVVMが適さない。
  
- 描画最適化が命のアプリ（Unreal Engine／Unityなど）
    - Direct描画やフレームレート制御を優先するアプリでは、MVVMを使うことで描画処理が遅くなる。

## 7. まとめ
MVVMは、確かに多くの場面で役立つ強力な設計パターンですが、全てのアプリケーションに適しているわけではありません。その得意分野では、UIとロジックをきれいに分離し、コードの保守性や再利用性を高めることができ、開発が効率よく進むメリットがあります。一方で、リアルタイム更新や大量のメディア処理が求められるようなアプリケーションでは、パフォーマンスに問題を引き起こすことがあり、MVVMが必ずしも最適な選択肢ではないこともあります。

アプリケーションの目的や要求に合わせて、MVVMを使うべきかどうかを判断し、適切なアーキテクチャを選択することが重要です。例えば、軽量な業務アプリやデータ中心のアプリケーションではその効果を最大限に活かせますが、描画やリアルタイム処理が中心となるアプリでは別のアプローチを考えるべきでしょう。

最終的には、MVVMの得意・不得意を理解した上で、アプリケーションに最適な設計パターンを選ぶことが、開発の成功を左右する鍵となります。
[API] HTTPメソッドとCRUD

# まとめ
| 比較項目        | HTTPメソッド       | CRUD                 |
|----------------|--------------------|----------------------|
| 使用する場所     | Web通信 (APIなど)   | アプリ・DB設計全般    |
| 目的             | リクエストの種類を表す | データ処理の基本操作   |
|意味|Webでのデータ操作の方法|データ操作の概念|
| 対応する動作     | `GET`, `POST`, etc. | Create, Read, etc.  |

# 詳細
## HTTPメソッドとは
- **Web上でリソース（データ）に対してどのような操作をするか**を示す方法  
- Webの通信に使われる「HTTPプロトコル」で定義されているメソッドのこと

| HTTPメソッド | 説明 |
|--------------|------|
| `GET`        | データの取得 |
| `POST`       | 新しいデータの作成 |
| `PUT`        | データの更新（全体） |
| `PATCH`      | データの一部更新 |
| `DELETE`     | データの削除 |

## CRUDとは
- **データベース操作の基本的な4つの機能**を表す概念

| 項目 | 意味 | 操作内容 |
|------|------|----------|
| **C**reate | 作成 | データを新しく作る |
| **R**ead   | 読み取り | データを取得する |
| **U**pdate | 更新 | 既存データを変更する |
| **D**elete | 削除 | データを消す |


# HTTPメソッドとCRUDの対応関係
| CRUD      | HTTPメソッド  |
|-----------|----------------|
| Create    | `POST`         |
| Read      | `GET`          |
| Update    | `PUT` / `PATCH`|
| Delete    | `DELETE`       |

つまり：

- HTTPメソッド = Webでのデータ操作の**方法**
- CRUD = データ操作の**概念**

# 参考リンク
- [CRUDとHTTPメソッド - Zenn](https://zenn.dev/shimouta/articles/3732b585bb68c0)
- [CRUDとリクエスト - Zenn](https://zenn.dev/imael/scraps/4586bdc0da79c8)
- [CRUD (作成、読み取り、更新、削除) - Learn Microsoft](https://learn.microsoft.com/ja-jp/iis-administration/api/crud)
[MATLAB]ニューラル ネットワーク回帰モデルの学習

ニューラルネットワークを用いた回帰曲線の学習をMATLABで行いたい．
コマンド`fitrnet`の利用して行う．

https://jp.mathworks.com/help/releases/R2024b/stats/fitrnet.html

全結合レイヤーと活性化関数reluによるネットワークの構成のサンプルは次の通りである．
ただし，入力データを１次元，出力データを１次元としている．

コマンド`fitrnet`の利用した場合はネットワークの構成は変更できない．
カスタムなネットワーク構成はオブジェクト`dlnetwork`を利用する．

https://jp.mathworks.com/help/releases/R2024b/deeplearning/ref/dlnetwork.html?searchHighlight=dlnetwork&s_tid=doc_srchtitle

```sample_fitrnet_dim1.m
clc
close all
rng("default");

% 入力の次元
dim_in=1;
% 出力の次元
dim_out=1;
% 学習データの個数
num_train=640;
% 表示
Verbose=true;
% 学習中の損失グラフの表示ON/OFF
ProgressFigure=true;

%% 学習データの生成
x_train=4*rand(num_train,dim_in)-1;
y_train=func_dim1(x_train);
fig1=figure;
func_fig_data(fig1,x_train,y_train,'学習データ：y=f(x)');

%% 隠れ層の出力数
layer_sizes=[15 15 15];

%% 学習
model=fitrnet(x_train,y_train, ...
    "LayerSizes",layer_sizes, ...
    "Standardize",true,"Verbose",Verbose);

%% 学習途中のMSEの履歴
mse_train=loss(model,x_train,y_train);
if ProgressFigure
    fig2=figure;
    func_fig_semilogy(fig2,model.TrainingHistory.Iteration, ...
        model.TrainingHistory.TrainingLoss, ...
        '反復回数','損失MSE','学習中の損失MSEの履歴');
end

%% テストデータを予測で生成
x_test=(-1:0.01:3)';
y_pred=predict(model,x_test);
mse_test=loss(model,x_test,y_pred)
fig3=figure;
func_fig_data2(fig3,x_train,y_train,x_test,y_pred, ...
    '学習データと予測データの比較','学習データ','予測データ');

%% 真値との誤差
y_true=func_dim1(x_test);
error=sum((y_pred-y_true).^2)/num_train

%% =================== ローカル関数 ============================ %%

%% 学習データの生成用の関数
function y=func_dim1(x)
y=x.*(x-1).*(x-2);
end

function func_fig_data(fig,x,y,name)
figure(fig);
plot(x,y,'o');
grid on;
xlabel('x');
ylabel('y');
title(name);
drawnow;
end

function func_fig_data2(fig,x1,y1,x2,y2,name,l1,l2)
figure(fig);
plot(x1,y1,'o',x2,y2,'.');
grid on;
xlabel('x');
ylabel('y');
title(name);
legend(l1,l2);
drawnow;
end

function func_fig_semilogy(fig,x,y,lx,ly,name)
figure(fig);
semilogy(x,y);
grid on;
xlabel(lx);
ylabel(ly);
title(name);
drawnow;
end
```
【Excel VBAベーシック】StrConv関数

## StrConv関数
StrConv（ストリングコンバート）関数は、文字列を指定した文字種に変換する関数である。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/c23676ec-ad55-4c5e-94c1-952b1cabce63.png)
AutoCAD VBA 指定名のブロック定義の分解の許可の状態を設定する

# 指定名のブロック定義の分解の許可の状態を設定する

:::note info
```text
構文  : Call uSetBlockExplodability( aoDoc, aBlockName, aStatus )
引数1 : 図面             | aoDoc As AcadDocument
引数2 : ブロック定義名   | aBlockName As String
引数3 : 分解の許可の状態 | aStatus As Boolean
```
:::
```vb:AutoCAD VBA
Public Sub uSetBlockExplodability(ByVal aoDoc As AcadDocument _
                           , ByVal aBlockName As String _
                              , ByVal aStatus As Boolean)
  ' 指定名のブロック定義を取得
  Dim oBlock As AcadBlock
  Set oBlock = uFnGetBlockByName(aoDoc:=aoDoc, aBlockName:=aBlockName)
  
  ' 指定名のブロック定義がなかったら終了
  If oBlock Is Nothing Then Exit Sub
  
  ' 指定名のブロック定義の分解の許可を設定
  oBlock.Explodable = aStatus
  
  ' オブジェクト変数の解放
  Set oBlock = Nothing
End Sub
```

:::note info
uFnGetBlockByName() : 指定名のブロック定義を取得するFunction
については以下を確認してください
:::

https://qiita.com/sewege11/items/af8aa63b7e88ce97b273
imagemagick : convert / mogrify を使って画像一括縮小

ImageMagick。起動するとこのような画面が出てくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/b1843e1a-0ac7-40bd-ac0c-95500a3f0b3b.png)

しかしながら本来は ImageMagick はコマンドラインツール。今回は GUI/CUI それぞれで画像を縮小するやり方。

# 環境

- Ubuntu 24.04 LTS

# インストール


```
$ sudo apt install imagemagick
```

# GUI で操作

メニューから呼び出されるけれども、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/48c36a47-ae6b-4b78-b2f8-9cfc2ee31bcc.png)

コマンドラインだとなんと呼び出すコマンド名は「display」。

縮小は「View」-「Resize..」で行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d27625c7-29ec-4209-a8ac-e5831206861a.png)
「1024x1024」と入力して「Resize」すると長い辺が1024pixel に合わせて拡大縮小される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f4a8c2ca-a4a9-4c05-9fe5-804a3f9f0d3f.png)

# CUIで操作

しかしながら ImageMagick は本来CUIプログラム。
いくつかのコマンドが用意されていて、まずは convert コマンドで操作

## convert で画像縮小

以下のようにすると、同様に長い辺が長い辺が1024pixel に合わせて拡大縮小される。
```
$ convert -resize 1024x1024 IMG_20241006_145405.jpg IMG_20241006_145405_s.jpg

```
なお、画像縮小だけではなくて、品質や画像形式その他の作業も行えます。

## mogrify で一括縮小

convert では1つ画像ファイルに対して操作。
複数の画像ファイルを操作するには mogrify を使用する。

resized というフォルダを作っておいて、以下のようにするとresized に3つのファイルの縮小ファイルが作成される

```
$ mogrify -resize 1024x1024 -path resized IMG_20241006_145405.jpg IMG_20241006_145447.jpg IMG_20241006_145459.jpg 
```

ワイルドカードでも動作する
```
$ mogrify -resize 1024x1024 -path resized IMG_20241006_*.jpg
```

## mogrify でファイル上書き
-path を省略すると、元ファイルに上書きする。操作ミスに注意!

```
$ mogrify -resize 1024x1024 IMG_20241006_*.jpg 
```
【Zoom】謎の「WebView2 マネージャー」プロセスが居座る件とその対処法

久々にZoomインストールして起動したら、ふと気になるプロセスが。

## 1. Zoom起動直後に気づいた謎プロセス

Zoomを立ち上げたとき、タスクマネージャーにて発見したのがこちら👇

> **`WebView2 マネージャー`**

![Zoom_evbhcuDdnJ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3916302/148d82d1-ddd1-4c1a-af97-74a1018c3a90.png)

しかも、**しれっとCPUを使い続けている**…

Zoom自体はすぐ閉じたので特段PCが重くなることはなかったけど、Zoomの画面を閉じてもタスクマネージャーから消えるのは `Zoom Meetings` だけ。

「Zoom終わったはずなのにプロセス残ってんじゃん……」という違和感だけが残る。

---

## 2. よくある対処法、というか雑談

ググってみたところ：

- `WebView2 マネージャー` のプロセスはZoomが使ってる、らしい<br>
- Zoom終了後もプロセス残るけどなにか<br>
- 「強制終了していいのか？」みたいな議論がいろいろあった<br>

うーん、ちょっとすべて読むと消耗しそうだし、**そっとタブを閉じました**。

---

## 3. 自分なりの解決策（タスクトレイから終了）

要はZoomが裏で生きてるだけっぽいので、**タスクトレイのZoomアイコンを右クリックして終了する**だけでOKでした。

### 手順：

1. タスクバーの右下（通知領域）からZoomアイコンを見つけて右クリック  
　![explorer_rJXhX06QFx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3916302/dec55386-8001-4686-8a18-3815ff8d2233.png)

2. 「終了」をクリック  
　![oAZ5TaDQSm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3916302/0ae21b90-49de-4b43-b37e-8390052301ef.png)

---

## 4. おわりに

これで `WebView2 マネージャー` も含め、Zoom関連のプロセスがきれいさっぱり消えました。

地味に気持ち悪いプロセス残留、気になる方はお試しあれ。
AutoCAD VBA 指定名のブロック定義を取得するFunction

# 指定名のブロック定義を取得する

:::note info
```text
構文  : RetVal = uFnGetBlockByName( aoDoc, aBlockName )
引数1 : 図面          | aoDoc As AcadDocument
引数2 : ブロック定義名 | aBlockName As String
戻り値: ブロック定義   | RetVal As AcadBlock
注意  : 指定名のブロック定義が存在しなかった場合、Nothing を返す
```
:::

```vb:AutoCAD VBA
Public Function uFnGetBlockByName(ByVal aoDoc As AcadDocument _
                           , ByVal aBlockName As String) _
                                              As AcadBlock
  ' 指定名のブロック定義が存在しなかったらエラールーチンへ
  On Error GoTo EH

  ' 指定名のブロックを取得
  Set uFnGetBlockByName = aoDoc.Blocks.Item(aBlockName)

  ' 終了
  Exit Function

EH:
  ' エラーをクリア
  Err.Clear

  ' Nothing を格納
  Set uFnGetBlockByName = Nothing

  ' 警告を表示して終了
  Dim uPrompt     As String
  uPrompt = "'" & aBlockName & "' という名前のブロック定義はありません。"
  MsgBox Title:="AutoCAD VBA", Prompt:=uPrompt, Buttons:=vbExclamation

End Function
```
Oracle Cloud 　メモ5

Oracle Cloud Guardとは？


ChatGPT:
Oracle Cloud Guard（オラクル・クラウド・ガード）は、Oracle Cloud Infrastructure（OCI） 環境におけるセキュリティとコンプライアンスを監視・管理するためのサービスです。クラウドリソースを継続的に監視し、不審なアクティビティや設定ミス、セキュリティ上のリスクを自動的に検出し、必要に応じて対応アクションを取ることができます。

🔐 主な特徴
継続的な監視
　OCIのリソース（例：Compute、Object Storage、IAM、Networkingなど）をリアルタイムで監視。

セキュリティポリシーに基づく評価
　あらかじめ定義されたセキュリティルールに基づいて、構成ミスやリスクのある設定を検出。

検出と対応の自動化
　Cloud Guardは、検出（Detector）と対応（Responder）のコンセプトで構成されています：

Detector：リスクや脅威を見つける仕組み（例：公開設定されたバケットの検出）

Responder：問題が発見された際に自動で対応する仕組み（例：公開設定を自動で解除）

セキュリティスコア
　全体のセキュリティ状態をスコアで表示。リスクの高い部分が一目でわかる。



OCI クラウド・ガード・イベント　とは？

「OCI クラウド・ガード・イベント」とは、Oracle Cloud Guard（OCI Cloud Guard）がOCIリソースを監視する中で検出した「セキュリティ関連の事象や異常」を指す用語です。これらのイベントは、Cloud Guard の ディテクター（Detector） によって記録され、必要に応じて対応（Responder）を行うきっかけになります。

具体的なイベント例：
Object Storage バケットがパブリックに公開された

IAMポリシーにより過剰な権限が付与された
新しいAPIキーが追加された（不審なアクティビティ）
大量のログイン試行（ブルートフォース攻撃の疑い）
セキュリティリストに全開放されたポートがある


「OCI 顧客テナント（Customer Tenant）」
Oracle Cloud Infrastructure（OCI）においてお客様ごとに割り当てられる論理的なクラウド環境の単位です。OCIを使い始めると、最初に作成されるこの「テナント」は、企業や個人のクラウドリソースの管理・運用のベースとなるものです。


「コンパートメント（Compartment）」
Oracle Cloud Infrastructure（OCI） において、クラウド上のリソースを論理的に整理・管理するための「フォルダのような区分けの単位」です。プロジェクト、部門、用途別などにリソースをグループ化し、アクセス制御や請求管理を柔軟に行うことができます。


「Oracle Cloud Infrastructure Audit（OCI Audit）」は、
Oracle Cloud Infrastructure 上で行われたすべてのAPIリクエストや操作ログを記録・管理するためのサービスです。OCIのセキュリティとコンプライアンスを保つうえで、非常に重要な仕組みです。

「テナンシ管理（Tenancy Management）」
Oracle Cloud Infrastructure（OCI）において、お客様のクラウド環境（テナンシ / テナント）全体を管理するための活動や機能を指します。

「Oracle管理レシピ（Oracle Managed Recipes）」
Oracle Cloud Infrastructure（OCI）の Cloud Guard において提供されている、Oracleがあらかじめ設計・提供しているセキュリティ検出ルールや対応ルールのセットのことを指します。

Cloud Guard は「クラウドリソースのセキュリティ監視と自動対応」を行うサービスで、「レシピ」はその中核となる設定単位です。

「管理レシピ（Managed Recipe）」
Oracle Cloud Infrastructure（OCI）における Cloud Guard の機能の一部で、Oracleが提供する事前構成済みのセキュリティルールセットのことです。正式には「Oracle管理レシピ（Oracle Managed Recipe）」と呼ばれます。

Cloud Guard を使ってクラウドリソースを保護する際、「どのようなリスクを検出するか」「検出時にどう対処するか」を定義するのがレシピの役割です。



Oracle Access Governance Cloud Service（OAG）
Oracle Cloud Infrastructure（OCI）上に構築されたクラウドネイティブなIdentity Governance and Administration（IGA）ソリューションです。組織全体のクラウドおよびオンプレミス環境におけるアクセス権限の可視化と制御を提供し、ユーザープロビジョニング、アクセスレビュー、およびアイデンティティ分析を通じて、アクセス権限の定義と管理を支援します。


Oracle Cloud Infrastructure (OCI) Loggingは、
Oracleのクラウドサービスにおけるログ管理の機能です。このサービスは、アプリケーションやインフラストラクチャから生成されるログデータを収集、保存、分析するためのツールを提供します。


OCIのQualys Vulnerability Management
、Oracle Cloud Infrastructure（OCI）上で提供されるQualysの脆弱性管理ソリューションです。このサービスは、OCI環境内のリソースに対して脆弱性を特定し、評価、管理するための機能を提供します。主な特徴は以下の通りです：

統合された脆弱性スキャン: OCIのインフラストラクチャにデプロイされたリソース（コンピュートインスタンス、ストレージ、ネットワークなど）をスキャンし、既知の脆弱性を特定します。

リアルタイムの脆弱性評価: スキャン結果に基づいて、脆弱性のリスクを評価し、優先順位を付けることで、最も重要な脆弱性から対処することができます。

自動化された修正提案: 発見された脆弱性に対して、具体的な修正策や対策を自動的に提案し、迅速な対応を支援します。

レポートとダッシュボード: 脆弱性の状況を視覚的に表示するダッシュボードやレポートを提供し、経営層やセキュリティチームに対して現在のセキュリティ状況を効果的に伝えることができます。

継続的な監視と管理: 定期的なスキャンやリアルタイムの監視機能を通じて、環境の変化に応じた脆弱性の状況を常に把握し、迅速に対応することが可能です。

OCIのQualys Vulnerability Managementは、クラウド環境におけるセキュリティリスクを管理し、コンプライアンスを維持するための強力なツールであり、特に企業がクラウド移行を進める中で、その重要性が増しています。
Sagemakerデプロイ時Unsupported manifest media typeの解決法

## 背景

Amazon SageMakerでカスタムDockerイメージを使った際，「`Unsupported manifest media type`」というエラーが出ました．以下がエラーの全文になります．
```bash
Error: creating SageMaker model: operation error SageMaker: CreateModel,
https response error StatusCode: 400, RequestID: ***, api error ValidationException:
Unsupported manifest media type application/vnd.oci.image.manifest.v1+json for image
***.dkr.ecr.ap-northeast-1.amazonaws.com/***. Ensure that valid manifest media type
is used for specified image.
```

これは，SageMakerが古い **Docker V2 Schema 2** フォーマットを要求するのに対し，最近のDocker（特にDocker Desktop）が新しい **OCI (Open Container Initiative) Image Format** でイメージを作成・管理するためです．

## `DOCKER_BUILDKIT=0` でも解決しなかった

一般的な対策として `DOCKER_BUILDKIT=0` 環境変数を設定してビルドしても，**Docker Desktop 環境では解決しないケース** が報告されています．筆者はこのケースでした．

これは，Docker Desktopの **containerd統合** 機能が有効な場合，BuildKitを無効化しても最終的にOCIフォーマットになってしまうのではないかと考えています．

## 解決策 1：Docker Desktop の containerd 統合を無効にする

`DOCKER_BUILDKIT=0` が効かない場合の確実な方法は，Docker Desktopの設定で **containerd 統合を無効にする** ことです．

> 参考: [Docker Forums - Force image to use manifest media type docker v2 schema 2 instead of oci?](https://forums.docker.com/t/force-image-to-use-manifest-media-type-docker-v2-schema-2-instead-of-oci/144974/8) (jmenga Justin Menga 氏のコメント)

### 手順

1.  **Docker Desktop の設定を開く:**
    *   タスクトレイ/メニューバーのDockerアイコン → 「Settings」（設定）
2.  **「General」（一般）タブへ移動:**
3.  **チェックを外す:**
    *   「**Use containerd for pulling and storing images**」の **チェックボックスをオフ** にします．
4.  **適用して再起動:**
    *   「**Apply & Restart**」をクリックします．
![スクリーンショット 2025-04-17 15.53.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835446/87428a79-136b-4ba2-acd3-702a696f46e3.png)
*注: UIはバージョンにより異なります*
---

この設定変更後，再度イメージをビルドしてプッシュすれば，SageMakerのエラーは解消されるはずです．お試しください．

## 解決策 2：Docker のバージョンを下げる

もう一つの解決策はDocker をダウングレードすることです．Docker Forumのmeierpa 氏のコメントによると，この問題が発生したのはversion 27.1.2以降のDocker であるそうです．また，Docker Desktop version 4.31.0以前をインストールすることで解決したとの報告があります．こちらに関しては筆者は試していません．

> 参考: [Docker Forums - Force image to use manifest media type docker v2 schema 2 instead of oci?](https://forums.docker.com/t/force-image-to-use-manifest-media-type-docker-v2-schema-2-instead-of-oci/144974/8) (meierpa 氏のコメント)

## まとめ

以上，Amazon SageMakerでカスタムDockerイメージを使う際に Unsupported manifest media type エラーが出た際の解決策についてまとめさせていただきました．
間違いや指摘等ありましたらコメントの方よろしくお願いします．

### 参考にしたページ
- [Docker Forum "Force Image to Use Manifest Media Type Docker V2, schema 2 Instead of OCI Image Builds"](https://forums.docker.com/t/force-image-to-use-manifest-media-type-docker-v2-schema-2-instead-of-oci/144974/8)
- [AWS re:PostのQ&A "OCI format unsupported when creating a Sagemaker model"](https://repost.aws/questions/QUQgFRXiCYTjCtyxH_e2x9yg/oci-format-unsupported-when-creating-a-sagemaker-model)
dart/flutter で可変長引数を実現する

dart で可変長引数を実現するためのパッケージ(dynamic_function)を作成しました。

https://pub.dev/packages/dynamic_function

とりあえず、デモ用のソースを提示しておきます(dart-sdk-3.7.2 と dart-sdk-3.9.0-14.0.dev で動作を確認しました。また flutter web, flutter windows desktop でも動作しました(flutter-sdk-3.29.3))。

```pubspec..yaml
name: qiita
description: A sample command-line application
version: 0.0.1
publish_to: none

environment:
  sdk: ^3.7.2

dependencies:
  dynamic_function: ^2025.427.1341

dev_dependencies:
```

```dart:func_demo.dart
import 'package:dynamic_function/dynamic_function.dart';

final dynamic sum = DynamicFunction((
  List<dynamic> positional,
  Map<Symbol, dynamic> named
) {
  print('positional.length=${positional.length}');
  int result = 0;
  for (int i = 0; i < positional.length; i++) {
    result += positional[i] as int;
  }
  return result;
});

void main() {
  int answer = sum(11, 22, 33);
  print('answer=$answer');
}

/*
【実行結果】
positional.length=3
answer=66
 */
```

```dart:class_demo.dart
import 'package:dynamic_function/dynamic_function.dart';

class MyNumber {
  final int _num;

  MyNumber(this._num);

  late final dynamic addNumbers = DynamicFunction((
    List<dynamic> positional,
    Map<Symbol, dynamic> named
  ) {
    print('positional.length=${positional.length}');
    int result = _num;
    for (int i = 0; i < positional.length; i++) {
      result += positional[i] as int;
    }
    return result;
  });
}

void main() {
  final myNum = MyNumber(11);
  int answer = myNum.addNumbers(22, 33);
  print('answer=$answer');
}

/*
【実行結果】
positional.length=2
answer=66
 */
```
未経験のエンジニアとして

## なぜこのIT業界を目指したか
私自身以下のようなもことを思いプログラマーになることを目指しました。

- 正直プログラマーかっこいい！って思ったから
- PCさえあればモノ作りできるから
- ITの技術を使って他者貢献したいから

## 実際に就職して
私は未経験でプログラマー(バックエンド)として就職しました。
就職してからというのものの知らない事ばっかり、知らないことを知らない。

ある日から、私はワクワクが急に不安に変わっていったのも記憶しています。

就職した会社ではそもそもルールがない、ルールがないから自分で考えて、今自分がどんな立ち位置なのか、何を知らないのか、どんなことを学習していく必要があるのかなど、途方もないことを考えていく必要があり砂漠の中に放り投げられたような気分でした。
(今考えるとそのルールを決められない、作れないような会社が長続きするわけないじゃんとか思ったり。。)

せめて実装ルールとか作ったりしないのか？など問いかけても、自分で考えることをしなくなるからと一点張り。
当時からこんな会社に入って良かったのかと本当に不安しかなかったですね..

## たぶん知りたいことは・・
この記事を読んでくれる方々は、未経験で入って間もなかったり、不安な気持ちに駆られているそんな人が見てくれているのだろうと思います。
だからこそ、「正解」が知りたいって思うはずです。

だけど、私から一つだけ言えることは、
「ワクワクする気持ち」これだけは捨てないように、無くならないように楽しむ気持ちが一番大事かも知れません。

そのためにも、興味があることや気になったことはすぐ調べましょ！
そんなことを話したり、共有する人を見つけましょ！
いろんなことを試して触れていくことが最初のハードルを超えるにはいいかも！

「ドキュメント見ればわかるよ。」こんなこと言う先輩たちも中にいるでしょう。（いやきっとどこかにいる）

学習した後は、やってみて、はい終了〜！ではなくて、
「何がポイント？どういう仕組み？どんなことに気をつけないといけない？」など考えて、整理して学習するとかなり良いかもですね。

## 学習の仕方は人それぞれ
初学者のハードルとして、どう学習すれば良いのか？
そんなことを先に考え始めるのだろうと思います。
大量の情報の中からピンポイントにどんなことを？何の言語を学習すれば良いですか？って聞いている、考えているかもしれませんが答えは正直ありません。

なぜならば、<B>あなたが向かう分野(フロントエンジニア、バックエンドエンジニア、セキュリティエンジニア、システムエンジニア、インフラエンジニア)</B>によって異なるからです。
※様々な職種によってその会社によっても必要なスキルが変わってきます

それはiOSやAndroidのネイティブアプリかもしれません、
それはWebアプリかもしれません
言語もJAVA、GO、Python、PHP、C、C++など

## でも大事なことって
スキル以前に人と人との関わりだったりします。
だからこそ、不安にならず会社の先輩やメンターの方を頼りましょう。
会社が求めることって、スキルの前に<B>人</B>です。
たくさん会話しましょう！そうするといろんな情報を耳にするようになると思います。
知らないことが当たり前、聞かなきゃ損です。
一歩踏み出して、聞くのが仕事を始める最初のステップです。
着実に歩を進めることが近道です。

そして「アウトプット」これを心がけていろんな人に意見を求めてみてください。
そうすると沢山の知識を得られるきっかけになるはずです。
音声対話エージェントを作ろう① - 各SDKの比較-

## 音声対話エージェントとは?
ここではSpeach-to-Speachを実現するAIエージェントのことを音声対話エージェントとします。
これを実現する方法は主に2つあります。

1. OpenAI Realtime API
Speach-to-Speachで特に有名だと思います。この記事のシリーズではこのようなモデルにRAGやハンズオフ(Agentの引き継ぎ)などを持たせる方法などを順次紹介していきます。

1. Chain Model
speach -> (text) -> AI Agent -> (text) -> speach のように一度文字起こししてからAI Agentに処理させて再度音声に変換する方法をChain Modelと言います。こちらは実装は簡単なのですが、一般的に速度が遅いです。

## 各AI開発フレームワーク・SDKの特徴
音声対話エージェントを開発するために試してみた各フレームワーク/SDKの特徴と感想です。
(こちらは私の感想なので、あまり参考にしないでください。)
1. **Mastra**
    * nextjsとの相性が最高
    * まだ発展途上にある感じがする
    * プログラムも書きやすく、かなり意識せずに使えるようになっている
    * 大規模開発したいならこれ一択
    * 公式ドキュメントにはRealtime APIをサポートしていると書いてあるが、私の環境だと動作しなかった。おそらくバグ？
2. **OpenAI Agents SDK**
    * 実装が簡単なのでソースコードをおったらすぐ理解できる
    * 実装が簡単な分一番扱いやすい
    * OpenAIのLLMしか公式ではサポートがない
    * サンプルも十分とは言えない気がする
    * 機能の種類が他のものと比べると少ないが最低限欲しいものは全てある
    * 簡単なアプリケーションの作成に使えそう？
3. **Livekit Agent**
    * 音声を使ったAIアシスタント・エージェントを作成するならこれ一択
    * WebRTCを用いた高速な通信が可能でレスポンスがとてもはやい
    * 日本語での文献が少ない
    * 公式ドキュメントが比較的わかりやすい(?)

このシリーズではLivekit Agentを使った音声対話エージェントをメインに扱います。
他にもGoogleのADKやvercelのAI SDKなどもあると思うのですが、まだ試していません。ADKはGeminiの音声モデルが扱いやすいと思うのでGeminiを使う場合はこちらでやる方が良いかもしれません。
【備忘録】Processing 4.4 ~ が VSCodeでうまく実行できなかった

## はじめに
`Processing`を初めて触ってみて、最初にこう思いました。
「コードエディター使いにくっ！」

というのも、私はプログラミングが全くの初心者というわけではなく、VSCodeを使ってプログラミングを書いたりなんてことをしていたので、Processingを触ったときは違和感が凄かったです。

私はすぐにインターネットで、ProcessingはVSCodeで実行できないのか？と検索し始めました。(何かしらの方法で、エディターをもっと使いやすくできるのかもしれませんが...。)

## Processing を VSCode で実行する
調べてみると、どうやらVSCodeで実行するのは可能らしい。
仕組みについては私も初心者でよくわかっていませんが、`tasks.json`というものを使うっぽい。

色々記事を調べていて、どの記事にも共通して「Processingをインストールして、.zipなので展開・解凍」するなんて書かれていました。
私は「.zipじゃなかった気がする...」なんて思っていましたが、まあこれは置いておきす。

### processing-java.exe が無い！
次に、processing.exeがある階層に「processing-java.exe」があるから、そのファイルパスを`tasks.json`に記述してくれとありました。

が、実際に `C:\Program Files\Processing\`を見てみると、`processing.exe`と`processing.ico`というファイルしかありません。

でもわからないので、とりあえず記事を参考にその通り記述してみました。
案の定、processing-java.exeが見つからないとエラーが出力されます。

#### Processing 4.4 からインストーラーになったらしい
色々と調べてみると、どうやらProcessingは 4.4からインストーラーを使うようになったらしいです。だから、.zipを展開・解凍なんてこともしていなかったんですね。

それによって、processing-java.exeもなくなってしまったらしいです。

### 解決方法
最新のProcessingでは VSCodeによる実行がうまくいかなかったので、私はそれ以前の少し古いバージョンのものをダウンロードして使うことにしました。
processing-java.exe がある最新のものは `Processing 4.3.4`だったので、これを使ってみると、実行環境の変更 (?) がうまくいきました。

実際に書いた tasks.json はこちらです。
```json:tasks.json
{
    "version": "2.0.0",
    "presentation": {
      "reveal": "always",
      "panel": "new"
    },
    "tasks": [
      {
        "label": "Run Processing Sketch",
        "command": "C:\\Program Files\\processing-4.3.4\\processing-java.exe",
        "type": "process",
        "args": ["--force", "--sketch=${fileDirname}", "--run"],
        "problemMatcher": [],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
}
```

## さいごに
初めての記事の投稿ですが、私が行き詰ったものをなんとなく書いてみました。
私は特にプロのエンジニアというわけでもないので、記事内で間違っている箇所が多々あるかもしれません。その際は、コメントなどで教えてくださると幸いです。
また、最新のProcessingをVSCodeで実行するにはどうすれば良いか、知っている方がいたらこれも教えてくださると助かります。

#### 参考にした記事
- [VSCodeにおけるProcessingの開発環境](https://qiita.com/skm_bnn/items/4aecfe3f38f42cba6f22)
- [ProcessingをVisual Studio Codeで動かしたい](https://qiita.com/jacynthe/items/d31eaa77496295c10556)
- [【Processing】初心者がProcessingをVisual Studio Codeで動かす](https://note.com/ogatasora/n/nc0e4111319e0)
このブログと著者について

この記事では、本ブログと著者について取り上げます。

### このブログについて
本ブログでは、主にITインフラストラクチャに関連する技術について取り扱います。
具体的な技術領域は次の予定です。
- ハイパーバイザーを伴う仮想化テクノロジー
- Kubernetesやコンテナに関連する技術情報
- 物理サーバー、ストレージ、ネットワーク製品に関連する技術情報

また、特定ベンダーの製品としては次の製品に関連する情報も掲載する予定です。
- Red Hat Enterprise Linux
- Red Hat OpenShift
- Red Hat Ansible Automation Platform

また、技術情報以外にも次のようなネタも掲載します。
- ITエンジニアのキャリアアップに関する考え方
- 外資系IT企業における英語との付き合い方

### 著者について
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680306/8b48471b-a5f0-46db-9df7-67ccf5263b5f.png)

2009年に新卒としてIT業界に入り、外資系IT企業においてテクニカルサポートやラーニングサービスでのキャリアを歩んでいます。

本記事掲載時点(2025年4月)では、Red Hat株式会社 グローバルラーニングサービス シニアインストラクターとして日々お客様に向けた技術トレーニングの提供を行っています。

キャリア詳細やスキルセットについては以下のリンクを参照ください。
- [坂井 大和 - Linkedin](https://www.linkedin.com/in/yamato-sakai/?locale=ja_JP)
- [Sakai, Yamato - Credly (認定資格取得一覧)](https://www.credly.com/users/yamato-sakai)

### メディアや書籍執筆などのアウトプット履歴
- [市場が求める技術を身につける：コンテナエンジニア育成と新ビジネスの可能性](https://www.wantedly.com/companies/company_876213/post_articles/957331)
- [Webセミナー　市場が求める技術を身につける：コンテナエンジニア育成と新ビジネスの可能性](https://www.redhat.com/ja/events/webinar/acquiring-the-technology)
- [徹底攻略VCP-DCV教科書 VMware vSphere7対応 徹底攻略シリーズ](https://book.impress.co.jp/books/1120101118)