Haji Papa's Bits & Bytes

Haji Papa's Bits & Bytes

An IT leader, business manager, and anime-loving dad of three, documenting my journey in tech, work, and language learning.

ITの世界は「グラフ」でできている
IT

ITの世界は「グラフ」でできている

― インターネット・Google・SNS・サイバー攻撃を支える数学 ― ITの世界では、多くのシステムが「グラフ」という数学的なモデルで説明できます。 実は次のようなものはすべて グラフ構造です。 * インターネット * Google検索 * SNS * サイバー攻撃の経路 * AIの分析 本記事では、IT分野でグラフ理論がどのように使われているのかをわかりやすく解説します。 グラフ理論とは何か まず、グラフ理論とは何かを簡単に説明します。 グラフとは ノード(点) + エッジ(線) で構成される構造です。 例: A ─ B \ / C ここでは * A, B, C → ノード * 線 → エッジ になります。 この構造は 「もの同士の関係」 を表すのに非常に便利です。 インターネットは巨大なグラフ インターネットの構造は、まさに巨大なグラフです。 要素 グラフ ルータ ノード 通信リンク エッジ
3 min read
🔐 次世代AAAプロトコル「Diameter」とは
IT

🔐 次世代AAAプロトコル「Diameter」とは

― RADIUSの限界と、Diameterが求められる理由 ― ネットワーク認証の世界では、長らく RADIUS が AAA(Authentication / Authorization / Accounting)の中心的役割を果たしてきました。しかし近年、モバイルネットワーク(4G/5G)、大規模 ISP、キャリアグレードの網では、RADIUS では対応しきれない要求が増えています。 そこで登場したのが Diameter(ダイアメータ)。 その名の通り「RADIUS(半径)を2倍にした=より強力にした」ことを暗に示しており、将来を見据えた AAA プロトコルとして IETF によって策定されました。 この記事では、RADIUSの課題 → Diameterの優位性 → 関連技術(AAA/SCTP/IPSec/TLS) の流れで、情報処理安全確保支援士として理解しておきたいポイントを詳しく解説します。 1. RADIUSの限界と課題点 RADIUS(Remote Authentication Dial-In
4 min read
PandasユーザーのためのPolars入門 ― 合成データで体感するLazy実行・最適化・SQLサポート
IT

PandasユーザーのためのPolars入門 ― 合成データで体感するLazy実行・最適化・SQLサポート

近年、データ処理の高速化や大規模データ対応を目的として、Polars へ移行を検討するケースが増えています。 Polarsは単なる「速いPandas」ではありません。 設計思想そのものが異なり、クエリエンジン型のデータフレームライブラリといえます。 本記事では、Pandas経験者を対象に: * PandasとPolarsの設計思想の違い * Lazy実行と最適化の仕組み * Streamingによるメモリ効率 * SQLサポート * 実際に動かせるサンプルコード を、サンプルデータを作成し、そのデータを使って解説します。 外部データのダウンロードは不要です。 すべてこの記事内のコードだけで再現できます。 環境準備 python -m venv .venv source .venv/bin/activate pip install -U polars pandas pyarrow numpy デモ用データを生成する 今回は架空のEC購買ログを生成します。 * 実在企業・実在人物のデータは含みません * ランダム生成なので著作権の問題はありません
6 min read
【Polars】Parquet(パーケット)形式とは?
IT

【Polars】Parquet(パーケット)形式とは?

Parquet(Apache Parquet)は、 列指向(columnar)で保存されるデータファイル形式 です。 主にビッグデータ処理の世界で広く使われています。 * Apache Arrow系 * Spark * DuckDB * Polars * BigQuery * Snowflake など、多くのデータ基盤で採用されています。 CSVとの違い CSV(行指向) id,name,age 1,Alice,30 2,Bob,25 CSVは「行」単位で保存されています。 * 1行ずつ並んでいる * 人間が読める * シンプル * でも大規模処理には不向き Parquet(列指向) イメージ: id列: 1,2,3,4,... name列: Alice,Bob,... age列: 30,
1 min read
DockerとVS Codeで作るJava開発環境(JDK11)— ローカルを汚さずに学習・実行まで
IT

DockerとVS Codeで作るJava開発環境(JDK11)— ローカルを汚さずに学習・実行まで

Dockerで「ローカルを汚さない」Java開発をする Javaの学習やちょっとした検証を始めるとき、地味に困るのが開発環境です。 * PCにJDKを入れると、バージョン違いでハマる * 既存の開発環境と競合する * 別PCへ移したときに再構築が面倒 そこでおすすめなのが Dockerコンテナ内にJDKを用意して、VS Codeで編集するやり方です。 この方法なら「PC側はほぼ手を入れず」、コンテナを起動するだけで 同じJDK11環境をいつでも再現できます。 この記事では、VS Codeの Dev Containers を使って、JDK11(Temurin)でJavaをコンパイル・実行する最小構成を作ります。 ゴール * ローカルにJDKを入れずにJavaを実行できる * VS Codeで編集し、コンテナ内のJDK11で javac / java が使える * ディレクトリを丸ごとコピーしても同じ環境で動く 前提 * Docker(Docker Engine / Docker Desktop のどちらでもOK) * VS Code * VS Cod
3 min read
Kubernetes で Jakarta EE(Payara)業務システムを動かすときの考慮点と注意点
IT

Kubernetes で Jakarta EE(Payara)業務システムを動かすときの考慮点と注意点

近年、業務システムでも「コンテナ化して Kubernetes で可用性と運用性を上げたい」という要望が増えています。しかし、Jakarta EE(特に Payara Server)を単純にコンテナへ入れるだけでは、Kubernetes の恩恵を最大化できません。 この記事では、業務システムを Payara Server で構築している場合に Kubernetes 化する際、必ず押さえるべきポイントをまとめます。クラウド環境としては Oracle Cloud(OKE)を前提にしていますが、考え方自体はどのK8sにも共通します。 1. 「Payara Server をそのままクラスタリング」は原則しない GlassFish 系の標準的なクラスタリング(DAS を中心としたドメイン管理)は、**「ノードが固定される前提」**の設計です。一方 Kubernetes では Pod は“消えるもの”であり、再スケジュールされ、IP
3 min read
Kubernetes(K8s)の勉強方法
IT

Kubernetes(K8s)の勉強方法

KubernetesはGoogleが開発し、2014年にオープンソース化されました。 Kubernetes とは | Google CloudKubernetes(K8s)は、コンテナ化されたアプリをどこにでもデプロイ、スケール、管理できるオープンソースのシステムです。Google Cloud が Kubernetes を簡素化する仕組みをご覧ください。Google Cloud Kubernetesを勉強しようとすると、最初のハードルが意外と高いですよね。 そんな中、Google には Kubernetes を学習するための教育コンテンツとハンズオンラボが用意されています。 しかもラボ環境は 無料で利用可能。 「Kubernetes に興味はあるけれど、なかなか踏み出せなかった」という方にも、ぜひ挑戦していただきたい内容です。 クラウド環境に不慣れな方でも大丈夫です。 コンピュートインスタンスの作成、ストレージバケットの操作、IAM の設定、ファイアウォールの設定、Web サーバーの導入といった、Kubernetes を学ぶ前段階の基礎知識もしっかり学べるため、安心
2 min read
スマホからOCI経由で自宅サーバーにSSH接続(Agent Forward)
IT

スマホからOCI経由で自宅サーバーにSSH接続(Agent Forward)

1. 概要 前回、OCIと自宅サーバーをWireguard VPNで接続をしました。 GhostGhost 今回は、このWireguard VPNを通して、外出先でスマホからOCI経由で自宅サーバーにSSH接続をさせていきます。 ただし、OCI上に自宅サーバーの秘密鍵を置いておきたくはないので、スマホに自宅サーバーの秘密鍵を置きつつ、SSH Agent Forwardingを使ってSSH接続を試みます。 SSH Agent Forwardingを使うと下記のことが可能になります。 * 携帯の SSH クライアントが秘密鍵を保持(外に出さない) * OCI にログインしたあと、OCI 上の SSH クライアントから自宅へ接続する時も、 鍵の署名だけを携帯に問い合わせて実行する(鍵そのものは転送されない) * つまり OCI に秘密鍵を置かずに、自宅サーバーへ SSH が可能 2. 構成 * OCIと自宅サーバーの構成は、上記のブログ「IPv6のみのサーバーへIPv4からでもアクセスする方法」のとおりです。自宅サーバーは公開鍵認証でのアク
2 min read
IPv6のみのサーバーへIPv4からでもアクセスする方法(OCI経由)
IT

IPv6のみのサーバーへIPv4からでもアクセスする方法(OCI経由)

概要 自宅はドコモ光10Gbのインターネットを使用しているので、IPv6アドレスからしかアクセスできません。 これだと、自宅のサーバー上にNextcloudを稼働させていますが、非常に不便なのでオラクルクラウド経由でIPv4からでもアクセスできるように設定しました。 構成 IPv4網 → Oracle Cloud【nginx(リバースプロキシ) → WireGuard VPN】 → IPv6網 → 自宅サーバー【WireGuard VPN → Nextcloud】 WireGuard経由でのアクセスを採用した理由 * 速い(カーネル実装 / UDP ベース) * 設定がとてもシンプル * IPv4 ↔ IPv6 のブリッジングに強い * セキュリティが強固(最新暗号) * Oracle Linux 8 でも標準対応 私のOracle Clound では、下記の構成のインスタンスを使っています。 項目 内容 OS Oracle Linux 8.1 Shape VM.Standard.A1.Flex
5 min read
【SQL】3値論理(True/False/Unknown?)
IT

【SQL】3値論理(True/False/Unknown?)

SQLには、ture, false だけでなく、unknownを含む3つの真理値があります。 なぜ、unknownが含まれるかという理由については、リレーショナルデータベースにNULLが存在するからです。NULLは、そこに値がないことを意味する記号であり、値ではありません。 値ではないので、下記の条件式は比較ができず、すべてunknownとなります。 1 = NULL 1 <> NULL 1 > NULL 1 < NULL NULL = NULL ... 次に、true、false、unkownの力関係は下記のとおりです。 【ANDの場合】 false > unknown > true 【 ORの場合】 true > unknown > false したがって、真理表は下記のとおりになります。 ANDtureunknownfalse truetrueunknownfalse unknownunknownunknownfalse falsefalsefalsefalse
1 min read
【SQL】Dockerを使ったSQL学習環境の構築
IT

【SQL】Dockerを使ったSQL学習環境の構築

以前、MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備をご紹介しましたが、今回はDockerを使って、もっと手軽に前回の学習環境を準備してみたいと思います。 また、HeidiSQLのUbuntu版は日本語対応がいまいちだったので、学習しづらかったため、今回はphpMyAdminを導入してWebブラウザ上でSQLの学習ができるようにもしてみました。 1. 手順 大まかな手順は下記の通りです。 (1) mariadb-employees というカスタムイメージを作る (2) build 時に GitHub から employees.sql等の必要なファイルをダウンロードして、 MariaDB の/opt/employees-db に配置 (3) コンテナ初回起動時に シェルスクリプト が自動実行され、employees DB にサンプルデータが入る (4) phpMyAdmin から中身を触って学習できる 2️. ディレクトリ構成 まずは、専用ディレクトリを作ります: mkdir mariadb-employees cd
2 min read
【SQL】CASE式まとめ 01
IT

【SQL】CASE式まとめ 01

前提 * 「達人に学ぶSQL徹底指南書 第2版 ミック著 翔泳社」を自分用にまとめたものです。 * 使用するデータは、MySQL公式のemployeesのデータを使用しています。 【SQL】MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備 CASE式概要 * CASE式を使いこなせるかが、初級者と中級者の分かれ目 * CASE式はある列の値を別の値に読み替えているだけ * 他のSQLツール(集約関数等)と組み合わせることで威力を発揮する * やっかいなバグを防ぐために、ELSE句を必ず書く(ELSE句を省略するとELSE NULL扱いとなる) CASE式の演習 演習1:単純CASE式と検索CASE式 課題:employeesテーブルを使って下記のデータを表示してください。 * 表示データ * emp_no * first_name * last_name * gender Mは「Mail」、Fは「Femail」とCASE式を使って表示 解答:CASE
4 min read
【SQL】MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備
IT

【SQL】MySQL(MariaDB)を使ったSQL学習用のサンプルデータベースの準備

概要 SQLの学習に際して最初に困るのが、サンプルデータの準備ではないでしょうか。 ここでは、MySQLが公式で準備している「Employees」のサンプルデータベースの導入方法を取り上げます。 「Employees」は6つのテーブルからなり、合計約400万レコードにも及ぶ大きなサンプルです。 従業員、部署、部署所属履歴などを含み、実際の業務構造に近いデータを使って、大規模データの扱いや複雑なJOINの学習も行うことが可能です。 テーブル構造については、下記のサイトを参照してください。 https://www3.ntu.edu.sg/home/ehchua/programming/sql/SampleDatabases.html 導入手順 1. MariaDBの準備 $ sudo apt update $ sudo apt install mariadb-client mariadb-server -y 2. サンプルデータの入手 MySQL公式のGitHubからダウンロードします。 https://github.com/datacharme
2 min read
ChatGPTのエージェントだけでWebアプリを作成する
IT

ChatGPTのエージェントだけでWebアプリを作成する

数日前に、私の環境でもChatGPTのエージェントが使えるようになったので、早速試してみました。 エージェントへの切り替え ChatGPTのテキスト入力欄の[ツール]から「エージェントモード」を選択します。 今回は「情報源」として「ウェブ検索」を選択しました。 プロンプト プロンプトには、下記を入力して実行してみます。 Ubuntu24.04上で下記の要件のアプリケーションを作成したい。 - Git Hub上にあるDockerイメージを利用 - ITセキュリティに関連する書籍の情報を入力・更新・削除できるWebアプリケーションを作成 - プログラミング言語はPythonを使用 - Pythonとデータベースとのやり取りはORMを使用 - フレームワークを使用してもよい。 応答 約4分後に下記が出力されました。 承知しました。Ubuntu 24.04環境で、GitHub上のDockerイメージを利用し、ITセキュリティ関連書籍をCRUD操作できるPython Webアプリケーションを構築します。ORMを使用してデータベースとのやり取り
5 min read
【MCP】Ollama+Open WebUI+MCPO環境でMCPを試す
IT

【MCP】Ollama+Open WebUI+MCPO環境でMCPを試す

1. はじめに 最近のニュースで、MCPに関する記事が増えてきました。 MCPというと、私はMicrosoft Certified Professional のことだと思ってしまいます ^^; が、 ここでのMCPは、Module Context Protocolの略で、LLMが「外部のツール」と安全・柔軟につながるための標準プロトコルのことを指します。 2. MCPの利用例 たとえば、LLMに次のような依頼をしたとします。 「このページの内容を読んで要約して」 普通のLLMはWebにアクセスできないので何もできませんが、MCP対応のモデルなら * 「fetch」ツールを呼び出してWebページを取得 * その結果を元にLLMが要約 というように、ツールを"使って"推論できるようになります。 3. MCPの登場背景 もともとOpenAIやAnthropic、Googleなどは「Tool Use」という仕組みを独自に実装していました。 でも、それぞれやり方
4 min read
【セキュリティ】パスキー(passkey)について
IT

【セキュリティ】パスキー(passkey)について

最近、Googleから「パスワードではなくパスキー(passkey)を利用してください」というメッセージが届きました。 パスキーは近年注目を集めている認証技術の一つです。そこで今回は、パスキーはパスワードと何が違うのか? そして、どのような仕組みで安全性を実現しているのか?について、分かりやすく解説します。 ■ 概要 パスキー(passkey)は、FIDO2標準に基づいた新しいパスワードレス認証方式です。GoogleやApple、Microsoftなどが推進しており、ユーザーがパスワードを覚えずに安全にログインできる仕組みです。 FIDO2標準について FIDO2(ファイド・ツー)標準とは、パスワードの代わりに、より安全で簡単なログイン方法を提供するための国際的な標準です。 FIDO2を構成する技術 技術名 内容 WebAuthn ブラウザやWebサイトがFIDO認証を使うための「仕組み」 CTAP(シータップ) パソコンやスマホがセキュリティキーなどの「認証デバイス」とやりとりするための規格 FIDO2の利用方法 * F
2 min read
【Oracle Linux】GhostのDockerへの移行
IT

【Oracle Linux】GhostのDockerへの移行

■概要 Ghostをアップデートしたところ、Oracle Linux 8に入っている画像処理のライブラリが、Armベースに対応していないとエラー表示されてしまいました。 そこで、DockerhubにARM対応のGhostイメージがあったので、そちらに移行することにしました。 ■環境 Armベースのインスタンス Oracle Linux 8 nginx MariaDB ■作業手順 1. 現在のGhostのバックアップ Ubuntu環境ではないため、ghost backupが正常に終了しないので、手動でバックアップします。 # ($…の部分は自分の環境に合わせてください) # DBのバックアップ $ mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_DIR/db-$DATE.sql" # Ghostのコンテンツフォルダ(/var/
2 min read
【LoRA】少ないデータで、AIモデルをチューニングする
IT

【LoRA】少ないデータで、AIモデルをチューニングする

概要 今回は、画像生成モデルStable Diffusionを使って、当ブログの英語の記事で登場するEmiさんのイラストが簡単に生成できるようにしたいと思います。 そのために、LoRAという技術を使います。 LoRA(Low-Rank Adaptation)とは、AIモデルのファインチューニングを効率的に行うための技術です。特に大規模言語モデル(LLM)や画像生成AIの微調整に用いられ、少ない計算資源で高品質なカスタマイズを可能にします。 LoRAは、モデルの重みを直接変更するのではなく、低ランクの行列を挿入して学習することで、従来のファインチューニングよりも少ない計算コストで高い性能を維持できます。 🧠 LoRAの数学的な挿入位置 元の重み W を以下のように拡張します: W' = W + α * (BA) A:低ランクの行列(学習する) B:低ランクの行列(学習する) α:スケーリング係数(学習時や推論時に設定) この BA 部分だけが学習され、元の W は固定のままです。     📌 実行時(推論時)の仕組み LoRAで生成
7 min read
DockerでOpen WebUI+Ollama環境を簡単構築!
IT

DockerでOpen WebUI+Ollama環境を簡単構築!

LLMを手軽に使う方法とGPUトラブル対処法 1. はじめに ローカル環境で大規模言語モデル(LLM)を試したいけれど、難しそう…と思っていませんか? 今回は、Docker を使って、話題の Open WebUI と Ollama を簡単に構築し、手軽にLLMを使える環境を作る方法をご紹介します。 さらに、私が実際にハマった「GPUが認識されない問題」とその対処法も【補足】としてまとめました! 2. Open WebUI+Ollamaとは? * Ollama:ローカルでLLMを動かせるエンジン。各種モデル(例:Gemma、Llama3など)を簡単に利用可能。 * Open WebUI:Ollamaをブラウザから操作できる便利なフロントエンド。 この2つを組み合わせることで、まるでChatGPTのようにローカル環境でLLMが扱えるようになります! 3. Dockerを使った構築手順 ① 必要環境 * Docker & Docker Compose v2 がインストール済みであること ② docker-compose.
3 min read
【セキュリティ】プレースホルダでSQLインジェクションを防ぐ
IT

【セキュリティ】プレースホルダでSQLインジェクションを防ぐ

前回までで、SQLインジェクションとOSコマンドインジェクションの実験を行いました。 今回は、プレースホルダという機能を使って、PHPコードをSQLインジェクションができない安全なコードにしていきたいと思います。 次のコードは、前回まで使用していたsectest.phpの内容です。 <?php $servername = "localhost"; $username = "sectest"; // DB sectestにアクセスするユーザー $password = "sectestpass"; $dbname = "sectest"; $conn = new mysqli($servername, $username, $password, $dbname); // エラー確認 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error)
3 min read
【セキュリティ】SQLインジェクションを通じてOSコマンドインジェクションをしてみる
IT

【セキュリティ】SQLインジェクションを通じてOSコマンドインジェクションをしてみる

前回の【セキュリティ】SQLインジェクションを実験してみるで作成したWebサイトを使って、OSコマンドインジェクションを試みたいと思います。 1. 脆弱性の設定 まずは、脆弱性を作ります。 DBの脆弱性の設定 DBのユーザーsectestにFILE権限を付与しておきます。 DBの管理者権限で下記を実行します。 MariaDB [(none)]> GRANT FILE ON . TO 'sectest'@'localhost'; Query OK, 0 rows affected (0.007 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) ディレクトリの脆弱性の設定 MariaDBからファイルの作成が可能な/var/www/html/
2 min read
【セキュリティ】SQLインジェクションを実験してみる
IT

【セキュリティ】SQLインジェクションを実験してみる

今回は、IPA(情報処理推進機構)の「安全なウェブサイトの作り方」のはじめに登場するSQLインジェクションについて、実際にWEBサイトを構築して実験してみたいと思います。 1. DBの作成 まずは、Webページからアクセス可能なデータベースsectestを作成します。 今回はMariaDBを使用しています。 MariaDB [(none)]> create database if not exists sectest; //DB sectestを作成 Query OK, 1 row affected (0.000 sec) MariaDB [(none)]> use sectest; //DB sectestを選択 Database changed MariaDB [sectest]> create table users ( -> id int
3 min read
Ollama APIを使用してみる
IT

Ollama APIを使用してみる

前回掲載した「Ollamaを使ってGemma3を動かしてみる」の続きで、今回はOllamaをAPI経由で使ってみたいと思います。 下記のサイトに従って、さっそくAPI経由でGemma3を使ってみましょう。 ollama/docs/api.md at main · ollama/ollamaGet up and running with Llama 3.3, DeepSeek-R1, Phi-4, Gemma 3, and other large language models. - ollama/ollamaGitHubollama 「なぜ空は青いの?」というプロンプトを投げてみます。 $ curl http://localhost:11434/api/generate -d '{"model": "gemma3:4b"
2 min read
Let's use Ollama
IT

Ollamaを使ってGemma3を動かしてみる

Ollamaとは Ollama は、ローカル環境で大規模言語モデル(LLM)を簡単に実行できるようにするオープンソースのソフトウェアです。 いま話題のDeepSeek、Phi-4、Gemma3 などの人気のある LLM を手軽にダウンロードして、実行できます。 Ollamaのインストール 下記のサイト(https://ollama.com)にアクセスし、Downloadボタンをクリックします。 OllamaGet up and running with large language models. リンク先の画面に、OSごとにインストールの仕方が表示されているので、その支持に従ってください。 curl -fsSL https://ollama.com/install.sh | sh $ curl -fsSL https://ollama.com/install.sh | sh >>>
3 min read