OmniAICreator/Qiita-1.07M huggingface dataset:
[Python]型ヒント

# 型ヒント

Pythonの型ヒント（type hints）は、Python 3.5以降で導入された機能であり、静的型チェックやコードの可読性を向上させるために使われます。型ヒントは、特定の変数や関数の引数、戻り値に対して、期待されるデータ型を示すアノテーションのような形で書きます。

### 型ヒントの基本的な使い方

Pythonでは、変数や関数の引数、戻り値に対して型ヒントを以下のように記述します：

```python
def greet(name: str) -> str:
    return f"Hello, {name}"

age: int = 25
```

- `name: str`：`greet`関数の引数`name`が文字列型 (`str`) であることを示しています。
- `-> str`：`greet`関数が文字列型 (`str`) を返すことを示しています。
- `age: int = 25`：`age`という変数が整数型 (`int`) であり、初期値として`25`を持つことを示しています。

### 型ヒントの利点

1. **静的型チェック**：
   - Pythonの静的型チェッカー（例えば、mypyなど）を使用することで、コードの中で型ヒントが正しいかどうかを事前に確認できます。これにより、ランタイムエラーを減らし、安全性を向上させることができます。

2. **ドキュメントとしての役割**：
   - 型ヒントは、コードの可読性を向上させる役割も果たします。特に大規模なプロジェクトやチームで協力する際に、関数やメソッドの引数や戻り値がどのようなデータ型であるかが明確になり、コードの理解が容易になります。

3. **IDEの補完機能のサポート**：
   - 多くの統合開発環境（IDE）やエディタは、型ヒントを利用してコードの補完機能を強化します。これにより、メソッドや関数の利用方法を効率的に確認することができます。

### 型ヒントの書き方

Pythonでの基本的な型ヒントは以下の通りです：

- **基本型**：
  - `int`, `float`, `bool`, `str` などの組み込み型を使用します。

- **コンテナ型**：
  - `List[str]`, `Tuple[int, int, str]`, `Dict[str, int]` などのリストやタプル、辞書などのコンテナ型に対しても型ヒントを記述できます。

- **任意の型**：
  - `Any`型を使用することで、任意の型を受け入れることができます。

- **ユーザ定義型**：
  - 自分で定義したクラスや`dataclass`などに対しても型ヒントを使用することができます。

### 型ヒントの例

```python
from typing import List, Tuple

def process_numbers(numbers: List[int]) -> Tuple[int, int]:
    total = sum(numbers)
    average = total / len(numbers)
    return total, average
```

この例では、`process_numbers`関数が整数のリスト (`List[int]`) を受け取り、整数のタプル (`Tuple[int, int]`) を返すことが期待されています。

### 型ヒントとデフォルト値

関数やメソッドの引数にデフォルト値を持たせる場合、型ヒントは以下のように指定します：

```python
def greet(name: str = "World") -> str:
    return f"Hello, {name}"
```

### 型ヒントとオプショナルな引数

引数がオプショナル（`None`を許容する）場合には、`Optional`を使います：

```python
from typing import Optional

def maybe_greet(name: Optional[str]) -> str:
    if name:
        return f"Hello, {name}"
    else:
        return "Hello"
```

### 型ヒントの注意点

- **ランタイムへの影響はない**：
  - 型ヒントは、Pythonのランタイムに影響を与えないため、静的型チェッカーを使用しない限り、エラーにはなりません。

- **柔軟性と適用範囲**：
  - 型ヒントは推奨事項であり、強制されるものではありません。そのため、必要に応じて使い分けることができます。

Pythonの型ヒントは、特に大規模なプロジェクトや共同開発環境でコードの品質と可読性を向上させるのに役立つ重要なツールです。
【Go】zapで出力するログのタイムスタンプをJSTにする

# 環境

`go.uber.org/zap v1.25.0`

# やりたいこと

デフォルトで、`"ts":1720662061.1188495` となっている部分を JST（e.g. `"2024-07-11T12:56:52+09:00"`） で出したい。

```
{"level":"info","ts":1720662061.1188495,"caller":"xxx","msg":"xxx"}
```

# コード

> package config は環境により異なります。


```go
package config

import (
	"os"
	"time"

	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

func ZapConfig(app *newrelic.Application) *zap.Logger {
	core := createZapCore()

	return zap.New(
		core,
		zap.AddCaller(),
		zap.AddStacktrace(zapcore.ErrorLevel),
	)
}

func createZapCore() zapcore.Core {
	encodingConfig := zap.NewProductionEncoderConfig()
	encodingConfig.EncodeTime = jstTimeEncoder

	return zapcore.NewCore(
		zapcore.NewJSONEncoder(encodingConfig),
		zapcore.AddSync(os.Stdout),
		zap.InfoLevel,
	)
}

func jstTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
	jst := time.FixedZone("Asia/Tokyo", 9*60*60)
    enc.AppendString(t.In(jst).Format(time.RFC3339))
}
```

ログの `ts` が JST（e.g. `"2024-07-11T12:56:52+09:00"`） であることを確認。

```
{"level":"info","ts":"2024-07-11T12:56:52+09:00","caller":"xxx","msg":"Logger","status":200,"method":"GET","path":"/swagger/doc.json","query":"","ip":"192.168.65.1","user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36","elapsed":0.002561916}
```
「壁打ち」の認識の齟齬

# はじめに

「壁打ち」という言葉の意味について、ちょっとした認識の齟齬がありました。

---

🗣️「もし暇だったら、壁打ちお願いしていいですか？」

👤「いいよ〜」

🗣️「やりたいことがいろいろあるんです。まずAをやりたいんですよね」

👤「うんうん」

🗣️「そのためにはBをやらなきゃいけなくて・・・あ、だからCもやらなきゃいけないのか・・・」

👤「・・・ちょっとまって、僕はどうしたらいいの？」

🗣️「？？？」

👤「？？？」

# 相手の反応を求めない「壁打ち」

= 「アドバイスを求めるのではなく、話して整理すること」

:::note warn
🗣️は「壁打ち」をお願いしました。

この時考えていたことは「壁打ちを通してやることを整理したい」です。
:::

この時、**相手の反応やアドバイスは重要ではありません**。
むしろ求めていないことも多いです。

これは「テディベア効果」とも言われるものです。
※テディベア（人形）に心情を吐露することで、思考が整理される現象。

:::note warn
「壁打ち」の語源は「**テニス等の、壁にボールを当てて行う練習**」です。
語源からも、このニュアンスは妥当だと言えるでしょう。
:::

|  |  |
|:-:|:-:|
| ![](https://r2.sizu.me/users/29404/post-images/0nb7sob9eab498rdb588.png)  | ![](https://r2.sizu.me/users/29404/post-images/mww6u8tx6bs8k9xk37w6.png)  |
|   |   |
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/f6f6b6b9-aa49-842b-7659-4bf7e89b11a2.png)|

# フィードバックを求める「壁打ち」
:::note warn
👤は「壁打ち」に付き合ってくれました。

この時考えていたことは「悩んでるみたいだから何かアドバイスしなきゃ」です。
:::
「相手のフィードバックを求める」という解釈も存在します。

|   |
|:-:|
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/aa5d6d5a-2383-1de9-1cfe-14ee86eb70b3.png)  |
|  |



# すれ違わないために

「壁打ち」の認識の齟齬が、今回の問題点でした。

語源・組織文化的・個人の経験に依る「正しい」意味はあります。

しかし一方で、言葉の意味は変化するものです。
さりげなく、「壁打ち」の認識に齟齬がないか、確認すれば防げたことかなと思います。

私は「ただ聞いて欲しい派」なので
次からは「壁打ちなので、ただ聞いていてほしいです」とでも言おうかなと思います。

# 補足：「反応を求めない」壁打ち

これは「全く反応を求めない」というわけではありません。
あくまで前提としてある、ということです。

この種の壁打ちを頼む側・頼まれる側どちらも経験がありますが、

このときに意識すること・してもらえると助かることは

- 「アドバイスは求めていない」という前提を大事にする
- その上で「個人的に思ったことなんだけど」となるべくフラットに、見方のひとつとして伝える

この2つです。

「アドバイスは求めていない」という前提のうえで、それでも伝えたほうが良いことというのは当然あります。

その時は、相手のスタンスを尊重したうえで伝えてあげてください。
Azure Application Insightで使える　KQLサンプル

# 参考：
https://qiita.com/smallpalace/items/a9329db15a6ca6eaf579
https://qiita.com/yoshiwatanabe/items/b981773b9a5775e4a0f8
 
# サンプルコード
## 日付指定、検索文字列指定
```
traces
| where timestamp between(datetime("2024-07-09 01:00:00.000") .. datetime("2024-07-09 13:05:59.999")) // GMT表記なので、(検索したい日本時間-9時間)の値を入力する
| where message has "development" // 対象の文字列が含まれている行抽出
;
```
## 全体から検索
```
traces
| search "CORS" // 全カラム見て検索文字列が含まれている行抽出
;
```
 
## 関数の結果を出力
```
let now = now();
print now;
```
結果
"print_0 [ローカル時刻]"
"2024/7/11 14:09:47.812"
 
# Tips: has vs contains
どちらも特定のカラム内の文字列を検索する。
**公式は"has"を推奨**
hasは検索対象の文字列が長い単語の一部である場合は結果を返さない
hasの方が高速
 
例：
検索文字列=`ell`
ログメッセージ=`Hello world.`
- containsの場合: `Hello world.`が含まれる行を返す
- hasの場合: 結果なし
 
そのためhasを使用する場合は独立した用語で検索すること
【PostgreSQL】メタコマンド〜\getenv〜

## 初めに

Qiita Engineer Festa 2024に参加中。完走目指してます。
他のメタコマンドについては以下から読んでください。

https://qiita.com/dai_chi/items/04f5339d54130f070671

