メインコンテンツへスキップ
高度な検索
検索語句
種類

完全一致
タグ検索
日付オプション
以降に更新
以前に更新
以降に更新
以前に作成

検索結果

483件見つかりました

MQTTクライアントにおける排他制御

標準ライブラリ threading - スレッド処理

🔐はじめに MQTTは軽量なPub/Subモデルのプロトコルで、IoTやリアルタイム通信に広く利用されています。複数スレッドや非同期処理が絡むクライアント実装では、受信データや共有リソースへのアクセス競合(Race Condition)を防ぐ排他制御が重要になります。 この記事では、MQTTクライアントでデータを安全に扱うための排他制御の基本を解説します。 🧵基本概念:なぜ排他制御が必要なのか? 🔁 MQTTは非同期通信が基本 on_message()などのコールバック関数は非同期に実行される...

MQTTでの排他制御の例

標準ライブラリ threading - スレッド処理

🧠要件の整理 MQTT受信は逐次1データずつ(p1, p2, p3のどれか)。 1秒間に3データ(p1, p2, p3)を短時間で連続送信。 データ構造は Data(time, p1, p2, p3)(すべてそろった時点で確定)。 p1の受信時刻を全体の time とする。 最終的には 別クラスに完全なDataを排他制御しながら渡す。 ✅ベストプラクティス ① データ構造:一時的なバッファを用意 from dataclasses import da...

MQTTサブスクライバー用テスト環境の作り方

標準ライブラリ threading - スレッド処理

開発やテスト段階では、ローカルホスト(localhost)でMQTTブローカー+パブリッシャーダミーを動かすのが一般的です。 以下に、ローカル環境での構成と手順を整理しておきます。 ✅ 構成概要 ┌────────────┐ │ MQTT Broker│ ← ローカルで動かす(例:Mosquitto) └────┬───────┘ │ │ ┌────▼────┐ ┌─────────────────┐ │Publisher│──▶───▶│Subscriber ...

シーケンス図の基本

UML シーケンス図

🎬 はじめに 本記事では、シーケンス図(Sequence Diagram)の基本概念と、PlantUMLによる記述方法を紹介します。シーケンス図は、システム内のオブジェクト間でのメッセージのやり取りを時系列で表現するUML(統一モデリング言語)の一種です。 特に、以下のような場面で役立ちます: APIのリクエスト〜レスポンスの流れの可視化 ユーザーアクションによる内部処理の流れの理解 マイクロサービス間の相互作用のドキュメント化 PlantUMLを使えば、テキストで手軽に...

マイクロサービス間の連携をシーケンス図で可視化する

UML シーケンス図

🔗 はじめに 本記事では、マイクロサービスアーキテクチャにおける連携の流れをシーケンス図で表現する方法を解説します。 マイクロサービスは、それぞれが独立してデプロイ・スケール可能な小さなサービス群で構成されますが、ビジネスロジックを達成するにはサービス間連携が不可欠です。 ここでは、典型的な連携パターンをPlantUMLでモデル化し、視覚的に理解しやすくします。 🧩 典型的な連携シナリオの例 今回は以下のような典型的な3サービス構成を例にします: API Gateway:クライアントとのフロ...

UMLにおける線・矢印の種類と使い分け

UML 概論

了解しました!以下は「UMLにおける線・矢印の先端の使い分け」に焦点を当てた記事です。シーケンス図だけでなく、クラス図・コンポーネント図・ユースケース図などの代表的な図における線の意味も交え、視覚記号が示す意味の違いをしっかり押さえられるようにしています。 🧭 はじめに UML(統一モデリング言語)では、図の種類ごとに矢印の形状や線のスタイルに明確な意味があり、単なるデザインではなく「意味」を持っています。 本記事では、特に混乱しやすい矢印の先端(→、▷、◁など)と線の種類(実線、破線)の使い分けについて...

🗂️ UML記法チートシート(図の種類別)

UML 概論

🏛️ クラス図(Class Diagram) 関係名 線の種類 矢印の先端 意味・特徴 例記法(PlantUML) 継承(Generalization) 実線 白抜き三角 ▷ サブクラス → スーパークラス `A -- 実装(Realization) 破線 白抜き三角 ▷ クラス → インタフェース `A .. 関連(Association) 実線 矢印 or 無し 所有または参照、双方向も可能 A --> B または A -- B...

AndroidでTTS(Text to Speech)を使う

ライブラリ・レシピ

🗣️はじめに:Androidで文字を音声にするTTSとは? AndroidのText to Speech(TTS)機能は、文字列を合成音声で読み上げる機能です。視覚障害者向けのアクセシビリティや、ナビアプリの音声案内、学習アプリの読み上げなど、幅広い分野で活用されています。 この記事では、AndroidでのTTSの導入方法から、設定・制御・多言語対応などの応用的な使い方までをまとめていきます。 🔧TTSの導入方法 📦1. 依存関係と準備 TTSはAndroid SDKに標準で含まれているため、特別なラ...

UFW(Uncomplicated Firewall)

300_Linux

🔥はじめに:Ubuntuのファイアウォールとは何か? Ubuntuにはデフォルトでファイアウォールの機能が用意されており、システムを不正アクセスや悪意ある通信から守ることができます。この記事では、Ubuntuで使用されるファイアウォール「UFW(Uncomplicated Firewall)」を中心に、基本的な概念と設定方法を解説します。 Ubuntuのファイアウォール機能は「iptables」というLinux標準のパケットフィルタリング機構のフロントエンドとして「ufw」を利用して簡単に操作できるようになって...

