OmniAICreator/Qiita-1.07M huggingface dataset:
Simulinkで簡単、制御盤の設計！

# はじめに
MATLAB/Simulink Advent Calendar 2023 21日目の記事になります。前日は、@shinji00qさんから非常に役立つfrdについてご紹介いただきました。こちらは不真面目なネタ記事です。

皆様ご存知の通り、MATLAB/Simulinkは制御系を設計することがメインのツールです。そんなSimulinkを今回は、制御盤設計に使いましたのでその方法を紹介いたします。
筆者は[CoRE](https://core.scramble-robot.org)という社会人/学生を問わず参加できるロボコンにチームTKGの一員として参加しますので、その制御盤を設計した例を画像として都度掲載します。

# 設計手順
## 制御機器をブロック化する
必要な制御機器類を全部ブロックにします。
最初は入出力を考えず、要素を全部書き出します。
盤外のアクチュエータもブロック化しておくことで、盤の入出力を容易に把握できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203155/1cf9962b-6830-4279-2ecb-7dc67261bb1a.png)

## 購買品の仕様を設定する
説明書や仕様書に沿って、入出力を定義しましょう。
設計上のメモなどあればブロック内に記載するか、画像を張り付けます。

例えば1ステップ前に記載したモータドライバMD30Cであれば、下図の真ん中のように入出力を設定します。実際にブロック内は図の右側のようにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203155/f8519df3-4743-1013-6b9f-84dfa5352830.png)

## 自作品の設計
自作品の仕様を設計していきます。
前工程で購買品の入出力仕様が決まっていますので、それに応じてIOを決めることができます。コネクタ形式や、詳細設計上の注意点も記入しておくと機器間での不整合を予防できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203155/24fcf117-a4f7-c86d-b1ff-7ac25df431a9.png)

## ブロック間をつなぐ
前工程までで、各機器が出そろったので、要素間をつないでいきます。
実際の配線とブロック図上での配線をそろえることで、そのまま実態配線図が出来上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203155/f92f5f13-1c23-e881-65af-259fb3779990.png)

## いい感じに調整する
ここまで来て、ブロック全体を見返してみると、配線の本数が予想以上に多かったり、制御盤のサイズが大きくなりそうだったりと、課題が見えてきます。それに応じて、入出力を修正したり、複数の配線を１本にするよう設計を変更したりと、修正します。

## 完成
最終的に全部繋げた例が下図の通りです。実際の制御盤は中央の色付きのブロックで囲った部分で、それ以外はアクチュエータ等になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203155/4fe5aac5-8e64-965a-64ca-75bcbcc8e469.png)


# 終わりに
Simulinkはブロックのインターフェースを容易に作ることができる上、ブロック内に画像や文字を簡単に入れ込めるので、簡易の仕様を記載することもできます。今回初めてSimulinkで制御盤を設計してみましたが、構想設計→外部仕様設計→詳細設計をシームレスにつなげることができ、非常に便利でした。
【PHP / Laravel】現在のパスワードと一致するか確認するバリデーション

株式会社やどかりの平山です。
パスワード変更画面での実装について書かせていただきます。

<br>
〜やりたいこと〜<br>
【現在のパスワード】が正しいものか検証し、
正しくなければバリデーションメッセージを表示したい

![552c3a971ec10167a0b72e35b2eace93.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657995/f18718e5-54fc-e5f3-a4a3-5bac9d215325.png)

<br>
<br>
①ターミナルに下記を入力

```php:ターミナル
php artisan make::rule CurrentPasswordRule
```

② ①で作成したCurrentPasswordRule.phpに必要事項を記述
（パスワードはセキュリティのためHash化しています）
```php:CurrentPasswordRule.php
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;

class CurrentPasswordRule implements Rule
{
    public function passes($attribute, $value)
    {
        // ユーザーがログインしているかを確認
        if (Auth::check()) {
            // ユーザーの現在のパスワードを取得
            $currentPassword = Auth::user()->password;

            // 入力されたパスワードが現在のパスワードと一致するかどうかを確認
            return Hash::check($value, $currentPassword);
        }

        return false;
    }

    public function message()
    {
        return '現在のパスワードが正しくありません。';
    }
}
```

③エラーメッセージを表示したい箇所（bladeファイル内）に記述
```php:password_change.blade.php
//見出し部分
<th>{!! Form::label('currentPassword', '現在のパスワード') !!}</th>
<td>
    //フォーム部分
    {!! Form::password('currentPassword', ['id' => 'currentPassword', 'class' => 'col-12 form-control border', 'placeholder' => '現在のパスワードを入力してください']) !!}
    //エラーメッセージ部分
    @error('currentPassword')
        <div class="text-danger">
            {{ $message }}
        </div>
    @enderror
</td>
```

④Controllerに記述
```php:SettingController.php
use App\Rules\CurrentPasswordRule;

public function passwordChange(Request $request)
{
    $request->validate([
        'currentPassword' => ['required', new CurrentPasswordRule],
        // 他のバリデーションルールを追加
    ]);

    // パスワードを更新する処理などを記述
}
```

⑤routeを設定
```php:web.php
Route::post('setting/password_change', [SettingController::class, 'passwordChange'])->name('setting.change_password.update');
```
Software Design 2024年1月号感想

# はじめに