## \getenvとは

> 環境変数`env_var`の値を取得し、psql変数`psql_var`に割り当てます。 psqlのプロセスの環境で`env_var`が定義されていない場合、`psql_var`は変更されません。 例:
> 
> 
> ```
> =>\getenv home HOME
> =>\echo :home
> /home/postgres
> ```
> 

[\getenvについて](https://www.postgresql.jp/docs/15/app-psql.html#:~:text=%5Cgetenv%20psql_var%20env_var)

## 試してみた

```sql
postgres=# \getenv home HOME
postgres=# \echo :home
/Users/daichi
```

## まとめ

環境変数を利用するシーンがイマイチ思いつかず。わざわざ変数に入れるのだから複数回使う場面なのかとは思っている。
[CDK For Terraform]Aurora AutoScaleの導入

# CDK For TerraformでAurora AutoScaleの導入

- サンプルコード

```typescript
    // Aurora Cluster Aurora AutoScaling
    const autoScaleEnabled = true;
    const autoScaleMinDbcount = 0; // 0にしても既存のReaderインスタンスは影響をうけない
    const autoScaleMaxDbcount = 5; // 最大は15台まで
    const autoScaleTargetValue = 70;
    if (autoScaleEnabled == true) {
      const appAutoScalingTarget = new aws.appautoscalingTarget.AppautoscalingTarget(this, 'replicas', {
        minCapacity: autoScaleMinDbcount,    // 最大台数　環境別に設定する
        maxCapacity: autoScaleMaxDbcount, // 最小台数　環境別に設定する
        resourceId: `cluster:sample-db-cluster`,
        scalableDimension: 'rds:cluster:ReadReplicaCount',
        serviceNamespace: 'rds',
      });

      new aws.appautoscalingPolicy.AppautoscalingPolicy(this, 'AuroraReadReplicaAutoScalingPolicy', {
        name: 'AuroraReadReplicaAutoScalingPolicy',
        policyType: 'TargetTrackingScaling',
        resourceId: appAutoScalingTarget.resourceId,
        scalableDimension: appAutoScalingTarget.scalableDimension,
        serviceNamespace: appAutoScalingTarget.serviceNamespace,
        targetTrackingScalingPolicyConfiguration: {
          predefinedMetricSpecification: {
            predefinedMetricType: 'RDSReaderAverageCPUUtilization',
          },
          disableScaleIn: false, // スケールインを無効にする
          targetValue: autoScaleTargetValue, // スケールする時のCPU利用栗
          scaleInCooldown: 600, // スケールインのクールダウン時間 600秒
          scaleOutCooldown: 300, // スケールアウトのクールダウン時間 300秒

        },
      });
    }
```

ややこしいのが `disableScaleIn` の値で
これをfalseにしておかないと（デフォルトはfalseですが）
オートスケールで作成されたインスタンスのスケールインが発生しなくなります。

あまりスケールインを無効にするケースが思いつかないですが、
基本はfalseでいいと考えています。

最小台数ですが、コメントの通り、
0にしても既存のReaderインスタンスには影響を与えません。

ただ既にReaderインスタンスが１台稼働している場合は
1にしても変化はありません。
Writerインスタンスが1 Readerインスタンスが１の状態で
Readerインスタンスを2台にする場合は 0 から2にしてあげる必要があります。

「じゃあ1にしておけばいいじゃん」となるのですが、
弊社都合でRDSの台数は別パラメータで管理しており、
明示的に変更するときに２箇所変更しないといけなくなるオーバーヘッドを
考慮して0で一旦固定としています。


尚、オートスケールは既存台数を認識してはいるものの、
明示的に作成したReaderインスタンスは勝手にスケールインしないようにしているようです。

注記にもあるのですが、どうゆうことか理解がおいついておらず、
実際に試してみて確認しました。

```txt
注記
最小容量と最大容量は、Aurora DB クラスターに対して設定されます。指定された値は、その Aurora DB クラスターに関連付けられたポリシーすべてに適用されます。
```

参考:https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.Integrating.AutoScaling.html
【PostgreSQL】メタコマンド〜\setenv〜

## 初めに

Qiita Engineer Festa 2024に参加中。完走目指してます。
他のメタコマンドについては以下から読んでください。

https://qiita.com/dai_chi/items/04f5339d54130f070671

## \setenvとは

> 環境変数`name`を`value`に設定します。 `value`が与えられない場合は、その環境変数を未設定状態にします。 以下に例を示します。
> 
> 
> ```
> testdb=>\setenv PAGER less
> testdb=>\setenv LESS -imx4F
> ```
> 

[\setenvについて](https://www.postgresql.jp/docs/15/app-psql.html#:~:text=%5Csetenv%20name%20%5B%20value%20%5D)

## 試してみた

```sql
postgres=# \setenv VAR value
postgres=# \! printenv | grep VAR
VAR=value
```

## まとめ

環境変数にセットするシーンが思いつかず。\setとの使い分けについて気になる。
【PostgreSQL】メタコマンド〜\timing〜

## 初めに

Qiita Engineer Festa 2024に参加中。完走目指してます。
他のメタコマンドについては以下から読んでください。

https://qiita.com/dai_chi/items/04f5339d54130f070671

## \timingとは

> パラメータがある場合、各SQL文にかかる時間の表示の有無をonまたはoffに設定します。 パラメータがない場合、表示をonとoffの間で切り替えます。 表示はミリセカンド単位です。 1秒より長い時間は 分:秒 の形式で表示され、必要なら時間と日のフィールドが追加されます。
> 

[\timingについて](https://www.postgresql.jp/docs/15/app-psql.html#:~:text=%5Ctiming%20%5B%20on%20%7C%20off%20%5D)

## 試してみた

```sql
postgres=# select count(*) from employees;
 count 
-------
     4
(1 行)

postgres=# \timing on
タイミングは on です。
postgres=# select count(*) from employees;
 count 
-------
     4
(1 行)

時間: 0.857 ミリ秒
postgres=# \timing off
タイミングは off です。
postgres=# select count(*) from employees;
 count 
-------
     4
(1 行)

postgres=# 
```

## まとめ

これは手動で叩いたSQLの実行時間を確認するのに使っている。
【ChatGPT＋Code Interpreter】で音声合成を行ないます。


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

　今回は、Code Interpreterで音声合成を行ないます。Text to Speechですね。

:::note info
本記事は、ChatGPT（有料版）
行なっております。あしからず。
:::
　今日は、
　　忘れ物が多い。

　財布を忘れ、
　　イヤフォンを忘れ、
　　　ほかにも忘れている気がする。

　まぁ、買い物は
　　スマホで済ますからいいけど。
　　　スマホは忘れなかった😅
***
　まずは、ニュース。

　一昨日（2024/07/09）の記事
　　[【NoLang】を知っていますか？　ゆっくり解説動画を10秒でw](https://qiita.com/kabumira/items/29d1c336943fc3126184)
　　　で、紹介した
　　　　MavericksのNoLang2.0ですが
　　　　　そのMavericksからポストが
　　　　　　ありました。

　【NoLang2.0の主機能
　　&　良い動画を生成するコツ】
　　　だそうです。

　また、この中には、
　　マニュアル的な記事への
　　　リンクもあります。

　[マーベリックさんポスト](https://x.com/sayhi2ai_jp/status/1810910536525304302?t=WeyrNgPgifBzRjvXrQiEfQ&s=03)
***
　次は、
　　Luma AIのDream Machineの
　　　ニュースです。ポストは
　　　　少し前ですが。

　[Luma AIさんポスト](https://x.com/LumaLabsAI/status/1809413580816879818?t=_76iCM9Vo5VkUa6GsJi-Wg&s=03)

　DeepL翻訳
「大変なトラフィックの中、お待たせいたしました。 Dream Machineの推論能力を2倍に増強しました！ 世代交代が格段に速くなり、キューも短くなるはずです。 
さあ、行きましょう！🚀。」

　ようは
　　“Dream Machineで
　　　待たされる時間が
　　　　少なくなりました”
　　　　　って話ですね。

　やっぱり
　　動画ができるまでの時間が
　　　少なくなるのは、
　　　　ありがたいことですね👍
***
　さて、本題です。

　今回は、
　　Code Interpreterで
　　　音声合成を行ないます。

　実は、
　　Code Interpreterで
　　　使えるライブラリを
　　　　調べていて、
　　　　　pyttsx3というものを
　　　　　　見つけました。

　pyttsx3についての
　　説明を聞きました。
***
***user***
pyttsx3について詳しく

***ChatGPT***
**pyttsx3** は、テキスト音声合成 (Text-to-Speech, TTS) 機能を提供するPythonライブラリです。以下にその詳細を説明します。

### pyttsx3の特徴

1. **プラットフォーム独立**:
   - Windows、macOS、Linuxの各プラットフォームで動作します。
   - 各プラットフォームのネイティブTTSエンジンを使用します（WindowsではSAPI5、macOSではNSSpeechSynthesizer、Linuxではespeak）。

2. **オフライン動作**:
   - インターネット接続が不要で、ローカルで音声合成が可能です。

3. **シンプルなAPI**:
   - 簡単にテキストを音声に変換できるシンプルなAPIを提供しています。

4. **音声のカスタマイズ**:
   - 音声の速度、音量、ピッチを変更する機能があります。
   - 利用可能な音声のリストを取得し、特定の音声を選択することができます。

### 主な用途

- アシスタントアプリケーション
- 教育用ソフトウェア
- 読み上げ機能付きのアプリケーション
- ユーザーインターフェースのアクセシビリティ向上
- 自動応答システム

pyttsx3は、これらの用途に対してシンプルかつ効果的なソリューションを提供します。
***
　ということで
　　使ってみました。

　日本語は、
　　ヘンテコになりました😅

　そこで
　　英語で喋らせます。

```Text:音声合成Prompt
pyttsx3を使って、“Hello. My name is ChatGPT. Which one of us are you?”という音声を作成して、音声ファイルにしてください。
コードは必要ありません。
音声ファイルが必要です。
実行してください。
```

　これで作成されます。

　Qiitaは
　　音声ファイルを
　　　アップできないし、
　　　　X-Twitterにポストするのも
　　　　　はばかれますので
　　　　　　提示できません😅

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

　今回は、ここまで。
HumHub公式マニュアルを読む（Database Models）

# HumHub公式Development Guide
## Basic Concepts > Database Models
https://docs.humhub.org/docs/develop/models/
### DBマイグレーション
#### そもそもDBマイグレーションとは？
WEBアプリのフレームワークの文脈で登場する場合は、データベース構造の変更の経過をソースコードに記録する仕組み。
アプリ側でソースコードにDB変更内容を記述して、専用コマンドを実行することで、DB側に変更を適用する。
- マイグレーションを作成する。ファイルにテーブル作成、カラム追加、などのデータベース構造の変更を記述する。
- マイグレーションを実行する。データベースにマイグレーションによる変更が適用される。

### Active Record
#### そもそもActive Recordとは？
Active Recordはデザインパターンを表す言葉。
WEBアプリのフレームワークで登場する言葉で、モデルクラスのこと。
DBの1テーブルがモデルの1クラスと対応する。
Python3エンジニア認定基礎試験/Python3エンジニア認定データ分析試験に合格しました

# はじめに
合格体験記を書くともらえる水筒が欲しかったので表題の2試験を受験しました。
行った学習内容等を備忘録として残しておきます。

# 試験情報

### Python3エンジニア認定試験とは？
[一般社団法人Pythonエンジニア育成推進協会](https://www.pythonic-exam.com/)が主催する、Pythonの言語仕様や文法等に関する知識を認定する資格です。
現時点で基礎試験、実践試験、データ分析試験の3つが展開されています。
今回は基礎試験、データ分析試験のみ受験したため、実践試験については取り上げません。

### Python3エンジニア認定基礎試験について
Python3の基本的な言語仕様や文法等についての知識を問われる試験です。
日頃Pythonを利用している方であれば、特に公式ドキュメント等に触れていなくても合格ラインに届く程度の難易度かと思います。
出題範囲等の詳細な情報は[公式サイト](https://www.pythonic-exam.com/exam/basic)をご確認ください。

### Python3エンジニア認定データ分析試験について
Python3を利用したデータ分析や機械学習の手法やライブラリ等の知識、及びデータ分析や機械学習についての知識を問われる試験です。
NumPyやSciPy、matplotlibといったライブラリについての知識、データ分析や機械学習の手法や方法についての知識があれば比較的容易に合格ラインに届くかと思います。
出題範囲等の詳細な情報は[公式サイト](https://www.pythonic-exam.com/exam/analyist)をご確認ください。


# 受験の感想と結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748131/798fc406-a00d-6840-d6bd-d9e32b8f3a1c.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748131/8dc86537-7ec0-ad96-c7a4-59092b4cb8a2.png)

受験結果ですが、それぞれ合格点700点に対して925点と875点でした。
感想としては、模擬問題で8-9割程度点数が取れる程度まで詰めておけば特に問題なく合格できるかなという印象です。
あとびっくりした点としては、受験結果がその場で印刷されて渡されるスタイル(Odysseyの個人ページからも参照できます)でした。ファイルとか持っていけばよかったです。
また、1月ほどで合格証が届きます。

# やったこと
- 模擬問題を解く(合わせて20h程度)
→認定スクールから模擬問題が公開されているため、そちらを参考にしながらわからない情報については調べて覚える、ということを行いました。
模擬問題へのリンクは各資格の公式サイト下部に掲載されています。
今回は[PRIME STUDY](https://study.prime-strategy.co.jp/)の提供する模擬問題を利用しました。

Pythonに関しては元々競プロやら業務やらで使っているという裏話があり、学習時間としてはかなり少な目かなと思います。
未経験から受けようとするなら50-60h程度でしょうか…？

# 受験費用
- 受験料 11,000円 * 2試験

計 22,000円

# 合格体験記
キャンペーンサイトは[こちら](https://www.pythonic-exam.com/taikenapply)
合格体験記を書くと、グッズがもらえます(終了日時未定)

(追記)
掲載されていました。グッズが届くのはもうちょいかかりそう。

[Python3エンジニア認定基礎試験合格体験記-yukikazari](https://www.pythonic-exam.com/archives/7851)
[Python3エンジニア認定データ分析試験合格体験記-yukikazari](https://www.pythonic-exam.com/archives/7854)

(追記その2)
届いた。わーい
夏に長袖は死ぬので、秋以降のイベントとかで着ようかな
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748131/c7e604f3-d07f-fc9c-63d6-ef0dae49e370.png)


# 今後受験する人へ
- やる気があれば、各試験の前提となっている教本を買うといいと思います
- Python未経験から受験する場合は上記教本を推奨します。ある程度慣れてると知らない情報が限定的になるので模擬問題+ネット情報だけでも問題ないですが、未経験だときつそうです。
- 合格体験記のやつはいつ終了になるのかわからないので、欲しい方はお早めに
- まだ可能かはわかんないんですが、受験宣言でグッズがもらえるキャンペーンもあります。こっちも試しに申し込んでみるといいかもしれません[キャンペーンサイト](https://www.pythonic-exam.com/archives/news/555camp)

# 今後の予定

実践試験満点取れるとこれまたグッズ？盾？みたいなのがもらえるキャンペーンがあります。
次取るとしたらこれかなぁという感じですね
【Go】delveでデバッグしてみる

## はじめに
Goでデバッグってどうやってやるんだろうと思ったので、調べてやってみました。

## delve インストール
```zsh
go install github.com/go-delve/delve/cmd/dlv@latest
```

## VSCode拡張機能 インストール
https://marketplace.visualstudio.com/items?itemName=golang.Go

## 動かしてみる
ブレークポイントを置く
![スクリーンショット 2024-07-11 12.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603224/b888b8f7-45fd-d302-b34c-2bc082369c14.png)

## デバッグを実行
デバッグタブの「実行とデバッグ」をクリック
![スクリーンショット 2024-07-11 12.21.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603224/703433da-1e82-73e3-2c87-51eb58bfbb53.png)

## ブレークポイントの状態を確認
上記のコードだと、localhost:8080にアクセスすると、ブレークポイントで止まる。
contextのデータの中身を確認できていることが分かる。
![スクリーンショット 2024-07-11 12.23.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603224/dad39934-52a9-0dfc-e10b-6c0ab1cbfcaa.png)

## 参考
- https://qiita.com/momotaro98/items/7fbcad57a9d8488fe999
IDEでファイル検索，文字検索，全体検索，編集する際のキーボードショートカット集

開発をする際にファイルや文字の検索，コーディングの様々なミニ機能をキーボードショートカットやコマンドでできると便利ですよね？本記事ではVSCodeやJetBrainsで使うことのできるキーボードショートカットやコマンドの例を記載する．


react，next.jsでコンポーネントベースのアーキテクチャを使用する際の工夫点やコンポーネントの探し方は以下の記事から

https://qiita.com/avaLangRuntimeError/items/b3b53cd90af6465c7e53

ファイル操作をコマンドで行いたい場合は以下の記事に記載されている

https://qiita.com/tarakokko3233/items/16f244606a73f7d106e4

# 全体検索
VSCodeの全体検索機能を使用すると，プロジェクト全体のファイルから特定の文字列を検索できる．これにより，コンポーネント名や特定のプロパティ，メソッドなどを素早く見つけることができる．


**コマンド**
**Cmd+Shift+F** または **Ctrl+Shift+F**

**使用方法**
1. コマンドを入力して全体検索ウィンドウを開く
2. 検索したいキーワードを入力
3. 結果一覧から該当ファイルと行を選択

# 定義へジャンプ
定義へジャンプ機能を使用すると，特定の変数や関数，コンポーネントの定義元にすぐに移動できる．コードの追跡やリファクタリングに非常に便利である．


**コマンド**
**Ctrl+Click**または**Cmd+Click**

**使用方法**
1. コード内で対象のシンボルを選択
2. F12キーを押すか，Cmdキーを押しながらクリック
3. 定義元の場所にジャンプ

# シンボル検索
シンボル検索機能を使用すると，プロジェクト内の関数やクラス，変数などのシンボルを素早く見つけることができる．


**コマンド**
**Cmd+T** または **Ctrl+T**

**使用方法**
1. コマンドを入力してシンボル検索ウィンドウを開く
2. 検索したいシンボル名を入力
3. 結果一覧から該当シンボルを選択


# ファイル内検索
ファイル内検索機能を使用すると，現在開いているファイル内で特定の文字列を検索できる．短期間で特定の場所を見つけるのに便利である．


**コマンド**
**Cmd+F** または **Ctrl+F**

**使用方法**
1. コマンドを入力してファイル内検索ウィンドウを開く
2. 検索したいキーワードを入力
3. 結果一覧から該当箇所を選択


# ディレクトリの構造からファイルを特定する
コマンドラインからディレクトリの構造を表示し，ファイルを特定することもできる．以下のようにfindやgrepコマンドを使用すると便利である．

**ファイルを検索する**
```
find . -name "ファイル名"
```

**特定の文字列を含むファイルを検索する**
```
grep -r "検索したい文字列" .
```

# ファイルのパスを表示する方法
VSCodeでは，コマンドパレットを使用してファイルのパスを表示することができる．またはファイル名を左クリックして`パスのコピー`を選択するとパスをコピーできる．


**コマンド**
**Cmd+Shift+P** または **Ctrl+Shift+P**

**使用方法**
1. コマンドを入力してコマンドパレットを開く
2. 「Copy Path」と入力
3. 選択してファイルのパスをコピーを表示


コマンドラインから特定のファイルのパスを表示するには，pwdやrealpathコマンドを使用する．

**現在のディレクトリのパスを表示する**
```
pwd
```
**特定のファイルの絶対パスを表示する**
```
realpath ファイル名
```

## マルチカーソル編集
**コマンド**
**Cmd + Option + ↑/↓**または**Ctrl + Alt + ↑/↓**


**使用方法**
1. コマンドを入力し複数行を選択する
2. 文字を入力する

複数行を同時に編集できる。

## 行の複製
**コマンド**
**Shift + Option + ↓**または **Shift + Alt + ↓**

現在の行を下に複製する。

## コメントアウト/解除
**コマンド**
**Cmd + /**または **Ctrl + /**

選択した行をコメントアウトまたは解除する。

## ファイル間の移動
**Ctrl + Tab**

:::note warn
 WindowsもMacもLinuxも`Ctrl`キーなので注意(Cmdではない)
:::



開いているファイル間を移動する。

## エラーや警告へのジャンプ
**コマンド**
**F8**
エラーや警告にジャンプできる．
/dev/spi* が無くて SPI が使えない

raspi-config で SPI を有効にして、さあ使おうとしたらうまくいかなかったお話。


# 環境

- Raspberry Pi 3B
- Raspberry Pi OS Lite (2024-07-04-raspios-bookworm-armhf-lite.img.xz)


# spi を python で読もうとするとエラー

以下は gpiozero ライブラリを使った場合。

```
$ python3 mcp30088.py 
/usr/lib/python3/dist-packages/gpiozero/pins/pi.py:465: SPISoftwareFallback: failed to initialize hardware SPI, falling back to software (error was: 'can not open SPI device')
  warnings.warn(
/usr/lib/python3/dist-packages/gpiozero/pins/pi.py:465: SPISoftwareFallback: failed to initialize hardware SPI, falling back to software (error was: 'can not open SPI device')
  warnings.warn(
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 75, in __call__
    self = cls._instances[key]()
           ~~~~~~~~~~~~~~^^^^^
KeyError: ('GPIO11', 'GPIO8')
.
.
.
```

WiringPi を使ったものでも同様です。

```
pi@raspberrypi:~ $ sudo python3 de.py
Unable to open SPI device: No such file or directory
```

# spi のデバイスファイルが無い


```
$ ls -l /dev/spi*
ls: '/dev/spi*' にアクセスできません: そのようなファイルやディレクトリはありません
```

# ハードウェア不良?

RaspberryPi を交換しても同様でした。

# OSのバージョン?

SPIが動作するシステムから、OSの入った microSD カードを持ってきて起動したら、そちらでは SPI が動作します。OSのバージョンが悪いのかな?

# 再インストール

切り分けのために、OSを再インストールしました。
再インストール直後は spi デバイスは見えます。
```

$ ls -alh /dev/spi*
crw-rw---- 1 root spi 153, 0  7月 11 11:42 /dev/spidev0.0
crw-rw---- 1 root spi 153, 1  7月 11 11:42 /dev/spidev0.1
```

先の python プログラムで spi を操作するのも問題ありませんでした。


# パッケージの競合?

問題のあったシステムでは、plymouth や pygame などをインストールしていました。それらが干渉しているかな? と思ったけれどそれらをインストールしていきましたが問題は再現しませんでした。

該当作業

「RaspberryPi Lite で起動スプラッシュを設定する」
https://qiita.com/nanbuwks/items/5c9bde5dce676de623a2
「Raspberry Pi で pygame」
https://qiita.com/nanbuwks/items/1e0e32f449e64cd0d188

結局、旧OSシステムのどこかがおかしくなっていたらしいというところまでで追求はやめて、新しくインストールしたOSシステムでSPIを動かすことにしました。


# 原因は?

問題のあったシステムでは、 dmesg 中に以下のような表示がありました。
```
$ dmesg | grep spi
[   12.770727] ads7846 spi0.1: supply vcc not found, using dummy regulator
[   12.803033] ads7846 spi0.1: touchscreen, irq 200
[   12.810634] input: ADS7846 Touchscreen as /devices/platform/soc/3f204000.spi/spi_master/spi0/spi0.1/input/input2
```

問題の解消したシステムでは、そのようなものはありませんでした。
```
 $ dmesg | grep spi

```

意図せずに、ads7846 の何かをインストールしていたか、どうかしていたのかな?
AWSサービス解説シリーズ #1 AmazonSNS ①Amazon SNSの概要と基本概念 

## はじめに
自分の勉強したことの記録も兼ねて書いていきます。例のごとくいつ飽きるかわからないのになぜかシリーズものにしてしまいましたが、頑張って続けます。
中身としては以下を想定しています。
- 公式ドキュメントからの引用8割
- 理解しにくい所の補足1割
- ネットの海から見つけてきた面白いと思った実装パターン1割

シリーズ1回目はAmazon SNS(Simple Notification Service)です。
それでは早速やっていきます。

## Amazon SNSの概要
Amazon Simple Notification Service (Amazon SNS) は、配信者から受信者 (または生産者から消費者) へのメッセージ配信を提供するマネージドサービスです。発行者は、論理アクセスポイントおよび通信チャネルであるトピックにメッセージを送信することで、受信者と非同期的に通信します。クライアントは SNS トピックをサブスクライブし、Amazon Data Firehose、Amazon SQS、HTTP、E メール AWS Lambda、モバイルプッシュ通知、モバイルテキストメッセージ (SMS) など、サポートされているエンドポイントタイプを使用して公開されたメッセージを受信できます。

![スクリーンショット 2024-07-11 11.49.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/714305/17fe67f2-8a1f-1f10-2c4b-893a138c2d15.png)

## 基本概念・用語の整理
### メッセージ
Amazon SNSで扱う「メッセージ」とは、配信者が受信者に送信する情報の単位を指します。具体的な内容はユースケースによって異なりますが、以下のようなものが含まれます。

- テキストメッセージ
SMSやEメールの本文として送信されるシンプルなテキストデータ。
- JSONペイロード
APIやサービス間でデータをやり取りするための構造化されたJSON形式のデータ。
- 通知メッセージ
モバイルアプリにプッシュ通知として送信される短いメッセージ。
- イベント情報
システムイベントやアラート情報を通知するためのデータ。

### トピック(Topic)
メッセージの配信を管理するための論理的なアクセスポイントおよび通信チャネルです。配信者はトピックにメッセージを送信し、受信者はそのトピックをサブスクライブすることでメッセージを受信します。各トピックは一意の名前を持ち、特定のメッセージ配信ルールやポリシーが設定できます。

### サブスクライブ
特定のトピックに対して受信者（サブスクライバー）がメッセージを受信するように登録することです。


### 配信者(Publisher, Producer)
メッセージを作成し、SNSトピックに送信する役割を担うエンティティを指します。具体的には、アプリケーションやシステムコンポーネント、あるいは特定のイベントに応じてメッセージを生成する自動化されたスクリプトやサービスが該当します。

### 受信者(Subscriber, Consumer)
SNSトピックにサブスクライブし、送信されたメッセージを受け取るエンティティを指します。具体的には、Amazon SQSキュー、AWS Lambda関数、HTTPエンドポイント、Eメールアドレス、モバイルデバイス（プッシュ通知やSMS）などが含まれます。受信者は、トピックに配信されたメッセージを処理したり、ユーザーに通知を送ったりする役割を担います。


## Amazon SNSを使うと何が嬉しいのか
Amazon SNSを使うと、メッセージの配信がとても簡単かつ効率的になります。これがなぜ嬉しいのかを理解するために、まずSNSがない場合の問題点をいくつか見てみましょう。
- 自前実装の手間とコスト
メッセージ配信システムを自前で実装するには、多くの時間とコストがかかります。特に、信頼性の高い配信を実現するためには、メッセージのキューイングや再試行、エラー処理などの機能を自分で作り込む必要があります。

- スケーラビリティの問題
大量のメッセージを効率よく配信するためには、システムのスケーラビリティを確保する必要があります。自前で実装した場合、このスケーラビリティを確保するのは非常に難しいです。

- 多様な配信方法のサポート
メールやSMS、モバイルプッシュ通知など、さまざまな配信方法をサポートするには、それぞれの方法に対応した実装が必要です。これも非常に手間がかかります。

これらをはじめとした、メッセージ送受信周りの色々を一挙に担ってくれるのが、Amazon SNSというわけです。

## おわりに
次回下記参考にしつつ、より詳細な機能について見ていきます。

https://docs.aws.amazon.com/ja_jp/sns/latest/dg/welcome-features.html

## 参考資料
https://docs.aws.amazon.com/ja_jp/sns/latest/dg/welcome.html
azure-pipelines.ymlでアプリ設定を追加・更新する

# Azure Functionsのアプリ設定する例


## AzureFunctionApp@2タスクのappSettingsは、文字列なので使い難い。。。
改行とか入ってしまうとダメ

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-function-app-v2?view=azure-pipelines

```
appSettings - App settings
string.

Enter the application settings using the syntax -key value
(for example: -Port 5000 -RequestTimeout 5000 -WEBSITE_TIME_ZONE).
Enclose values that contain spaces in double quotes (for example: "Eastern Standard Time").
```

## AzureAppServiceSettings@1タスクだと、JSONでしっかり書ける

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/azure-app-service-settings-v1?view=azure-pipelines

以下は、azure-pipelines.ymlの抜粋


```azure-pipelines.yml
variables:
  # Azure Resource Manager connection created during pipeline creation
  azureSubscription: "<DevOpsのService connections>"

  # リソースグループ名  
  resourceGroupName: "sample-group"

  # Function名
  functionAppName: "sample-func"

  # Agent VM image name
  vmImageName: "ubuntu-latest"

  # Working Directory
  workingDirectory: "$(System.DefaultWorkingDirectory)/"

  # 今回はAppConfigurationのエンドポイント
  appConfigurationEndpoint: "https://sample-app-config.azconfig.io"

  - stage: Deploy
    displayName: Deploy stage
    dependsOn: Build
    condition: succeeded()

    jobs:
      - deployment: Deploy
        displayName: Deploy
        environment: "development"
        pool:
          vmImage: $(vmImageName)

        strategy:
          runOnce:
            deploy:
              steps:
                - task: AzureFunctionApp@2
                  displayName: "Azure functions app deploy"
                  inputs:
                    azureSubscription: "$(azureSubscription)"
                    appType: functionAppLinux
                    resourceGroupName: $(resourceGroupName)
                    appName: $(functionAppName)
                    package: "$(Pipeline.Workspace)/drop/$(Build.BuildId).zip"
                    appSettings: |
                      [
                        {
                          "name": "HOGE",
                          "value": "VAR​"
                        },
                        {
                          "name": "POSTGRES_SERVER",
                          "value": "@Microsoft.AppConfiguration(Endpoint=$(appConfigurationEndpoint); Key=POSTGRES_SERVER)​"
                        }
                      ]
```


# おわり

何故かAzureFunctionApp@2のappSettingsだとエラーになる

```
Updating App Service Application settings. Data: {"":"[   {\n    \"name\": \"POSTGRES_SERVER\",\n    \"value\": \"@Microsoft.AppConfiguration(Endpoint=https://sample-app-config.azconfig.io; Key=POSTGRES_SERVER)​\"\n  }\n]"}
##[error]Error: Failed to update App service 'sample-func' application settings. Error: BadRequest - Parameter name cannot be empty. (CODE: 400)
```
windowsでiverilog その150

# 概要　
windowsでiverilogやってみた。
verilog見つけたので、やってみた。

# 参考にしたページ

https://qiita.com/takeru0x5569/items/b72eed2e0f50b843ae21

# サンプルコード

```

`timescale 1ns/1ps
`default_nettype none


module UART_RX #(parameter DIV_WID = 8, parameter DIV_CNT = 8'hAE)(input wire i_rst_n, input wire i_clk, input wire i_UART_RX, output wire[7:0] o_dat, output wire o_ena);
	reg [2:0] rx;
	reg busy;
	reg [DIV_WID - 1:0] div;
	reg [4:0] cnt;
	reg [9:0] sp_ff;
	reg chk_trg;
	reg [7:0] dat;
	reg ena;
	wire dt_get;
	wire start;
	wire fin;
	assign start = (rx[2:1] == 2'b10) & (busy == 1'b0) ? 1'b1 : 1'b0;
	assign fin = (cnt == 5'd9) & (dt_get == 1'b1) ? 1'b1 : 1 'b0;
	assign dt_get = (busy == 1'b1) & (div == 8'd0) ? 1'b1 : 1'b0;
	assign o_dat = dat;
	assign o_ena = ena;
	always@(posedge i_clk or negedge i_rst_n)
	begin
		if (~i_rst_n)
			rx <= 3'b111;
		else
			rx <= {rx[1:0], i_UART_RX};
	end
	always@(posedge i_clk or negedge i_rst_n)
	begin
		if (~i_rst_n)
			busy <= 1'b0;
		else if (start)
			busy <= 1'b1;
		else if (fin)
			busy <= 1'b0;
	end
	always@(posedge i_clk or negedge i_rst_n)
	begin
		if (~i_rst_n)
			div <= 8'd0;
		else if (start)
			div <= { 1'b0, DIV_CNT[DIV_WID - 1:1] };
		else if (busy)
		begin
			if (div == 8'd0)
				div <= DIV_CNT;
			else
				div <= div - 1;
		end
		else
			div <= 8'd0;
	end
	always@(posedge i_clk or negedge i_rst_n)
	begin
		if (~i_rst_n)
			cnt <= 5'd0;
		else if (start)
			cnt <= 5'd0;
		else if (dt_get)
			cnt <= cnt + 1;
	end
	always@(posedge i_clk or negedge i_rst_n)
	begin
		if (~i_rst_n)
			sp_ff <= 10'h3FF;
		else if (dt_get)
			sp_ff <= { rx[2], sp_ff[9:1] };
	end
	always@(posedge i_clk or negedge i_rst_n)
	begin
		if (~i_rst_n)
			chk_trg <= 1'b0;
		else
			chk_trg <= fin;
	end
	always@(posedge i_clk or negedge i_rst_n)
	begin
		if (~i_rst_n)
		begin
			dat <= 8'h00;
			ena <= 1'b0;
		end
		else if ((chk_trg == 1'b1) & (sp_ff[0] == 1'b0) & (sp_ff[9] == 1'b1))
		begin
			dat <= sp_ff[8:1];
			ena <= 1'b1;
		end
		else
		begin
			dat <= dat;
			ena <= 1'b0;
		end
	end
endmodule

module test();
	reg i_rst_n = 1'b0;
	reg i_clk = 1'b0;
	wire [7:0] o_dat;
	wire o_ena;
	reg uart_rx_in = 1'b1;
	task T_UART_RX;
		parameter RATE = 115200;
		input [7:0] dat;
		integer i;
		time BIT_CYC;
		begin
			$display("UART input start : 0x%2X", dat);
			BIT_CYC = 1000000000 / RATE;
			uart_rx_in = 1'b0;
			#BIT_CYC;
				for(i = 0; i < 8; i = i + 1)
				begin
					uart_rx_in = dat[i];
					#BIT_CYC;
				end
				uart_rx_in = 1'b1;
			#BIT_CYC;
		end
	endtask
	UART_RX DUT(.i_rst_n (i_rst_n), .i_clk(i_clk), .i_UART_RX(uart_rx_in), .o_dat(o_dat), .o_ena(o_ena));
	always
		#25
			i_clk = ~i_clk;
	initial
	begin
		$dumpfile("test.vcd");
		$dumpvars(0, DUT);
		#120
			i_rst_n = 1'b1;
		#5000;
			T_UART_RX (8'h65);
		#50000;
			T_UART_RX (8'h39);
	#120
		$finish;
	end
endmodule





```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/3caeb501-cdd3-0a54-ba31-370bd8bc1277.png)



以上。
ITパスポート 確率と統計

・確率
ある事象の起こる可能性の度合い
確率＝ある事象が起こる場合の数/起こりうる事象の全ての場合の数

・場合の数
複数の事象が同時に起こる場合の数を考えるときは、かけ算で求める
複数の事象が別々に起こる場合の数を考えるときは、足し算で求める

・順列
n個の中からr個を順番に取り出して並べたもの

・組合せ
n個の中から並び順を考慮せずに、r個取り出すこと

・統計
・平均値
各データの合計をデータの個数で割った値

・メジアン（中央値）
データを順番に並べて中央に位置する値
データの個数が偶数の場合は、中央の二つの値の平均値

・モード（最頻値）
出現頻度の最も高い値

・レンジ（範囲）
データの最大値と最小値の差

・分散
平均値からのばらつきを表し、偏差（平均値との差）の２乗の平均値

・標準偏差
分散の平方根
標準偏差が小さければ、平均値のまわりのデータが多く、ばらつきが小さい
標準偏差が大きければ、ばらつきが大きい

・正規分布
平均値を中心とした左右対称の釣り鐘型の分布

・外れ値
他のデータから著しく離れた値

・異常値
他のデータから著しく離れているもののうち、入力ミスなどで除外すべきデータ
chocoZAPでながらプログラミングをすれば運動も作業も捗るかやってみた

## はじめに

こんにちは。

突然ですがエンジニアの皆さん、運動をしていますか？
どうしてもデスクワークが必然となってしまうこの業界。
私もエンジニアの端くれですが少し前までのコロナ禍、新型コロナに感染した事をきっかけに自身の体力のなさを思い知らされました。

そこで広告や好きな配信者さんの動画をきっかけに話題となった「chocoZAP（以下チョコザップ）」に通う決意をしました！
最近はカラオケや洗濯、と少々運動と離れた新サービスの宣伝が目立ちますが……それらよりも前にクロスバイクをしながら読書や勉強ができる「デスクバイク」なるマシンが導入されました。

そこで、このデスクバイクに乗りながらプログラミングを書ければ運動も作業もできて一石二鳥じゃないか！　と思い体験してみたのでこの機会にレビューも兼ねて記事にしてみました。

## デスクバイクについて少し説明

クロスバイク（エアロバイク）は体験したことがない人でも想像がつくと思います。
自転車に乗るような感覚でペダルを漕いで運動ができるアレですね。
で、デスクバイクはその名前の通り自転車の取手がなく、代わりに目の前に机（デスク）があるマシンとなっております。
所謂「ながら運動」が可能という訳ですね。
ちなみにルールとして事前予約が必要なので、いつ何時もできるという訳ではありません。

▼詳細はこちらを読んで頂ければと思います
https://chocozap.jp/service/desk_bike

## 実際に体験してみた

体験する前にまずどれくらいの負荷をかければ良いのか？　について。
負荷の設定は数値化されているのですが、通常のクロスバイクですと男性は「3」、女性は「2」から始めるのがおすすめだそうです。

:::note warn 
※この辺りの数値の詳細はマシンの機種によっても変わると思うので、あくまでチョコザップに置かれているマシンでのお話です。
:::

また、通常のクロスバイクだと初心者におすすめな目安は、RPM（回転数/分）の数値が50～60ぐらいをキープと公式の操作説明の動画で紹介されておりました。

:::note info
RPMとは1分間にペダルが何回転されたかを示す数値です。
（チョコザップのアプリの説明では1分間におけるホイールの回転数と記載されてました）
:::

今回私は体力向上を図っているのでそれよりも少し高めの負荷は「4」、PRMは「80～90前後」を目標にやってみました！
※RPMの他にもDIS（走行距離）やTMR（運動経過時間）など、モニターで好きな項目を確認できるようになっております。

以下、5分刻みで初めて体感した感想です。

***

開始から5分後

- 思ったよりも動きやすくてキーボードを叩くのが進む
- 何をしようかと考える余裕がある
- 背筋を伸ばしながらのPC作業により普段の自分の姿勢の悪さを実感する

***

開始から10分後

- 徐々に疲れが出て来て、コードを書くのに集中し辛くなってくる
- 残り時間が半分な事に気づいたものの、あまり進んでないことに少し焦り始める

***

開始から15分後

- 脚の動きが減ってRPMの数値がどんどん減少していく
- 無理はしないように脚を動かすことよりもキーボードを叩くのに今更ながら集中力を寄せ始まる
- 疲労で身体全体が大きく揺れ始め、VScodeの画面が見辛い（背景が黒色なので余計に……）

***

開始から20分後（終了）

- 当初予定していた作業量の半分以下で終了（悔しい）
- 終了後、普通のランニングと同等かそれ以上に脚の疲労感が凄い
- 20分が物凄く短く感じる

***

**……想像の倍以上にきついですね！**
始めから飛ばしすぎたと今では反省しております……。

## 良かったと思う点

- 自然と姿勢が良くなる
※現場でもですが、集中するとつい猫背になりがちなので、常に姿勢が保たれるのは良いなと思いました。逆に正さないと脚を動かすのがきつくなります。
- 利用時間が1枠20分と決まっているので「この短い時間で何をするか？」と目標を立てて進め易い
※初体験では思うように行きませんでしたが……。
- 他の人も多く利用する場所なので、それなりの緊張感を持って作業ができる

## 悪い（改善して欲しい）と思った点

- Wi-Fi環境はあるが、セキュリティを懸念して基本使わないのでインターネットで調べながらの作業は難しい
※スマートフォンやタブレットを横に置けば可能ですが、身体を動かしながら首を何度も振るのは結構きつい……。
- 予約の時間が決まっている（毎時0分～20分）ので好きなタイミングで使えない
※枠が空いていれば継続しても使えるそうです（1日2枠まで）
- 店舗によってはマシンの配置の場所のお陰で集中できないかも
※私が通っている店舗も導入直後の際は店内のど真ん中に置かれていてどうしても視線が気になってしまい利用しておりませんでした……（今は改善されました！）

## まとめ

店舗までの移動時間やマシンの利用時間もありますので、
**「適当にながら運動しながらプログラミングを書く」** のには向いてないと思いました。
それなら自宅などで作業をしていたほうが時間を無駄にしないかもしれません。
負荷を弱めれば書くのに集中し易いですが、逆に運動としてはどうか？　という話になってしまうと思いますので、程良いバランスを見つけるのにまだまだ時間が掛かりそうです。
**「今途中まで進めている作業があるけど、ついでに身体も動かしてこようかな……」** ぐらいの感覚で使うと一番効率が良いと思いました！
プルリクエストまでの流れ

## はじめに
Git hubを利用してプルリクエストになんとなく慣れてきたものの、やはり前に残したメモを確認しないとまだ完璧とは言えない状態のわーちゃんです。
今回はそんなGit hubを使用したプルリクエストまでの流れをサラッとアウトプットします。

## 編集後のプルリクエスト手順
Vscodeにてファイル等を編集した後、`git add .`。`git commit`。`git push`まで完了させます
[![Image from Gyazo](https://i.gyazo.com/f97d9afd608603d6e9547155dbaca8bc.png)](https://gyazo.com/f97d9afd608603d6e9547155dbaca8bc)

Git Hubで先ほどpushしたものを選択できるような黄色の表示が出ているかと思います。その黄色表示にある`compare&pull request`という場単を押します
[![Image from Gyazo](https://i.gyazo.com/580b0f3ac068ad4c47b8ff090688e5fa.png)](https://gyazo.com/580b0f3ac068ad4c47b8ff090688e5fa)

`description`をかく欄が表示されるので下記のような事項を入力します
```
## 概要
なぜ既存のコードに変更を加えたいか
どういう方針でコードを変更したいか

## 変更点
実際どういう変更をしたか

## 関連Issue
概要にかかなかったりした場合

## 動作確認
どういう手順で自分の変更を確認したか

## その他
- 後回しにしている課題
- デザインレビューやステークホルダーへの確認について
- 参考にした他の実装

このほか必要であれば画像なども載せておく
```

入力が終わったら「プルリクエスト」をして完了。
レビューが完了したらMerge等次の行動をとります

## さいごに
本当にサラッとプルリクエスト部分の解説でした。プルリクエストボタンを押した後、デフォルトではマージボタンもすぐ押せるようになっていますが、レビュー評価がなされるまでは押してはいけません（本当に！！）
mermaidを使ってみた

# はじめに
今更ながらmermaidを使用してみて便利だと感じたため、簡単な使い方を記載しました。

# mermaidとは
JavaScriptベースの図を書くツール。mdファイルの中にテキストを記載することでフローチャート、クラス図、ガントチャート、シーケンス図などを表示できる。github, Qiita, Zennなどがmermaid記法に対応している。githubのREADME.mdやwikiなどでちょっとした図を書くときに便利。
https://mermaid.js.org/

VSCodeでは拡張機能"Markdown Preview Mermaid Support"をインストールすることで使用可能。


# フローチャートを書いてみる
カメラ映像をJetsonに入力し、推論結果をMQTTでAWSにアップロードするシステムを書いてみる。
- 左→右のフローチャートを書く場合は"flowchart LR"と記載する。
- ノード（変数名[表示テキスト]）を作成し、矢印でつなげる。
- 複数のノードをまとめたいときはsubgraphを使用する。
```
flowchart LR

%% component %%
camera[カメラ]
jetson[Jetson Nano]
core[IoT Core]
db[DynamoDB]

subgraph AWS
    core --> db
end

camera --> jetson
jetson --MQTT--> core
```

```mermaid
flowchart LR

%% component %%
camera[カメラ]
jetson[Jetson Nano]
core[IoT Core]
db[DynamoDB]

subgraph AWS
    core --> db
end

camera --> jetson
jetson --MQTT--> core

```

"flowchart TD"と記載すると、上→下のフローチャートになる。
```mermaid
flowchart TD

%% component %%
camera[カメラ]
jetson[Jetson Nano]
core[IoT Core]
db[DynamoDB]

subgraph AWS
    core --> db
end

camera --> jetson
jetson --MQTT--> core

```

# スタイルを変更する
クラスを定義し、CSSでスタイルを指定することで、特定のノードのみスタイルを変更することができる。  
上図のAWSの要素のみ緑色で塗りつぶし、枠線を無しにしてみる。

```
flowchart LR
%% style %%
classDef awsComponent fill:#7BCCAC,stroke-opacity:0;

%% component %%
camera[カメラ]
jetson[Jetson Nano]
core[IoT Core]:::awsComponent
db[DynamoDB]:::awsComponent

subgraph AWS
    core --> db
end

camera --> jetson
jetson --MQTT--> core

```

```mermaid
flowchart LR
%% style %%
classDef awsComponent fill:#7BCCAC,stroke-opacity:0;

%% component %%
camera[カメラ]
jetson[Jetson Nano]
core[IoT Core]:::awsComponent
db[DynamoDB]:::awsComponent

subgraph AWS
    core --> db
end

camera --> jetson
jetson --MQTT--> core

```

# フローチャートの中に画像を入れてみる
上図のJetsonのノードを画像に変更してみる。
```
flowchart LR
%% style %%
classDef awsComponent fill:#7BCCAC,stroke-opacity:0;
classDef image fill-opacity:0,stroke-opacity:0;

%% component %%
camera[カメラ]
jetson[<img src="https://user-images.githubusercontent.com/65023550/206888562-6710308d-6a9e-4a88-9005-a7cff4ed1fd3.jpg" width="100">]:::image
core[IoT Core]:::awsComponent
db[DynamoDB]:::awsComponent

subgraph AWS
    core --> db
end

camera --> jetson
jetson --MQTT--> core

```

```mermaid

flowchart LR
%% style %%
classDef awsComponent fill:#7BCCAC,stroke-opacity:0;
classDef image fill-opacity:0,stroke-opacity:0;

%% component %%
camera[カメラ]
jetson[<img src="https://user-images.githubusercontent.com/65023550/206888562-6710308d-6a9e-4a88-9005-a7cff4ed1fd3.jpg" width="100">]:::image
core[IoT Core]:::awsComponent
db[DynamoDB]:::awsComponent

subgraph AWS
    core --> db
end

camera --> jetson
jetson --MQTT--> core

```

# おわりに
矢印の位置の調整などをしなくて済むので、ちょっとした図を描くときに便利だと感じた。AWSのアイコンが使用できるようになればもっと便利だと思った。

# 参考
- https://mermaid.js.org/
HTMLとCSSの基本：クラスの使い方と親子関係でスタイルを正しく適用する方法

はじめに
---
私はWebデザインの超初学者です。過去に一度HTMLとCSSを挫折してます。
これからも挫折する可能性はありますが、将来のために少しでも毎日コツコツ頑張っています。
誤りがある箇所についてはご指摘いただけますと幸いです。

△ 私が実際にハマったのは、、、
---
classもCSSもあっているのに反映されない！？
なんで！？
(下記codeあり)


【結論】
---
・親要素のclassにstyleを当てないと反映されない。
・色々装飾したい時は、しっかり`<div></div>`を活用してclassを与える。



? そもそも classってなに
---
・「同じように見せたい箇所全部」 or 「一部分だけ」 styleを当てる時に使う。
・classはHTMLに書いて設定する。
・class名に絶対的な決まりはなく、その人のセンスによるところもある。

◎ class を使うメリット
---
**1 .  スタイルを再利用できて効率的！**
クラスを使うことで、同じスタイルを複数の要素に簡単に適用できる。
→ スタイルを再利用することができ、コードが効率的になる。

**2 .  セレクタの特異性を制御！**
クラスセレクタはタグセレクタや属性セレクタよりも特異性が高い。
→ スタイルの適用優先順位を簡単に制御できる。
（上記抜粋）


実際に書いていたコード⬇️
---

### × NG 
【code】
```html:index.html
<span class="btn-message">さっそく開発する</span>
```

```css:style.css
.btn-message span {
  color: #fff;
  background-color: #5dca88;
  display: inline-block;
  padding: 15px 40px;
}
```

【見た目】
![スクリーンショット 2024-07-11 10.36.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830302/e361e267-16a4-43d8-42dc-eb0eb719b9fc.png)


→　`class="btn-message"` と同じ階層(横並びに記載している)に `<span></<span>` があるため、CSSをあてても効かない。




### ◎OK 
【code】

```html:index.html
<div class="btn-message">
　　<span >さっそく開発する</span>
</div>
```
```css:style.css
.btn-message span {
  color: #fff;
  background-color: #5dca88;
  display: inline-block;
  padding: 15px 40px;
}
```
【見た目】
![スクリーンショット 2024-07-11 10.37.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830302/c7140a68-c58d-98b7-d325-1b7ea5e94d2e.png)


→　classのしている一つ下の階層（インデント下げしてるところ）にstyleがあたる。


おわりに
---
大事なのは**要素の親子関係**。
行数が少し増えてでもclassを与えないと完成しないということを学びました。
記憶力は求められないけど、丁寧さは必要だと感じました。
雑にclassつけると後々ぐちゃぐちゃになって後悔するので、整理しながらかけるようになりたいと思いました。
最初から綺麗にかけるに越したことなし〜！だが、最初からはむずかしい。
毎日こつこつ頑張ります。
isoメディアファイル（イメージファイル）にご注意を！

今回期間をあけて２つ同じようなことが起こったので皆様にもご注意と自分への反省も含めて書きます。

①　別の方がCADで作業をしている最中にブルースクリーンになって再起動できず、
システムサポートに電話をして

#####  F２連打

##### 診断テスト

![240605090635829.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/dc62a95a-075e-6270-9027-99ad96023794.jpeg)

##### セーフモードで立ち上がるはずが、さらにブルースクリーン

##### 8GBのUSBフラッシュメモリーをご用意くださいとサポートの方がお問い合わせ

##### メディアファイルを作成しますとのことで、用意、１時間ほどダウンロードした後にUSBフォルダの名前が変わって中に入っていたすべてのファイルが消えてしまった。

## <strong><font color="red">返してくれー！僕のエクセルVBAファイル３年分。</color></strong>

②　2024年7月10日（水）
秋田に営業所があってたまたまそちらにPCをキッティングが終わってお送りすることになった。
そこで秋田までいってキッティングする予定もあるので、せっかく思い出した機会にWindows11がダウンロードできない（ネットにつながっていない機体も想定して）正常性チェックアプリとwindows11をダウンロードした。
![スクリーンショット 2024-07-11 104517.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/c2170f35-79fa-f585-b23e-642d142b0066.png)

##### 画面上ではISOファイルとかイメージファイルとは書いていないので1テラのUSBフラッシュメモリー（ほかのキッティング用PCのデータバックアップがいっぱい）を差しておこなった。
##### １００％終わった段階で見えていたフォルダ群はすべて消え、もともとＥフォルダだたのがＦフォルダにかわってisoデータだけになった。
## <strong><font color="red"> 返してくれー。５人分のバックアップデータ約７０ＧＢ分</font></strong>


>## ①②は時期は違えど同じこと。
>## メディアとかisoファイルとかイメージファイルなどの言葉にはとても注意を払うことが必要です。

やさしい上司で注意喚起でおわりましたが、本当にデータがデータだったら大変なことです。
[Python]dataclass

# dataclass

Pythonの`dataclass`は、Python 3.7から導入されたデータクラスを定義するための便利な機能です。`dataclass`を使用することで、データの保持と操作のためのクラスを簡潔に定義できます。以下では、`dataclass`の基本的な使い方や機能について詳細に説明します。

### 基本的な使い方

`dataclass`を使用するには、`dataclasses`モジュールをインポートする必要があります。

```python
from dataclasses import dataclass
```

そして、`dataclass`デコレータをクラス定義の直前に記述します。`dataclass`デコレータを付けたクラスは、自動的にいくつかの特定の機能を持つようになります。

```python
@dataclass
class MyClass:
    attr1: str
    attr2: int
```

この例では、`MyClass`というデータクラスが定義されています。`attr1`と`attr2`はそれぞれ文字列と整数の属性です。`dataclass`デコレータにより、以下のような機能が自動的に追加されます：

- `__init__`メソッド：属性を受け取るイニシャライザが自動的に生成されます。
- `__repr__`メソッド：オブジェクトの文字列表現を返す`__repr__`メソッドが自動生成されます。
- `__eq__`メソッド：オブジェクト同士の等価性を比較する`__eq__`メソッドが自動生成されます。

### 属性のデフォルト値と型ヒント

`dataclass`では、属性にデフォルト値を設定したり、型ヒントを指定することができます。

```python
@dataclass
class Point:
    x: float = 0.0
    y: float = 0.0
```

この例では、`Point`クラスが定義されています。`x`と`y`はデフォルト値として`0.0`を持つ浮動小数点数型です。

### 不変なデータクラス

`dataclass`を不変な（immutable）データクラスとして定義することもできます。これは、属性の値が一度設定されたら変更できないクラスです。

```python
from dataclasses import dataclass

@dataclass(frozen=True)
class ImmutableClass:
    attr1: str
    attr2: int
```

このように`@dataclass(frozen=True)`と指定することで、生成されたクラスは不変になります。そのため、インスタンスを作成後に属性を変更することはできません。

### メソッドの追加

`dataclass`にはデフォルトで生成される特殊メソッドに加えて、通常のメソッドも自由に追加することができます。

```python
@dataclass
class MyClass:
    attr1: str
    attr2: int
    
    def my_method(self):
        return f"{self.attr1} - {self.attr2}"
```

### 継承とdataclass

`dataclass`は通常のクラスと同様に継承することができます。継承した場合、親クラスの`dataclass`の特性が引き継がれます。

```python
@dataclass
class ParentClass:
    attr1: str
    attr2: int
    
@dataclass
class ChildClass(ParentClass):
    attr3: float
```

### dataclassの利点

- **簡潔な定義**：属性の宣言が簡単で、初期化や比較などの特殊メソッドが自動生成されるため、コードの量が少なくて済みます。
  
- **デフォルト値や型ヒントのサポート**：属性にデフォルト値を設定したり、型ヒントを利用することが容易です。

- **不変なデータクラスのサポート**：`frozen=True`を指定することで、不変なデータ構造を定義することができます。

Pythonの`dataclass`は、データを保持し操作するシンプルで効果的な方法を提供するため、特にデータ処理において非常に便利です。
アナログチャネルの新アイデア模索してみる

## はじめに
今回は下記イベントに参加してみます。このなかでもアナログチャネルといわれている「FAX」「郵送」を顧客コミュニケーションに活用したアイデアを発信できればと思います。

https://qiita.com/official-events/a1b1a6dd87105eb2bb92


## 現状の「FAX」「郵送」活用法
![FAX郵送.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777936/a794bdd7-9dc2-978a-88e7-9e1d73a3293a.jpeg)

### FAX
- 注文・発注書の送受信：中小企業や伝統的なビジネスでFAXを使って注文書や発注書を送受信する
- 医療情報の送信：病院間での患者情報のやり取りや処方箋の送信にFAXを使用
- 緊急連絡：災害時や通信インフラが不安定な地域での連絡手段


### 郵送
- ダイレクトメール：宣伝やプロモーションのためのカタログやチラシを顧客に送付
- 請求書の送付：サービスや商品に対する請求書を郵送
- 製品サンプルの配布：新製品のサンプルやクーポンを顧客に郵送

## こんなのあったら面白そう
現状のfaxや郵送でできることを踏まえて、アイデアをいくつか挙げてみます。

### 感温FAXor郵送メッセージ
デジタルツールでも文字に様々な変化を加えることは可能だが、あえて人の体温や水・お湯を利用した温度変化で表示内容が変わる特殊なインクを使用したFAXや郵送物。
特殊なインクというのがポイント。
メッセージが届いた時の温度に応じて異なる情報を表示できるようにするともっと楽しめそう。
受け取る環境や状況に応じた情報提供が可能となる

### 定期便パズル
郵送によるパズル。月単位等、数回に分けて郵送されるパズルのピースを集めてもらうことで継続的な興味を引くことができる。全てのピースを集めると特典やプレゼントがもらえるようにする。
某企業の春のパン祭りのようにシールを集めるのではなく、パズルを完成させることで手元に集めた証拠も残り、プレゼントも受け取れるので喜ばれる可能性が高い。
最初のパズル代だけ徴収し、完成パズルの写真をlineか何かで送付時に企業に対するアンケートを実施（結構細かく）。顧客情報も狙う。

### 郵送orfaxアートギャラリー
いまやデジタルアートが主流となる中、あえてfaxと郵送物がもつ物理的な存在感を利用したもの。顧客が企業に対して作品を送り、デジタルアートギャラリー又は実際の会場で鑑賞できるようにする。デジタルに不慣れな方への参加を視野に、企業のコミュニティファンを増やす事が可能となる。

## さいごに
3つほど考えてみましたが、どれもアートよりになってしまいました。今回の企画の趣旨に沿っているのか何とも言えないのですが、考えたことを閉じ込めておくのももったいないので。
[Flutter] TextFieldの高さをSizeBox以外で変更

![スクリーンショット 2024-07-11 10.42.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/6dc89edd-eb2f-b74b-1cb1-b648a0f6359f.png)
![スクリーンショット 2024-07-11 10.42.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/a592c4c8-4360-f7cd-6e06-4e4ed22cd07e.png)

#### わかりにくくなるので、バリデーション部分は消してあります。

      TextFormField(
        decoration: InputDecoration(
          //下記2行追加
          isDense: true,
          contentPadding: const EdgeInsets.all(12),
        ),
      ),


Sizeboxだとバリデーションをかけた時にテキストが表示され、テキストフィールド部分の高さが変わってしまいアドバイスもらったところこんなやり方あるよということで教わりました。

バリデーションの際に、テキストフィールドの高さ変わって欲しくないんだよなあ
でも通常の高さは嫌なんだよなあ
なんて方は参考にしてもらえたら幸いです。
smart japan ノートパソコン買ってみた その6

# 概要
smart japan ノートパソコン買ってみた。
故障した。

# 症状
充電がならない。
充電器のLEDが点かない。

# 調査した。
充電器とコンセントの間が怪しい。
ミッキーソケットとAC１００Vコンセントの間が怪しい。
ニッパで切断しテスターで導通を測ると、ミッキーソケットから１０ｃｍのところの銅線が錆びて切れてた。（細いし）
日本製では、考えられない。お粗末。

# 対策
ハードオフで、ミッキーソケット付きケーブルを調達。５５０円也。

以上。
【Figma Widget】Figma Widgetでインターフェースを作る

## はじめに
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390720/534c8618-5ac1-1334-dfdc-da1837e75e67.png)
みなさんは、FigmaのWidgetでUIを作ろうとしたことがありますか？
この記事では、Figma Widgetでインターフェースを作る方法を解説しようと思います。

## Figma Widgetでインターフェースを作る
Figma Widgetでインターフェースを作るには、Figma Widgetで使えるコンポーネントを利用します。
コンポーネントは、カスタムインタラクティブウィジェットを構築するために使用できるレイヤーです。

Figma Widgetでインターフェースを作るのに使えるコンポーネントは以下のとおりです。


### ⚪︎ AutoLayout
AutoLayoutは、自動レイアウトが自動的に適用されるフレームです。
そのため、`direction`・`horizontalAlignItems`・`verticalAlignItems`・`spacing`・`paddingといったAutoLayout特有の小道具を追加で受け取ります。

https://www.figma.com/widget-docs/api/component-AutoLayout/

### ⚪︎ Frame
Frameは、Figma内の非オートレイアウトのFrameとまったく同じように動作するコンポーネントです。
そのため、子要素は`x`と`y`の制約を使って配置されます。

https://www.figma.com/widget-docs/api/component-Frame/

### ⚪︎ Text
テキスト・コンポーネントは、Figma でテキストに適用できるプロパティの大部分をサポートしており、ウィジェットにテキストを含める主な方法です！

https://www.figma.com/widget-docs/api/component-Text/

### ⚪︎ Rectangle
Rectangleは子や自動レイアウトのないフレームです。

https://www.figma.com/widget-docs/api/component-Rectangle/

### ⚪︎ Image
Imageは画像の塗りつぶしを持つ矩形の構文上の糖分です。 
`fill prop`の代わりに`src prop`があり、URL文字列かImagePaintのどちらかを指定します。 
URL文字列が渡された場合は、それがImagePaintの作成に使用されます。

https://www.figma.com/widget-docs/api/component-Image/

### ⚪︎ Ellipse
Ellipseは楕円や円が作成されるコンポーネントです。

https://www.figma.com/widget-docs/api/component-Ellipse/

### ⚪︎ SVG
SVGは、ウィジェット内で SVG を直接レンダリングできるコンポーネントです。

https://www.figma.com/widget-docs/api/component-SVG/


### ⚪︎ Line
Lineは線を引くことができるコンポーネントです。

https://www.figma.com/widget-docs/api/component-Line/


### ⚪︎ Input
Inputは、ウィジェット内で直接テキストを編集することができるコンポーネントです。
これにより、ウィジェット内でテキスト コンポーネントを入力または更新できるようになります。

https://www.figma.com/widget-docs/api/component-Input/

### ⚪︎ Fragment
Fragmentは、ReactのFragmentと同様に、childrenとkeyのみを受け取るコンポーネントです。

https://www.figma.com/widget-docs/api/component-Fragment/

### ⚪︎ Span
Spanは、Textコンポーネント内の文字の範囲をスタイリングするために使用されるコンポーネントです。
そのため、Spanは、Text コポーネントに存在するすべてのテキスト スタイリング プロパティをサポートしています。
Spanは、Textコンポーネントか別のSpanの子にしかなれません。

https://www.figma.com/widget-docs/api/component-Span/


## まとめ
この記事では、Figma Widgetでインターフェースを作る方法を解説しました。
ぜひこの記事を参考にFigma Widgetのインターフェースを作ってみてください。

---

最後まで読んでくださってありがとうございます！

普段はデザインやフロントエンドを中心にQiitaで記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

https://twitter.com/degudegu2510
Azure Blob Storageのバージョン管理機能の設定方法(時間ベース)

### はじめに
意外と日本語での情報が少なく、理解に苦しんだので、ここに簡単にまとめておきます。

## どんな機能か
+ コンテナ内のファイルの更新履歴を取得でき、誤って更新した場合にロールバックなどが可能となる（以下、 実際の画面）
<img width=600 alt="バージョン管理１" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/b08c51fa-9861-cae4-7ef6-6c60e05a8ba4.png">

## バージョン管理の設定方法
新規作成時に以下チェックを付けておくだけです。
<img width=400 alt="設定画面１" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/31e2a3a6-68b6-a5af-9b06-45a0f088eecc.png">

作成後は、データ保護のから設定可能です。
<img width=400 alt="設定画面１" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/fd9501df-7a59-e64a-525f-0dea1eec4aac.png">

## バージョンレベルの不変性のサポートを有効にする
バージョン管理の設定を適用した際、特定のユーザーが悪意を持って過去のログを履歴から消したりするケースが考えられれます。それを防ぐ機能が「バージョンレベルの不変性のサポート」となります。ポイントは以下です。
+ 設定をオンにすると、過去バージョンが削除できなくなり悪意を持ったログの削除を防げる
+ バージョン管理はしているが、コンテナ内のファイルの上書きは可能
+ バージョン管理機能がオンの場合のみ設定可能
+ アクセスポリシーはコンテナごとに設定ができるのですが、こちらの設定は全てのコンテナに自動的に適用されます
+ 設定の付与後、設定削除ができなそうです（方法を知っていたら教えてください）

### バージョンレベルの不変性のサポートの設定方法
以下新規作成時にチェックを付けることで、設定ができます。
<img width=400 alt="設定画面２" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678759/4b045c04-7e1d-476a-74e7-47b47e2aa6b1.png">

Storage　Accountの作成後の設定はバージョン管理機能をオンにした状態で、アクセスポリシーの画面から設定可能です。
[Python]継承

# 継承

継承（inheritance）は、Pythonにおけるオブジェクト指向プログラミングの基本的な概念です。この概念は、コードの再利用性を高め、階層的なクラス構造を構築するために利用されます。

### 継承の基本的な概念

継承には主に以下の2つのクラスが関与します：

1. **親クラス（基底クラス）**：継承の元となるクラスで、他のクラスに機能を提供します。
2. **子クラス（派生クラス）**：親クラスから継承された属性やメソッドを持ち、新しい機能を追加することができます。

Pythonでは、クラスの定義において継承する親クラスを指定することで継承を実現します。例えば：

```python
class ParentClass:
    def __init__(self, name):
        self.name = name
    
    def greet(self):
        print(f"Hello, I am {self.name}")

class ChildClass(ParentClass):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age
    
    def greet(self):
        super().greet()
        print(f"I am {self.age} years old")

# 使用例
parent = ParentClass("Alice")
parent.greet()  # Output: Hello, I am Alice

child = ChildClass("Bob", 10)
child.greet()   # Output: Hello, I am Bob
                #         I am 10 years old
```

### 継承の利点

- **コードの再利用性**：親クラスで定義された属性やメソッドを子クラスで再利用することができます。これにより、同じような機能を持つ複数のクラスを効率的に実装できます。
  
- **階層化された構造**：継承を使うことで、より複雑で階層的なクラスの関係を表現できます。例えば、動物 → 哺乳類 → 犬といったように、一般的な機能を親クラスに、特有の機能を子クラスに記述することができます。

### メソッドのオーバーライドとsuper()

- **メソッドのオーバーライド**：子クラスでは、親クラスのメソッドを同じ名前で再定義することができます。これにより、親クラスの振る舞いをカスタマイズすることが可能です。
  
- **super()関数**：子クラスから親クラスのメソッドや属性にアクセスするための特殊な関数です。`super()`を使用することで、親クラスのメソッドを呼び出すことができます。

```python
class ChildClass(ParentClass):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age
    
    def greet(self):
        super().greet()
        print(f"I am {self.age} years old")
```

### 多重継承

Pythonでは、複数のクラスから継承することができます（多重継承）。ただし、多重継承を使う際にはクラスの階層構造や名前衝突に注意が必要です。多重継承の例：

```python
class A:
    def method_A(self):
        print("Method A")

class B:
    def method_B(self):
        print("Method B")

class C(A, B):
    def method_C(self):
        print("Method C")

# CクラスはAとBのメソッドを継承する
```

継承を使うことで、効率的で再利用可能なコードを書くことができますが、過度の継承の使用はクラスの複雑さを増す可能性があるため、適切な設計が重要です。