TCPとUDP

040_ネットワーク・通信

🌐はじめに この記事では、インターネット通信に欠かせない2つのプロトコル、UDPとTCPの違いを中心に解説します。 両者は同じ「トランスポート層」のプロトコルですが、目的も使われ方も異なります。それぞれの特性を理解することで、ネットワーク設計・アプリ開発・パフォーマンスチューニングなどに活かせる知識となります。 📦TCPとUDPの共通点 両方ともトランスポート層のプロトコル(OSIモデルの第4層) IPアドレスとポート番号を用いて通信先を特定 **ポート番号(0〜65535)...

QUICとUDP

040_ネットワーク・通信

🌐はじめに HTTPはWeb通信の中心を担うプロトコルです。その最新版であるHTTP/3では、なんとTCPではなくUDPを使うという大胆な変更がなされています。 この記事では、「なぜHTTP/3はUDPを使うのか?」という疑問を軸に、QUICという新技術の仕組みや利点を中心に解説していきます。 📚背景:HTTPの進化と限界 🧱HTTP/1.1とTCPの限界 HTTP/1.1では1つのTCP接続で1つのリクエストという制限があり、ページ表示が遅かった TCPは信頼性重視で再送制御があり...

http3
UDP

UDPホールパンチング

040_ネットワーク・通信

🕳️はじめに:UDPホールパンチングとは何か? UDPホールパンチングとは、NAT越しにある2台のクライアントが直接通信できるようにする技術です。 P2P通信(例:ビデオ通話、オンラインゲーム、ファイル共有など)では、クライアント同士が**直接つながる(NATを越える)必要があります。しかし多くの家庭用ルーターはNAT(Network Address Translation)によって内部IPを隠しており、そのままではP2P通信ができません。 そこで、UDPの性質を利用して一時的に穴をあける=「ホールパンチ」と...

NATとは?簡単まとめ

040_ネットワーク・通信

✅ 一言で言うと プライベートIP(ローカルIP)とグローバルIPをポート番号とセットで変換する仕組みです。 🔄 なぜNATが必要? IPv4アドレスが足りない! 1つのグローバルIPで、家庭内や社内の複数デバイスをインターネットにつなぐためにNATが登場 🔧 仕組みのイメージ PCが内部(例:192.168.1.10:12345)から外部にアクセス ルーターが送信時に、 宛先はそのまま 送信元を 203.0.113.1:56...

IPv6とIPアドレス枯渇問題

040_ネットワーク・通信

🌐はじめに:IPアドレスと枯渇問題 ✅ IPアドレスとは インターネット上の住所。全ての機器(PC、スマホ、サーバなど)が通信するために必要。 💣IPv4が抱えた限界 🔢 IPv4のアドレス数 IPv4は32ビット → 2³² ≒ 43億個 一見多そうだが、以下の理由で実際は足りない: 😢 アドレス消費の例 企業・大学が早期に大量確保していた(クラスA: 1600万個単位) 一部は予約済み(プライベートアドレス、マルチキャストなど) IoT、ス...

IPv6の構造

040_ネットワーク・通信

🌐はじめに IPv6は、従来のIPv4に代わる次世代のインターネットプロトコルです。そのアドレス構造も大きく進化しています。 本記事では、IPv4とIPv6のアドレス構造の違いを中心に、 長さと表記の違い ネットワーク部とホスト部の分離(プレフィックスとインターフェースID) 代表的なアドレスタイプ などを解説します。 🔢IPv4 vs IPv6:アドレスの基本構造 ✅ IPv4の構造(32ビット) 表記:192.168.0.1 のように 10進数×4ブ...

C言語とPythonの整数型bit表現の違いについて

010_テクノロジ基礎

🧠 はじめに C言語とPythonはどちらもプログラミング言語として広く使われていますが、「負の整数(負数)のビット構造」については根本的な設計思想の違いがあります。本記事では、 CとPythonにおける負数のビット表現の違い 実際の変換方法(C→Python, Python→C)を、数値例を交えてわかりやすく解説します。 🏗️ C言語における負数のビット構造 ✅ 固定長整数と2の補数 C言語では、負数は2の補数表現(Two's complement)で固定長ビットに収められ...

補数とは

010_テクノロジ基礎

🧮 はじめに このページでは、「補数(complement)」という概念を出発点に、特にコンピュータで広く使われている「2の補数(two's complement)」について詳しく解説します。なぜそんな仕組みがあるのか? どうやって計算するのか? どんなメリットがあるのか?といった疑問に答える内容です。 🧠 補数とは? 🔢 補数の基本的な意味 補数とは、ある数に足すと決まった値になる数のことです。最も身近な例は「10の補数」や「100の補数」など、桁数を基準とした補数です。 例: 10の補数...

GitHubで不要になったブランチ・間違ってpushしたブランチをリモートから消す方法

100_GitHub/Git

🗑️ はじめに GitHubで「もう不要になったブランチ」「間違ってpushしたブランチ」をリモートから消したいときの方法です。リモート(GitHubなど)上のブランチを削除すると、他の人からも見えなくなります。 🚮 リモートブランチの削除方法 1. コマンドで削除する場合 リモート名(通常はorigin)とブランチ名を指定して削除します。 git push origin --delete ブランチ名 例: git push origin --delete feature/test-branc...