[Software Design Advent Calendar 2023](https://qiita.com/advent-calendar/2023/softwaredesign) 24日目の記事です。メリークリスマス！
Software Design 2024年1月号を読んで気になったキーワードや所感を記載していきます。

# 第1特集［目的別］Visual Studio Code 教えて！ お勧めカスタマイズ ワンランク上を目指すための拡張機能＆テクニック

こんな特集のタイトルぜったい読むわ。
Github Copilotはサジェストしてくれるコードを使うぐらいでチャットとか使ってなかった。
知らない機能ばかりでメモ帳レベルでしか使いこなせてないことを思い知った。
この記事片手にいろいろ試してみよう。
Visual Studio Code実践ガイドの改訂版が2024年初頭にでるらしい。

# 第2特集 定番DBをキャッチアップ！PostgreSQL 16速習

PostgreSQL好きだけど10の知識で止まっているので気になる記事。
地理データとしてPOINTやPOLYGONっていう型があるんだ。面白い。
はいきた、大好きストリーミングレプリケーション。論理レプリで特定のテーブルだけレプリできるのか。宛先テーブルでSELECTだけじゃなくてINSERT/UPDATE/DELETEできるってまじかよ。双方向レプリすげえ。
新機能の紹介盛りだくさん。VACUUMも改善している。より使いやすくなったのかな。応援したい。

# 一般記事、広告記事、連載

気になる記事からいくつか抜粋

## 平林万能IT技術研究所 2ndシーズン【20】美しく姿を変える「ホログラム菓子」を作る――台所は工場，調理は製造，砂糖で作る光学レンズ素子

ホログラム氷砂糖なんて初めて見た笑
毎回すごいな。　

## エンジニアのためのやる気UPエクササイズ【17】仕事のパフォーマンスを上げる呼吸法

腹式呼吸をすべきタイミング

- 起床時
- ストレスが高まる時間帯
- 就寝前

## 【新連載】ぼくらの「開発者体験」改善クエスト【1】プロダクト開発組織が目指すべき「開発者体験」とは

開発者の生産性を高めるためのアプローチとして「開発者体験」が注目されるようになった。
SPACEやDevExというフレームワークがある。
[DX Criteria](https://dxcriteria.cto-a.org/07be1dbf832f49eb9720448be01e3c42)を試してみる。

## 【最終回】Stable Diffusionで学ぶ画像生成AIのしくみ【8】Stable Diffusionの進化

最終回を惜しむ。SDXLで文字の表現までできるようになってきている。進歩のスピードがすごい。

## 実践LLMアプリケーション開発【4】LangChainで開発する初めてのAIエージェント（前編）

盛り上がったOpenAI DevDAYの紹介から始まる。AIエージェントの図と説明が最高にわかりやすい。
エージェントというキーワードは聞いてたけどいまいちピンと来ていなかったので理解できた。
12/16に発売される書籍の紹介：[その仕事、AIエージェントがやっておきました。――ChatGPTの次に来る自律型AI革命](https://prtimes.jp/main/html/rd/p/000000001.000134144.html)

## 【最終回】Google Cloudを軸に実践するSREプラクティス【10】Cloudflareの基本と運用のポイント

悲しくも最終回。Cloudflareの各種サービスの説明がとてもわかりやすかった。
費用が安いことがCloudflareのよいところ。これからも注目していきたい。

# 全体的な感想

記事ごとに違うテーマながらもどの記事も興味深い。特集のVSCodeの拡張機能は、あとで必ず試そうと思えた。もうひとつのPostgreSQL特集は読んでて一番テンションが上がった。ストリーミングレプリケーションを実装した苦労を思い出しつつ、新機能の紹介を読んで進化のすごさを垣間見た。
気になるものばかりで、試す時間がいくつあっても足りない笑
開発環境をThinkPadにして変わったこと 

# はじめに
はじめまして。えか太郎という人です。本日はこれまでデスクトップパソコンでプログラミングしてましたがThinkPadにしてわかったことを書いていきます。もうThinkPad以外のWindowsノートは使えないかもしれません。

# 具体的な効果
## 私の環境
* ThinkPad 13 Gen2
* CPU：Celeron
* RAM：12GB
* ROM：120GB
* FullHDのIPS液晶
* Windows10 Pro

ヤフオクで6000円で購入しました。格安だと私は思ってます。

## メリット
### 特徴的なトラックポイント
タッチパットorマウスに手を動かす手間がいらなくなるのが画期的です。一度使うと離れれられないと聞いてはいましたが想像以上でした。
### 打ちやすいキーボード
程よい押し心地としか形容できません。タンタンターンとタイピングが止まりません。ファンクションキーがどれがどれなのかわかりやすく、また、打鍵音が静かなのもグッドだドン。
### ベッドの上でも使える（ThinkPadに限らず）
### カスタマイズ性の高さ
ノート用DDR4のメモリスロットが2本あってデュアルチャネルで増設ができます。さらに、公式が分解手順を詳しく書いており、Aliexpressなどで格安で交換用に部品を買うことができます。
### 入出力系統が優秀
type-cだけでなくtype-Aも3個、フルサイズのHDMIにSDカードスロットとヘッドフォンの穴が付いているのが非常に高評価！
## デメリット
特になし！強いて言うならストレージが一個しか使えない。デュアルブートにしたい場合、できればドライブは分けておきたい。

# おわりに
Celeronではない高性能なThinkPadに早く買い替えたいですね。
#### 追記
トラックポイントの操作も意外とすぐに使いこなせるようになった話を書いた記事もあります（宣伝）。駄文なので見ないでください。

https://qiita.com/EkaTaro3/items/9d3676a79885456ce634
ThinkPadのトラックポイントになれるのにかかる時間

# はじめに
こんにちは。えか太郎と申します。本記事ではThinkPad初心者のわたしがトラックポイントを使いこなせるようになるのにどれくらいかかったかを話したいと思います。
# 結論 
一日5時間位はパソコンで作業をするのですが、
一週間とかからずに使えるようになりました。正確には多少エイムは悪いです。8割くらいは狙ったところにカーソルを乗せることができるように。2割はもう一度チャレンジ。
## 練習方法は？
とくにありません。一日5時間くらい。Qiitaの記事を書いて、ちょこっとプログラム組んだくらいです。日常的な用途をしているとそのうち慣れて来て呼吸をするように無意識に操作できるようになります。
# おわりに
ThinkPadのトラックポイントへハードルを感じている人のハードルを下げることができたら嬉しいです。
家電量販店でThinkPadを触ったときはなかなか難しいと感じましたが今では便利すぎてやめられなくなってます。
Shopifyで新着商品を表示させる（デザインカスタマイズ）

ECプラットフォーム「Shopify」において、自由なデザインで新着商品を表示させるためのコードをご紹介します。

<h2>全商品を抽出するためのコレクションを作る</h2>
※コレクション名は「all」など

![coll.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322744/ab51f614-f310-6b60-81c0-b42f9fae70b7.jpeg)


<h2>コードを編集する</h2>

オンラインストア＞テーマ＞コード編集 からコードを編集する。
<ul><li>コレクション名：all</li>
<li>表示件数：10件</li>
<li>表示する情報：商品名・料金・画像・商品へのリンク</li></ul>

```
{% assign collection = collections['all'] %}
{% for product in collection.products limit:10 %}
<div>
<a href="{{ product.url }}">
{% if product.featured_image == nil %}
<img src="noimg.jpg">
{% else %}
<img src="{{ product.featured_image | img_url:'300x' }}">
{% endif %}
</a>
<p>{{ product.title }}</p><span>{{ product.price | money }}</span>
</div>
{% endfor %}
```

※2023年12月22日現在の仕様です。
Livebook からシェルコマンドを実行する

## はじめに

Python の Jupyter　だと `!` を行頭につけることでシェルコマンドが実行できます

これにより、 Jupyter の中で `apt-get` や `git clone` などが実行でき、 Python だけでは完結できない部分に手を出すことができます

同様に、 Elixir の Livebook からも簡単にシェルコマンドを実行することが可能です

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

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

## セットアップ

```elixir
Mix.install([
  {:kino_shell, "~> 0.1.0"}
])
```

KinoShell をインストールします

https://github.com/thmsmlr/kino_shell

## スマートセルからのシェルコマンド実行

KinoShell をインストールした状態だと Shell Script のスマートセルが使えます

![スクリーンショット 2023-12-21 21.26.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/1c462136-3890-ecde-0a0b-ac11ddcc1e1a.png)

Shell Script のスマートセルを追加すると、以下のような表示になります

![スクリーンショット 2023-12-21 21.27.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/99451b24-e1bb-b22a-fc41-cc3456521888.png)

デフォルトでは `echo "Hello world"` が入力されています

このまま左上の Evaluate を実行すると、シェルコマンドの実行結果が表示されます

![スクリーンショット 2023-12-21 21.28.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/2a7e71ed-8c53-0ad9-a90d-cffa30eaac27.png)

例えばホームディレクトリーにある `livemd` ファイルを検索してみましょう

コマンドは `cd && ls -l | grep 'livemd'` です

![スクリーンショット 2023-12-21 21.33.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f79bb2f0-2eed-ea84-2501-d64a9ace806c.png)

見事に実行できました

例えば以下のように実行することで OS にパッケージを追加することも可能です

```bash
apt install -y postgresql-client
```

## まとめ

KinoShell を使うことで、スマートセルから簡単にシェルコマンドが実行できました

ノートブック中に Elixir モジュール以外のインストールを行いたいときは往々にしてあるので、簡単にシェルコマンドが実行できるのは良いですね
SVGとReactで可変サイズのフキダシ

この記事は [グラフィックス全般 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/graphics) 21日目の記事です。

# 可変サイズにしてみた

[旋回](https://qiita.com/warotarock/items/80fd6921d9b1f793637b)の続きで、SVGのフキダシをのサイズを可変にしてみました。

<p class="codepen" data-height="400" data-default-tab="result" data-slug-hash="ExrzeWG" data-user="warotarock" style="height: 400px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/warotarock/pen/ExrzeWG">
  アドベントカレンダー２０２３「SVGとReactで可変サイズのフキダシ」</a> by 柏崎ワロタロ (<a href="https://codepen.io/warotarock">@warotarock</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

やっていることは簡単で、インラインSVGのpathをテキストのdivに合わせサイズを調整して生成しています。

divのサイズはgetBoundingClientRectで取得しています。この関数で返ってくるサイズは単位がpxなのでSVG内でそのまま使うことができました。px以外の単位を使う場合はちょっと大変になるかもしれません。

# まとめ

SVGでできることは多いですが、パスとテキストだけでも相当に使いでがあります。オススメです。
ROKSでvGPUサポート付きワーカー・ノードを使用できます

Red Hat OpenShift on IBM Cloud (ROKS) では、ワーカー・ノードに vGPUサポート付きのフレーバーを使用することができます。

以下のリリース情報には、`使用可能なワーカー・ノード・フレーバーについて詳しくは、 VPC 第 2 世代フレーバー を参照してください。`と書かれていますが、2023年12月現在、vGPUサポート付きのフレーバーは[VPC フレーバー](https://cloud.ibm.com/docs/openshift?topic=openshift-vpc-flavors)にリストされていません。vGPUサポート付きのフレーバーを使用（表示も含め）するには、アカウントが許可リストに登録されている必要があります。


[2022年9月13日のリリース情報](https://cloud.ibm.com/docs/openshift?topic=openshift-openshift-relnotes&locale=ja#openshift-sep1322)抜粋：
> **New! vGPU ワーカー・ノード・フレーバーが VPC 第 2 世代で使用可能になりました。**
    使用可能なワーカー・ノード・フレーバーについて詳しくは、 VPC 第 2 世代フレーバー を参照してください。 vGPU サポート付きのワーカー・ノード・フレーバーは、 `gx2` フレーバー・クラスです (例: `gx2.16x128.2v100`)。 IBM Cloud VPC GPU 付きのワーカー・ノードは、許可リストに登録されたアカウントでのみ使用可能です。 アカウントの許可リスト登録を要求するには、 許可リストに登録されている機能へのアクセスの要求 を参照してください。 必ず、データ・センター、VPC インフラストラクチャー・プロファイル、および使用したいワーカーの数を含めてください。 例えば、 `12 worker nodes in us-east-1 of VPC profile gx2-16x128xv100` などです。


[VPC フレーバー](https://cloud.ibm.com/docs/openshift?topic=openshift-vpc-flavors)ページに以下のヒントが書いてあります。
![roks_flavor_hint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/540e5fa2-0c33-4f2e-186a-4afec3a8b556.png)

## 許可リストに登録されていない状態

許可リストに登録されていない場合（デフォルトの状態）は、フレーバーの選択画面で`GPU`にチェックすると、何も表示されません。
![roks_worker_flavor_original.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/dbcd8fa8-0692-fb2f-d364-b735b9d3b84c.png)

## 許可リストに登録されている機能へのアクセスの要求


[許可リストに登録されている機能へのアクセスの要求](https://cloud.ibm.com/docs/openshift?topic=openshift-get-help#allowlist-access-request)の手順にしたがってチケットを起票します。

許可リストに登録されている機能へのアクセスの要求

1.   チケットを作成します。
2.  「カテゴリー」 タブで、 「アカウント」 を選択します。
3.  「トピック」 タブで、 「その他」 サブトピックを選択し、「次へ」をクリックします。
4.  「詳細」 タブの 「件名」 フィールドに Allowlist request for <FEATURE> for account <ACCOUNTID> と入力し、フィーチャー名とアカウント ID を含めます。
5.  「説明」 フィールドに、アクセスする機能の詳細を入力します。
6.  「次へ」 をクリックして、選択したチケットを確認します。
7.  「Case の送信」をクリックします。
8.   サポートがチケットを処理した後、アカウントが更新されたことを示す通知を受け取ります。

## 許可リストに登録された状態
リクエストが承認され、許可リストにアカウントが登録されると、リクエストしたvGPUサポート付きのフレーバーが表示されるようになります。
＊ NVIDIA V100 GPUの許可リストに登録された場合の例です。
![roks_worker_flavor_allowlisted.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2164968/63337241-0ad3-92d6-f51f-947fb70b34bc.png)
SwitchBot防水温湿度計のデータをNode-REDで取得する

# はじめに
登山用の温湿度計を探していて『電池式はめんどくさそうだなぁ』と思ってたのですが、SwitchBotさんの防水温湿度計が安くてうっかり手を出してしまいました。
環境センサーなのでBLEビーコンでも飛ばしてるだろうと思って、Node-REDからパケットを覗いてみたら、温湿度データも入ってるようだったので自宅の外気温用にもう一つ追加で購入しました。(1980円なんて、破格だよ！)

環境センサーのデータはNode-REDで収集してElasticsearchクラスタへ投入しているので、早速収集開始しました。

# 前提環境
- Node-RED v3.0.2
  + node-red-contrib-blebeacon-scanner 1.0.1 (https://flows.nodered.org/node/node-red-contrib-blebeacon-scanner)
- Elasticsearch v8.11.1

# SwitchBot 防水温湿度計のMACアドレス確認
アプリの右上の歯車アイコンをタップします。
![Screenshot_20231221-195853.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/a848ea52-1bd5-4d0d-16a3-c1ededbc0264.png)

下にある「デバイス情報」をタップします。
![Screenshot_20231221-195910.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/70363b96-1a10-d5b9-59a7-f3d10d4d0f76.png)

MACアドレスが確認できます。
![Screenshot_20231221-195915.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/055a1667-eb72-711f-30af-0c38d21051ce.png)

# Node-REDフロー作成
以下のようにフローを繋げました。
![Node-RED _ 192.168.1.9 - Google Chrome 2023_12_21 20_34_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/fdeb52e4-b980-cef5-8915-e34944230979.png)

- BLE Beacon Scanner：そのまま配置します。
- switch : payload.idが、防水温湿度計のMACアドレスなら処理を継続させます。
![Node-RED _ 192.168.1.9 - Google Chrome 2023_12_21 20_41_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/65687ccd-f942-5873-d309-ac8930b2c75a.png)
- delay : メッセージの流量制限で。防水温湿度計からのビーコンを30秒に1回だけ受信するようにします。
![Node-RED _ 192.168.1.9 - Google Chrome 2023_12_21 20_45_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/dad32553-088a-b157-e628-fa7248c23dba.png)
- function(外湿度抽出) : 以下のようなコードでmsg.dataに湿度値を抽出します。
![Node-RED _ 192.168.1.9 - Google Chrome 2023_12_21 20_48_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/aaff47c7-6cb9-b64f-13bf-a6d4b60413cb.png)
- function(外温度抽出) : 以下のようなコードでmsg.dataに温度値を抽出します。
![Node-RED _ 192.168.1.9 - Google Chrome 2023_12_21 20_49_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/cdb106a0-5349-65fe-e0d5-baa5ccb96c69.png)
- change : ElasticsearchへPOSTするための変数を設定します。URLを正規表現の置換で連結させてます。
![Node-RED _ 192.168.1.9 - Google Chrome 2023_12_21 20_54_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/b0d67fd3-e516-4403-653b-a8b23113f27f.png)
- template : ElasticsearchへPOSTするデータ(JSON)を生成します。
![Node-RED _ 192.168.1.9 - Google Chrome 2023_12_21 20_57_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410957/cd7e1e55-22d8-e777-af25-84b75ccb7f2b.png)
- Elasticsearch : http通信するサブフローです。

# Kibanaで可視化
既に屋内は監視しているので、ほぼコピーであっさり可視化しました。またCanvas使いたくなってきた。

https://x.com/ShikaseY/status/1737615592042144252?s=20

# おわりに
家の外の温度と湿度が室内から監視できるのは良いですね。しかも安くてビーコンの値がそのまま使えます。

（しかし、百葉箱のようなものに入れておかないと流石に年単位の長期間の放置は不安ですね。夏は暑さで壊れそうな気もしますし。）
JupyterNotebookでコード補完させる方法【データ分析】

こちらの本を読みながらjupyter notebookと戯れているのですが、コード補完してほしいなと思い設定しようと思ったのですが、、、




jupyter labを入れればOKです。

jupyter notebookのサーバを落として、分析してるプロジェクトの中で、

```
pip install jupyterlab
jupyter lab
```

でnotebookと同じように起動します。
notebookで作成していたファイルもそのまま編集できるのでこれで十分です。

これでコード書きながら、tabを押せば、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186346/958f4433-b67e-2830-bd04-75fc4172e123.png)


このように補完候補がでてきます。幸せいっぱいですね。
PC-9801

[インターネット老人会の魔法書 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/ancient-internet) の13日目の記事です。

# PC-9801の想い出

[テレビアニメ『16bitセンセーション ANOTHER LAYER』](https://16bitsensation-al.com/) を見て、PC98でPCデビューした自分に刺さったので想い出カキコ。

## パソコンフェアで衝動買い

当時小学生だった私が、当時まだまだ高価で珍しかったパソコンの展示イベント「パソコンフェア」の入場無料券を学校でもらい、別に私は興味なかったが親の方が興味持ったので家族で行くことになった。

倉庫みたいな場所で、雑然とPC98やプリンタなどの周辺機器が並べられ、私としては「ふーん」くらいにしか思えなかった（PCでゲームできるのも知らなかったし）。

ところが父のテンションが何故か上がり、PCとプリンタとPC台がセットで50万円くらいのやつを衝動買いしてしまった。

## やることがないので一太郎ver1.0で遊ぶ。

やってきたのはPC-9801 RX。
当然インターネットもないし、音響カプラーもないのでパソコン通信もできず（というか存在も知らないのだが）、ゲームも何も入っていないので、来たものの特にやることがない。

そんな時、父が（おそらく勝手に会社から持ってきた）一太郎ver1.0をFDからインストール。
テキストエディタなのでもちろん遊ぶものではないが、初PCの私にはキーボードを打って画面に文字が出るだけで十分楽しかった。「うんこちんちーん」とかの文字が綺麗な文字でディスプレイに映るだけでゲラゲラ笑えた。

## 人生初BASICプログラミング

PCに「BASICプログラミング入門」みたいなものが付属していたので、試しにやってみたら、これまた面白かった。
図形を描画するモジュールを使って、カラフルな丸とか四角とかを出現させるだけで楽しかった。

なんのゲームか忘れたが、簡単なゲームのコードが付属していたので、確か数千行あったと思うのだが、慣れない手つきで1日かけて写経し動いた時は感動した。

## やがてゲーム機に

そのうち父がまたいろんなところからFDに入ったゲームを調達してきて、倉庫番やパックマンやどこかの大学生が作ったらしき大富豪などをやるようになった。大富豪で手持ちのカードを増やしすぎるとスタックオーバフローしてメモリリークするというバグが人生初の自身で発見したバグだ。

なかでもプリンスオブペルシャはハマった。友達と連日集まって謎解きしながら少しずつ進めていき、1ヶ月くらいかけてクリアした時は大歓声が上がった。

そして最後は兄がどこからかエ⚪︎ゲを調達してきて、エ⚪︎ゲ専用機になった。確かFDが20枚くらいあってちょっと進めるたびにFDを入れ替えないといけないめんどくささだった。

# PC９８から全てを学んだ

私が中学生になるころには部活や受験勉強で忙しくなり、PC98もファミコンもほとんどやらなくなった（もうスーファミ時代だったけど買わなかった）。

父が衝動買いしたPC９８だったが、PCのセットアップの仕方も、マウスの使い方も、ブラインドタッチも、プログラミングも、PCに関するほとんどのことはそのPC９８から学んだ。

それでIT業界に興味がわいて・・・ってわけではないのだが、結果的にエンジニアになった。
そのPC９８がなかったら、なっていなかったかもしれない。
人生何で分岐路が現れるかわからない。

私も今1991年にタイムスリップしたとしたら、競争馬とか戦艦とかを美少女化してゲームにしたらめちゃめちゃ流行ることを教えてあげたい。
SSH接続の設定方法のざっくり備忘録（Xubuntu）

# はじめに
えか太郎です。普段はWindows Serverばかり触っているのですが、やはりLinuxは今後必須なのでとりあえずSSH接続のやり方だけでも覚えようとした話です。
# 設定方法
## １，パッケージのインストール
~~~
sudo apt update
sudo apt install openssh-server
~~~
上記のコマンドを入力してパッケージをインストールしてください。
## ２、SSHの操作方法
基礎的なものだけメモしときます。
~~~
停止	$ sudo systemctl stop ssh
起動	$ sudo systemctl start ssh
再起動	$ sudo systemctl restart ssh
自動起動の有効	$ sudo systemctl enable ssh
自動起動の無効	$ sudo systemctl disable ssh
設定リロード	$ sudo systemctl reload ssh
~~~
## ２，teraTarmのインストール（Windows)
窓の杜からダウンロードしました。

https://forest.watch.impress.co.jp/library/software/utf8teraterm/

v5系統の通常版を選択しました。

あとはIPを入力とかしてSSH接続すれば終わり。セキュリティはプライベートな方へ

# 終わりに
リモートデスクトップみたくGUIだけでできないのはめんどくさいです。無料なのが素晴らしいですが。
【Python入門】OpenCVを使うその１　画像を表示する

この記事は、[【完走したい】楽しくいろいろやる Advent Calendar 2023](https://qiita.com/advent-calendar/2023/notbeginner)の13日目の記事です。
せっかくpythonを学んでいるので、画像認識とか画像処理についても学んでいきたいと思います。とりあえずまずは画像を表示させてみます。
# 画像認識
その名の通り画像の認識です。pythonでは、OpenCVとかいうものを使って画像認識ができるそうです。
# やってみた
使用環境
Google Colab
#### 下準備
まずは画像を用意します。
![スクリーンショット 2023-12-21 183731.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/89d3336e-2b89-7b4f-d8b5-dc764ac0d602.png)

そこら辺にあったネズミっぽい何かを撮ってきました。
これを
```
from google.colab import files
uploaded = files.upload()
```
で、画像をcolabに入れます。
#### 本題
まずはちゃんと読み込まれているか、確認します。
```
import cv2
img = cv2.imread("IMG_1734.png")
cv2.imshow("Image",img)
cv2.waitKey()
```
![スクリーンショット 2023-12-21 182558.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/64ca2ce4-1d45-48a6-8759-2f25a194aa0f.png)
できませんでした。どうやら、google colabにもできる機能とできない機能があるみたいです。imshowというのが対応してないらしい。困った。

## 方法その２ 
https://qiita.com/donguri/items/bbcd831094abc6a773a0
このサイトを参考に、

```
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("IMG_1734.png")
plt.imshow(img)
```
imshowが使えないので、代わりにmatplotlib.pyplotというものを使っているようです。これを実行すると、
![スクリーンショット 2023-12-21 183802.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/ad68cb5c-a519-b377-a67d-aba953f9e6df.png)
色がおかしくなってしまいました。

https://wp.nakanishi.pro/python/56/

色の順番が変わるみたいです。
色の順番をBGRからRGBに変えれば、
![スクリーンショット 2023-12-21 184157.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961125/a8e214cf-d363-2128-3c61-abaa19fbdf89.png)
色が戻ってきました！
# ところで
VisualStudioCodeを使うとどうなるのか
⇒上のコードではエラーが出ました。
やり方はあると思うのですが、うまくできませんでした。
# まとめ
pythonで画像処理できます。
参考

https://kaibutsusyain.com/use-opencv-with-google-colaboratory-introduction-to-opencv/

https://qiita.com/toyohisa/items/cbcdb0cb20265c4168c7


https://colab.research.google.com/github/farrokhkarimi/OpenCV/blob/master/Getting_Started_with_OpenCV.ipynb
WSL2にROS2 Humbleをインストールしたときの話

# はじめに
Windows10, 11のWSLでGUIアプリが動くようになってたのでROS2 Humbleを入れたときの記録。

[公式ドキュメント](https://docs.ros.org/en/humble/index.html)の通りに行かなかった部分があったりしたのでそこらへんを書きます

# インストール
## WSL2 + WSLg
ここら辺を参考に

https://qiita.com/y-tsutsu/items/6bc65c0ce4d20a82a417

```shell
wsl --version
``` 
でwslgのバージョンが表示されてれば使えるようになってるはず

## ROS2 Humble
Installation -> Ubuntu (Debian packages) に書いてあるようにインストール

チュートリアル内で入れるツールで気を付けるのは

* rosdepが存在しない:
    * pipからインストール
* colcon buildで発生するエラー: 
    * setuptoolsのバージョンが高いのが原因で発生するのでバージョンを下げる([参考](https://answers.ros.org/question/396439/setuptoolsdeprecationwarning-setuppy-install-is-deprecated-use-build-and-pip-and-other-standards-based-tools/))
    
```shell
pip install setuptools==58.2.0
```

## Gazebo
最新のignition GazeboをWSL上にインストールしてもうまく動作しないのでGazebo Classicを入れましょう([参考](https://github.com/gazebosim/gz-sim/issues/920))

```shell
sudo apt install ros-humble-gazebo-ros-pkgs
```

## TurtleBot3
[こちら](https://zenn.dev/uchidaryo/articles/ros2-programming-9)を参考にhumbleバージョンをインストール

TurtleBotのシミュレーションエラーが出たがnamespaceが決まってなかったのが原因だった模様([参考](https://answers.gazebosim.org//question/28946/i-was-doing-exercise-22-from-ros2-site-and-got-error-while-trying-to-launch-gazebo-with-turtlebot3/))

```shell
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py namespace=:=tb3 use_namespace:=True
```
手っ取り早くphpでデバッグログをファイル出力する方法

開発環境などでログを出力したいが
phpiniの設定も変更できないし、ログ出力先も曖昧だし
簡単にログ出したいだけなのに、という場合の簡単ログ出力手順

下記記述をログ出力したい箇所に差し込むだけ。

```php:php
$filename = 'test.log'; // ログファイル出力先

if (!file_exists($filename)) {  // ログファイル存在チェック
    // ログファイルが存在しないとき新規作成
    touch($filename);
}
$fp = fopen($filename, 'a');
$log_output = date("Y-m-d H:i:s") . "\r\n";
$log_output .= print_r($_POST, true) . "\r\n";
fwrite($fp, $log_output);
fclose($fp);
```

さらに手取り早くログをファイル出力する方法
```php:php
$b = 'テストでログ出力';
file_put_contents('filename.txt', print_r($b, true));
Amazon Polly 音声生成でプロジェクト管理面で工夫したコト

ジャーニーマン( @beajourneyman )です。

今回は「セゾン情報システムズ Advent Calendar 2023」のシーズン2の21日目の記事になります。シーズン2が立ち上がったのに枠が埋まっていなかったので、プロジェクト管理要素＋AWSなテーマで追加エントリーしました。

# テーマは「Amazon Polly音声生成でプロジェクト管理面で工夫したコト」
今年2023年2月のアップデートはPolly会話では衝撃のアップデートがありました。Mizukiの自然言語音声(NTTS)のリリースは発表されず、KazuhaとTomokoがリリースされました。SNSでもMizukiの今後に関する話題をいくつか目にしました。

https://aws.amazon.com/jp/about-aws/whats-new/2023/02/amazon-polly-two-japanese-ntts-voices/

すぐにコンソールで聞いてみて、感動したのを良く覚えています。ちなみに試したのは「あなたのコトが好きです」とかではないです。実運用している長めのプロンプトです。なお、音声生成の実装面については、別のエントリーにまとめているので、良かったらごらんください。都度アップデートするスタイルの備忘録です。

https://qiita.com/beajourneyman/items/047fe1da0411d05e1799

では、「プロジェクト管理面で工夫したコト」本題です。

# 背景ととしての Amazon Polly 音声生成の難しさ
自然言語音声の音声は非常に流暢ではありますが、ビジネスレベルで利用する場合、単純に日本語テキストから生成するだけでは、イントネーションやニュアンス面でクライアント様に納得いただけるレベルの音声生成が難しいのが現状です(自案件実績)。案件対応して実際にAmazon Polly音声を納品された経験がある方はイメージがつくのではないでしょうか？

実情は、上記リンクのQiita版備忘に詳細も書きましたが、SSML(音声合成マークアップ言語)をゴリゴリ書いて非常に細かなチューニングをします。特にお客様の社名やコールセンター名、数字の読み上げ、言葉と言葉の「間」は、毎回何回かのリテイクのご要望をいただくケースが多いです。

際限なく修正要望をお聞きする訳にもいかないので、実際に納品版が確定するまでに想定されるリテークの対象数や回数を意識した見積が必要になります。

# 見積標準を設計して開発
前述のような想定されるケースを踏まえて、いくつかの前提を置いて、見積標準の設計をしました。実際の値は公表しませんが、どんなパラメーターで構成したかをご説明します。

1.音声生成難易度：大・中・小
2.1音声あたりの作成回数上限
3.クライアント様生成確認後にリテークになる割合

です。パラメーターを入れれると自動算出されるワークトートとして実装し、音声生成数と難易度、リテーク想定を入れると自動算出される仕様です。セールス、プリセールス、プロジェクトマネージャなど案件見積をされる方なら、日々呼吸をするようになさっているかと思います。

その他の係数なども簡単に更新できるので、とても重宝しています。また、見積前提条件として、上記想定を記載し、当初想定との大きな乖離があった場合に、ご相談できるよりどころとしても定めました。

# マスタースケジュールを決め進捗可視化ツールを設計して開発
マスタースケジュールは、シンプルに設計工程終了・開発工程開始前までに音声確定する、としました。コールフローの実装など後工程での手戻りを避ける、双方でわかりやすいマイルストーンにするなど良い区切りになっています。また、案件開始直後から、実際に本番稼働する「動くモノ」をご確認いただけるので、好評です。

進捗可視化ツールは、音声一覧をベースに見積前提となっている指標で算出したリテークを含む生成上限に対して現時点で何％に達しているのか、どの音声がOKでどの音声がNGかなどがひと目でわかるワークシートとして設計しました。

クライアント様と完全に同一の情報を用いるコトで、双方が認識合わせしやすく、とても助かりました。完全に見える化されているため、予算想定内であとどれだけ生成(リテーク)できるかも分かり、優先順位もつけやすかったのではと考えています。

# 実案件を通して
進捗可視化ツールに直接改善要望を記載いただけるようにして、テキストでのやり取りをベースにしました。ただ、どうしても口頭で詳細なニュアンスを伝えたいケースもありました。全体の10％ほどです。テキストのみで完結するケースもあります。

実際に運用して実案件の対応をしました。すべて数値として解析可能なので、改善もしやすく満足しています。お役に立てば幸いです。

以上です。
Livebook だけで Text to Speech

## はじめに

以前、いくつか Livebook で Text to Speech = 音声合成 = 文章の読み上げの記事を書きました

https://qiita.com/RyoWakabayashi/items/dfcbd6fde07fb38cd7a3

https://qiita.com/RyoWakabayashi/items/93adae047ccb4fee8d78

これらの手法は Livebook 以外に VOICEVOX を起動していたり、 AWS のアカウントを用意したりが必要です

今回紹介する手法では、 Livebook だけあれば Text to Speech できてしまいます

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

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

## セットアップ

```elixir
Mix.install([
  {:kino_text_to_speech, "~> 0.1.1"}
])
```

そのままの名前です

KinoTextToSpeech をインストールします

https://github.com/w0rd-driven/kino_text_to_speech

## スマートセルからの Text to Speech

KinoTextToSpeech をインストールすると、 Text to Speech のスマートセルが使えるようになります

![スクリーンショット 2023-12-21 20.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/0d1f5946-50e2-902e-152a-4c842d9dff08.png)

Text to Speech のスマートセルを追加すると、以下のような表示になります

![スクリーンショット 2023-12-21 20.40.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/d9485c39-e888-de45-270f-861e33ba1bf6.png)

VOICE に「Google 日本語」を選択し、セルに読ませる文章を入力しましょう

その状態でセルの左上 Evaluate （再実行時は Reevaluate） をクリックすると、喋ってくれます

<iframe width="560" height="315" src="https://www.youtube.com/embed/h3NuW9HunRI?si=hOTEDLjmh48TvxrV" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

早口言葉もバッチリです

<iframe width="560" height="315" src="https://www.youtube.com/embed/TB0zN4UtXWI?si=G5A0ABqtOs9R_TnI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

## 仕組み

Web Speech API を使っています

https://developer.mozilla.org/ja/docs/Web/API/Web_Speech_API

VOICE のドロップダウンにはブラウザでサポートされている音声の一覧が表示されるようになっています

## まとめ

KinoTextToSpeech　を使うことで Livebook だけで音声合成できました

Web の仕組みと Elixir を組み合わせられるのが Livebook の強みですね
【VisualStudio】VSCodeから配色テーマを取り込むには?

# 最初に
VisualStudioは正直、配色テーマが少なく感じてしまいます。  
そのため、配色テーマの多いVSCodeから取り込んでみましょう!
ただし、**VisualStudio2022**でないとできません。

## その1.GitHubからツールをダウンロード
Microsoftが公開しているGitHubのページからツールをダウンロードしましょう。
https://github.com/microsoft/theme-converter-for-vs
ダウンロードしたら展開し、中にあるThemeConverter.slnをVisualStudioで開きましょう。

:::note warn
.NET6がインストールされていないとビルドできません。
:::

## その2.ThemeConverterをビルドする。
ThemeConverterをビルドします。

:::note warn
エラーが出たり、全くビルドが進まない場合は、Nugetのパッケージの更新をしましょう。
:::

## その3.VSCodeで配色テーマをjsoncファイルに出力する。
VSCodeを開き、出力したい配色テーマをVSCode内のテーマに設定します。
そうしたら、コマンドパレット(Ctrl+Shift+P)を表示し、「theme」と入力し、「開発者:現在の設定から配色テーマを生成する」を選択します。すると、現在の配色テーマがjsoncファイルに変換され、VSCode内で表示されるので、わかりやすい場所に保存します。
![wsderftgyhytredqa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578126/73ed3f75-0d8a-7646-ad09-2b15f16594ae.png)

## その4.ThemeConverterでjsoncファイルをVisualStudioに書き込む
まず、コマンドプロンプト(CMD)を管理者権限で開き、ビルドしたThemeConverterのフォルダに移動します。
そうしたら以下のコマンドを実行します。
```bat
ThemeConverter.exe -i "テーマのjsonファイルのパス" -t "VisualStudioのインストールパス"
```
VisualStudioのインストールパスは
```
C:\Program Files\Microsoft Visual Studio\2022\Community
```
にあります。

![cmd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3578126/dda65645-e56d-7efe-60e9-ea4a53f8ec3e.png)

:::note
Communityの表記はインストールされているものに合わせて変更してください。
:::

## その5.反映させる
正常に完了すると、VisualStudioが開くので、
**ツール(T)->テーマ(T)->保存したJsoncファイル名**
で反映させます。
基本情報3回目で合格した話

## 目次
|章|タイトル|備考|
|:--|:--|:--|
||[基本情報合格までの軌跡](https://qiita.com/drafts/c500e6249cdf5241ad4c/edit#%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E5%90%88%E6%A0%BC%E3%81%BE%E3%81%A7%E3%81%AE%E8%BB%8C%E8%B7%A1)||
||[落ちているときの記事](https://qiita.com/drafts/c500e6249cdf5241ad4c/edit#%E8%90%BD%E3%81%A1%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E8%A8%98%E4%BA%8B)|
||[結果](https://qiita.com/drafts/c500e6249cdf5241ad4c/edit#%E7%B5%90%E6%9E%9C)||
||[合格した勉強方法　午前](https://qiita.com/drafts/c500e6249cdf5241ad4c/edit#%E5%90%88%E6%A0%BC%E3%81%97%E3%81%9F%E5%8B%89%E5%BC%B7%E6%96%B9%E6%B3%95%E5%8D%88%E5%89%8D)||
||[午前の勉強方法](https://qiita.com/drafts/c500e6249cdf5241ad4c/edit#%E5%8D%88%E5%89%8D%E3%81%AE%E5%8B%89%E5%BC%B7%E6%96%B9%E6%B3%95)||
||[合格した勉強方法　午後](https://qiita.com/drafts/c500e6249cdf5241ad4c/edit#%E5%90%88%E6%A0%BC%E3%81%97%E3%81%9F%E5%8B%89%E5%BC%B7%E6%96%B9%E6%B3%95%E5%8D%88%E5%BE%8C)||
||[午後の勉強方法](https://qiita.com/drafts/c500e6249cdf5241ad4c/edit#%E5%8D%88%E5%BE%8C%E3%81%AE%E5%8B%89%E5%BC%B7%E6%96%B9%E6%B3%95)||


## 基本情報合格までの軌跡
まず2回落ちているので、下記に改善点を模索した記事を貼ります

## 落ちているときの記事
https://qiita.com/Emuri/items/9eea85f54f655d8791bb



## 結果
午前 680
午後 685
でした！
![情報処理技術者試験・情報処理安全確保支援士試験 マイページ - Google Chrome 2023_12_20 7_26_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734152/d471d17a-7cc6-07e3-28da-92ec831379db.png)


結果公開前になっていますが、この点数が変わったことがないのでほぼ確定です。


## 合格した勉強方法　午前

やはり過去問道場一択。

https://www.fe-siken.com/fekakomon.php

最近メンバーシップが始まりましたが、入らなくても全然受かります。
午前はいかにイメージしながら記憶に焼き付けれるかの勝負になります。

## 午前の勉強方法

1. 分野指定で基礎理論、アルゴなど一つずつ選択して、
 [試験回を指定して絞り込む]を選択し、12回分選択します。

![基本情報技術者過去問道場｜基本情報技術者試験.com - Google Chrome 2023_12_21 19_12_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734152/638bfe0d-f672-b2f4-8d30-d120cc4b6839.png)


理由は同じ単語でも違う問題が出るので、理解に時間がかからず、記憶もしやすいからですね。
間違えた問題は、スクリーンショットを撮ったり、赤チェックし、復習しました。
記憶勉強は夜にやり朝にもう一度復習しました。これの繰り返しです。


## 合格した勉強方法　午後
過去問道場とudemyです

https://www.fe-siken.com/fekakomon.php

https://www.udemy.com/


udemyは石田さんの講座を購入しました。

https://www.udemy.com/course/kihon_joho_b/

## 午後の勉強方法
1. 石田さんの基本情報講座を見ながら、理解できるまで何度も復習し、深くまで理解する
（わからないときは、講師に聞くことができます）

1. サンプル問題を解いて、間違ったところを記憶するのではなく、理解する。
（理解しないと、実際の試験で分からない問題が出たときに対応できず、問題を倒すことができない）
1. 理解するまで何度も試験を解く。
1. 実際の試験時間で解く


## 終わりに


他の授業を聞いてもいいと思いますが、基本情報は理解しないと受かる確率は格段に低くなるので、理解中心の講座にしてもいいと思います。
ShaderGraphで2つのテクスチャーを合成する【Unity、ShaderGraph、画像処理】

# ■ 概要
本記事では、**Unityの「ShaderGraph」を使って
2つのテクスチャー（画像）を合成する手順**を紹介します。

---

この記事を書くに至った経緯として、
「2つの異なるサイズのテクスチャーを合成して1枚の画像ファイルとして保存する機能」
を実装する機会があったのですが、（イメージこんな感じです。）

![test_img_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/e1968604-e533-f5c1-c1e3-7615943e67bb.png)

実装の候補としてTexture2Dを使ってピクセルの配列を
for文で回して色を計算して～みたいなCPUプログラム側での実装や、
ゲーム画面に画像を並べてそれをスクショして保存する、などがありましたが
どれもちょっと（イケてない）なぁ…といった感じだったので、
Shaderを使って実装してみました。という経緯になってます。

とりわけ「ShaderGraph」で実装している記事が見当たらなかったので
今回は「ShaderGraph」を使って実装しました。

# ■ 環境

Unityバージョン　：　Unity2022.3.13f1
プロジェクトテンプレート　：　3D（URP）

**今回はShaderGraphの機能が標準で搭載されている**
**「URP」レンダリングパイプラインのプロジェクトで解説していきます。**

※ビルトインのレンダリングパイプラインでも
パッケージを後からインストールしてShaderGraphが使えます。
[その手順はこちらの記事が参考になります。](https://ekulabo.com/unity-built-in-shader-graph)

# ■ 実装

実装の結果から。

見た目はこんな感じ。
スライダーを動かして、合成するテクスチャーのUVを調整できるようにしました。
![result.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/c418d355-8236-82a4-b9a6-cf419221cf5b.gif)

ShaderGraphファイルの全体像はこちら。
![スクリーンショット 2023-12-21 192158.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/a7aed5d3-1012-33e9-b867-25281a23b1f7.png)


## 1.　プロパティ
①メインテクスチャー （合成される側のテクスチャー）
②サブテクスチャー （合成する側のテクスチャー）
③UVのU（横軸）の開始位置 （0〜1）
④UVのU（横軸）の終了位置 （0〜1）
⑤UVのV（縦軸）の開始位置 （0〜1）
⑥UVのV（横軸）の終了位置 （0〜1）

を外部から設定可能にするためにプロパティとして定義。

<img width="250" alt="スクリーンショット 2023-12-21 192530.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/b43a356b-dc6a-fda1-1c1e-9e7289849193.png">

## 2.　合成範囲のスケールを算出

![スクリーンショット 2023-12-21 192321.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/405d0785-1854-72fe-9274-a0c9d52c6389.png)


## ３.　合成するテクスチャーのUV座標を算出

![スクリーンショット 2023-12-21 192426.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/ec7c597c-c7c4-da37-ceee-66d9215af892.png)

## 4.　Stepノードを使って合成範囲かどうかを判定

![スクリーンショット 2023-12-21 192449.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/6075ce2b-f2e7-a09c-ba52-e242897b842e.png)

if文で表現するとこんな感じ。

```c#
if(uv.x >= StartU && uv.y >= StartV)
{
    if(uv.x <= EndU && uv.y <= EndV)
    {
        // 範囲内であれば合成する側のテクスチャーのカラーを適用したい。
        col = subTexture.color;
    }
}
```

## ５.　適用するテクスチャーのカラーを決定
「3.合成するテクスチャーのUV座標を算出」で算出されたUV座標を、
サブテクスチャーのUVに繋ぐ。

「4.Stepノードを使って合成範囲かどうかを判定」の判定結果をもとに
Branchノードで適用するテクスチャーのカラーの出力を決定する。

![スクリーンショット 2023-12-21 192512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730387/6c1fe6f2-ca3a-6aca-1a1e-7484ef45e1dc.png)

# ■ 最後に （感想）

基本的なShaderGraphの使い方は省略させてもらいましたが
こんな感じで2つの異なるテクスチャーを合成することができました。

今回の記事では2つのテクスチャーでしたが、
工夫すれば複数枚のテクスチャーを合成することも可能です。
また、[シェーダー（マテリアル）で加工した状態のものをTexture2Dにコピー](https://nobushiueshi.com/unitymaterial%E3%81%AE%E7%8A%B6%E6%85%8B%E3%82%92%E5%8F%8D%E6%98%A0%E3%81%95%E3%81%9B%E3%81%9Ftexture%E3%82%92%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/)すれば、その[テクスチャーを画像データとして保存する](https://qiita.com/karasu_type0/items/0d16d5f84e0c61230330)こともできます。

最後までご覧いただき、ありがとうございました。
Software Design 2023年12月号感想

# はじめに

[Software Design Advent Calendar 2023](https://qiita.com/advent-calendar/2023/softwaredesign) 22日目の記事です。
Software Design 2023年12月号を読んで気になったキーワードや所感を記載していきます。

# 第1特集 開発を加速するCI/CD 生産性と品質を両立させるための鉄則

CI/CDをなぜ導入するかのモチベーションから丁寧に解説しているのでありがたい。
CIとCDの違いをいつまで経っても区別できなかったが、この記事で理解できた。

作り上げた本人しかメンテできない重厚長大なパイプラインは危険というところで強く頷いた。CI/CDはすごい仕組みというイメージを強く持っていた。自分たちで扱えるものを作っていこう。
ソフトウェアライフサイクルとCI/CDの図がシンプルでわかりやすい。
CI/CDツールとNewRelicやDatadogって連携できるんだ。知らなかった。

コンテナイメージのビルドも登場して前回のコンテナ特集が活きる。
私はインフラな人なのでこんな感じで実装してるのかあと知らないことだらけ。

# 第2特集 ChatGPTを組み込んだサービスを開発する「食べログ」の事例に学ぶPoC推進の秘訣

生成系AIを実運用で使っている記事をはじめて見かけた。貴重なように思う。
しかもよく知っている食べログさん。
プラグインの内容、申請から各部門との調整まで、ここまで情報共有してくれることに感謝しかない。
条件検索で検索していくのに大変さを感じていたので、AIチャットでやりとりできるのは面白い試み。

# 一般記事、広告記事、連載

気になる記事からいくつか抜粋

## Stable Diffusionで学ぶ画像生成AIのしくみ【7】Stable Diffusionの応用技術

前回からの引き続きでimg2imgの話。今回は欲しい画像を生成するための応用技術の紹介。

- Textual Inversion
- ControlNet

次回最終回なのはさみしい。

## 【新連載】実践データベースリファクタリング【1】スマートカラムを分解する

WEB+DB PRESSからの連載から引き続き。アンチパターン、スマートカラム。
スマートカラム自体を知らなかったけど読んで理解できた。

## 【新連載】Cloudflare Workersへの招待【1】Cloudflare Workersの概要

Cloudflareは前から気になっていたけど追いついてなかったので新連載に感謝。
Cloudflare Workersはサーバレスコンピューティングプラットフォーム。CDNエッジでJavaScriptを動かせる。

- 0ミリ秒コールドスタート（めっちゃええやん）
- 複数プログラミング言語のサポート
- グローバル環境へのデプロイ
- Cloudflareプラットフォーム製品との柔軟な連携
- 低コスト

## なるほど納得Go言語【11】並行処理（前編）

並行と並列処理は違うことをむかしどこかの資料で見かけた。今回のテーマは並行処理。
Goが並行処理を意識した設計思想になっていることが分かった。
設計思想が優秀な製品はすばらしい。

# 全体的な感想

特集を読んでCI/CDパイプラインと仲良くやれそうな気がする。もっと取っ付きにくいものだと誤解していた。ChatGPTを組み込んだ食べログさんの事例はすごく価値のある記事のように感じるほど内容が濃かった。新たな新連載が2つ始まりこれから楽しみ。
新卒SREによる開発者体験向上の取り組みについて

# はじめに

私は2022年6月に内定者バイトとしてJOIN、4月に23卒として新卒入社しました。ありがたいことに1年半で様々な経験をさせていただいています。

本記事では、これまでに主に力を入れて取り組んできた「開発者体験向上の取り組み」について紹介していきたいと思います。（主にストーリーを紹介するので、技術的なことは、TechBlogやSpeaker Deckで公開していますので是非ご覧ください。)

# 分散負荷試験基盤

こちらは内定者バイト時代に取り組んだものです。

詳細はTechBlogで公開していますので是非ご覧ください。

https://techblog.zozo.com/entry/wear-kubernetes-load-test-platform

## 導入の背景

当時、私はECSからEKSへのリプレイスを担当しており、既存のECSで実行されているアプリケーションをEKSに移行する際のパフォーマンス確認およびチューニングを行っていました。

リリース前には、パフォーマンスを確認するために必ず負荷試験が必要です。しかし、私たちのチームでは、各々が異なる負荷試験ツールを使用しており、統一されていませんでした。これが要因で、負荷試験のノウハウがあまり蓄積されておらず、特に新規メンバーは負荷試験の実施が難しい状況でした。

私も同様に、手当たり次第に負荷試験に関する調査と実施に取り組んでいました。他のメンバーも同様の悩みを抱えているのではないかと考え、調査してみると、自社や他社で「分散負荷試験基盤」の事例が多く紹介されていました。そこで、先輩に、「これを作ればみんなが簡単にストレスなく負荷試験ができるのではないか」と提案し、ひとことで「いいね、やろう」と言っていただき作ることになりました。

## 導入後

導入後は、GitHub ActionsのWeb UI上から簡単に負荷試験を開始できるようになりました。さらに、様々なパラメータ（負荷試験実行時間、並列度など）をUI上から簡単に変更でき、試験結果を即座にDataDogダッシュボードで確認できるようになりました。

現在では、フロントエンドチーム、バックエンドチームを超えて、他の部署でも利用される基盤となっています。

# Pull Request毎のPreview環境

こちらは今年の上期に取り組んだものです。

詳細は「ZOZO Kubernetes Night」で登壇した際に発表しています。YouTubeのアーカイブや私のSpeaker Deckをご覧ください。

https://techblog.zozo.com/entry/20231215-kubernetes-night

https://speakerdeck.com/ymktmk/wearhurontoendoniokerupull-requestmei-nopreviewhuan-jing-dao-ru-tosonoxiao-guo

## 導入の背景

私が担当しているプロダクトはリリースから10周年を迎え、溜まった技術負債を脱却すべく、インフラとアプリケーションのリプレイス中です。

具体的には、インフラはオンプレミスからAWSクラウド。アプリケーションはVBScript+jQueryからRails+Next.jsへFastlyのパスベースルーティングを使用して段階的にリプレイスしています。

特に、Webフロントエンドのリプレイスにおいて、レビューの際に旧環境のUIと比較することが多く、UIレビューに負担がかかっていました。

近年では、Vercelを利用したPull Request毎のPreview環境を使った開発が一般的になりつつあり、それもあってフロントエンドエンジニアから多くの要望が寄せられていました。その結果、Pull Request毎のPreview環境の開発と導入に至りました。

## 導入後

導入後は、フロントエンドエンジニアから「生産性が上がった」、「レビューの負担が軽減された」などの声をいただき、実際にフロントエンドチームが作成するPull Requestの半分がPreview環境を使用しています。

# おわりに

ビジネスを拡大するために機能改善も大事ですが、働きやすい環境を自分たちで改善していくことも生産性向上のために大事だと思います！お時間があれば、ぜひ社内、チーム内のDeveloper Experience向上に取り組んでみてはいかがでしょうか？
マークダウン記法の表を生成するサイト[!]

# はじめに
えか太郎といいます。前回のキーボードにある記号の正式名称のまとめた記事を書くときに使ったマークダウンで表を生成するツールが便利だったので紹介します。

https://notepm.jp/markdown-table-tool

# 目的
マークダウン形式で文書を書いているとき表を使いたくなるときがある。しかしマークダウンで表を書くのは非常にめんどうくさい。以下に例を書きます。
#### 記述例
~~~
| test | test |
| ---- | ---- |
| cont | cont |
| cont | cont |
~~~

#### 出力結果
| test | test |
| ---- | ---- |
| cont | cont |
| cont | cont |

｜（パイプ）を何度も書くのは些か能率が悪すぎる。

### そんなあなたにノーコードツール
ほぼExcelのような操作感なので３分もあれば使いこなせるようになります。なのでおすすめ。

https://notepm.jp/markdown-table-tool

## 使い方（簡単すぎてほぼ書くことないけど）
![DB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120367/a9b69ee7-6659-8e14-8119-f9d6c9a57206.png)

（出典：GMOクラウドアカデミー）
### レコード（横一列）、カラム（縦一列）の追加
![スクリーンショット (38).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120367/6e9bf0df-460a-c4ce-3b9a-6f58023edd74.png)
横一列を追加したい場合は左の赤枠、縦一列を追加したい場合上部の赤枠の中にある点にカーソルを乗せるとプラスマークが出る。
![スクリーンショット (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120367/050279f4-1eec-f731-031f-8763ec31591c.png)
そのプラスを押せば追加できます。

### レコード（横一列）の削除
削除したい列の左側（下図だと青枠）をおすとその横一列を消すゴミ箱マークが出ます。
![スクリーンショット (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120367/8b1c50c9-33fb-e881-368a-7f3a91fd5238.png)

![スクリーンショット (42).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120367/1e989adf-6ae1-dfe6-d025-440684b9f971.png)
そのゴミ箱マークを押してレコードを削除してください。

### カラム（縦一列）の削除
削除したい列の上側（下図だと青枠）をおすとその横一列を消すゴミ箱マークが出ます。
![スクリーンショット (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120367/e26ab573-25dd-6469-e373-37c064381699.png)

![スクリーンショット (43).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120367/60585778-7bbf-be1f-d3e0-1a4da54b2a61.png)
そのゴミ箱のマークを押して削除してください。
### マークダウンに変換
表の下部にある「MarkDownテーブル生成」を押してください。
# おわりに
前回の記事もこれをつかって書きました。10分ほどで書けたので素晴らしかったです。

https://qiita.com/EkaTaro3/items/619b2988de3c39592391
REST APIについて

## はじめに
### APIとは
Application Programing Interface　の略で
他社のサービス内の情報や機能を使えるようにする仕組み

リクエスト・・・こういう情報が欲しい！（APIを叩く）
レスポンス・・・欲しい情報

### Web APIとは
* HTTTP/HTTPSベースで実現するAPI
* Webを介してしようするAPI

## REST API
RESTは設計思想のこと
RESTの原則に従って実装されているAPIのこと
REpresentational State Transferの略
REST APIによる６つの制約条件
* クライアントサーバー
  * ユーザーインターフェースと処理を分離する
* 階層化システム
  * システムを階層に分離する
* コードオンデマンド
  * サーバーの更新によりクライアント側は自動でコードダウンロードし、実行する
* 統一インターフェース（情報の取得、更新、作成、削除はHTTPメソッドを利用）
* キャッシュ制御
  * クライアントとサーバーの通信回数と量を減らす
* ステートレス（リクエスト間で影響を及ぼさない）

上記制約を守ったAPIをREST APIという


## movieをリソースとしたCRUD操作のURI

movieというリソースを対象としたREST APIを考えます.

| 概要 |  URI  |  HTTP method  |
| ---- | ---- | ---- |
| 一覧取得,読み取り|  /movies  |  GET  |
| 特定リソース取得,読み取り|  /movies/12345  |  GET  |
| 新規リソース作成 |  /movies |  POST  |
| 更新 | /movies/12345  |  PUT  |
| 削除 |  /movies/12345 |  DELETE  |

HTTPメソッドはリソースに対する操作をしめします。
moviesはリソースを示し、movies/12345の数字の部分は特定のmovie(リソース)のidを表しています。
集積回路設計，PDK設計で読むとおくと興味深い読み物など

武田財団の調査報告書。
http://takeda-foundation.jp/reports/

個人を対象にした報告書であったり、プロジェクトを対象にした報告書だったり読み応えあります。

個人的にはうまくいった例[(超LSI共同研究所)](http://takeda-foundation.jp/reports/pdf/prj0101.pdf)とうまくいかなかった例[(ASPLA)](http://takeda-foundation.jp/reports/pdf/prj0108.pdf)が読み応えあります。後者を読むとラがどうなるのか不安でしかない。

日本半導体歴史館
https://www.shmj.or.jp
こちらも、業界動向、集積回路、プロセス、パッケージ、装置など沢山読み応えのある資料があります。PDKだとNECの方の[「シリコンロジックプロセスの開発ものがたり」](https://www.shmj.or.jp/dev_story/pdf/nec/nec_e07.pdf)が興味深い。微細化と大口径化した製造工場を満たすだけの需要についての苦悩が読めます。あとPDKを早い段階で提供して顧客に利用してもらうことの重要さを後悔している事も読めます。~~UX8のレイアウトフィロソフィが設計者に提示されてなくてめっちゃ苦労したおもひで~~


LSI設計常識講座
https://www.youtube.com/@torunakura9957/videos
タイトルが物々しいですが、「一通りチュートリアルは進めたけれど、実際に自分の回路を作って測るにはどうしたらいい？」を解決するテキスト。テキストを買って勉強することがお勧めではあるけれど、Youtubeの動画を見るだけでも勉強になる。

設計側での苦労話とかだと慶應大学の天野先生も読み応えのある資料を書かれています。
https://www.am.ics.keio.ac.jp/~hunga/
しくじりフェローというタイトルで過去の研究プロジェクトとその時々の半導体設計の苦労話とか。
https://www.am.ics.keio.ac.jp/~hunga/fellow_presen.pdf

2017/03/17 平木敬教授 最終講義「計算機を創る」
https://www.youtube.com/watch?v=ok-3jrUftK0

集積回路設計の話をしているはずが、最後はコンピュータの話になってしまった。
ダンプをとるよ、"VarDumper"

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の22日目の記事です。


## ダンプをとるよ、"VarDumper"

[VarDumper](https://symfony.com/doc/current/components/var_dumper.html)は、デバッグ用にダンプを出力するコンポーネントです。Symfony以外でも使えます。

### インストール

```shell
composer require symfony/var-dumper --dev
```

### 使い方

Symfonyユーザにはお馴染みの`dump()`が使えるようになります。

```php

$item = new Item('商品名');
dump($item);
/**
Item {
    -name: "商品名"
}
*/

echo dump($item)->getName(); // dumpは引数を返すので、そのままメソッドを呼び出せます。
/**
Item {
    -name: "商品名"
}
商品名
*/

```

Twigでも利用可能です。

```twig
{{ dump(item) }}
```

### ダンプサーバ

Symfonyの場合、普段は`dump()`を実行すると、その場（ブラウザやコンソール）で表示されますが、そこで表示させずにひとつのコンソールに集約することができます。それがダンプサーバです。ダンプサーバを起動すると、すべての`dump()`がそこに集約されます。

```shell
bin/console server:dump


[OK] Server listening on tcp://127.0.0.1:9912 

↓以下dump()を実行するたびに表示


GET https://localhost:8000/var/dump
-----------------------------------

 ------------ ------------------------------------------- 
  date         Thu, 21 Dec 2023 10:46:41 +0000            
  controller   "App\Controller\VarDumpController::index"  
  source       var_dump/index.html.twig on line 14        
  file         templates/var_dump/index.html.twig         
 ------------ ------------------------------------------- 

App\Dto\MealDto^ {#510
  -type: App\Enum\MealType^ {#513
    +name: "Dinner"
    +value: "夕食"
  }
  -content: "シチュー"
}

$ bin/console app:var-dump
--------------------------

 -------- --------------------------------- 
  date     Thu, 21 Dec 2023 10:48:21 +0000  
  source   VarDumpCommand.php on line 31    
  file     src/Command/VarDumpCommand.php   
 -------- --------------------------------- 

App\Dto\MealDto^ {#486
  -type: App\Enum\MealType^ {#493
    +name: "Breakfast"
    +value: "朝食"
  }
  -content: "ほげ"
}

```

## まとめ
今回は`VarDumper`でした。ちょっと内容を出力したいなって時に便利です。
【Mysql】特定テーブルの指定したレコードのみをdump

## やりたいこと

特定のテーブルから条件指定してdumpファイルを出力したい

## 環境
Mysql 5.7.20

## 実行手順
コマンドプロンプトからmysqldump実行でファイル生成

```
mysqldump --skip-add-drop-table --no-tablespaces --hex-blob -uユーザー名 -p -h DBサーバIP DB名 テーブル名 --set-gtid-purged=OFF --default-character-set=utf8mb4 --where"抽出条件" > ファイル名.sql
```


※つけたオプション
- --skip-add-drop-table 
テーブルを消さないためにdrop文を追加しない
- --no-tablespaces 
テーブルスペース情報を付与しない
- --hex-blob
対象テーブルがバイナリデータを持っていたので16進数に変換して文字化け防止
- --set-gtid-purged=OFF
gtidが不要だったのでOFF
- -u 
ユーザー指定
- -p 
パスワード指定
- -h 
ホスト指定
- --where
 負荷を下げるために条件指定
- --default-character-set
文字コード指定

## 終わりに
無事にdump成功。
（Workbenchでdumpファイルを生成しようと試みたが、where句で条件指定して生成する方法がよくわからなかったので時間の関係でコマンドで対処した。）
健康管理、改善のすゝめ

# はじめに
こんにちは、株式会社シーエー・アドバンス技術統括本部の宮里です。

座りっぱなしかつ、趣味もインドアで染まっている方もエンジニアでは多いと思います。
僕は今年体調を崩しがちになってしまったので、今回は体調改善をテーマに記事を書きたいと思います。

## 紹介する事
使ってみたガジェットや、改善するために取り組んだ事を紹介したいと思います。

## Fitbit
Fitbitはウェアラブル端末で開発を続けているアメリカ企業の製品です。
僕が使用しているのはFitbit luxeで、値段は15000円ほどでした、他にも色々ありますがメインで使用したい睡眠のスコアや歩数カウントなどがついているものがあればなんでも大丈夫だと思います。
https://www.fitbit.com/global/jp/products/trackers/luxe

## 使い方
アプリとBluetoothで連携して使用します。
課金したら追加される機能がありますが、必要だと思えば...僕は必要ありませんでした。

## 歩数カウント
一日の歩数をカウントしてくれます、また5000歩歩くとほめてくれます、嬉しい。
全然歩けてないなと思っている人は可能な限り毎日5000歩達成目標にするとモチベも結構続きやすいです。
また、土日など全然家出てなかったりすると週や月でまとめたグラフや平均データから出るので私生活の見直しにも活用できます。
（画像は全然達成できてないですが）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529348/44c724e8-8eb1-f04e-89e1-51fc907ccea8.png" width=50%>


## 睡眠スコア
こちらの機能が個人的に一番良いです、思ったよりも色々記録してくれます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529348/337644d8-aa6b-bfd8-8880-d1c3301cb2c2.png" width=50%>

沢山寝たのに疲れが取れないと感じる方はもしかしたらレム睡眠や浅い睡眠が多いかもしれません。
また、睡眠をスコアとして点数として出してくれるので、良いスコアで寝る事を続ける事が出来ると体調にも如実に表れてくるはずです。

スコアは79と若干高めですが、睡眠時間で見ると全然寝れていないので見直そう！などのきっかけになりやすいです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/529348/d50c1c94-4053-d639-ba44-759afeae69d2.jpeg" width=50%>

## スコアを見て改善した事
歩数が少ないなら散歩を増やそう、寝れていないなら寝る時間を増やそうとなるのは自然ですが、特に効果を実感した事があるのでこちらを紹介します。

### 寝る前の習慣を作る
寝る前に同じルーティンを作るのが寝つきに良いとされているらしいです。
僕は寝る30分くらい前に寝つきに良いと言われているカモミールティーを飲むのを続けてみましたが、結構変わりました。
実際にはハーブティーを飲むに限らずアロマディフューザーなどでも良く、味や匂いを寝る前の習慣に紐づけるのが大切だと思っています。

### 16時以降のカフェイン禁止
カフェインは朝や午後の仕事中に活力を与えてくれますが、体からカフェインが抜けきるには一日以上、半減期と呼ばれる効果が半分まで薄くなる時間も2~8時間といわれています。
遅くても24時には半減期に入っているほうが望ましいです、そのため僕は平日は16時以降はコーヒーを飲まないようにしました。

https://www.ncnp.go.jp/hospital/guide/sleep-column14.html

### 寝る2時間前くらいにお風呂に入る
寝る2~3時間前でお風呂を済ませるのが寝つきの観点で見ると理想らしいです。
実際上記の2つと組み合わせて実行すると寝つきが実感できるほどには変わりました。

ただ、お風呂に入るタイミングは個人のタイミングなどがあるため無理に合わせる必要はないと思います、頭の片隅に置いて出来る範囲で合わせる事が出来れば十分だと思います。

https://www.e-healthnet.mhlw.go.jp/information/heart/k-01-004.html

## 買いたくない！いらない！って方
最近だとポケモンスリープなど自分の睡眠を見直すアプリは他にも無料であるので、もちろんこれを活用してみるとかでも最高だと思います。

個人的には寝起きがきつい...って方に浅い睡眠の時にアラームを鳴らしてくれるSleep Meisterをおすすめしたいです。

ポケモンスリープ
https://www.pokemonsleep.net/

Sleep Meister
https://apps.apple.com/jp/app/sleep-meister-%E7%9D%A1%E7%9C%A0%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%A0lite/id599456380

### 最後に
デスクワークと健康は切っても切り離せない関係にあると思っています。

歩数と睡眠時間を記録するのは目に見えて自分の生活の悪い部分が見えるようになるのでおすすめです。
また良くしていけばこちらもデータとして表れるのでモチベにしていきましょう。

来年こそはもっと色々改善して活発的に活動できるのを目標に、健康に不安がある方も一緒に出来る範囲で少しづつ改善していきましょう！
「Column not found」はモデルでのタイポを疑ってみる

## はじめに
DM機能実装にあたり、「多対多」のリレーションをモデルファイル上で構築していたところ、「Column not found」というエラーが出ました。

自分の場合、モデル（User.php）内の記述にタイポが存在したのが原因でした。

## 環境
Laravel 9.52.16

## 問題
```sql: MySQL
> $user->message_rooms()->get();

   Illuminate\Database\QueryException  SQLSTATE[42S22]: Column not found: 1054 Unknown column 'message_room_user.messsage_room_id' in 'field list' (SQL: select `message_rooms`.*, `message_room_user`.`user_id` as `pivot_user_id`, `message_room_user`.`messsage_room_id` as `pivot_messsage_room_id`, `message_room_user`.`created_at` as `pivot_created_at`, `message_room_user`.`updated_at` as `pivot_updated_at` from `message_rooms` inner join `message_room_user` on `message_rooms`.`id` = `message_room_user`.`messsage_room_id` where `message_room_user`.`user_id` = 3).
```

UserモデルとMessageRoomモデルの多対多のリレーションを確認しようとすると、このようなエラーが出る。

## 解決策
* モデル内のリレーション記述にタイポがあったので、それを修正する

```php: User.php（失敗例）
public function message_rooms()
    {
        return $this->belongsToMany(MessageRoom::class, 'message_room_user', 'user_id', 'messsage_room_id')->withTimestamps();
        // "messsage_room_id"になっている
    }
```

```php: User.php（解決例）
public function message_rooms()
    {
        return $this->belongsToMany(MessageRoom::class, 'message_room_user', 'user_id', 'message_room_id')->withTimestamps();
    }
```

## まとめ
スペルミスなどのタイポによるエラーは、体感エラー箇所の特定が難しい気もします。

そもそも打ち間違えなければ良いだけの話…
アジャイルコーチは必要か？

この記事はZOZOアドベントカレンダーSeries１の２１日目の記事です。

我々のチームでは、スクラムを始めて３０スプリントを超えるぐらいの経験を積んできました。

当初はスクラム経験者はおらず自分がスクラムマスター研修を受けてきたぐらいの練度でのスタートでした。

スクラムを始めたきっかけは、実装の優先順位の問題であったり、多すぎるMTGだったり、バス係数の問題だったり色々あったのですが、スクラムを導入したことで多くの問題が解決に向かっていったと思います。

スプリントは回せていると思っていました。スプリント期間は１週間。毎週スプリント計画を実施し、スプリントを回し、レビューも振り返りもやる。リファインメントでは優先順位も決め、デイリースクラムももちろん行っていました。

そんなある時ですが、他のチームがお世話になっていたアジャイルコーチと話をする機会をいただき、以来毎週会話させていただき多くのアドバイスをいただいております。

そこで気がついた色々なことを今回は共有したいと思います。

# スプリントゴール・VISION/MISSION

Scrumに関わらずアジャイルな開発をしていくなら、当然プロダクトゴール、スプリントではスプリントゴールがあるべきですが、今までそれがなかった。なくても開発がまわっていたので良かったと思っていたのかもしれません。

しかし、スプリントごとに成果物を出すのはなぜか？
それは少しずつでも早く市場の反応を見るためであり、ステークホルダーに少しでも早く見てもらいフィードバックを求めるためです。

測定するのは成果物ではなく成果です。得られた反応やフィードバックからいつでも方向の向き直りができるようにするのです。

そう考えたときにプロダクトの向かう先がなくては方向を考えるのは難しい。北向いているのか東向いているのかわからないのに西を向くことはできません。

ゆえにプロダクトゴールが必要であり、さらにVISIONが必要で、MISSIONが必要であるわけです。

その辺りを書いたのが[プロダクトにVISIONがなぜ必要なのか？](https://qiita.com/YasuhiroKimesawa/items/7d0cf986dcdd75e9cea0)の記事になります。

# アウトサイドインとインサイドアウト

さきほども書きましたが、測定すべきは成果物ではなく「成果」です。
なので、スプリントで作られたインクリメントはKPIやUU/PVなどで計測が可能です。それがどのように顧客にインパクトを与えたか、ユーザー数の推移や売上、GMVで確認することになるでしょう。

その結果、改善策が新たにプロダクトバックログに積まれていくわけですが、この流れは「アウトサイドイン」つまり、外部要因でプロダクトバックログを積んでいく流れです。

この場合、顧客の維持や満足度の向上には繋がっていきますが、新規顧客の獲得を目指すのは難しい。

ゆえに「インサイドアウト」つまり、自分たちは何を顧客に提供したいのか？プロダクトから社会をどう変えたいのかという観点から生まれる施策が必要になります。
このような考え方をこれまでしてこなかった、アジャイルコーチとの会話で新たに得られた知見になります。

また、これらを実施する上でも、VISION・MISSIONは必要になります。「何を顧客に提供したいのか」はVISIONとして可視化され、プロダクトの方向性を定めるものとなるでしょう。

ほかにも[これからのプロダクト開発に必要なスキル「問いかけ」の作法](https://qiita.com/YasuhiroKimesawa/items/9fe2f1bbf21aa6e36ea9)の記事もアジャイルコーチに共有していただいたものから書いた記事になります。

# 結論アジャイルコーチは必要か？

メンバーでアジャイルコーチの支援を受けて開発した経験がない場合は絶対必要だと思います。
研修だけ、本だけの知識だけで勝負しても、おそらく何かが欠けている、考慮できていないことが多いはず。
それをコーチに支援してもらいながら気づきを得て、プロダクトを良くしていくことが必要です。

よくコーチの支援はアジャイル開発をしていくための「近道」なんて聞きますが、「近道」ではなく「進むべき道」であるように思います。

なんとなく開発をしているチームと自覚がある方にこの記事が参考になればよいと思います。