summaryrefslogtreecommitdiff
path: root/content/software
diff options
context:
space:
mode:
Diffstat (limited to 'content/software')
-rw-r--r--content/software/_index.md2
-rw-r--r--content/software/archive-site/index.md36
-rw-r--r--content/software/archive-site/screenshot.svg17
-rw-r--r--content/software/content-notes.md23
-rw-r--r--content/software/ollama-web/capture.gifbin0 -> 23646280 bytes
-rw-r--r--content/software/ollama-web/index.md81
6 files changed, 81 insertions, 78 deletions
diff --git a/content/software/_index.md b/content/software/_index.md
index d7e092e..94a9f87 100644
--- a/content/software/_index.md
+++ b/content/software/_index.md
@@ -5,5 +5,3 @@ sort_by = "date"
template = "software/section.html"
page_template = "software/page.html"
+++
-
-ソースコードの正本は自前のcgitで公開し、ここでは人間向けの説明を記録します。
diff --git a/content/software/archive-site/index.md b/content/software/archive-site/index.md
deleted file mode 100644
index ef83fe1..0000000
--- a/content/software/archive-site/index.md
+++ /dev/null
@@ -1,36 +0,0 @@
-+++
-title = "archive-site"
-description = "文章とソフトウェアを長く残すためのZolaサイト。"
-date = 2026-08-21
-include_in_feeds = false
-
-[extra]
-language = ["Zola", "Tera", "SCSS"]
-license = "MIT"
-source = "https://git.takashi-2521.com/archive-site/"
-github_mirror = "https://github.com/takashi-2521/archive-site"
-related_notes = [
- "notes/static-sites-and-maintenance.md",
-]
-+++
-
-## 概要
-
-NotesとSoftwareを中心に、文章と制作物を長期的に保存するための静的サイトです。
-
-![archive-siteの画面構成例](screenshot.svg)
-
-## 作った背景
-
-断片的なメモとソースコードの間にある、設計意図や調査の過程を一か所に残すために作りました。更新頻度が低くても自然に見える、索引としての情報構造を重視しています。
-
-## 開発の過程
-
-ZolaのSection、Page、Taxonomyをそのまま用い、独自のコンテンツ管理層を作らない方針にしました。表示はTera、スタイルはSCSS、テーマ切替だけを小さなJavaScriptで担当します。
-
-## 特徴
-
-- 年別のNotesアーカイブ
-- タグによる横断的な分類
-- NotesとSoftwareの明示的な関連付け
-- JavaScriptなしでも読める本文とナビゲーション
diff --git a/content/software/archive-site/screenshot.svg b/content/software/archive-site/screenshot.svg
deleted file mode 100644
index 18b05c5..0000000
--- a/content/software/archive-site/screenshot.svg
+++ /dev/null
@@ -1,17 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 540" role="img" aria-labelledby="title desc">
- <title id="title">archive-siteの画面構成例</title>
- <desc id="desc">ヘッダー、Notes一覧、Software一覧を罫線で整理した画面。</desc>
- <rect width="960" height="540" fill="#f6f5f1"/>
- <rect x="72" y="54" width="816" height="46" fill="none" stroke="#d6d8da"/>
- <rect x="72" y="144" width="500" height="28" fill="#202124"/>
- <rect x="72" y="194" width="620" height="12" fill="#aeb2b5"/>
- <rect x="72" y="246" width="816" height="1" fill="#d6d8da"/>
- <rect x="72" y="280" width="104" height="18" fill="#315f82"/>
- <rect x="72" y="326" width="816" height="1" fill="#d6d8da"/>
- <rect x="72" y="348" width="104" height="12" fill="#aeb2b5"/>
- <rect x="220" y="344" width="420" height="20" fill="#202124"/>
- <rect x="72" y="392" width="816" height="1" fill="#d6d8da"/>
- <rect x="72" y="414" width="104" height="12" fill="#aeb2b5"/>
- <rect x="220" y="410" width="350" height="20" fill="#202124"/>
- <rect x="72" y="458" width="816" height="1" fill="#d6d8da"/>
-</svg>
diff --git a/content/software/content-notes.md b/content/software/content-notes.md
deleted file mode 100644
index 0d5f6df..0000000
--- a/content/software/content-notes.md
+++ /dev/null
@@ -1,23 +0,0 @@
-+++
-title = "content-notes"
-description = "Markdownだけで考えの断片を整理する小さな道具。"
-date = 2025-10-18
-include_in_feeds = false
-
-[extra]
-language = ["Rust"]
-license = "MIT"
-source = "https://git.takashi-2521.com/content-notes/"
-+++
-
-## 概要
-
-短いメモに日付と題名を付け、単純なディレクトリへ保存するためのコマンドラインツールです。
-
-## 作った背景
-
-思いついたことを残す前に保存場所や形式で迷わないよう、操作を限定した道具が必要でした。
-
-## 開発の過程
-
-保存形式には可搬性の高いMarkdownを採用しました。検索や分類を内部データベースへ閉じ込めず、通常のファイル操作でも扱えることを優先しています。
diff --git a/content/software/ollama-web/capture.gif b/content/software/ollama-web/capture.gif
new file mode 100644
index 0000000..9a086e7
--- /dev/null
+++ b/content/software/ollama-web/capture.gif
Binary files differ
diff --git a/content/software/ollama-web/index.md b/content/software/ollama-web/index.md
new file mode 100644
index 0000000..a0d5b75
--- /dev/null
+++ b/content/software/ollama-web/index.md
@@ -0,0 +1,81 @@
++++
+# 必須。Software名、一覧、HTML titleで使用する。
+title = "ollama-web"
+
+# 任意。一覧とmeta descriptionで使用する。不要なら空文字列のままにする。
+description = """
+Docker や仮想マシンを必要とせず、ホスト OS 上で直接起動して利用できる、軽量な個人向け Ollama Web UI です。
+"""
+
+# 必須。Software一覧の並び順で使用する。
+date = 2026-08-22
+
+# 必須。Notes中心のサイトfeedへSoftwareを含めない。
+include_in_feeds = false
+
+[extra]
+# 任意。詳細ページの「使用言語」に表示する。
+language = ["Python"]
+
+# 任意。詳細ページの「ライセンス」に表示する。
+license = "MIT"
+
+# 必須。ソースコードの正本となるcgit URLを指定する。
+source = "https://git.takashi-2521.com/ollama-web/"
+
+# 任意。GitHub mirrorがない場合は空文字列のままにする。
+github_mirror = "https://github.com/takashi000/ollama-web"
+
+# 任意。content/を基準にしたNotesのMarkdown pathを指定する。
+related_notes = []
++++
+
+## 概要
+
+ブラウザから Ollama とのストリーミングチャット、
+Web 検索・URL 取得、画像・ファイル・PDF 添付、MCP Tool Calling を利用できます。\
+大規模な AI プラットフォームを導入せず、個人が小さな構成で使うことを想定しています。
+
+![実行例](capture.gif)
+
+## 背景
+
+OpenWeb UIなどの生成AIプラットフォームだと、DockerなどのVM環境を立ち上げる必要があるのが、
+結構煩わしく感じられました。\
+最近は、Ollamaでも
+GLM-5.2やDeepseek V4などの比較的エージェンティックに動作するオープンウェイトモデルが使用できます。\
+より、手軽に使えるOllamaフロントエンドアプリケーションを作ろうと思いました。
+
+## 開発の過程
+
+基本的には、CodexとZooCodeを使用して開発しました。
+
+軽量化を重視したため、バックエンドにはStarletteとUvicorn、HTML生成にはJinja2を使用しています。
+フロントエンドも専用フレームワークを導入せず、HTML、CSS、JavaScriptで構成しました。
+
+会話履歴などもセッションで管理できるようにしました。\
+ここもデータベースを導入せずに、
+ディレクトリ単位でJSONを使って保存するようにしました。
+
+見た目のUIに関しては、レスポンシブデザインに対応しました。\
+スマホからだとレンダーできないケースが頻発しました。\
+LLMからの応答を逐次受信するたびにMarkdown全体をHTMLへ変換していたからでした。\
+応答が長くなるほど再描画の負荷が増えました。\
+なので、Markdownとしての最終的なHTML変換は応答完了時にまとめて行いました。\
+ストリーミング中の表示はリアルタイムに更新します。
+
+標準のツールには、Web検索・スクレイピング・PDF抽出を搭載しました。\
+必要になった部分だけを追加取得できるように、ツールにページング機能を付けました。\
+ツール呼び出しが一定回数を超えた場合は、その時点で最終回答を生成させるようにしました。
+
+MCPにも対応しました。プロトコルは2025-11-25版[^1]です。\
+対応したトランスポートは、stdioとStreamable HTTPです。\
+SSEは非推奨でしたので、非対応です。\
+tool/list、tool/callの最小限の機能だけ実装しました。
+[^1]: [Model Context Protocol Specification — 2025-11-25](https://modelcontextprotocol.io/specification/2025-11-25)
+
+PIN認証、CSRF・CSP対策、取得先URLの検査、MCP実行ファイルと接続先の許可リスト化を採用しました。\
+LANからの利用、Web取得、ファイル操作、MCPによる外部プログラムの起動をセキュアに保ちます。\
+任意のプロセスの起動を防ぐため、明示的に許可した実行ファイルだけstdio経由でのMCPに使用できます。
+
+## 参考資料 \ No newline at end of file