{ "version": "https://jsonfeed.org/version/1.1", "user_comment": "This feed allows you to read the posts from this site in any feed reader that supports the JSON Feed format. To add this feed to your reader, copy the following URL -- https://matoken.org/blog/feed/json -- and add it your reader.", "next_url": "https://matoken.org/blog/feed/json?paged=2", "home_page_url": "https://matoken.org/blog", "feed_url": "https://matoken.org/blog/feed/json", "language": "ja", "title": "matoken's blog", "description": "Is there no plan B?", "icon": "https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9.jpeg", "items": [ { "id": "https://matoken.org/blog/?p=5121", "url": "https://matoken.org/blog/2025/12/31/cloudflare-speed-test-with-tui/", "title": "Cloudflare\u306e\u901f\u5ea6\u30c6\u30b9\u30c8\u3092TUI\u3067", "content_html": "
\n
\n

\n
\n

Cloudflare \u306e\u901f\u5ea6\u8a08\u6e2c\u30b5\u30a4\u30c8\u306espeed.cloudflare.com \u3092TUI \u3067\u8a08\u6e2c\u3067\u304d\u308bcloudflare-speed-cli \u3068\u3044\u3046\u3082\u306e\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\ncloudflare-speed-cli \u306fRust \u88fd\u3067GPL-3.0 license \u3067\u3059\uff0e

\n
\n\n
\n

\u985e\u4f3c\u306e\u3082\u306e\u3067\uff0cspeedtest.net \u3092\u8a08\u6e2c\u3067\u304d\u308bspeedtest-cli \u3092\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\u304c\uff0cCloudflare \u3082\u4f7f\u3048\u308b\u3068\u4fbf\u5229\u305d\u3046\u3067\u3059\uff0e

\n
\n

\n
\n

cloudflare-speed-cli \u306fGitHub Releases \u306b\u306fLinux x86_64, aarch64, macOS aarch64, x86_64, Windows x86_64 \u306e\u30d0\u30a4\u30ca\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e\u3057\u304b\u3057\u4f8b\u306b\u3088\u3063\u3066Raspberry Pi bookworm armhf(Arm 32bit)\u3067\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

Rust \u95a2\u9023\u306fasciimena 3.0 \u3092build \u3057\u305f\u3068\u304d\u306b\u5165\u308c\u305f\u3082\u306e\u304b\u3089rustup \u30671.92.0 \u306b\u3057\u305f\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\uff0e

\n
\n\n
\n

cargo install \u3067\u6642\u9593\u304c\u639b\u304b\u308a\u307e\u3059\u304c\u7279\u306b\u3064\u307e\u3065\u3044\u305f\u308a\u305b\u305abuild \u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ cargo --version\nwarning: `/home/matoken/.cargo/config` is deprecated in favor of `config.toml`\n  |\n  = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo install --git https://github.com/kavehtehrani/cloudflare-speed-cli --features tui\n$ cloudflare-speed-cli --help\nCloudflare-based speed test with optional TUI\n\nUsage: cloudflare-speed-cli [OPTIONS]\n\nOptions:\n      --base-url <BASE_URL>\n          Base URL for the Cloudflare speed test service [default: https://speed.cloudflare.com]\n      --json\n          Print JSON result and exit (no TUI)\n      --text\n          Print text summary and exit (no TUI)\n      --download-duration <DOWNLOAD_DURATION>\n          Download phase duration [default: 10s]\n      --upload-duration <UPLOAD_DURATION>\n          Upload phase duration [default: 10s]\n      --idle-latency-duration <IDLE_LATENCY_DURATION>\n          Idle latency probe duration (pre-test) [default: 2s]\n      --concurrency <CONCURRENCY>\n          Concurrency for download/upload workers [default: 6]\n      --download-bytes-per-req <DOWNLOAD_BYTES_PER_REQ>\n          Bytes per download request [default: 10000000]\n      --upload-bytes-per-req <UPLOAD_BYTES_PER_REQ>\n          Bytes per upload request [default: 5000000]\n      --probe-interval-ms <PROBE_INTERVAL_MS>\n          Probe interval in milliseconds [default: 250]\n      --probe-timeout-ms <PROBE_TIMEOUT_MS>\n          Probe timeout in milliseconds [default: 800]\n      --experimental\n          Enable experimental features (TURN fetch + UDP-like loss probe)\n      --export-json <EXPORT_JSON>\n          Export results as JSON\n      --export-csv <EXPORT_CSV>\n          Export results as CSV\n      --auto-save <AUTO_SAVE>\n          Use --auto-save true or --auto-save false to override (default: true) [default: true] [possible values: true, false]\n      --interface <INTERFACE>\n          Bind to a specific network interface (e.g., ens18, eth0)\n      --source <SOURCE>\n          Bind to a specific source IP address (e.g., 192.168.10.0)\n      --certificate <CERTIFICATE>\n          Path to a custom TLS certificate file (PEM or DER format)\n  -h, --help\n          Print help\n  -V, --version\n          Print version\n$ cloudflare-speed-cli --version\ncloudflare-speed-cli 0.3.1
\n
\n
\n
\n

\u65e9\u901f\u8a66\u3057\u3066\u307f\u307e\u3059\uff0ecloudflare-speed-cli \u3092\u30aa\u30d7\u30b7\u30e7\u30f3\u306a\u3057\u3067\u5b9f\u884c\u3059\u308b\u3068TUI \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\uff0e\u8d77\u52d5\u3057\u3066\u3059\u3050\u306b\u8a08\u6e2c\u304c\u59cb\u307e\u308a\uff0c\u65e2\u5b9a\u5024\u3067\u306f\u8a08\u6e2c\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0etab key \u3067History \u30da\u30fc\u30b8\u306b\u9077\u79fb\u3059\u308b\u3068\u904e\u53bb\u306e\u8a08\u6e2c\u7d50\u679c\u3092\u95b2\u89a7\u3057\u305f\u308a\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u305f\u308a\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

\"cloudflare

\n
\n

\n
\n

--text \u30aa\u30d7\u30b7\u30e7\u30f3\u3067cli \u30e2\u30fc\u30c9\u3067\u3059\u304c\uff0c\u30d7\u30ed\u30b0\u30ec\u30b9\u304c\u5927\u91cf\u306b\u51fa\u3066\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\u611f\u3058\u3067\u3059\uff0e

\n
\n

\n
\n

\u30d7\u30ed\u30b9\u30ec\u30b9\u90e8\u5206\u306fSTDERR \u306a\u306e\u3067\u305d\u308c\u3092\u6368\u3066\u3066\u3057\u307e\u3063\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093

\n
\n
\n
\n
$ cloudflare-speed-cli --text 2>/dev/null\nIP/Colo/ASN: 133.106.160.49 / NRT / 138384 (-)\nDownload: 23.73 Mbps\nUpload:   2.47 Mbps\nIdle latency p50/p90/p99: 98.9/110.7/110.7 ms (loss 0.0%, jitter 10.2 ms)\nLoaded latency (download) p50/p90/p99: 438.0/578.6/755.2 ms (loss 0.0%, jitter 130.1 ms)\nLoaded latency (upload) p50/p90/p99: 654.8/794.1/794.1 ms (loss 45.5%, jitter 144.4 ms)
\n
\n
\n
\n

\u3053\u3093\u306a\u611f\u3058\u3067\u5b9a\u671f\u7684\u306b\u8a08\u6e2c\u3059\u308b\u306e\u306b\u3082\u4fbf\u5229\u304b\u3082\u3068\u601d\u3044\u307e\u3057\u305f\u304c\uff0ccli \u30e2\u30fc\u30c9\u3067\u306f\u65e2\u5b9a\u5024\u3067\u306f\u7d50\u679c\u3092\u4fdd\u5b58\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ watch -n 3600 -- cloudflare-speed-cli --text
\n
\n
\n
\n

--auto-save true \u3082\u8ffd\u52a0\u3059\u308b\u3068\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
$ watch -n 3600 -- cloudflare-speed-cli --text --auto-save true
\n
\n
\n
\n

\u305f\u3060\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306bTUI \u30e2\u30fc\u30c9\u306e\u8a08\u6e2c\u6642\u306e\u30ed\u30b0\u306b\u306f --interface \u3092\u6307\u5b9a\u3057\u3066\u3082Interface \u3084AP \u540d\u306f\u4fdd\u5b58\u3055\u308c\u306a\u3044\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\u2502 3.   2025-12-31 06:30:11 +09:00  DL   20.69 Mbps  UL    4.66 Mbps  Idle p50  103.7 ms  -  (1)\n\u2502 4.   2025-12-31 06:08:33 +09:00  DL   21.73 Mbps  UL    3.16 Mbps  Idle p50  100.7 ms  wlan0  TP-L13💻 (2)
\n
\n
\n
\n
    \n
  1. \n

    --text \u3067cli \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c

    \n
  2. \n
  3. \n

    TUI \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c

    \n
  4. \n
\n
\n
\n
\n
\n

SEE ALSO

\n
\n
\n\n
\n
$ speedtest-cli\nRetrieving speedtest.net configuration...\nTesting from Rakuten Mobile Network (133.106.160.42)...\nRetrieving speedtest.net server list...\nSelecting best server based on ping...\nHosted by GSL Networks (Tokyo) [0.26 km]: 60.882 ms\nTesting download speed................................................................................\nDownload: 12.70 Mbit/s\nTesting upload speed......................................................................................................\nUpload: 2.69 Mbit/s
\n
\n
\n
\n
Speedtest CLI: Internet speed test for the command line \u203bOokla\u516c\u5f0f\u3060\u304c\u30d7\u30ed\u30d7\u30e9\u30a4\u30a8\u30bf\u30ea
\n
\n
$ speedtest\n\n   Speedtest by Ookla\n\n      Server: IPA CyberLab 400G - Tokyo (id: 48463)\n         ISP: Rakuten Mobile Network\nIdle Latency:    50.15 ms   (jitter: 1.41ms, low: 48.98ms, high: 52.36ms)\n    Download:    20.75 Mbps (data used: 19.9 MB)\n                262.40 ms   (jitter: 71.32ms, low: 72.73ms, high: 398.26ms)\n      Upload:     2.96 Mbps (data used: 1.6 MB)\n                779.27 ms   (jitter: 95.79ms, low: 75.05ms, high: 1148.99ms)\n Packet Loss:     0.0%\n  Result URL: https://www.speedtest.net/result/c/e1a349cf-53eb-4d63-b8f4-8550dabd772d
\n
\n
\n
\n
n8henrie/fastcli: Python3 speed test via Fast.com fast.com \u3092\u4f7f\u3044cli \u3067\u8a08\u6e2c\u2026\u20262025-12-27\u306barchived \u3055\u308c\u3066\u3044\u305f
\n
\n
$ python -m fastcli -v\nApproximate download speed: 17.48 Mbps
\n
\n
\n
\n
\n", "content_text": "Cloudflare \u306e\u901f\u5ea6\u8a08\u6e2c\u30b5\u30a4\u30c8\u306espeed.cloudflare.com \u3092TUI \u3067\u8a08\u6e2c\u3067\u304d\u308bcloudflare-speed-cli \u3068\u3044\u3046\u3082\u306e\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\ncloudflare-speed-cli \u306fRust \u88fd\u3067GPL-3.0 license \u3067\u3059\uff0e\n\n\n\n\nkavehtehrani/cloudflare-speed-cli: CLI for internet speed test via cloudflare\n\n\n\nTUI app for internet speed test via Cloudflare’s endpoint : r/commandline\n\n\n\n\n\n\n\n\u985e\u4f3c\u306e\u3082\u306e\u3067\uff0cspeedtest.net \u3092\u8a08\u6e2c\u3067\u304d\u308bspeedtest-cli \u3092\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\u304c\uff0cCloudflare \u3082\u4f7f\u3048\u308b\u3068\u4fbf\u5229\u305d\u3046\u3067\u3059\uff0e\n\n\n\ncloudflare-speed-cli \u306fGitHub Releases \u306b\u306fLinux x86_64, aarch64, macOS aarch64, x86_64, Windows x86_64 \u306e\u30d0\u30a4\u30ca\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e\u3057\u304b\u3057\u4f8b\u306b\u3088\u3063\u3066Raspberry Pi bookworm armhf(Arm 32bit)\u3067\u3082\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\nRust \u95a2\u9023\u306fasciimena 3.0 \u3092build \u3057\u305f\u3068\u304d\u306b\u5165\u308c\u305f\u3082\u306e\u304b\u3089rustup \u30671.92.0 \u306b\u3057\u305f\u3082\u306e\u3092\u4f7f\u3044\u307e\u3059\uff0e\n\n\n\n\nasciinema 3.0\u3068Raspberry Pi armhf\u74b0\u5883\u3067\u306e\u30d3\u30eb\u30c9 \u2013 matoken’s blog\n\n\n\n\ncargo install \u3067\u6642\u9593\u304c\u639b\u304b\u308a\u307e\u3059\u304c\u7279\u306b\u3064\u307e\u3065\u3044\u305f\u308a\u305b\u305abuild \u3067\u304d\u307e\u3057\u305f\uff0e\n\n\n\n$ cargo --version\nwarning: `/home/matoken/.cargo/config` is deprecated in favor of `config.toml`\n |\n = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo install --git https://github.com/kavehtehrani/cloudflare-speed-cli --features tui\n$ cloudflare-speed-cli --help\nCloudflare-based speed test with optional TUI\n\nUsage: cloudflare-speed-cli [OPTIONS]\n\nOptions:\n --base-url <BASE_URL>\n Base URL for the Cloudflare speed test service [default: https://speed.cloudflare.com]\n --json\n Print JSON result and exit (no TUI)\n --text\n Print text summary and exit (no TUI)\n --download-duration <DOWNLOAD_DURATION>\n Download phase duration [default: 10s]\n --upload-duration <UPLOAD_DURATION>\n Upload phase duration [default: 10s]\n --idle-latency-duration <IDLE_LATENCY_DURATION>\n Idle latency probe duration (pre-test) [default: 2s]\n --concurrency <CONCURRENCY>\n Concurrency for download/upload workers [default: 6]\n --download-bytes-per-req <DOWNLOAD_BYTES_PER_REQ>\n Bytes per download request [default: 10000000]\n --upload-bytes-per-req <UPLOAD_BYTES_PER_REQ>\n Bytes per upload request [default: 5000000]\n --probe-interval-ms <PROBE_INTERVAL_MS>\n Probe interval in milliseconds [default: 250]\n --probe-timeout-ms <PROBE_TIMEOUT_MS>\n Probe timeout in milliseconds [default: 800]\n --experimental\n Enable experimental features (TURN fetch + UDP-like loss probe)\n --export-json <EXPORT_JSON>\n Export results as JSON\n --export-csv <EXPORT_CSV>\n Export results as CSV\n --auto-save <AUTO_SAVE>\n Use --auto-save true or --auto-save false to override (default: true) [default: true] [possible values: true, false]\n --interface <INTERFACE>\n Bind to a specific network interface (e.g., ens18, eth0)\n --source <SOURCE>\n Bind to a specific source IP address (e.g., 192.168.10.0)\n --certificate <CERTIFICATE>\n Path to a custom TLS certificate file (PEM or DER format)\n -h, --help\n Print help\n -V, --version\n Print version\n$ cloudflare-speed-cli --version\ncloudflare-speed-cli 0.3.1\n\n\n\n\u65e9\u901f\u8a66\u3057\u3066\u307f\u307e\u3059\uff0ecloudflare-speed-cli \u3092\u30aa\u30d7\u30b7\u30e7\u30f3\u306a\u3057\u3067\u5b9f\u884c\u3059\u308b\u3068TUI \u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\uff0e\u8d77\u52d5\u3057\u3066\u3059\u3050\u306b\u8a08\u6e2c\u304c\u59cb\u307e\u308a\uff0c\u65e2\u5b9a\u5024\u3067\u306f\u8a08\u6e2c\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0etab key \u3067History \u30da\u30fc\u30b8\u306b\u9077\u79fb\u3059\u308b\u3068\u904e\u53bb\u306e\u8a08\u6e2c\u7d50\u679c\u3092\u95b2\u89a7\u3057\u305f\u308a\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u305f\u308a\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\n\n--text \u30aa\u30d7\u30b7\u30e7\u30f3\u3067cli \u30e2\u30fc\u30c9\u3067\u3059\u304c\uff0c\u30d7\u30ed\u30b0\u30ec\u30b9\u304c\u5927\u91cf\u306b\u51fa\u3066\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\u611f\u3058\u3067\u3059\uff0e\n\n\n\n\u30d7\u30ed\u30b9\u30ec\u30b9\u90e8\u5206\u306fSTDERR \u306a\u306e\u3067\u305d\u308c\u3092\u6368\u3066\u3066\u3057\u307e\u3063\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\n\n\n\n$ cloudflare-speed-cli --text 2>/dev/null\nIP/Colo/ASN: 133.106.160.49 / NRT / 138384 (-)\nDownload: 23.73 Mbps\nUpload: 2.47 Mbps\nIdle latency p50/p90/p99: 98.9/110.7/110.7 ms (loss 0.0%, jitter 10.2 ms)\nLoaded latency (download) p50/p90/p99: 438.0/578.6/755.2 ms (loss 0.0%, jitter 130.1 ms)\nLoaded latency (upload) p50/p90/p99: 654.8/794.1/794.1 ms (loss 45.5%, jitter 144.4 ms)\n\n\n\n\u3053\u3093\u306a\u611f\u3058\u3067\u5b9a\u671f\u7684\u306b\u8a08\u6e2c\u3059\u308b\u306e\u306b\u3082\u4fbf\u5229\u304b\u3082\u3068\u601d\u3044\u307e\u3057\u305f\u304c\uff0ccli \u30e2\u30fc\u30c9\u3067\u306f\u65e2\u5b9a\u5024\u3067\u306f\u7d50\u679c\u3092\u4fdd\u5b58\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ watch -n 3600 -- cloudflare-speed-cli --text\n\n\n\n--auto-save true \u3082\u8ffd\u52a0\u3059\u308b\u3068\u7d50\u679c\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3059\uff0e\n\n\n\n$ watch -n 3600 -- cloudflare-speed-cli --text --auto-save true\n\n\n\n\u305f\u3060\uff0c\u4ee5\u4e0b\u306e\u3088\u3046\u306bTUI \u30e2\u30fc\u30c9\u306e\u8a08\u6e2c\u6642\u306e\u30ed\u30b0\u306b\u306f --interface \u3092\u6307\u5b9a\u3057\u3066\u3082Interface \u3084AP \u540d\u306f\u4fdd\u5b58\u3055\u308c\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\u2502 3. 2025-12-31 06:30:11 +09:00 DL 20.69 Mbps UL 4.66 Mbps Idle p50 103.7 ms - (1)\n\u2502 4. 2025-12-31 06:08:33 +09:00 DL 21.73 Mbps UL 3.16 Mbps Idle p50 100.7 ms wlan0 TP-L13💻 (2)\n\n\n\n\n\n--text \u3067cli \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c\n\n\nTUI \u30e2\u30fc\u30c9\u3067\u5b9f\u884c\u3057\u305f\u3068\u304d\u306e\u7d50\u679c\n\n\n\n\n\n\nSEE ALSO\n\n\nsivel/speedtest-cli: Command line interface for testing internet bandwidth using speedtest.net speedtest.net \u3092\u4f7f\u3044cli \u3067\u8a08\u6e2c\n\n$ speedtest-cli\nRetrieving speedtest.net configuration...\nTesting from Rakuten Mobile Network (133.106.160.42)...\nRetrieving speedtest.net server list...\nSelecting best server based on ping...\nHosted by GSL Networks (Tokyo) [0.26 km]: 60.882 ms\nTesting download speed................................................................................\nDownload: 12.70 Mbit/s\nTesting upload speed......................................................................................................\nUpload: 2.69 Mbit/s\n\n\n\nSpeedtest CLI: Internet speed test for the command line \u203bOokla\u516c\u5f0f\u3060\u304c\u30d7\u30ed\u30d7\u30e9\u30a4\u30a8\u30bf\u30ea\n\n$ speedtest\n\n Speedtest by Ookla\n\n Server: IPA CyberLab 400G - Tokyo (id: 48463)\n ISP: Rakuten Mobile Network\nIdle Latency: 50.15 ms (jitter: 1.41ms, low: 48.98ms, high: 52.36ms)\n Download: 20.75 Mbps (data used: 19.9 MB)\n 262.40 ms (jitter: 71.32ms, low: 72.73ms, high: 398.26ms)\n Upload: 2.96 Mbps (data used: 1.6 MB)\n 779.27 ms (jitter: 95.79ms, low: 75.05ms, high: 1148.99ms)\n Packet Loss: 0.0%\n Result URL: https://www.speedtest.net/result/c/e1a349cf-53eb-4d63-b8f4-8550dabd772d\n\n\n\nn8henrie/fastcli: Python3 speed test via Fast.com fast.com \u3092\u4f7f\u3044cli \u3067\u8a08\u6e2c\u2026\u20262025-12-27\u306barchived \u3055\u308c\u3066\u3044\u305f\n\n$ python -m fastcli -v\nApproximate download speed: 17.48 Mbps", "date_published": "2025-12-31T07:45:08+09:00", "date_modified": "2025-12-31T07:45:10+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "Cloudflare", "Raspberry Pi OS", "speedtest", "TUI", "bookworm", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5113", "url": "https://matoken.org/blog/2025/12/29/witr_-why-is-this-running/", "title": "\u30d7\u30ed\u30bb\u30b9\u306e\u60c5\u5831\u3092\u308f\u304b\u308a\u3084\u3059\u304f\u8868\u793a\u3057\u3066\u304f\u308c\u308bwitr", "content_html": "
\n
\n

\n
\n

witr (why-is-this-running) \u306f\u30d7\u30ed\u30bb\u30b9\u540d\uff0cPID\uff0c\u30dd\u30fc\u30c8\u756a\u53f7\u304b\u3089\u305d\u308c\u304c\u306a\u305c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u8abf\u3079\u3066\u8868\u793a\u3057\u3066\u304f\u308c\u307e\u3059\uff0e

\n
\n
\n

\"witr

\n
\n\n

\n
\n

\u4f8b\u3048\u3070\u4ee5\u4e0b\u306fport 22 \u3092\u8abf\u3079\u3066\u3044\u307e\u3059\uff0esshd \u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306a\u3069\u304c\u308f\u304b\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo ./witr -port 22\nTarget      : sshd\n\nProcess     : sshd (pid 581)\nUser        : root\nCommand     : sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups\nStarted     : 4 days ago (Thu 2025-12-25 18:10:39 +09:00)\n\nWhy It Exists :\n  systemd (pid 1)   sshd (pid 581)\n\nSource      : systemd service (supervisor)\n\nWorking Dir : /\nListening   : 0.0.0.0:22\n              :::22\n\nWarnings    :\n    Process is listening on a public interface\n    Process is running as root\n    Process is running from a suspicious working directory: /
\n
\n
\n
\n

\u30e1\u30e2\u30ea\u3092\u305f\u304f\u3055\u3093\u4f7f\u3063\u3066\u3044\u308b(1GB+)\u3068\u8b66\u544a\u304c\u8868\u793a\u3055\u308c\u305f\u308a\u3082\u3057\u307e\u3059

\n
\n
\n
\n
$ sudo ~/usr/local/bin/witr -pid 10522\nTarget      : firefox.real\n\nProcess     : firefox.real (pid 10522) [high-mem]\nUser        : matoken\nCommand     : /usr/bin/firefox.real\nStarted     : 2 days ago (Sat 2025-12-27 05:39:41 +09:00)\n\nWhy It Exists :\n  systemd (pid 1) \u2192 firefox.real (pid 10522)\n\nSource      : systemd service (supervisor)\n\nWorking Dir : /home/matoken\n\nWarnings    :\n  \u2022 Process is using high memory (>1GB RSS)
\n
\n
\n
\n

\u4ee5\u4e0b\u306f\u30d7\u30ed\u30bb\u30b9ID 524 \u304b\u3089glance \u304ccron \u304b\u3089\u8d77\u52d5\u3057\u3066\u3044\u308b\u306e\u304c\u308f\u304b\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
$ ./witr -pid 524\nTarget      : glance\n\nProcess     : glance (pid 524) {forked}\nUser        : matoken\nCommand     : /home/matoken/bin/glance -config /home/matoken/.config/glance.yml\nStarted     : 4 days ago (Thu 2025-12-25 18:10:36 +09:00)\nRestarts    : 1\n\nWhy It Exists :\n  systemd (pid 1) \u2192 cron (pid 448) \u2192 cron (pid 492) \u2192 sh (pid 523 glance (pid 524)\n\nSource      : systemd service (supervisor)\n\nWorking Dir : /home/matoken\nListening   : :::8080\n\nWarnings    :\n    Process is listening on a public interface
\n
\n
\n
\n

\u30dd\u30fc\u30c8\u30b9\u30ad\u30e3\u30f3\u3057\u3066open \u3057\u3066\u3044\u308b\u30dd\u30fc\u30c8\u5168\u3066\u306b\u5bfe\u3057\u3066witr \u3092\u5b9f\u884c\u3057\u3066\u307f\u305f\u308a\u3082\uff0e

\n
\n
\n
\n
$ sudo nmap -p 0-65535 localhost | grep open | cut -f1 -d\\/ | xargs -n1 sudo ./witr -port
\n
\n
\n
\n
\n
\n

witr \u306e\u5c0e\u5165

\n
\n
\n

witr \u306e\u5c0e\u5165\u306finstall.sh \u304c\u304a\u3059\u3059\u3081\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3042\u307e\u308a\u597d\u307f\u306e\u65b9\u6cd5\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\u4e2d\u3092\u898b\u308b\u3068GitHub Releases \u304b\u3089\u74b0\u5883\u306b\u3042\u3063\u305f\u30d0\u30a4\u30ca\u30ea\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\uff0c /usr/local/bin \u4ee5\u4e0b\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u307e\u3059\uff0e\u30d0\u30a4\u30ca\u30ea\u306fLinux amd64, arm64 \u304c\u7528\u610f\u3057\u3066\u3042\u308a\u307e\u3059\uff0e
\namd64 \u74b0\u5883\u3067\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u624b\u9806\u3067\u624b\u52d5\u3067\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\nv0.1.1 \u3067macOS amd64/arm64 \u3082\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\uff0e\n
\n
\n
\n
\n
$ wget -c https://github.com/pranshuparmar/witr/releases/latest/download/witr-linux-amd64 (1)\n$ install -m 755 ./witr-linux-amd64 ~/usr/local/bin/witr (2)\n$ which witr\n/home/matoken/usr/local/bin/witr\n$ rm witr-linux-amd64\n$ witr (3)\nUsage: witr [--pid N | --port N | name] [--short] [--tree] [--json] [--warnings] [--no-color] [--env] [--help] [--version]\n  --pid <n>         Explain a specific PID\n  --port <n>        Explain port usage\n  --short           One-line summary\n  --tree            Show full process ancestry tree\n  --json            Output result as JSON\n  --warnings        Show only warnings\n  --no-color        Disable colorized output\n  --env             Show only environment variables for the process\n  --help            Show this help message\n  --version         Show version and exit\n$ witr --version\nwitr v0.1.1 (commit b50f08b, built 2025-12-28)
\n
\n
\n
\n
    \n
  1. \n

    witr \u306e\u6700\u65b0\u306elinux amd64 \u30d0\u30a4\u30ca\u30ea\u7248\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9

    \n
  2. \n
  3. \n

    \u597d\u307f\u306e\u5834\u6240\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb

    \n
  4. \n
  5. \n

    USAGE

    \n
  6. \n
\n
\n
\n
\n
\n

Linux armhf(arm 32bit) \u3067\u3082\u52d5\u304b\u3059

\n
\n
\n

Raspberry Pi bookworm armhf \u3067\u3082\u52d5\u304b\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\uff0e
\nbuild \u3057\u3088\u3046\u3068\u3057\u305f\u3089\u307e\u305agolang \u304c\u53e4\u3044\u3068\u8a00\u308f\u308c\u305f\u306e\u3067\u307e\u305a\u306f\u65b0\u3057\u3044golang \u306e\u5165\u624b\u304b\u3089\uff0e

\n
\n
\n
package\u7248golang \u306f1.23 \u3060\u304c1.25.5+ \u304c\u5fc5\u8981
\n
\n
$ /usr/bin/go build -ldflags \"-X main.version=0.1.0 -X main.commit=$(git rev-parse --short HEAD) -X 'main.buildDate=$(date +%Y-%m-%d)'\" -o witr-linux-arm32 ./cmd/witr\ngo: errors parsing go.mod:\n/home/matoken/src/witr/go.mod:3: invalid go version '1.25.5': must match format 1.23
\n
\n
\n
\n
go.dev \u304b\u3089armv6 \u30d0\u30a4\u30ca\u30ea\u3092\u5165\u624b\u3057\u3066\u30d1\u30b9\u3092\u901a\u3059
\n
\n
$ wget -c https://go.dev/dl/go1.25.5.linux-armv6l.tar.gz (1)\n$ mkdir -p ~/usr/local\n$ tar -C ~/usr/local -xzf go1.25.5.linux-armv6l.tar.gz (2)\n$ rm go1.25.5.linux-armv6l.tar.gz\n$ PATH=~/usr/local/go/bin:$PATH (3)\n$ which go\n/home/matoken/usr/local/go/bin/go\n$ go version (4)\ngo version go1.25.5 linux/arm\n$ cat << EOF > hello.go (5)\npackage main\nimport \"fmt\"\nfunc main() {\n\tfmt.Println(\"Hello World\")\n}\nEOF\n$ go run hello.go (6)\nHello World
\n
\n
\n
\n
    \n
  1. \n

    Linux armv6l \u306e\u30d0\u30a4\u30ca\u30ea\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9

    \n
  2. \n
  3. \n

    \u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u9069\u5f53\u306a\u5834\u6240\u306b\u5c55\u958b

    \n
  4. \n
  5. \n

    \u30d1\u30b9\u3092\u901a\u3057\u3066\u304a\u304f(\u4e00\u6642\u7684\u306a\u4f8b)

    \n
  6. \n
  7. \n

    \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d

    \n
  8. \n
  9. \n

    hello world \u3092\u7528\u610f

    \n
  10. \n
  11. \n

    \u52d5\u4f5c\u78ba\u8a8d

    \n\n
  12. \n
\n
\n
\n
witr \u3092\u30d3\u30eb\u30c9
\n
\n
$ git clone https://github.com/pranshuparmar/witr/\n$ cd witr\n$ go build -ldflags \"-X main.version=0.1.0 -X main.commit=$(git rev-parse --short HEAD) -X 'main.buildDate=$(date +%Y-%m-%d)'\" -o witr-linux-arm32 ./cmd/witr\n$ ./witr-linux-arm32 --version\nwitr 0.1.0 (commit a2dc413, built 2025-12-28)
\n
\n
\n
\n
\n", "content_text": "witr (why-is-this-running) \u306f\u30d7\u30ed\u30bb\u30b9\u540d\uff0cPID\uff0c\u30dd\u30fc\u30c8\u756a\u53f7\u304b\u3089\u305d\u308c\u304c\u306a\u305c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u8abf\u3079\u3066\u8868\u793a\u3057\u3066\u304f\u308c\u307e\u3059\uff0e\n\n\n\n\n\n\n\npranshuparmar/witr: Why is this running?\n\n\n\n\n\n\u4f8b\u3048\u3070\u4ee5\u4e0b\u306fport 22 \u3092\u8abf\u3079\u3066\u3044\u307e\u3059\uff0esshd \u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u306a\u3069\u304c\u308f\u304b\u308a\u307e\u3059\uff0e\n\n\n\n$ sudo ./witr -port 22\nTarget : sshd\n\nProcess : sshd (pid 581)\nUser : root\nCommand : sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups\nStarted : 4 days ago (Thu 2025-12-25 18:10:39 +09:00)\n\nWhy It Exists :\n systemd (pid 1) sshd (pid 581)\n\nSource : systemd service (supervisor)\n\nWorking Dir : /\nListening : 0.0.0.0:22\n :::22\n\nWarnings :\n Process is listening on a public interface\n Process is running as root\n Process is running from a suspicious working directory: /\n\n\n\n\u30e1\u30e2\u30ea\u3092\u305f\u304f\u3055\u3093\u4f7f\u3063\u3066\u3044\u308b(1GB+)\u3068\u8b66\u544a\u304c\u8868\u793a\u3055\u308c\u305f\u308a\u3082\u3057\u307e\u3059\n\n\n\n$ sudo ~/usr/local/bin/witr -pid 10522\nTarget : firefox.real\n\nProcess : firefox.real (pid 10522) [high-mem]\nUser : matoken\nCommand : /usr/bin/firefox.real\nStarted : 2 days ago (Sat 2025-12-27 05:39:41 +09:00)\n\nWhy It Exists :\n systemd (pid 1) \u2192 firefox.real (pid 10522)\n\nSource : systemd service (supervisor)\n\nWorking Dir : /home/matoken\n\nWarnings :\n \u2022 Process is using high memory (>1GB RSS)\n\n\n\n\u4ee5\u4e0b\u306f\u30d7\u30ed\u30bb\u30b9ID 524 \u304b\u3089glance \u304ccron \u304b\u3089\u8d77\u52d5\u3057\u3066\u3044\u308b\u306e\u304c\u308f\u304b\u308a\u307e\u3059\uff0e\n\n\n\n$ ./witr -pid 524\nTarget : glance\n\nProcess : glance (pid 524) {forked}\nUser : matoken\nCommand : /home/matoken/bin/glance -config /home/matoken/.config/glance.yml\nStarted : 4 days ago (Thu 2025-12-25 18:10:36 +09:00)\nRestarts : 1\n\nWhy It Exists :\n systemd (pid 1) \u2192 cron (pid 448) \u2192 cron (pid 492) \u2192 sh (pid 523 glance (pid 524)\n\nSource : systemd service (supervisor)\n\nWorking Dir : /home/matoken\nListening : :::8080\n\nWarnings :\n Process is listening on a public interface\n\n\n\n\u30dd\u30fc\u30c8\u30b9\u30ad\u30e3\u30f3\u3057\u3066open \u3057\u3066\u3044\u308b\u30dd\u30fc\u30c8\u5168\u3066\u306b\u5bfe\u3057\u3066witr \u3092\u5b9f\u884c\u3057\u3066\u307f\u305f\u308a\u3082\uff0e\n\n\n\n$ sudo nmap -p 0-65535 localhost | grep open | cut -f1 -d\\/ | xargs -n1 sudo ./witr -port\n\n\n\n\n\nwitr \u306e\u5c0e\u5165\n\n\nwitr \u306e\u5c0e\u5165\u306finstall.sh \u304c\u304a\u3059\u3059\u3081\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3042\u307e\u308a\u597d\u307f\u306e\u65b9\u6cd5\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\u4e2d\u3092\u898b\u308b\u3068GitHub Releases \u304b\u3089\u74b0\u5883\u306b\u3042\u3063\u305f\u30d0\u30a4\u30ca\u30ea\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\uff0c /usr/local/bin \u4ee5\u4e0b\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u307e\u3059\uff0e\u30d0\u30a4\u30ca\u30ea\u306fLinux amd64, arm64 \u304c\u7528\u610f\u3057\u3066\u3042\u308a\u307e\u3059\uff0e\namd64 \u74b0\u5883\u3067\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u624b\u9806\u3067\u624b\u52d5\u3067\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\nNote\n\n\nv0.1.1 \u3067macOS amd64/arm64 \u3082\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\n$ wget -c https://github.com/pranshuparmar/witr/releases/latest/download/witr-linux-amd64 (1)\n$ install -m 755 ./witr-linux-amd64 ~/usr/local/bin/witr (2)\n$ which witr\n/home/matoken/usr/local/bin/witr\n$ rm witr-linux-amd64\n$ witr (3)\nUsage: witr [--pid N | --port N | name] [--short] [--tree] [--json] [--warnings] [--no-color] [--env] [--help] [--version]\n --pid <n> Explain a specific PID\n --port <n> Explain port usage\n --short One-line summary\n --tree Show full process ancestry tree\n --json Output result as JSON\n --warnings Show only warnings\n --no-color Disable colorized output\n --env Show only environment variables for the process\n --help Show this help message\n --version Show version and exit\n$ witr --version\nwitr v0.1.1 (commit b50f08b, built 2025-12-28)\n\n\n\n\n\nwitr \u306e\u6700\u65b0\u306elinux amd64 \u30d0\u30a4\u30ca\u30ea\u7248\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\n\n\u597d\u307f\u306e\u5834\u6240\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\n\nUSAGE\n\n\n\n\n\n\nLinux armhf(arm 32bit) \u3067\u3082\u52d5\u304b\u3059\n\n\nRaspberry Pi bookworm armhf \u3067\u3082\u52d5\u304b\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\uff0e\nbuild \u3057\u3088\u3046\u3068\u3057\u305f\u3089\u307e\u305agolang \u304c\u53e4\u3044\u3068\u8a00\u308f\u308c\u305f\u306e\u3067\u307e\u305a\u306f\u65b0\u3057\u3044golang \u306e\u5165\u624b\u304b\u3089\uff0e\n\n\npackage\u7248golang \u306f1.23 \u3060\u304c1.25.5+ \u304c\u5fc5\u8981\n\n$ /usr/bin/go build -ldflags \"-X main.version=0.1.0 -X main.commit=$(git rev-parse --short HEAD) -X 'main.buildDate=$(date +%Y-%m-%d)'\" -o witr-linux-arm32 ./cmd/witr\ngo: errors parsing go.mod:\n/home/matoken/src/witr/go.mod:3: invalid go version '1.25.5': must match format 1.23\n\n\n\ngo.dev \u304b\u3089armv6 \u30d0\u30a4\u30ca\u30ea\u3092\u5165\u624b\u3057\u3066\u30d1\u30b9\u3092\u901a\u3059\n\n$ wget -c https://go.dev/dl/go1.25.5.linux-armv6l.tar.gz (1)\n$ mkdir -p ~/usr/local\n$ tar -C ~/usr/local -xzf go1.25.5.linux-armv6l.tar.gz (2)\n$ rm go1.25.5.linux-armv6l.tar.gz\n$ PATH=~/usr/local/go/bin:$PATH (3)\n$ which go\n/home/matoken/usr/local/go/bin/go\n$ go version (4)\ngo version go1.25.5 linux/arm\n$ cat << EOF > hello.go (5)\npackage main\nimport \"fmt\"\nfunc main() {\n\tfmt.Println(\"Hello World\")\n}\nEOF\n$ go run hello.go (6)\nHello World\n\n\n\n\n\nLinux armv6l \u306e\u30d0\u30a4\u30ca\u30ea\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\n\n\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u9069\u5f53\u306a\u5834\u6240\u306b\u5c55\u958b\n\n\n\u30d1\u30b9\u3092\u901a\u3057\u3066\u304a\u304f(\u4e00\u6642\u7684\u306a\u4f8b)\n\n\n\u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\n\n\nhello world \u3092\u7528\u610f\n\n\n\u52d5\u4f5c\u78ba\u8a8d\n\n\n\nDownload and install – The Go Programming Language\n\n\nAll releases – The Go Programming Language\n\n\n\n\n\n\n\nwitr \u3092\u30d3\u30eb\u30c9\n\n$ git clone https://github.com/pranshuparmar/witr/\n$ cd witr\n$ go build -ldflags \"-X main.version=0.1.0 -X main.commit=$(git rev-parse --short HEAD) -X 'main.buildDate=$(date +%Y-%m-%d)'\" -o witr-linux-arm32 ./cmd/witr\n$ ./witr-linux-arm32 --version\nwitr 0.1.0 (commit a2dc413, built 2025-12-28)", "date_published": "2025-12-29T21:31:39+09:00", "date_modified": "2025-12-29T21:31:41+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "system info", "witr", "bookworm", "Debian", "Linux", "Raspberry Pi OS", "sid", "\u672a\u5206\u985e" ] }, { "id": "https://matoken.org/blog/?p=5097", "url": "https://matoken.org/blog/2025/12/25/ssh-tiny-christmas/", "title": "ssh tiny.christmas", "content_html": "

\n
\n

\u53bb\u5e74\u306f\u3044\u304f\u3064\u304b\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u30af\u30ea\u30b9\u30de\u30b9\u30c4\u30ea\u30fc\u3092\u96c6\u3081\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u4eca\u5e74\u306f\u30cd\u30bf\u5207\u308c\u304b\u306a\u3068\u601d\u3063\u305f\u3089ActivityPub \u306b\u521d\u3081\u3066\u898b\u308b\u30bf\u30fc\u30df\u30ca\u30eb\u30af\u30ea\u30b9\u30de\u30b9\u30c4\u30ea\u30fc\u304c\u6d41\u308c\u3066\u304d\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

ssh \u3067\u63a5\u7d9a\u3059\u308b\u3068\u30c4\u30ea\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
$ ssh tiny.christmas
\n
\n
\n

\n
\n

\u30af\u30ea\u30b9\u30de\u30b9\u30c4\u30ea\u30fc\u304c\u8868\u793a\u3055\u308c\uff0c\u300cO Christmas Tree\u300d\u306e\u6b4c\u8a5e\u304c\u6d41\u308c\u307e\u3059\uff0e
\ntree \u304cUnicode\u70b9\u5b57\u3092\u4f7f\u3063\u3066\u66f8\u304b\u308c\u3066\u3044\u308b\u306e\u304c\u6700\u8fd1\u307d\u3044\u3067\u3059\u306d\uff0e

\n
\n
\n

\u8a73\u7d30\u306f\u4ee5\u4e0b\u306b\uff0e

\n
\n
\n\n
\n", "content_text": "\u53bb\u5e74\u306f\u3044\u304f\u3064\u304b\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u30af\u30ea\u30b9\u30de\u30b9\u30c4\u30ea\u30fc\u3092\u96c6\u3081\u307e\u3057\u305f\uff0e\n\n\n\n\nMerry X-mas \u2013 matoken’s blog\n\n\n\n\n\u4eca\u5e74\u306f\u30cd\u30bf\u5207\u308c\u304b\u306a\u3068\u601d\u3063\u305f\u3089ActivityPub \u306b\u521d\u3081\u3066\u898b\u308b\u30bf\u30fc\u30df\u30ca\u30eb\u30af\u30ea\u30b9\u30de\u30b9\u30c4\u30ea\u30fc\u304c\u6d41\u308c\u3066\u304d\u307e\u3057\u305f\uff0e\n\n\n\nssh \u3067\u63a5\u7d9a\u3059\u308b\u3068\u30c4\u30ea\u30fc\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n$ ssh tiny.christmas\n\n\n\n\n\u30af\u30ea\u30b9\u30de\u30b9\u30c4\u30ea\u30fc\u304c\u8868\u793a\u3055\u308c\uff0c\u300cO Christmas Tree\u300d\u306e\u6b4c\u8a5e\u304c\u6d41\u308c\u307e\u3059\uff0e\ntree \u304cUnicode\u70b9\u5b57\u3092\u4f7f\u3063\u3066\u66f8\u304b\u308c\u3066\u3044\u308b\u306e\u304c\u6700\u8fd1\u307d\u3044\u3067\u3059\u306d\uff0e\n\n\n\u8a73\u7d30\u306f\u4ee5\u4e0b\u306b\uff0e\n\n\n\n\nssh tiny.christmas \u00b7 eieio.games", "date_published": "2025-12-25T06:04:00+09:00", "date_modified": "2025-12-25T06:04:02+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "Christmas", "ssh", "\u672a\u5206\u985e" ] }, { "id": "https://matoken.org/blog/?p=5089", "url": "https://matoken.org/blog/2025/12/24/sataka-and-blurhash/", "title": "\u30bf\u30fc\u30df\u30ca\u30eb\u7279\u5316Misskey\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306esayaka\u3061\u3083\u3093\u3068BlurHash", "content_html": "
\n
\n

\n
\n

\u30bf\u30fc\u30df\u30ca\u30eb\u306b\u7279\u5316\u3057\u305f Misskey \u30b9\u30c8\u30ea\u30fc\u30e0\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306esayaka \u3061\u3083\u3093\u3068\u3044\u3046\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c\u3042\u308a\u307e\u3059\uff0eSixel \u5bfe\u5fdc\u7aef\u672b\u3067\u5b9f\u884c\u3059\u308b\u3068\u753b\u50cf\u4ed8\u304d\u3067Misskey \u3092\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3057\u3066\u3068\u3066\u3082\u697d\u3057\u3044\u3067\u3059\uff0e

\n
\n
\n\n
\n
\n

\u3053\u306esayaka \u3061\u3083\u3093\u306b --force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u305f\u306e\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n\n

\n

\n
\n
\n

BlurHash?

\n
\n
\n

BlurHash \u306f\u30d5\u30fc\u30c9\u30c7\u30ea\u30d0\u30ea\u30fc\u30b5\u30fc\u30d3\u30b9\u306eWolt \u306e\u958b\u767a\u3057\u305f\u753b\u50cf\u8aad\u307f\u8fbc\u307f\u306e\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306a\u3069\u306b\u5229\u7528\u3067\u304d\u308b\u30b3\u30f3\u30d1\u30af\u30c8\u306a20\u301c30\u6587\u5b57\u3067\u8868\u305b\u308b\u307c\u304b\u3057\u305f\u753b\u50cf\u3067\u3059\uff0e
\n\u3053\u306e\u5bb9\u91cf\u306e\u5c0f\u3055\u3044\u753b\u50cf\u3092\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306b\u57cb\u3081\u8fbc\u3080\u3068\u7a7a\u3063\u307d\u3088\u308a\u5f69\u308a\u304c\u8c4a\u304b\u306b\u306a\u3063\u305f\u308a\uff0cNSFW \u753b\u50cf\u3092\u30e2\u30b6\u30a4\u30af\u3059\u308b\u4ee3\u308f\u308a\u306b\u4f7f\u3063\u305f\u308a\u51fa\u6765\u307e\u3059\uff0e
\nBlurHash \u306fJSON, HTML, Shell \u3067\u5b89\u5168\u306a\u6b21\u306e\u30ad\u30e3\u30e9\u30af\u30bf\u3092\u4f7f\u3063\u305fBase 83 \u3067\u8868\u73fe\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
\n

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~

\n
\n
\n\n
\n
\n

BlurHash \u306fMIT\u30e9\u30a4\u30bb\u30f3\u30b9\u3067\u305f\u304f\u3055\u3093\u306e\u8a00\u8a9e\u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306fDebian logo \u3092C \u5b9f\u88c5\u306eBlurHash \u306b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u6570\u3054\u3068\u306b\u304b\u3051\u3066\u307f\u3066\u3044\u307e\u3059\uff0e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u6570\u306b\u3088\u308a7\u301c133byte\u3067\u8868\u3055\u308c\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
$ git clone https://github.com/woltapp/blurhash (1)\n$ cd blurhash/C/\n$ make blurhash_encoder (2)\n$ make blurhash_decoder (3)\n$ wget https://www.debian.org/logos/openlogo-nd-100.png (4)\n$ file openlogo-nd-100.png\nopenlogo-nd-100.png: PNG image data, 101 x 124, 8-bit colormap, non-interlaced\n$ for i in {1..8}; do ./blurhash_encoder $i $i openlogo-nd-100.png; done (5)\n00SFLy\nAJSFLyixHXx]\nKJSFLyixR5HXx]kCWBj[%#\nUJSFLyixR5xuHXx]kCofWBj[%#yDeTV@yXR5\neJSFLyixR5xuVsHXx]kCofj[WBj[%#yD%#eTV@yXR5tRV@o|%}kCRP\noJSFLyixR5xuVsiwHXx]kCofj[VsWBj[%#yD%#tleTV@yXR5tRofV@o|%}kCRPMJ%gV@ozozRPoz\nyJSFLyixR5xuVsiwtlHXx]kCofj[VsozWBj[%#yD%#tlkCeTV@yXR5tRofkCV@o|%}kCRPMJMd%gV@ozozRPozRPozaytlR5H?kBRP\n:JSFLyixR5xuVsiwtlt7HXx]kCofj[VsozVsWBj[%#yD%#tlkCj[eTV@yXR5tRofkCtRV@o|%}kCRPMJMdV@%gV@ozozRPozRPozozaytlR5H?kBRPtRxukCtRVsR5kCfkae\n$ for i in {1..8}; do ./blurhash_encoder $i $i openlogo-nd-100.png | wc -c; done (6)\n7\n13\n23\n37\n55\n77\n103\n133\n$ for i in {1..8}; do ./blurhash_decoder $( ./blurhash_encoder $i $i openlogo-nd-100.png ) 101 124 blur-$i.png; done (7)\n$ lsix (8)
\n
\n
\n
\n
    \n
  1. \n

    BlurHash \u306esource \u5165\u624b

    \n
  2. \n
  3. \n

    encoder build

    \n
  4. \n
  5. \n

    decoder build

    \n
  6. \n
  7. \n

    Debian logo file \u5165\u624b

    \n
  8. \n
  9. \n

    \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u679a\u306bBlurHash \u306b\u5909\u63db

    \n
  10. \n
  11. \n

    \u30d0\u30a4\u30c8\u6570\u78ba\u8a8d

    \n
  12. \n
  13. \n

    BlurHash \u3092png \u306b\u5909\u63db

    \n
  14. \n
  15. \n

    png \u306b\u5909\u63db\u3057\u305fBlurHash \u3092\u8868\u793a

    \n
  16. \n
\n
\n
\n

\"blurhash

\n
\n
\n

\u6614\u306fhtml \u306eimg \u30bf\u30b0\u306blowsrc \u3067\u30b5\u30a4\u30ba\u306e\u5c0f\u3055\u3044\u4ee3\u66ff\u753b\u50cf\u3092\u6307\u5b9a\u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3057\u305f\u304c(\u73fe\u5728\u306f\u975e\u63a8\u5968)\u305d\u308c\u3088\u308a\u3082\u5c0f\u3055\u304f\u306a\u308b\u3068\u601d\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
\n

sayaka \u306e –force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a66\u3059

\n
\n
\n

sayaka \u3061\u3083\u3093\u306e –force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e
\n\u307e\u305a\u306fbuild\uff0e
\nLinux \u3067\u306ebuild \u6642\u306b\u5f15\u3063\u304b\u304b\u308a\u3084\u3059\u3044\u306e\u304cGNU Make \u3067\u306f\u306a\u304fbmake \u3092\u4f7f\u3046\u3068\u3053\u308d\uff0e

\n
\n
\n
\n
$ git checkout a4e143d50ceee29a61610d1ee76e4030b0bba273\nPrevious HEAD position was d76cb2c ver 3.8.1 (2024/09/21)\nHEAD is now at a4e143d src/misskey: --force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3057\u3066\u307f\u308b\u3002 \u753b\u50cf\u8868\u793a\u3092 Blurhash \u3060\u3051\u306b\u3059\u308b\u30e2\u30fc\u30c9\u3002\n$ ./configure\n$ bmake -DRELEASE all\n$ src/sayaka\nusage: sayaka <command> [<options...>]\n <command>\n  -h,--home           : Home timeline mode (needs --server and --token)\n  -l,--local          : Local timeline mode (needs --server)\n  -p,--play=<file|->  : Playback mode\n <options>\n  -s,--server=<host>  : Set misskey server\n  -t,--token=<file>   : Set misskey access token file\n  -c,--color=<color>  : 256,16,8,2,1 and gray[2-256] (default:256)\n  --show-cw           : Open CW(Contents Warning) part\n  --nsfw=<show|blur|alt|hide> : How to show NSFW contents (default:blur)\n  --show-image=<yes|no|auto>  : Whether to show image or not (default:auto)\n  -r,--record=<file>  : Record JSON to <file>\n  --help-all          : More details
\n
\n
\n
\n

build \u51fa\u6765\u305f\u306e\u3067\u65e9\u901f --force-blurhash \u3092\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\u4f8b\u3048\u3070 misskey.io \u3092\u3053\u3093\u306a\u611f\u3058\u3067\uff0e

\n
\n
\n
\n
$ src/sayaka --force-blurhash -l -s misskey.io
\n
\n
\n
\n

\u3053\u308c\u307e\u3067\u306f\u65e2\u5b9a\u5024\u3067\u306fNSFW \u30b3\u30f3\u30c6\u30f3\u30c4\u304cBlurHash \u3067\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u304c\uff0c--force-blurhash \u3067\u306f\u5168\u3066\u306e\u30a2\u30a4\u30b3\u30f3\u753b\u50cf\u3082\u6dfb\u4ed8\u753b\u50cf\u3082BlurHash \u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n

\"sayaka

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n\u30a2\u30ab\u30a6\u30f3\u30c8\u3084\u672c\u6587\u306b\u306f\u30e2\u30b6\u30a4\u30af\u3092\u639b\u3051\u3066\u3042\u308a\u307e\u3059\uff0e\n
\n
\n
\n

BlurHash \u3067\u753b\u50cf\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u304f\u306a\u308b\u3063\u3066\u3053\u3068\u306f\u901a\u4fe1\u6599\u3082\u30c7\u30fc\u30bf\u91cf\u3082\u5c0f\u3055\u304f\u306a\u3063\u3066\u3044\u3066\u30d7\u30a2\u306a\u56de\u7dda\u3067\u3082\u3044\u3044\u611f\u3058\u306b\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3067\u304d\u305d\u3046\u306a\u6c17\u304c\u3057\u307e\u3059\uff0e

\n
\n
\n

BlurHash \u3068Sixel \u309260\u79d2\u305a\u3064 --record \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\u671f\u5f85\u306b\u53cd\u3057\u3066BlurHash \u306e\u307b\u3046\u304c\u5927\u5206\u5927\u304d\u3044\u3067\u3059\uff0e

\n
\n
\n
\n
$ timeout 60 src/sayaka --record=blurhash.rec --force-blurhash -l -s misskey.io\n$ timeout 60 src/sayaka --record=sixel.rec -l -s misskey.io\n$ ls -s *.rec\n436 blurhash.rec   44 sixel.rec
\n
\n
\n
\n

ttyrec \u3067\u3082\u540c\u3058\u3088\u3046\u306a\u611f\u3058\uff0e

\n
\n
\n
\n
$ ttyrec -f blurhash.ttyrec -- timeout 60 src/sayaka --force-blurhash -l -s misskey.io\n$ ttyrec -f sixel.ttyrec -- timeout 60 src/sayaka -l -s misskey.io\n$ ls -s *.ttyrec\n1768 blurhash.ttyrec   228 sixel.ttyrec
\n
\n
\n
\n

\u901a\u4fe1\u91cf\u306f\u3069\u3046\u3060\u308d\u3046\u3068nethogs \u30b3\u30de\u30f3\u30c9\u3067 $ sudo nethogs -P $(pgrep sayaka) -l \u306a\u611f\u3058\u3067\u898b\u3066\u307f\u308b\u3068\u3084\u306f\u308aBlurHash \u306e\u307b\u3046\u304c\u901a\u4fe1\u91cf\u304c\u591a\u3044\u3088\u3046\u306a?

\n
\n
\n
BlurHash
\n
\n
NetHogs version 0.8.8\n\n    PID USER     PROGRAM          DEV                   SENT      RECEIVED\n      ? root     unknown TCP                          435.079      11.067 kB/s\n2782477 matoken  src/sayaka -..   enx349971e11a0f       0.252       6.934 kB/s\n\n  TOTAL                                               435.331      18.001 kB/s
\n
\n
\n
\n
Sixel
\n
\n
NetHogs version 0.8.8\n\n    PID USER     PROGRAM          DEV                   SENT      RECEIVED\n      ? root     unknown TCP                          432.206      11.271 kB/s\n2787797 matoken  src/sayaka -..   enx349971e11a0f       0.150       0.885 kB/s\n\n  TOTAL                                               432.356      12.156 kB/s
\n
\n
\n
\n

\u9332\u753b\u30c7\u30fc\u30bf\u3092\u898b\u308b\u3068\u4ef6\u6570\u304c\u9055\u3044\u307e\u3059\uff0eSixel \u306e\u3068\u304d\u306b\u306a\u306b\u304b\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u304c\u3042\u308a\u305d\u3046\u3067\u3059\uff0e\u56de\u7dda\u306e\u554f\u984c?
\n\u5f8c\u3067VPS \u3067\u3082\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
$ jq .body.type blurhash.rec | wc -l\n119\n$ jq .body.type sixel.rec | wc -l\n10
\n
\n
\n
\n
\n", "content_text": "\u30bf\u30fc\u30df\u30ca\u30eb\u306b\u7279\u5316\u3057\u305f Misskey \u30b9\u30c8\u30ea\u30fc\u30e0\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306esayaka \u3061\u3083\u3093\u3068\u3044\u3046\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u304c\u3042\u308a\u307e\u3059\uff0eSixel \u5bfe\u5fdc\u7aef\u672b\u3067\u5b9f\u884c\u3059\u308b\u3068\u753b\u50cf\u4ed8\u304d\u3067Misskey \u3092\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3057\u3066\u3068\u3066\u3082\u697d\u3057\u3044\u3067\u3059\uff0e\n\n\n\n\nisaki68k/sayaka\n\n\n\n\n\u3053\u306esayaka \u3061\u3083\u3093\u306b --force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u305f\u306e\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\nsrc/misskey: –force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3057\u3066\u307f\u308b\u3002 \u00b7 isaki68k/sayaka@a4e143d\n\n\n\n\n\n\n\nBlurHash?\n\n\nBlurHash \u306f\u30d5\u30fc\u30c9\u30c7\u30ea\u30d0\u30ea\u30fc\u30b5\u30fc\u30d3\u30b9\u306eWolt \u306e\u958b\u767a\u3057\u305f\u753b\u50cf\u8aad\u307f\u8fbc\u307f\u306e\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306a\u3069\u306b\u5229\u7528\u3067\u304d\u308b\u30b3\u30f3\u30d1\u30af\u30c8\u306a20\u301c30\u6587\u5b57\u3067\u8868\u305b\u308b\u307c\u304b\u3057\u305f\u753b\u50cf\u3067\u3059\uff0e\n\u3053\u306e\u5bb9\u91cf\u306e\u5c0f\u3055\u3044\u753b\u50cf\u3092\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u306b\u57cb\u3081\u8fbc\u3080\u3068\u7a7a\u3063\u307d\u3088\u308a\u5f69\u308a\u304c\u8c4a\u304b\u306b\u306a\u3063\u305f\u308a\uff0cNSFW \u753b\u50cf\u3092\u30e2\u30b6\u30a4\u30af\u3059\u308b\u4ee3\u308f\u308a\u306b\u4f7f\u3063\u305f\u308a\u51fa\u6765\u307e\u3059\uff0e\nBlurHash \u306fJSON, HTML, Shell \u3067\u5b89\u5168\u306a\u6b21\u306e\u30ad\u30e3\u30e9\u30af\u30bf\u3092\u4f7f\u3063\u305fBase 83 \u3067\u8868\u73fe\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~\n\n\n\n— https://github.com/woltapp/blurhash/blob/master/Algorithm.md#base-83\n\n\n\nBlurHash \u306fMIT\u30e9\u30a4\u30bb\u30f3\u30b9\u3067\u305f\u304f\u3055\u3093\u306e\u8a00\u8a9e\u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\n\n\n\u4ee5\u4e0b\u306fDebian logo \u3092C \u5b9f\u88c5\u306eBlurHash \u306b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u6570\u3054\u3068\u306b\u304b\u3051\u3066\u307f\u3066\u3044\u307e\u3059\uff0e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u6570\u306b\u3088\u308a7\u301c133byte\u3067\u8868\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\n\n\n\n$ git clone https://github.com/woltapp/blurhash (1)\n$ cd blurhash/C/\n$ make blurhash_encoder (2)\n$ make blurhash_decoder (3)\n$ wget https://www.debian.org/logos/openlogo-nd-100.png (4)\n$ file openlogo-nd-100.png\nopenlogo-nd-100.png: PNG image data, 101 x 124, 8-bit colormap, non-interlaced\n$ for i in {1..8}; do ./blurhash_encoder $i $i openlogo-nd-100.png; done (5)\n00SFLy\nAJSFLyixHXx]\nKJSFLyixR5HXx]kCWBj[%#\nUJSFLyixR5xuHXx]kCofWBj[%#yDeTV@yXR5\neJSFLyixR5xuVsHXx]kCofj[WBj[%#yD%#eTV@yXR5tRV@o|%}kCRP\noJSFLyixR5xuVsiwHXx]kCofj[VsWBj[%#yD%#tleTV@yXR5tRofV@o|%}kCRPMJ%gV@ozozRPoz\nyJSFLyixR5xuVsiwtlHXx]kCofj[VsozWBj[%#yD%#tlkCeTV@yXR5tRofkCV@o|%}kCRPMJMd%gV@ozozRPozRPozaytlR5H?kBRP\n:JSFLyixR5xuVsiwtlt7HXx]kCofj[VsozVsWBj[%#yD%#tlkCj[eTV@yXR5tRofkCtRV@o|%}kCRPMJMdV@%gV@ozozRPozRPozozaytlR5H?kBRPtRxukCtRVsR5kCfkae\n$ for i in {1..8}; do ./blurhash_encoder $i $i openlogo-nd-100.png | wc -c; done (6)\n7\n13\n23\n37\n55\n77\n103\n133\n$ for i in {1..8}; do ./blurhash_decoder $( ./blurhash_encoder $i $i openlogo-nd-100.png ) 101 124 blur-$i.png; done (7)\n$ lsix (8)\n\n\n\n\n\nBlurHash \u306esource \u5165\u624b\n\n\nencoder build\n\n\ndecoder build\n\n\nDebian logo file \u5165\u624b\n\n\n\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u679a\u306bBlurHash \u306b\u5909\u63db\n\n\n\u30d0\u30a4\u30c8\u6570\u78ba\u8a8d\n\n\nBlurHash \u3092png \u306b\u5909\u63db\n\n\npng \u306b\u5909\u63db\u3057\u305fBlurHash \u3092\u8868\u793a\n\n\n\n\n\n\n\n\u6614\u306fhtml \u306eimg \u30bf\u30b0\u306blowsrc \u3067\u30b5\u30a4\u30ba\u306e\u5c0f\u3055\u3044\u4ee3\u66ff\u753b\u50cf\u3092\u6307\u5b9a\u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3057\u305f\u304c(\u73fe\u5728\u306f\u975e\u63a8\u5968)\u305d\u308c\u3088\u308a\u3082\u5c0f\u3055\u304f\u306a\u308b\u3068\u601d\u3044\u307e\u3059\uff0e\n\n\n\n\nsayaka \u306e –force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a66\u3059\n\n\nsayaka \u3061\u3083\u3093\u306e –force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\n\u307e\u305a\u306fbuild\uff0e\nLinux \u3067\u306ebuild \u6642\u306b\u5f15\u3063\u304b\u304b\u308a\u3084\u3059\u3044\u306e\u304cGNU Make \u3067\u306f\u306a\u304fbmake \u3092\u4f7f\u3046\u3068\u3053\u308d\uff0e\n\n\n\n$ git checkout a4e143d50ceee29a61610d1ee76e4030b0bba273\nPrevious HEAD position was d76cb2c ver 3.8.1 (2024/09/21)\nHEAD is now at a4e143d src/misskey: --force-blurhash \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5b9f\u88c5\u3057\u3066\u307f\u308b\u3002 \u753b\u50cf\u8868\u793a\u3092 Blurhash \u3060\u3051\u306b\u3059\u308b\u30e2\u30fc\u30c9\u3002\n$ ./configure\n$ bmake -DRELEASE all\n$ src/sayaka\nusage: sayaka <command> [<options...>]\n <command>\n -h,--home : Home timeline mode (needs --server and --token)\n -l,--local : Local timeline mode (needs --server)\n -p,--play=<file|-> : Playback mode\n <options>\n -s,--server=<host> : Set misskey server\n -t,--token=<file> : Set misskey access token file\n -c,--color=<color> : 256,16,8,2,1 and gray[2-256] (default:256)\n --show-cw : Open CW(Contents Warning) part\n --nsfw=<show|blur|alt|hide> : How to show NSFW contents (default:blur)\n --show-image=<yes|no|auto> : Whether to show image or not (default:auto)\n -r,--record=<file> : Record JSON to <file>\n --help-all : More details\n\n\n\nbuild \u51fa\u6765\u305f\u306e\u3067\u65e9\u901f --force-blurhash \u3092\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\u4f8b\u3048\u3070 misskey.io \u3092\u3053\u3093\u306a\u611f\u3058\u3067\uff0e\n\n\n\n$ src/sayaka --force-blurhash -l -s misskey.io\n\n\n\n\u3053\u308c\u307e\u3067\u306f\u65e2\u5b9a\u5024\u3067\u306fNSFW \u30b3\u30f3\u30c6\u30f3\u30c4\u304cBlurHash \u3067\u8868\u793a\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u304c\uff0c--force-blurhash \u3067\u306f\u5168\u3066\u306e\u30a2\u30a4\u30b3\u30f3\u753b\u50cf\u3082\u6dfb\u4ed8\u753b\u50cf\u3082BlurHash \u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\n\nNote\n\n\n\u30a2\u30ab\u30a6\u30f3\u30c8\u3084\u672c\u6587\u306b\u306f\u30e2\u30b6\u30a4\u30af\u3092\u639b\u3051\u3066\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\n\nBlurHash \u3067\u753b\u50cf\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u304f\u306a\u308b\u3063\u3066\u3053\u3068\u306f\u901a\u4fe1\u6599\u3082\u30c7\u30fc\u30bf\u91cf\u3082\u5c0f\u3055\u304f\u306a\u3063\u3066\u3044\u3066\u30d7\u30a2\u306a\u56de\u7dda\u3067\u3082\u3044\u3044\u611f\u3058\u306b\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3067\u304d\u305d\u3046\u306a\u6c17\u304c\u3057\u307e\u3059\uff0e\n\n\nBlurHash \u3068Sixel \u309260\u79d2\u305a\u3064 --record \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u30d5\u30a1\u30a4\u30eb\u306b\u4fdd\u5b58\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\u671f\u5f85\u306b\u53cd\u3057\u3066BlurHash \u306e\u307b\u3046\u304c\u5927\u5206\u5927\u304d\u3044\u3067\u3059\uff0e\n\n\n\n$ timeout 60 src/sayaka --record=blurhash.rec --force-blurhash -l -s misskey.io\n$ timeout 60 src/sayaka --record=sixel.rec -l -s misskey.io\n$ ls -s *.rec\n436 blurhash.rec 44 sixel.rec\n\n\n\nttyrec \u3067\u3082\u540c\u3058\u3088\u3046\u306a\u611f\u3058\uff0e\n\n\n\n$ ttyrec -f blurhash.ttyrec -- timeout 60 src/sayaka --force-blurhash -l -s misskey.io\n$ ttyrec -f sixel.ttyrec -- timeout 60 src/sayaka -l -s misskey.io\n$ ls -s *.ttyrec\n1768 blurhash.ttyrec 228 sixel.ttyrec\n\n\n\n\u901a\u4fe1\u91cf\u306f\u3069\u3046\u3060\u308d\u3046\u3068nethogs \u30b3\u30de\u30f3\u30c9\u3067 $ sudo nethogs -P $(pgrep sayaka) -l \u306a\u611f\u3058\u3067\u898b\u3066\u307f\u308b\u3068\u3084\u306f\u308aBlurHash \u306e\u307b\u3046\u304c\u901a\u4fe1\u91cf\u304c\u591a\u3044\u3088\u3046\u306a?\n\n\nBlurHash\n\nNetHogs version 0.8.8\n\n PID USER PROGRAM DEV SENT RECEIVED\n ? root unknown TCP 435.079 11.067 kB/s\n2782477 matoken src/sayaka -.. enx349971e11a0f 0.252 6.934 kB/s\n\n TOTAL 435.331 18.001 kB/s\n\n\n\nSixel\n\nNetHogs version 0.8.8\n\n PID USER PROGRAM DEV SENT RECEIVED\n ? root unknown TCP 432.206 11.271 kB/s\n2787797 matoken src/sayaka -.. enx349971e11a0f 0.150 0.885 kB/s\n\n TOTAL 432.356 12.156 kB/s\n\n\n\n\u9332\u753b\u30c7\u30fc\u30bf\u3092\u898b\u308b\u3068\u4ef6\u6570\u304c\u9055\u3044\u307e\u3059\uff0eSixel \u306e\u3068\u304d\u306b\u306a\u306b\u304b\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u304c\u3042\u308a\u305d\u3046\u3067\u3059\uff0e\u56de\u7dda\u306e\u554f\u984c?\n\u5f8c\u3067VPS \u3067\u3082\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\n\n\n$ jq .body.type blurhash.rec | wc -l\n119\n$ jq .body.type sixel.rec | wc -l\n10", "date_published": "2025-12-24T22:37:08+09:00", "date_modified": "2025-12-25T06:45:48+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "BlurHash", "misskey", "sayaka", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5082", "url": "https://matoken.org/blog/2025/12/23/japanese-input-with-kitty/", "title": "\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u306ekitty\u3067\u65e5\u672c\u8a9e\u5165\u529b", "content_html": "
\n

\"icon

\n
\n
\n

\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30db\u30fc\u30e0\uff0cGPU\u30d9\u30fc\u30b9\u306akitty \u3068\u3044\u3046\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u30bf\u30fc\u30df\u30ca\u30eb\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u306ekitty \u3084\u540c\u3058\u30bf\u30fc\u30df\u30ca\u30eb\u5185\u3067\u306e\u6587\u5b57\u30b5\u30a4\u30ba\u5909\u66f4\u306a\u3069\u9762\u767d\u3044\u6a5f\u80fd\u3082\u3042\u3063\u305f\u308a\u3057\u3066GUI \u74b0\u5883\u3067\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u65b0\u898f\u74b0\u5883\u3067kitty \u3067\u65e5\u672c\u8a9e\u5165\u529b\u304c\u51fa\u6765\u305a\u8a2d\u5b9a\u3057\u305f\u306e\u3067\u3053\u3061\u3089\u306b\u3082\u30e1\u30e2\u3057\u3066\u304a\u304d\u307e\u3059\uff0e

\n
\n

\n
\n

\u4eca\u56de\u306e\u74b0\u5883\u306fDebian trixue amd64 \u306e\u307b\u307c\u521d\u671f\u74b0\u5883\uff0cWayland \u3067\u306f\u306a\u304fX.org \u306b\u3057\u3066\u3042\u308a\u307e\u3059\uff0ekitty \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u304b\u3089\u5c0e\u5165\u3057\u3066\uff0c\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u306ffcitx + mozc \u3067\u3059\uff0e
\nkitty \u4ee5\u5916\u306e\u74b0\u5883\u3067\u306f\u65e5\u672c\u8a9e\u5165\u529b\u306f\u51fa\u6765\u3066\u3044\u307e\u3059\u304c\uff0ckitty \u3067\u306f\u3046\u307e\u304f\u884c\u304d\u307e\u305b\u3093\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306eissue \u3092\u898b\u308b\u3068 GLFW_IM_MODULE=ibus \u3092\u305b\u3063\u3066\u3044\u3059\u308b\u3053\u3068\u3067ibus/fcitx \u74b0\u5883\u3067\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

GLFW_IM_MODULE=ibus works for me with fcitx5.

\n
\n
\n
\n— Fcitx input problem \u00b7 Issue #403 \u00b7 kovidgoyal/kitty\n
\n
\n
\n

\u3068\u308a\u3042\u3048\u305a\u5225\u306e\u7aef\u672b\u304b\u3089\u3053\u3093\u306a\u611f\u3058\u3067\u74b0\u5883\u5909\u6570\u3092\u6307\u5b9a\u3057\u3066kitty \u3092\u8d77\u52d5\u3059\u308b\u3068\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ GLFW_IM_MODULE=ibus kitty
\n
\n
\n
\n

kitty \u306e.desktop \u30d5\u30a1\u30a4\u30eb\u306b\u74b0\u5883\u5909\u6570\u3092\u52a0\u3048\u3066GUI \u304b\u3089\u306ekitty \u8d77\u52d5\u6642\u306b\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u304a\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ dpkg -L kitty | grep desktop\n/usr/share/applications/kitty.desktop\n/usr/share/doc/kitty/examples/kitty-open.desktop\n$ cp /usr/share/applications/kitty.desktop ~/.local/share/applications/\n$ diff -u /usr/share/applications/kitty.desktop ~/.local/share/applications/kitty.desktop\n--- /usr/share/applications/kitty.desktop       2025-06-23 03:52:56.000000000 +0900\n+++ /home/matoken/.local/share/applications/kitty.desktop       2025-12-23 18:21:14.623247581 +0900\n@@ -6,7 +6,7 @@\n Comment=Fast, feature-rich, GPU based terminal\n TryExec=kitty\n StartupNotify=true\n-Exec=kitty\n+Exec=env GLFW_IM_MODULE=ibus kitty\n Icon=kitty\n Categories=System;TerminalEmulator;\n X-TerminalArgExec=--
\n
\n
\n
\n

\u3053\u308c\u3067GUI \u304b\u3089kitty \u3092\u8d77\u52d5\u3057\u3066\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\"kitty

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W fcitx kitty\nfcitx   1:4.2.9.9-2\nkitty   0.41.1-2+b1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64
\n
\n
\n", "content_text": "\u30de\u30eb\u30c1\u30d7\u30e9\u30c3\u30c8\u30db\u30fc\u30e0\uff0cGPU\u30d9\u30fc\u30b9\u306akitty \u3068\u3044\u3046\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nkitty\n\n\n\n\n\u30bf\u30fc\u30df\u30ca\u30eb\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u306ekitty \u3084\u540c\u3058\u30bf\u30fc\u30df\u30ca\u30eb\u5185\u3067\u306e\u6587\u5b57\u30b5\u30a4\u30ba\u5909\u66f4\u306a\u3069\u9762\u767d\u3044\u6a5f\u80fd\u3082\u3042\u3063\u305f\u308a\u3057\u3066GUI \u74b0\u5883\u3067\u3088\u304f\u4f7f\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u306eKitty\u3067\u6587\u5b57\u30b5\u30a4\u30ba\u5909\u66f4 \u203b\u6771\u6d77\u9053\u3089\u3050\u540d\u53e4\u5c4b 2025\u5e743\u6708\u30aa\u30d5\u306a\u96c6\u307e\u308a\u767a\u8868\n\n\n\n\n\u65b0\u898f\u74b0\u5883\u3067kitty \u3067\u65e5\u672c\u8a9e\u5165\u529b\u304c\u51fa\u6765\u305a\u8a2d\u5b9a\u3057\u305f\u306e\u3067\u3053\u3061\u3089\u306b\u3082\u30e1\u30e2\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\n\n\n\n\u4eca\u56de\u306e\u74b0\u5883\u306fDebian trixue amd64 \u306e\u307b\u307c\u521d\u671f\u74b0\u5883\uff0cWayland \u3067\u306f\u306a\u304fX.org \u306b\u3057\u3066\u3042\u308a\u307e\u3059\uff0ekitty \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u304b\u3089\u5c0e\u5165\u3057\u3066\uff0c\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u306ffcitx + mozc \u3067\u3059\uff0e\nkitty \u4ee5\u5916\u306e\u74b0\u5883\u3067\u306f\u65e5\u672c\u8a9e\u5165\u529b\u306f\u51fa\u6765\u3066\u3044\u307e\u3059\u304c\uff0ckitty \u3067\u306f\u3046\u307e\u304f\u884c\u304d\u307e\u305b\u3093\uff0e\n\n\n\u4ee5\u4e0b\u306eissue \u3092\u898b\u308b\u3068 GLFW_IM_MODULE=ibus \u3092\u305b\u3063\u3066\u3044\u3059\u308b\u3053\u3068\u3067ibus/fcitx \u74b0\u5883\u3067\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nGLFW_IM_MODULE=ibus works for me with fcitx5.\n\n\n\n— Fcitx input problem \u00b7 Issue #403 \u00b7 kovidgoyal/kitty\n\n\n\n\u3068\u308a\u3042\u3048\u305a\u5225\u306e\u7aef\u672b\u304b\u3089\u3053\u3093\u306a\u611f\u3058\u3067\u74b0\u5883\u5909\u6570\u3092\u6307\u5b9a\u3057\u3066kitty \u3092\u8d77\u52d5\u3059\u308b\u3068\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u307e\u3059\uff0e\n\n\n\n$ GLFW_IM_MODULE=ibus kitty\n\n\n\nkitty \u306e.desktop \u30d5\u30a1\u30a4\u30eb\u306b\u74b0\u5883\u5909\u6570\u3092\u52a0\u3048\u3066GUI \u304b\u3089\u306ekitty \u8d77\u52d5\u6642\u306b\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\n\n\n\n$ dpkg -L kitty | grep desktop\n/usr/share/applications/kitty.desktop\n/usr/share/doc/kitty/examples/kitty-open.desktop\n$ cp /usr/share/applications/kitty.desktop ~/.local/share/applications/\n$ diff -u /usr/share/applications/kitty.desktop ~/.local/share/applications/kitty.desktop\n--- /usr/share/applications/kitty.desktop 2025-06-23 03:52:56.000000000 +0900\n+++ /home/matoken/.local/share/applications/kitty.desktop 2025-12-23 18:21:14.623247581 +0900\n@@ -6,7 +6,7 @@\n Comment=Fast, feature-rich, GPU based terminal\n TryExec=kitty\n StartupNotify=true\n-Exec=kitty\n+Exec=env GLFW_IM_MODULE=ibus kitty\n Icon=kitty\n Categories=System;TerminalEmulator;\n X-TerminalArgExec=--\n\n\n\n\u3053\u308c\u3067GUI \u304b\u3089kitty \u3092\u8d77\u52d5\u3057\u3066\u65e5\u672c\u8a9e\u5165\u529b\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u74b0\u5883\n\n$ dpkg-query -W fcitx kitty\nfcitx 1:4.2.9.9-2\nkitty 0.41.1-2+b1\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch\nx86_64", "date_published": "2025-12-23T19:02:19+09:00", "date_modified": "2025-12-23T19:02:21+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "japanese", "kitty", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5067", "url": "https://matoken.org/blog/2025/12/22/flyover/", "title": "bash script\u306eflyover\u3067\u6307\u5b9a\u7b87\u6240\u306e\u822a\u7a7a\u6a5f\u60c5\u5831\u3092\u8868\u793a", "content_html": "

\n
\n

flyover \u306f\u5f15\u6570\u3067\u6307\u5b9a\u3057\u305f\u5834\u6240(\u5730\u540d\u3084\u5ea7\u6a19\u3067\u6307\u5b9a\u53ef\u80fd)\u306e(\u4e3b\u306b)\u822a\u7a7a\u6a5f\u306e\u60c5\u5831\u3092flightradar24 \u304b\u3089\u53d6\u5f97\u3057\u3066\u8868\u793a\u3057\u3066\u304f\u308c\u308bbash script \u3067\u3059\uff0e

\n
\n
\n\n
\n

\n
\n

\u307e\u305a\u306f\u4f9d\u5b58\u95a2\u4fc2\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
\n

## Dependencies
\n– curl jq
\n– notify-send: (optional)

\n
\n
\n

In a Debian-like distro, these can be installed with:

\n
\n
\n
\n
sudo apt install curl jq libnotify-bin
\n
\n
\n
\n
\n— README.md\u3088\u308a\n
\n
\n
\n
\n
$ sudo apt install curl jq libnotify-bin
\n
\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u901a\u77e5\u3092\u5229\u7528\u3057\u306a\u3044\u5834\u5408\u306f libnotify-bin \u306f\u4e0d\u8981\n
\n
\n
\n

bash script \u306a\u306e\u3067script \u3092\u8cb0\u3063\u3066\u304d\u3066bash \u306b\u6e21\u305b\u3070\u52d5\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ wget https://github.com/pvonmoradi/flyover-bash/raw/refs/heads/master/flyover\n$ bash ./flyover -h\nDESCRIPTION\n    A simple client for flightradar24.com. Shows info of aircrafts flying\n    overhead in a [latitude \u00b1 \u03b4, longitude \u00b1 \u03b4] vicinity\n\nUSAGE: flyover [OPTIONS]\nOPTIONS\n      [-s search_str]\n        Search for city/region/place\n        Use quotes for multi-word queries\n      [-y latitude]\n        Negative for south of equator and positive for north of equator\n        Range: -90 <= latitude[float] <= +90\n      [-x longitude]\n        Negative for west of Prime Meridian and positive for east of Prime Meridian\n        Range: -180 <= longitude[float] <= +180\n      [-b bounds]\n        Geographic bounds of the region of interest\n        Format (comma-separated): \"lat1,lon1,lat2,lon2\"\n      [-i flight_ids]\n        flightradar24 flight_ids as a comma-separated list\n        In this mode, only the corresponding flight details are queried\n        Note: id is flightradar24's internal id (not ICAO or other standards)\n        Format example: \"id1,id2,id3\"\n      [-r delta_deg]\n        \u03b4 in degrees in scan square : [latitude \u00b1 \u03b4, longitude \u00b1 \u03b4]\n        Note: 1\u00b0 of latitude \u2248 111 km\n        Range: r[float] > 0\n      [-o /path/to/detailed_flights]\n        Set output path for detailed info of flights (json array)\n        (implies 'detailed' mode)\n      [-n]\n        Use notification (implies 'detailed' mode)\n      [-f]\n        Set mode to 'brief', only print an augmented json\n      [-v log_level]\n        v = 0 : No logs. Equivalent to -q\n        v = 1 : Set level to error\n        v = 2 : Set level to warn\n        v = 3 : Set level to info (default)\n        v = 4 : Set level to debug\n      [-q]\n        Set log level to v = 0\n      [-V]\n        Print version\n      [-h]\n        Print help message\n\nNOTES\n    - latitude/longitude should be input in decimal degrees (not DMS)\n    - Either use -s (geolocation service) OR (-y,-x) but NOT both\n    - Default mode of operation is 'detailed'\n\nEXAMPLES\n    flyover -s \"deylaman\" -r 2\n    flyover -s \"\u0642\u0644\u0639\u0647 \u06af\u0628\u0631\u06cc\" -r 0.5 -n -v4\n    flyover -y \"-27.115\" -x \"-109.395\" -r 24.15 -o /tmp/detailed.json\n    flyover -s \"\u6df1\u5733\" -qf\n    flyover -i \"2b1abd2f,2b1cae23\"\n    flyover -b \"43.58,58.72,46.58,61.72\"
\n
\n
\n
\n

\u3068\u308a\u3042\u3048\u305ahelp \u306e\u4e0b\u90e8\u306b\u66f8\u304b\u308c\u3066\u3044\u308bEXAMPLES \u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ bash ./flyover -s \"tokyo\" -r 2\n[info ] Match found: \"\u6771\u4eac\u90fd, \u65e5\u672c\"\n[info ] 'tokyo' WGS84 coordinates at latitude=35.6768601, longitude=139.7638947\n./flyover: line 264: bc: command not found\n[error] Problem in generating bounds. Check -h
\n
\n
\n
\n

\u304c\uff0c\u5931\u6557\u3057\u307e\u3057\u305f\uff0e bc \u30b3\u30de\u30f3\u30c9\u304c\u8db3\u308a\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\nbc \u30b3\u30de\u30f3\u30c9\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u63a2\u3057\u3066\u5c0e\u5165\u3057\u305f\u3089\u52d5\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ apt-file search -x bin/bc$\n9base: /usr/lib/plan9/bin/bc\nbc: /usr/bin/bc\n$ sudo apt install bc\n$ bash ./flyover -s \"tokyo\" -r 2\n[info ] Match found: \"\u6771\u4eac\u90fd, \u65e5\u672c\"\n[info ] 'tokyo' WGS84 coordinates at latitude=35.6768601, longitude=139.7638947\n[info ] Scan region for \u03b4=2\u00b0: 37.676860,33.676860,137.763895,141.763895\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nAir Canada, AC1/ACA1\n✈ Boeing 777-333(ER)\n↗ Canada, Toronto\n↘ Japan, Tokyo\n📅 Landed 20:29\n📏 0km, 9km/h\nhttps://www.flightradar24.com/ACA1/3d9afc99\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nChina Airlines, CI35/CAL035\n✈ Airbus A350-941\n↗ United States, Phoenix\n↘ Taiwan, Taipei\n📅 Delayed 22:47\n📏 12km, 664km/h\nhttps://www.flightradar24.com/CAL035/3d9b45e8\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nQantas, QF59/QFA59\n✈ Airbus A330-303\n↗ Australia, Sydney\n↘ Japan, Tokyo\n📅 Delayed 20:41\n📏 1km, 494km/h\nhttps://www.flightradar24.com/QFA59/3d9b996e\n^C
\n
\n
\n
\n

README.md \u3092\u4fee\u6b63\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\uff0e

\n
\n
\n
\n
$ git diff\ndiff --git a/README.md b/README.md\nindex cf34873..1847e02 100644\n--- a/README.md\n+++ b/README.md\n@@ -16,13 +16,13 @@ latitude/longitude and \u03b4.\n\n\n ## Dependencies\n-- `curl jq`\n+- `curl jq bc`\n - `notify-send`: (optional)\n\n In a Debian-like distro, these can be installed with:\n\n ``` shell\n-sudo apt install curl jq libnotify-bin\n+sudo apt install curl jq bc libnotify-bin\n ```\n\n ## Usage
\n
\n
\n
\n

-n \u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u901a\u77e5\u3082\u8a66\u3057\u3066\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u51fa\u3066\u304d\u307e\u3059\uff0e

\n
\n
\n

\"flyover

\n
\n
\n

\u5e38\u99d0\u3057\u3066\u6307\u5b9a\u7bc4\u56f2\u5185\u306b\u822a\u7a7a\u6a5f\u304c\u73fe\u308c\u305f\u3089notify \u304c\u51fa\u305b\u305f\u308a\u3059\u308b\u3068\u4fbf\u5229\u305d\u3046\u3067\u3059\u304c\u305d\u3046\u3044\u3046\u6a5f\u80fd\u306f\u7121\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u81ea\u5206\u306e\u5bb6\u306e\u3042\u305f\u308a\u306f\u4e0a\u7a7a\u3092\u305f\u304f\u3055\u3093\u306e\u98db\u884c\u6a5f\u304c\u901a\u308a\uff0c\u591c\u9593\u5e2f\u306a\u3069\u306f\u822a\u7a7a\u6a5f\u304c\u901a\u308b\u97f3\u304c\u3088\u304f\u805e\u3053\u3048\u307e\u3059\uff0e\u305d\u3046\u3044\u3046\u3068\u304d\u306b\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u53e9\u304f\u3068\u4f55\u304c\u98db\u3093\u3067\u3044\u308b\u304b\u308f\u304b\u3063\u3066\u697d\u3057\u305d\u3046\u3067\u3059\uff0e(\u81ea\u885b\u968a\u6a5f\u3082\u3088\u304f\u901a\u308a\u307e\u3059\u304c\u3053\u308c\u3089\u306ffr24\u306b\u8f09\u3089\u306a\u3044\u306e\u3067\u3042\u307e\u308a\u9762\u767d\u304f\u306a\u3044\u2026\u2026)

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W bash curl jq bc libnotify-bin\nbash    5.2.15-2+b9\nbc      1.07.1-3\ncurl    7.88.1-10+rpi1+deb12u14\njq      1.6-2.1+deb12u1\nlibnotify-bin   0.8.1-1\n$ lsb_release -dr\nNo LSB modules are available.\nDescription:    Raspbian GNU/Linux 12 (bookworm)\nRelease:        12\n$ arch\narmv7l
\n
\n
\n

\n
Post by @matoken
\n
View on Mastodon
\n

\n

\n", "content_text": "flyover \u306f\u5f15\u6570\u3067\u6307\u5b9a\u3057\u305f\u5834\u6240(\u5730\u540d\u3084\u5ea7\u6a19\u3067\u6307\u5b9a\u53ef\u80fd)\u306e(\u4e3b\u306b)\u822a\u7a7a\u6a5f\u306e\u60c5\u5831\u3092flightradar24 \u304b\u3089\u53d6\u5f97\u3057\u3066\u8868\u793a\u3057\u3066\u304f\u308c\u308bbash script \u3067\u3059\uff0e\n\n\n\n\npvonmoradi/flyover-bash: A shell-script client for flightradar24.com, showing info of aircrafts flying overhead in a [latitude \u00b1 \u03b4, longitude \u00b1 \u03b4] vicinity\n\n\n\n\n\n\u307e\u305a\u306f\u4f9d\u5b58\u95a2\u4fc2\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3057\u307e\u3059\uff0e\n\n\n\n\n## Dependencies\n– curl jq\n– notify-send: (optional)\n\n\nIn a Debian-like distro, these can be installed with:\n\n\n\nsudo apt install curl jq libnotify-bin\n\n\n\n\n— README.md\u3088\u308a\n\n\n\n\n$ sudo apt install curl jq libnotify-bin\n\n\n\n\n\n\nNote\n\n\n\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u901a\u77e5\u3092\u5229\u7528\u3057\u306a\u3044\u5834\u5408\u306f libnotify-bin \u306f\u4e0d\u8981\n\n\n\n\n\nbash script \u306a\u306e\u3067script \u3092\u8cb0\u3063\u3066\u304d\u3066bash \u306b\u6e21\u305b\u3070\u52d5\u304d\u307e\u3059\uff0e\n\n\n\n$ wget https://github.com/pvonmoradi/flyover-bash/raw/refs/heads/master/flyover\n$ bash ./flyover -h\nDESCRIPTION\n A simple client for flightradar24.com. Shows info of aircrafts flying\n overhead in a [latitude \u00b1 \u03b4, longitude \u00b1 \u03b4] vicinity\n\nUSAGE: flyover [OPTIONS]\nOPTIONS\n [-s search_str]\n Search for city/region/place\n Use quotes for multi-word queries\n [-y latitude]\n Negative for south of equator and positive for north of equator\n Range: -90 <= latitude[float] <= +90\n [-x longitude]\n Negative for west of Prime Meridian and positive for east of Prime Meridian\n Range: -180 <= longitude[float] <= +180\n [-b bounds]\n Geographic bounds of the region of interest\n Format (comma-separated): \"lat1,lon1,lat2,lon2\"\n [-i flight_ids]\n flightradar24 flight_ids as a comma-separated list\n In this mode, only the corresponding flight details are queried\n Note: id is flightradar24's internal id (not ICAO or other standards)\n Format example: \"id1,id2,id3\"\n [-r delta_deg]\n \u03b4 in degrees in scan square : [latitude \u00b1 \u03b4, longitude \u00b1 \u03b4]\n Note: 1\u00b0 of latitude \u2248 111 km\n Range: r[float] > 0\n [-o /path/to/detailed_flights]\n Set output path for detailed info of flights (json array)\n (implies 'detailed' mode)\n [-n]\n Use notification (implies 'detailed' mode)\n [-f]\n Set mode to 'brief', only print an augmented json\n [-v log_level]\n v = 0 : No logs. Equivalent to -q\n v = 1 : Set level to error\n v = 2 : Set level to warn\n v = 3 : Set level to info (default)\n v = 4 : Set level to debug\n [-q]\n Set log level to v = 0\n [-V]\n Print version\n [-h]\n Print help message\n\nNOTES\n - latitude/longitude should be input in decimal degrees (not DMS)\n - Either use -s (geolocation service) OR (-y,-x) but NOT both\n - Default mode of operation is 'detailed'\n\nEXAMPLES\n flyover -s \"deylaman\" -r 2\n flyover -s \"\u0642\u0644\u0639\u0647 \u06af\u0628\u0631\u06cc\" -r 0.5 -n -v4\n flyover -y \"-27.115\" -x \"-109.395\" -r 24.15 -o /tmp/detailed.json\n flyover -s \"\u6df1\u5733\" -qf\n flyover -i \"2b1abd2f,2b1cae23\"\n flyover -b \"43.58,58.72,46.58,61.72\"\n\n\n\n\u3068\u308a\u3042\u3048\u305ahelp \u306e\u4e0b\u90e8\u306b\u66f8\u304b\u308c\u3066\u3044\u308bEXAMPLES \u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ bash ./flyover -s \"tokyo\" -r 2\n[info ] Match found: \"\u6771\u4eac\u90fd, \u65e5\u672c\"\n[info ] 'tokyo' WGS84 coordinates at latitude=35.6768601, longitude=139.7638947\n./flyover: line 264: bc: command not found\n[error] Problem in generating bounds. Check -h\n\n\n\n\u304c\uff0c\u5931\u6557\u3057\u307e\u3057\u305f\uff0e bc \u30b3\u30de\u30f3\u30c9\u304c\u8db3\u308a\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\nbc \u30b3\u30de\u30f3\u30c9\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u63a2\u3057\u3066\u5c0e\u5165\u3057\u305f\u3089\u52d5\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n$ apt-file search -x bin/bc$\n9base: /usr/lib/plan9/bin/bc\nbc: /usr/bin/bc\n$ sudo apt install bc\n$ bash ./flyover -s \"tokyo\" -r 2\n[info ] Match found: \"\u6771\u4eac\u90fd, \u65e5\u672c\"\n[info ] 'tokyo' WGS84 coordinates at latitude=35.6768601, longitude=139.7638947\n[info ] Scan region for \u03b4=2\u00b0: 37.676860,33.676860,137.763895,141.763895\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nAir Canada, AC1/ACA1\n✈ Boeing 777-333(ER)\n↗ Canada, Toronto\n↘ Japan, Tokyo\n📅 Landed 20:29\n📏 0km, 9km/h\nhttps://www.flightradar24.com/ACA1/3d9afc99\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nChina Airlines, CI35/CAL035\n✈ Airbus A350-941\n↗ United States, Phoenix\n↘ Taiwan, Taipei\n📅 Delayed 22:47\n📏 12km, 664km/h\nhttps://www.flightradar24.com/CAL035/3d9b45e8\n\u2014\u2014\u2014\u2014\u2014\u2014\u2014\nQantas, QF59/QFA59\n✈ Airbus A330-303\n↗ Australia, Sydney\n↘ Japan, Tokyo\n📅 Delayed 20:41\n📏 1km, 494km/h\nhttps://www.flightradar24.com/QFA59/3d9b996e\n^C\n\n\n\nREADME.md \u3092\u4fee\u6b63\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\uff0e\n\n\n\n$ git diff\ndiff --git a/README.md b/README.md\nindex cf34873..1847e02 100644\n--- a/README.md\n+++ b/README.md\n@@ -16,13 +16,13 @@ latitude/longitude and \u03b4.\n\n\n ## Dependencies\n-- `curl jq`\n+- `curl jq bc`\n - `notify-send`: (optional)\n\n In a Debian-like distro, these can be installed with:\n\n ``` shell\n-sudo apt install curl jq libnotify-bin\n+sudo apt install curl jq bc libnotify-bin\n ```\n\n ## Usage\n\n\n\n-n \u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u901a\u77e5\u3082\u8a66\u3057\u3066\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u51fa\u3066\u304d\u307e\u3059\uff0e\n\n\n\n\n\n\u5e38\u99d0\u3057\u3066\u6307\u5b9a\u7bc4\u56f2\u5185\u306b\u822a\u7a7a\u6a5f\u304c\u73fe\u308c\u305f\u3089notify \u304c\u51fa\u305b\u305f\u308a\u3059\u308b\u3068\u4fbf\u5229\u305d\u3046\u3067\u3059\u304c\u305d\u3046\u3044\u3046\u6a5f\u80fd\u306f\u7121\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\u81ea\u5206\u306e\u5bb6\u306e\u3042\u305f\u308a\u306f\u4e0a\u7a7a\u3092\u305f\u304f\u3055\u3093\u306e\u98db\u884c\u6a5f\u304c\u901a\u308a\uff0c\u591c\u9593\u5e2f\u306a\u3069\u306f\u822a\u7a7a\u6a5f\u304c\u901a\u308b\u97f3\u304c\u3088\u304f\u805e\u3053\u3048\u307e\u3059\uff0e\u305d\u3046\u3044\u3046\u3068\u304d\u306b\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u53e9\u304f\u3068\u4f55\u304c\u98db\u3093\u3067\u3044\u308b\u304b\u308f\u304b\u3063\u3066\u697d\u3057\u305d\u3046\u3067\u3059\uff0e(\u81ea\u885b\u968a\u6a5f\u3082\u3088\u304f\u901a\u308a\u307e\u3059\u304c\u3053\u308c\u3089\u306ffr24\u306b\u8f09\u3089\u306a\u3044\u306e\u3067\u3042\u307e\u308a\u9762\u767d\u304f\u306a\u3044\u2026\u2026)\n\n\n\u74b0\u5883\n\n$ dpkg-query -W bash curl jq bc libnotify-bin\nbash 5.2.15-2+b9\nbc 1.07.1-3\ncurl 7.88.1-10+rpi1+deb12u14\njq 1.6-2.1+deb12u1\nlibnotify-bin 0.8.1-1\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Raspbian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\narmv7l\n\n\n \nPost by @matoken\nView on Mastodon", "date_published": "2025-12-22T20:57:20+09:00", "date_modified": "2025-12-22T22:59:23+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "bash", "flightradar24", "Linux", "Raspberry Pi", "RaspberryPi_OS_Bookworm" ] }, { "id": "https://matoken.org/blog/?p=5055", "url": "https://matoken.org/blog/2025/12/21/kagolug-2025-12/", "title": "\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a2025.12\u306b\u53c2\u52a0", "content_html": "

\n
\n

\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group \u3067\u6708\u4e00\u3092\u76ee\u6a19\u306b\uff0e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u300d\u3068\u3044\u3046\u52c9\u5f37\u4f1a\u3092\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u6700\u8fd1\u306f\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3057\u305f\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306a\u3069\u3092\u5229\u7528\u3057\u3066BoF\u3084\u30a2\u30f3\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u306e\u3088\u3046\u306a\u5f62\u5f0f\u3067\u30cd\u30bf\u306e\u3042\u308b\u4eba\u304c\u767a\u8868\uff0c\u305d\u308c\u306b\u30c4\u30c3\u30b3\u30df\u3092\u5165\u308c\u3066\u3044\u304f\u3088\u3046\u306a\u611f\u3058\u3067\u3059\uff0e

\n
\n

\n
\n

12\u6708\u306e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.12\u300d\u3067\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a71\u984c\u3067\u76db\u308a\u4e0a\u304c\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u81ea\u5206\u306f\u300cActivityPub Server \u306e snac \u305d\u306e3\u300d\u3068\u3057\u306610\u6708\uff0c11\u6708\u306b\u767a\u8868\u3057\u305fActivityPub Server \u306esnac \u306e\u7d9a\u304d\u306e\u8a71\u3092\u3057\u307e\u3057\u305f\uff0e
\n\u3053\u306e\u3068\u304d\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089

\n
\n
\n\n
\n
\n

\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u6b21\u56de\u306f\u90fd\u5e02\u304c\u5909\u308f\u3063\u30662026/01/18(\u65e5)\u306e\u4e88\u5b9a\u3067\u3059\uff0e

\n
\n
\n\n
\n", "content_text": "\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group \u3067\u6708\u4e00\u3092\u76ee\u6a19\u306b\uff0e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u300d\u3068\u3044\u3046\u52c9\u5f37\u4f1a\u3092\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050(Linux User’s Group)\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.12(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac) – connpass\n\n\n\n\n\u6700\u8fd1\u306f\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3057\u305f\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306a\u3069\u3092\u5229\u7528\u3057\u3066BoF\u3084\u30a2\u30f3\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u306e\u3088\u3046\u306a\u5f62\u5f0f\u3067\u30cd\u30bf\u306e\u3042\u308b\u4eba\u304c\u767a\u8868\uff0c\u305d\u308c\u306b\u30c4\u30c3\u30b3\u30df\u3092\u5165\u308c\u3066\u3044\u304f\u3088\u3046\u306a\u611f\u3058\u3067\u3059\uff0e\n\n\n\n12\u6708\u306e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.12\u300d\u3067\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a71\u984c\u3067\u76db\u308a\u4e0a\u304c\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\nActivityPub Server \u306e snac \u305d\u306e3\n\n\n\u30b3\u30df\u30c3\u30c8\u30b0\u30e9\u30d5\u4f8b(git-log commit limitting)\u306e\u30b3\u30df\u30c3\u30c8\u30b0\u30e9\u30d5\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u30fc\u3092\u4f5c\u6210\u3057\u3066\u307f\u308b\u3002\n\n\n\u521d\u4ee3EchoShow5\u306eTermux\u3092\u4fbf\u5229\u306b\u4f7f\u3046\n\n\nJolla\u306e\u65b0\u7aef\u672b\u3001SailfishOS\u95a2\u9023\u5e74\u8868\u66f4\u65b0\u3001\u30ad\u30fc\u30dc\u30fc\u30c9\u306eCopilot\u30dc\u30bf\u30f3\u3001apt\u30ea\u30dd\u30b8\u30c8\u30ea\u8a2d\u5b9a\u4ed6\n\n\n\u6700\u8fd1\u53c2\u52a0\u3057\u305f\u30a4\u30d9\u30f3\u30c8\u30ec\u30dd\u30fc\u30c8\n\n\n\nUbuntu 25.10\u30ea\u30ea\u30fc\u30b9\u8a18\u5ff5\u30aa\u30d5\u30e9\u30a4\u30f3\u30df\u30fc\u30c6\u30a3\u30f3\u30b025.11 11/24\n\n\nTLUG Technical Meeting – December 2025 12/06\n\n\nGNOME Asia Summit 2025 (13-2025\u5e7412\u670815\u65e5): \u6982\u8981 \u00b7 GNOME Events (Indico) 12/13-15\n\n\nLibreOffice Asia Conf 2025 | LibreOffice Asia Conference 12/13-14\n\n\n\u6771\u6d77\u9053\u3089\u3050 2025\u5e7412\u6708\u30aa\u30d5\u306a\u96c6\u307e\u308a\uff20\u30e1\u30ea\u30fc\u30a2\u30d2\u30eb\u30e4\u30ad\uff08\u5bb6\u9d28\u306f\u7720\u3089\u306a\u3044\uff09 12/20\n\n\n\n\n\n\n\n\u81ea\u5206\u306f\u300cActivityPub Server \u306e snac \u305d\u306e3\u300d\u3068\u3057\u306610\u6708\uff0c11\u6708\u306b\u767a\u8868\u3057\u305fActivityPub Server \u306esnac \u306e\u7d9a\u304d\u306e\u8a71\u3092\u3057\u307e\u3057\u305f\uff0e\n\u3053\u306e\u3068\u304d\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089\n\n\n\n\nhttps://codeberg.org/matoken/kagolug-2025.12/src/branch/main/slide/slide.adoc\n\n\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u6b21\u56de\u306f\u90fd\u5e02\u304c\u5909\u308f\u3063\u30662026/01/18(\u65e5)\u306e\u4e88\u5b9a\u3067\u3059\uff0e\n\n\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2026.01(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac) – connpass", "date_published": "2025-12-21T23:48:03+09:00", "date_modified": "2025-12-21T23:48:04+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "kagolug", "Linux", "VideoMeeting", "\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a", "\u9e7f\u5150\u5cf6\u3089\u3050", "\u52c9\u5f37\u4f1a" ] }, { "id": "https://matoken.org/blog/?p=5033", "url": "https://matoken.org/blog/2025/12/20/snac-bluesky-bridge/", "title": "snac\u3068Bluesky\u9023\u643a", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3068Bluesky \u9023\u643a\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

Bluesky \u306f\u30dd\u30b9\u30c8Twitter \u306e\u4e00\u3064\u3067AT Protocol \u3092\u5229\u7528\u3057\u305f\u5206\u6563\u578bSNS \u3067\u3059\uff0e\u3068\u306f\u3044\u3048\u73fe\u6642\u70b9\u3067\u306fActivityPub \u307b\u3069\u5206\u6563\u3057\u3066\u3044\u308b\u611f\u3058\u306f\u3057\u307e\u305b\u3093\uff0e
\n\u3053\u306eBluesky \u3068fediverse (snac \u306eActivityPub \u3082\u542b\u3080)\u3068Web \u3092\u9023\u643a\u3055\u305b\u308b\u30d6\u30ea\u30c3\u30b8\u3068\u3057\u3066Bridgy Fed \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e
\nBridgy Fed \u3092\u4f7f\u3063\u3066snac \u3068Bluesky \u3092\u9023\u643a\u3057\u3066\u307f\u307e\u3059\uff0c

\n
\n
\n\n
\n
\n

ActivityPub \u304b\u3089\u9023\u643a\u3059\u308b\u306b\u306f https://fed.brid.gy/login \u3067\u8a8d\u8a3c\u5f8c\uff0c\u300cEnable\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3082\u30dc\u30bf\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eMastodon \u3068\u3057\u3066snac \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a8d\u8a3c\u3057\u305f\u306e\u3067\u306a\u306b\u304bAPI \u306e\u9055\u3044\u3084\u4e0d\u8db3\u304c\u3042\u308b\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u308b\u3068\u5225\u306e\u65b9\u6cd5\u3082\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n
\n
\n
\n
if login isn't supported for your fediverse server, search for and follow @bsky.brid.gy@bsky.brid.gy in the fediverse. That account will then follow you back. Accept its follow to make sure your fediverse posts get sent the bridge and make it into Bluesky. You can unfollow it afterward if you want, you'll still stay bridged. (Here's how to disable.)
\n
\n
\n
\n
\n— How do I get started?\n
\n
\n
\n

snac \u306e\u8a72\u5f53\u30a2\u30ab\u30a6\u30f3\u30c8\u3067 @bsky.brid.gy@bsky.brid.gy \u3092follow \u3057\u307e\u3059\uff0e\u3059\u308b\u3068\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089follow \u304c\u8fd4\u3055\u308c\u308b\u306e\u3067\u627f\u8a8d\u3059\u308b\u3068\u9023\u643a\u5b8c\u4e86\u3067\u3059\uff0e\u3053\u306e\u5f8c\u306f unfollow \u3057\u3066\u3082\u9023\u643a\u306f\u7dad\u6301\u3055\u308c\u308b\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u3053\u306e\u3068\u304d\u306e\u9023\u643a\u5143\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\uff0c @[user]@[instance] \u306e\u5834\u5408Bluesky \u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30cf\u30f3\u30c9\u30eb\u306f [user].[instance].ap.brid.gy \u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n

\u306a\u306b\u304b\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n

\"snac

\n
\n
\n

Bridgy Fed \u306f\u5358\u306b\u6295\u7a3f\u3092\u8ee2\u9001\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u8fd4\u4fe1\u3084likes, (\u5143\u306e\u6295\u7a3f\u304c\u30d6\u30ea\u30c3\u30b8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f)repost \u306a\u3069\u3082\u9023\u643a\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u5143\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3082\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Which stuff of mine from the fediverse will get bridged?

\n
\n
\n

Once you’ve enabled the bridge, anything that’s fully public and interacts with Bluesky users. This includes your posts, replies, likes, and reposts if the original post was bridged. Posts on Bluesky are limited to 300 characters, so longer posts from the fediverse are truncated and ellipsized. Hashtags, links, link previews, images, videos, and even alt text are also included.

\n
\n
\n
\n— Which stuff of mine from the fediverse will get bridged?\n
\n
\n
\n

\u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306f\uff0cBridgy Fed\u30dc\u30c3\u30c8\u30e6\u30fc\u30b6\u30fc( @bsky.brid.gy@bsky.brid.gy )\u3092\u30d6\u30ed\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

If you’re on the fediverse or Bluesky, and you’ve opted in but now want to opt out, block the Bridgy Fed bot user for the network you want to opt out of. For example, on the fediverse, block @bsky.brid.gy@bsky.brid.gy. On Bluesky, block @ap.brid.gy.

\n
\n
\n

(However, if you’re on a Pixelfed instance, DM the word stop to @bsky.brid.gy@bsky.brid.gy instead. Pixelfed doesn’t yet send the ActivityPub Block activity, so blocking won’t work. Hopefully they’ll fix that soon!)

\n
\n
\n

If you’re on the web, email us from an address at your web site’s domain to show that you own it, or you can put the text #nobridge in the profile on your home page and then update your profile on your user page.

\n
\n
\n

Once you’ve done this, Bridgy Fed will deactivate your bridged profile in that network, and it will no longer bridge any of your posts or interactions there.

\n
\n
\n

You can undo this later and reactivate bridging for your account, but depending on the network, not everything will be perfectly restored. For example, when you disable bridging into the fediverse, the bridged fediverse account is deleted and all followers are disconnected. If you later re-enable it, fediverse users will have to search for your account by address manually to find and follow it again.

\n
\n
\n
\n— How do I opt out and remove my site or account?\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3068Bluesky \u9023\u643a\u306b\u3064\u3044\u3066\uff0e\n\n\n\nBluesky \u306f\u30dd\u30b9\u30c8Twitter \u306e\u4e00\u3064\u3067AT Protocol \u3092\u5229\u7528\u3057\u305f\u5206\u6563\u578bSNS \u3067\u3059\uff0e\u3068\u306f\u3044\u3048\u73fe\u6642\u70b9\u3067\u306fActivityPub \u307b\u3069\u5206\u6563\u3057\u3066\u3044\u308b\u611f\u3058\u306f\u3057\u307e\u305b\u3093\uff0e\n\u3053\u306eBluesky \u3068fediverse (snac \u306eActivityPub \u3082\u542b\u3080)\u3068Web \u3092\u9023\u643a\u3055\u305b\u308b\u30d6\u30ea\u30c3\u30b8\u3068\u3057\u3066Bridgy Fed \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\nBridgy Fed \u3092\u4f7f\u3063\u3066snac \u3068Bluesky \u3092\u9023\u643a\u3057\u3066\u307f\u307e\u3059\uff0c\n\n\n\n\nBridgy Fed\n\n\nBridgy Fed for the fediverse (@ap.brid.gy) \u2014 Bluesky (Bluesky \u30a2\u30ab\u30a6\u30f3\u30c8)\n\n\n\n\nActivityPub \u304b\u3089\u9023\u643a\u3059\u308b\u306b\u306f https://fed.brid.gy/login \u3067\u8a8d\u8a3c\u5f8c\uff0c\u300cEnable\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u3082\u30dc\u30bf\u30f3\u304c\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eMastodon \u3068\u3057\u3066snac \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a8d\u8a3c\u3057\u305f\u306e\u3067\u306a\u306b\u304bAPI \u306e\u9055\u3044\u3084\u4e0d\u8db3\u304c\u3042\u308b\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e\n\n\n\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u308b\u3068\u5225\u306e\u65b9\u6cd5\u3082\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nHow do I get started?\n\n\n\n\n\n\n\nif login isn't supported for your fediverse server, search for and follow @bsky.brid.gy@bsky.brid.gy in the fediverse. That account will then follow you back. Accept its follow to make sure your fediverse posts get sent the bridge and make it into Bluesky. You can unfollow it afterward if you want, you'll still stay bridged. (Here's how to disable.)\n\n\n\n\n— How do I get started?\n\n\n\nsnac \u306e\u8a72\u5f53\u30a2\u30ab\u30a6\u30f3\u30c8\u3067 @bsky.brid.gy@bsky.brid.gy \u3092follow \u3057\u307e\u3059\uff0e\u3059\u308b\u3068\u3053\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089follow \u304c\u8fd4\u3055\u308c\u308b\u306e\u3067\u627f\u8a8d\u3059\u308b\u3068\u9023\u643a\u5b8c\u4e86\u3067\u3059\uff0e\u3053\u306e\u5f8c\u306f unfollow \u3057\u3066\u3082\u9023\u643a\u306f\u7dad\u6301\u3055\u308c\u308b\u305d\u3046\u3067\u3059\uff0e\n\n\n\u3053\u306e\u3068\u304d\u306e\u9023\u643a\u5143\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\uff0c @[user]@[instance] \u306e\u5834\u5408Bluesky \u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30cf\u30f3\u30c9\u30eb\u306f [user].[instance].ap.brid.gy \u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\u306a\u306b\u304b\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\uff0e\n\n\n\n\n\nBridgy Fed \u306f\u5358\u306b\u6295\u7a3f\u3092\u8ee2\u9001\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u8fd4\u4fe1\u3084likes, (\u5143\u306e\u6295\u7a3f\u304c\u30d6\u30ea\u30c3\u30b8\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f)repost \u306a\u3069\u3082\u9023\u643a\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u5143\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u305f\u5834\u5408\u3082\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\nWhich stuff of mine from the fediverse will get bridged?\n\n\nOnce you’ve enabled the bridge, anything that’s fully public and interacts with Bluesky users. This includes your posts, replies, likes, and reposts if the original post was bridged. Posts on Bluesky are limited to 300 characters, so longer posts from the fediverse are truncated and ellipsized. Hashtags, links, link previews, images, videos, and even alt text are also included.\n\n\n\n— Which stuff of mine from the fediverse will get bridged?\n\n\n\n\u30d6\u30ea\u30c3\u30b8\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664\u3092\u884c\u3044\u305f\u3044\u5834\u5408\u306f\uff0cBridgy Fed\u30dc\u30c3\u30c8\u30e6\u30fc\u30b6\u30fc( @bsky.brid.gy@bsky.brid.gy )\u3092\u30d6\u30ed\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u524a\u9664\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nIf you’re on the fediverse or Bluesky, and you’ve opted in but now want to opt out, block the Bridgy Fed bot user for the network you want to opt out of. For example, on the fediverse, block @bsky.brid.gy@bsky.brid.gy. On Bluesky, block @ap.brid.gy.\n\n\n(However, if you’re on a Pixelfed instance, DM the word stop to @bsky.brid.gy@bsky.brid.gy instead. Pixelfed doesn’t yet send the ActivityPub Block activity, so blocking won’t work. Hopefully they’ll fix that soon!)\n\n\nIf you’re on the web, email us from an address at your web site’s domain to show that you own it, or you can put the text #nobridge in the profile on your home page and then update your profile on your user page.\n\n\nOnce you’ve done this, Bridgy Fed will deactivate your bridged profile in that network, and it will no longer bridge any of your posts or interactions there.\n\n\nYou can undo this later and reactivate bridging for your account, but depending on the network, not everything will be perfectly restored. For example, when you disable bridging into the fediverse, the bridged fediverse account is deleted and all followers are disconnected. If you later re-enable it, fediverse users will have to search for your account by address manually to find and follow it again.\n\n\n\n— How do I opt out and remove my site or account?", "date_published": "2025-12-20T21:53:53+09:00", "date_modified": "2025-12-20T21:53:59+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Bluesky", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5024", "url": "https://matoken.org/blog/2025/12/19/implementing-post-bots/", "title": "snac\u306e\u81ea\u52d5\u6295\u7a3f\u6a5f\u80fd", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306ebot \u5411\u3051\u6295\u7a3f\u6a5f\u80fd\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

bot \u3084\u30a2\u30ca\u30a6\u30f3\u30b9\u306a\u3069\u5411\u3051\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u81ea\u52d5\u6295\u7a3f\u3092\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u4f8b\u3048\u3070\u3044\u307e\u8003\u3048\u3066\u3044\u308b\u306e\u306fCalDav \u304b\u3089\u4eca\u65e5\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u6295\u7a3f\u3059\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\uff0e\u73fe\u5728\u306fWebhook \u7d4c\u7531\u3067Discord \u306bpost \u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3059\uff0e
\nsnac \u3067\u3082\u3044\u304f\u3064\u304b\u81ea\u52d5\u6295\u7a3f\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Implementing post bots

\n
\n
\n

snac makes very easy to post messages in a non-interactive manner. This example posts a string:

\n
\n
\n

uptime | snac note $SNAC_BASEDIR $SNAC_USER –

\n
\n
\n

You can setup a line like this from a crontab(5) or similar. Take note that you need a) command-line access to the same machine that hosts the snac instance, and b) write permissions to the storage directories and files.

\n
\n
\n

You can also post non-interactively using the Mastodon API and a command-line http tool like curl(1) or similar. This has the advantage that you can do it remotely from any host, anywhere; the only thing you need is an API Token. This is an example:

\n
\n
\n

curl -X POST https://$SNAC_HOST/api/v1/statuses \\
\n–header “Authorization: Bearer ${TOKEN}” -d “status=$(uptime)”

\n
\n
\n

You can obtain an API Token by connecting to the following URL:

\n
\n\n
\n
\n— man(1) \u3088\u308a\n
\n
\n
\n
\n
\n
\n
note basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Enqueues a Create + Note message to all followers. If the text argument is -e, the external editor defined by  the  EDITOR  environment  variable\n        will  be invoked to prepare a message; if it's - (a lonely hyphen), the post content will be read from stdin.  The rest of command line arguments\n        are treated as media files to be attached to the post. The LANG environment variable (if defined) is used as the post language. An  optional  URL\n        to  a  Fediverse post, prefixed by -r, can be specified for this note to be a reply to. If a date in YYYYmmddHHMMSS format is followed by -d, the\n        note is scheduled for that moment instead of immediately posted (this date must be in the same timezone the user has configured in the web UI).
\n
\n
\n
\n
\n
note_unlisted basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Like the previous one, but creates an \"unlisted\" (or \"quiet public\") post.
\n
\n
\n
\n
\n
note_mention basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n        Like the previous one, but creates a post only for accounts mentioned in the post body.
\n
\n
\n
\n
\n
block basedir instance_url
\n
\n
\n
\n
\n— man(1) \u3088\u308a\n
\n
\n
\n
\n
\n

snac note \u30b3\u30de\u30f3\u30c9\u3067\u306e\u6295\u7a3f

\n
\n
\n

snac \u306e\u52d5\u4f5c\u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u3067\u3042\u308c\u3070\u304a\u624b\u8efd\u306asnac \u306enote \u30b3\u30de\u30f3\u30c9\u304c\u3042\u308a\u307e\u3059\uff0e
\nman(1) \u306b\u3042\u308b\u4f8b\u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

uptime | snac note $SNAC_BASEDIR $SNAC_USER –

\n
\n
\n
\n
\n
\n
$ uptime | pee \"./snac note snac-test test -\" cat\n 23:32:36 up 4 days, 10:17,  1 user,  load average: 1.56, 1.90, 1.69\n23:32:36 [test] enqueue_message http://127.0.0.1:8001/test/p/1766154756.511450/Create\n8       /\ufffd
\n
\n
\n
\n

\u6295\u7a3f\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u65e5\u672c\u8a9e\u3082\u305d\u306e\u307e\u307e\u3067ok \u3067\u3057\u305f\uff0e

\n
\n
\n

\"snac

\n
\n
\n

pfetch \u3092\u6d41\u3057\u8fbc\u3093\u3067\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u6574\u5f62\u3092\u8003\u3048\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\uff0e

\n
\n
\n

\"snac

\n
\n
\n
\n
\n

curl \u3092\u4f7f\u3063\u3066API \u7d4c\u7531\u3067\u6295\u7a3f

\n
\n
\n

\u3053\u3061\u3089\u306f\u4e00\u822c\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u3067\u6295\u7a3f\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u3059\uff0etoken \u3092\u5165\u624b\u3057\u3066curl \u30b3\u30de\u30f3\u30c9\u3067\u6295\u7a3f\u3057\u307e\u3059\uff0e

\n
\n
\n

\u307e\u305a\u4ee5\u4e0b\u306e\u3088\u3046\u306aURL \u3067token \u3092\u53d6\u5f97\u3057\u307e\u3059\uff0e

\n
\n\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u753b\u9762\u306b\u306a\u308b\u306e\u3067\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u60c5\u5831\u3092\u5165\u624b\u3057\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c8\u30fc\u30af\u30f3\u304c\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u30e1\u30e2\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
\n

1f3ea50e9ab7cc85f5ff01b8f43fb1ae

\n
\n
\n
\n
\n

\u5f8c\u306fcurl \u306a\u3069\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306bPOST\uff0e
\njson \u3067\u8fd4\u308a\u5024\u304c\u5e30\u3063\u3066\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ curl -X POST http://127.0.0.1:8001/api/v1/statuses --header \"Authorization: Bearer 1f3ea50e9ab7cc85f5ff01b8f43fb1ae\" -d \"status=$(uptime)\"\n{\n    \"id\": \"1766155742b0f5ed692a273ff5b6ef59b696ddde76\",\n    \"uri\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n    \"url\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n    \"account\": {\n        \"id\": \"488d5ffe15e31aa0be5002853e8006f7\",\n        \"username\": \"test\",\n        \"display_name\": \"test\",\n        \"discoverable\": true,\n        \"group\": false,\n        \"hide_collections\": false,\n        \"indexable\": true,\n        \"noindex\": false,\n        \"roles\": [\n        ],\n        \"acct\": \"test@127.0.0.1:8001\",\n        \"created_at\": \"2025-11-14T19:38:38Z\",\n        \"last_status_at\": \"2025-12-19\",\n        \"bot\": false,\n        \"note\": \"<br>\",\n        \"url\": \"http://127.0.0.1:8001/test\",\n        \"uri\": \"http://127.0.0.1:8001/test\",\n        \"avatar\": \"http://127.0.0.1:8001/susie.png\",\n        \"avatar_static\": \"http://127.0.0.1:8001/susie.png\",\n        \"header\": \"\",\n        \"header_static\": \"\",\n        \"emojis\": [\n        ],\n        \"locked\": false,\n        \"followers_count\": 0,\n        \"following_count\": 0,\n        \"statuses_count\": 0,\n        \"fields\": [\n        ]\n    },\n    \"created_at\": \"2025-12-19T14:49:02.000Z\",\n    \"content\": \"23:49:02 up 4 days, 10:34,  1 user,  load average: 1.48, 1.57, 1.68<br>\",\n    \"visibility\": \"public\",\n    \"sensitive\": false,\n    \"spoiler_text\": \"\",\n    \"media_attachments\": [\n    ],\n    \"mentions\": [\n    ],\n    \"tags\": [\n    ],\n    \"emojis\": [\n    ],\n    \"favourites_count\": 0,\n    \"favourited\": false,\n    \"reblogs_count\": 0,\n    \"reblogged\": false,\n    \"replies_count\": 0,\n    \"in_reply_to_id\": null,\n    \"in_reply_to_account_id\": null,\n    \"reblog\": null,\n    \"card\": null,\n    \"language\": \"en\",\n    \"filtered\": [\n    ],\n    \"muted\": false,\n    \"text\": \" 23:49:02 up 4 days, 10:34,  1 user,  load average: 1.48, 1.57, 1.68\",\n    \"edited_at\": null,\n    \"poll\": null,\n    \"bookmarked\": false,\n    \"pinned\": false\n}
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306ebot \u5411\u3051\u6295\u7a3f\u6a5f\u80fd\u306b\u3064\u3044\u3066\uff0e\n\n\n\nbot \u3084\u30a2\u30ca\u30a6\u30f3\u30b9\u306a\u3069\u5411\u3051\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3067\u81ea\u52d5\u6295\u7a3f\u3092\u3057\u305f\u3044\u3053\u3068\u304c\u3042\u308a\u307e\u3059\uff0e\n\u4f8b\u3048\u3070\u3044\u307e\u8003\u3048\u3066\u3044\u308b\u306e\u306fCalDav \u304b\u3089\u4eca\u65e5\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u6295\u7a3f\u3059\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\uff0e\u73fe\u5728\u306fWebhook \u7d4c\u7531\u3067Discord \u306bpost \u3057\u305f\u308a\u3057\u3066\u3044\u307e\u3059\uff0e\nsnac \u3067\u3082\u3044\u304f\u3064\u304b\u81ea\u52d5\u6295\u7a3f\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nImplementing post bots\n\n\nsnac makes very easy to post messages in a non-interactive manner. This example posts a string:\n\n\nuptime | snac note $SNAC_BASEDIR $SNAC_USER –\n\n\nYou can setup a line like this from a crontab(5) or similar. Take note that you need a) command-line access to the same machine that hosts the snac instance, and b) write permissions to the storage directories and files.\n\n\nYou can also post non-interactively using the Mastodon API and a command-line http tool like curl(1) or similar. This has the advantage that you can do it remotely from any host, anywhere; the only thing you need is an API Token. This is an example:\n\n\ncurl -X POST https://$SNAC_HOST/api/v1/statuses \\\n–header “Authorization: Bearer ${TOKEN}” -d “status=$(uptime)”\n\n\nYou can obtain an API Token by connecting to the following URL:\n\n\nhttps://$SNAC_HOST/oauth/x-snac-get-token\n\n\n\n— man(1) \u3088\u308a\n\n\n\n\n\n\nnote basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Enqueues a Create + Note message to all followers. If the text argument is -e, the external editor defined by the EDITOR environment variable\n will be invoked to prepare a message; if it's - (a lonely hyphen), the post content will be read from stdin. The rest of command line arguments\n are treated as media files to be attached to the post. The LANG environment variable (if defined) is used as the post language. An optional URL\n to a Fediverse post, prefixed by -r, can be specified for this note to be a reply to. If a date in YYYYmmddHHMMSS format is followed by -d, the\n note is scheduled for that moment instead of immediately posted (this date must be in the same timezone the user has configured in the web UI).\n\n\n\n\nnote_unlisted basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Like the previous one, but creates an \"unlisted\" (or \"quiet public\") post.\n\n\n\n\nnote_mention basedir uid text [file file ... [-r inReplyTo [-d YYYYmmddHHMMSS]]]\n Like the previous one, but creates a post only for accounts mentioned in the post body.\n\n\n\n\nblock basedir instance_url\n\n\n\n\n— man(1) \u3088\u308a\n\n\n\n\n\nsnac note \u30b3\u30de\u30f3\u30c9\u3067\u306e\u6295\u7a3f\n\n\nsnac \u306e\u52d5\u4f5c\u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u5b9f\u884c\u3067\u304d\u308b\u306e\u3067\u3042\u308c\u3070\u304a\u624b\u8efd\u306asnac \u306enote \u30b3\u30de\u30f3\u30c9\u304c\u3042\u308a\u307e\u3059\uff0e\nman(1) \u306b\u3042\u308b\u4f8b\u3092\u771f\u4f3c\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\nuptime | snac note $SNAC_BASEDIR $SNAC_USER –\n\n\n\n\n\n$ uptime | pee \"./snac note snac-test test -\" cat\n 23:32:36 up 4 days, 10:17, 1 user, load average: 1.56, 1.90, 1.69\n23:32:36 [test] enqueue_message http://127.0.0.1:8001/test/p/1766154756.511450/Create\n8 /\ufffd\n\n\n\n\u6295\u7a3f\u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e\n\n\n\n\n\n\u65e5\u672c\u8a9e\u3082\u305d\u306e\u307e\u307e\u3067ok \u3067\u3057\u305f\uff0e\n\n\n\n\n\npfetch \u3092\u6d41\u3057\u8fbc\u3093\u3067\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u6574\u5f62\u3092\u8003\u3048\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\uff0e\n\n\n\n\n\n\n\ncurl \u3092\u4f7f\u3063\u3066API \u7d4c\u7531\u3067\u6295\u7a3f\n\n\n\u3053\u3061\u3089\u306f\u4e00\u822c\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7d4c\u7531\u3067\u30ea\u30e2\u30fc\u30c8\u3067\u6295\u7a3f\u53ef\u80fd\u306a\u65b9\u6cd5\u3067\u3059\uff0etoken \u3092\u5165\u624b\u3057\u3066curl \u30b3\u30de\u30f3\u30c9\u3067\u6295\u7a3f\u3057\u307e\u3059\uff0e\n\n\n\u307e\u305a\u4ee5\u4e0b\u306e\u3088\u3046\u306aURL \u3067token \u3092\u53d6\u5f97\u3057\u307e\u3059\uff0e\n\n\n\n\nhttps://$SNAC_HOST/oauth/x-snac-get-token\n\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u753b\u9762\u306b\u306a\u308b\u306e\u3067\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u60c5\u5831\u3092\u5165\u624b\u3057\u307e\u3059\uff0e\n\n\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c8\u30fc\u30af\u30f3\u304c\u53d6\u5f97\u3067\u304d\u308b\u306e\u3067\u30e1\u30e2\u3057\u307e\u3059\uff0e\n\n\n\n\n1f3ea50e9ab7cc85f5ff01b8f43fb1ae\n\n\n\n\n\u5f8c\u306fcurl \u306a\u3069\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306bPOST\uff0e\njson \u3067\u8fd4\u308a\u5024\u304c\u5e30\u3063\u3066\u304d\u307e\u3059\uff0e\n\n\n\n$ curl -X POST http://127.0.0.1:8001/api/v1/statuses --header \"Authorization: Bearer 1f3ea50e9ab7cc85f5ff01b8f43fb1ae\" -d \"status=$(uptime)\"\n{\n \"id\": \"1766155742b0f5ed692a273ff5b6ef59b696ddde76\",\n \"uri\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n \"url\": \"http://127.0.0.1:8001/test/p/1766155742.788170\",\n \"account\": {\n \"id\": \"488d5ffe15e31aa0be5002853e8006f7\",\n \"username\": \"test\",\n \"display_name\": \"test\",\n \"discoverable\": true,\n \"group\": false,\n \"hide_collections\": false,\n \"indexable\": true,\n \"noindex\": false,\n \"roles\": [\n ],\n \"acct\": \"test@127.0.0.1:8001\",\n \"created_at\": \"2025-11-14T19:38:38Z\",\n \"last_status_at\": \"2025-12-19\",\n \"bot\": false,\n \"note\": \"<br>\",\n \"url\": \"http://127.0.0.1:8001/test\",\n \"uri\": \"http://127.0.0.1:8001/test\",\n \"avatar\": \"http://127.0.0.1:8001/susie.png\",\n \"avatar_static\": \"http://127.0.0.1:8001/susie.png\",\n \"header\": \"\",\n \"header_static\": \"\",\n \"emojis\": [\n ],\n \"locked\": false,\n \"followers_count\": 0,\n \"following_count\": 0,\n \"statuses_count\": 0,\n \"fields\": [\n ]\n },\n \"created_at\": \"2025-12-19T14:49:02.000Z\",\n \"content\": \"23:49:02 up 4 days, 10:34, 1 user, load average: 1.48, 1.57, 1.68<br>\",\n \"visibility\": \"public\",\n \"sensitive\": false,\n \"spoiler_text\": \"\",\n \"media_attachments\": [\n ],\n \"mentions\": [\n ],\n \"tags\": [\n ],\n \"emojis\": [\n ],\n \"favourites_count\": 0,\n \"favourited\": false,\n \"reblogs_count\": 0,\n \"reblogged\": false,\n \"replies_count\": 0,\n \"in_reply_to_id\": null,\n \"in_reply_to_account_id\": null,\n \"reblog\": null,\n \"card\": null,\n \"language\": \"en\",\n \"filtered\": [\n ],\n \"muted\": false,\n \"text\": \" 23:49:02 up 4 days, 10:34, 1 user, load average: 1.48, 1.57, 1.68\",\n \"edited_at\": null,\n \"poll\": null,\n \"bookmarked\": false,\n \"pinned\": false\n}", "date_published": "2025-12-19T23:57:13+09:00", "date_modified": "2025-12-19T23:57:14+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5007", "url": "https://matoken.org/blog/2025/12/18/snac-notifigcations/", "title": "snac\u306e\u901a\u77e5\u306b\u3064\u3044\u3066", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306e\u901a\u77e5\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

snac \u306e\u901a\u77e5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u300cnotifications\u300d\u306e\u6a2a\u306b\u6570\u5b57\u3067\u901a\u77e5\u3055\u308c\u307e\u3059\uff0e\u300cnotifications\u300d\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8a73\u7d30\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u3057\u304b\u3057\u3053\u306e\u901a\u77e5\u306fsnac \u306e\u30da\u30fc\u30b8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u306a\u3089\u306a\u3044\u3068\u901a\u77e5\u304c\u308f\u304b\u308a\u307e\u305b\u3093\uff0e
\n\u3057\u304b\u3057\u4ee3\u66ff\u306e\u901a\u77e5\u304c\u3044\u304f\u3064\u304b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u3089\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u307b\u307c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306a\u901a\u77e5\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

e-mail

\n
\n
\n

\u4e00\u822c\u7684\u306ae-mail \u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8a2d\u5b9a\u6e08\u3067\u3042\u308c\u3070\u30e6\u30fc\u30b6\u30fc\u306e\u300cUser Settings…​\u300d\u304b\u3089\u300cEmail address for notifications:\u300d\u306b\u5b9b\u5148\u306ee-main address \u3092\u5165\u529b\u3059\u308b\u308b\u3053\u3068\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e
\n\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u5b9a\u304c\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u308a\uff0c\u5916\u90e8\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408 server.json \u306e\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3082\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n
\n
Email address for notifications\n        If this field is not empty, an email message will be sent to this address whenever a post written by you is liked, boosted or replied to.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n
\n
\n
\n
smtp_url    Since version 2.76, email notifications can be sent via direct connection to an SMTP server instead of the traditional behaviour of piping the mes\u2010\n            sage to /usr/sbin/sendmail.  Set this value to the SMTP url to be used for sending email notifications (for example, smtp://localhost). It may  in\u2010\n            clude a port number if it's not running on the usual one, like in smtp://mail.example.com:587.
\n
\n
\n
\n
\n
smtp_user
\n
\n
\n
\n
\n
smtp_password\n            To be filled if the SMTP server defined by the previous directive needs credentials.
\n
\n
\n
\n
\n— snac(8)\u3088\u308a\n
\n
\n
\n

\"snac

\n
\n
\n
\n
\n

Telegram \u3067\u901a\u77e5

\n
\n
\n

\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eTelegram \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305f\u3060\uff0cTelegram bot \u3092\u4f5c\u6210\u3057\u3066\u5229\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u671f\u8a2d\u5b9a\u304c\u5c11\u3057\u521d\u9762\u5012\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
Telegram notifications\n        To  enable  notifications  via Telegram, fill the two provided fields (Bot API key and Chat id). You need to create both a Telegram channel and a\n        bot for this; the process is rather cumbersome but it's documented everywhere. The Bot API key is a long string of  alphanumeric  characters  and\n        the chat id is a big, negative number.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u4ee5\u524dTelegram bot \u3092Nextcloud \u306eTOTP \u306e\u901a\u77e5\u8a2d\u5b9a\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u66f8\u3044\u305f\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n\n
\n

Telegram bot \u304c\u4f5c\u6210\u3067\u304d\u305f\u3089\u5404\u30e6\u30fc\u30b6\u306e\u300cUser Settings…​\u300d\u306e\u300cTelegram notifications (bot key and chat id):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n

ntfy \u3067\u901a\u77e5

\n
\n
\n

OSS \u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306b\u901a\u77e5\u304c\u3067\u304d\u308bntfy \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066snac \u306e\u901a\u77e5\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff0e

\n
\n\n
\n
\n
\n
\n
ntfy notifications\n        To  enable  notifications  via  ntfy  (both self-hosted or standard ntfy.sh server), fill the two provided fields (ntfy server/topic and, if pro\u2010\n        tected, the token).  You need to refer to the https://ntfy.sh web site for more information on this process.
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u3059\u304c\uff0c\u3068\u308a\u3042\u3048\u305antfy.sh \u3092\u5229\u7528\u3057\u3066\u8a66\u3059\u3068\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\u300cUser Settings…​\u300d\u306e\u300cntfy notifications (ntfy server and token):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Webhook \u3067\u901a\u77e5

\n
\n
\n

\u8272\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u308bWebhook \u3082\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
Notify webhook\n        If this is set to an URL, an HTTP POST will be sent to it whenever a new notification happens (see the 'Webhook for notifications' section  below\n        for more information).
\n
\n
\n
\n
\n— snac(1)\u3088\u308a\n
\n
\n
\n

\u4f8b\u3048\u3070Discord \u3067\u3042\u308c\u3070\uff0c\u300c\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u7de8\u96c6\u300d→\u300c\u9023\u643a\u30b5\u30fc\u30d3\u30b9\u300d→\u300c\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u300d\u3067\u751f\u6210\u3055\u308c\u308bURL \u3092\u5229\u7528\u3057\u3066\u901a\u77e5\u3067\u304d\u307e\u3059\uff0e
\n\u3053\u308c\u3092\u300cUser Settings…​\u300d\u306e\u300cNotify webhook:\u300d\u306b\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n
\n

mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u901a\u77e5

\n
\n
\n

snac \u306fmastodon API \u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305d\u306e\u305f\u3081mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e
\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901a\u77e5\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u901a\u77e5\u3092\u53d7\u3051\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306e\u901a\u77e5\u306b\u3064\u3044\u3066\uff0e\n\n\n\nsnac \u306e\u901a\u77e5\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u300cnotifications\u300d\u306e\u6a2a\u306b\u6570\u5b57\u3067\u901a\u77e5\u3055\u308c\u307e\u3059\uff0e\u300cnotifications\u300d\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u8a73\u7d30\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n\n\u3057\u304b\u3057\u3053\u306e\u901a\u77e5\u306fsnac \u306e\u30da\u30fc\u30b8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u305f\u30bf\u30a4\u30df\u30f3\u30b0\u306b\u306a\u3089\u306a\u3044\u3068\u901a\u77e5\u304c\u308f\u304b\u308a\u307e\u305b\u3093\uff0e\n\u3057\u304b\u3057\u4ee3\u66ff\u306e\u901a\u77e5\u304c\u3044\u304f\u3064\u304b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u3089\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u307b\u307c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306a\u901a\u77e5\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\uff0e\n\n\n\n\ne-mail\n\n\n\u4e00\u822c\u7684\u306ae-mail \u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8a2d\u5b9a\u6e08\u3067\u3042\u308c\u3070\u30e6\u30fc\u30b6\u30fc\u306e\u300cUser Settings…​\u300d\u304b\u3089\u300cEmail address for notifications:\u300d\u306b\u5b9b\u5148\u306ee-main address \u3092\u5165\u529b\u3059\u308b\u308b\u3053\u3068\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\n\u30b5\u30fc\u30d0\u30fc\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u5b9a\u304c\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u308a\uff0c\u5916\u90e8\u306e\u30e1\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u5229\u7528\u3057\u305f\u3044\u5834\u5408 server.json \u306e\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3082\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\nEmail address for notifications\n If this field is not empty, an email message will be sent to this address whenever a post written by you is liked, boosted or replied to.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\n\n\nsmtp_url Since version 2.76, email notifications can be sent via direct connection to an SMTP server instead of the traditional behaviour of piping the mes\u2010\n sage to /usr/sbin/sendmail. Set this value to the SMTP url to be used for sending email notifications (for example, smtp://localhost). It may in\u2010\n clude a port number if it's not running on the usual one, like in smtp://mail.example.com:587.\n\n\n\n\nsmtp_user\n\n\n\n\nsmtp_password\n To be filled if the SMTP server defined by the previous directive needs credentials.\n\n\n\n\n— snac(8)\u3088\u308a\n\n\n\n\n\n\n\n\nTelegram \u3067\u901a\u77e5\n\n\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eTelegram \u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305f\u3060\uff0cTelegram bot \u3092\u4f5c\u6210\u3057\u3066\u5229\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u671f\u8a2d\u5b9a\u304c\u5c11\u3057\u521d\u9762\u5012\u3067\u3059\uff0e\n\n\n\n\n\nTelegram notifications\n To enable notifications via Telegram, fill the two provided fields (Bot API key and Chat id). You need to create both a Telegram channel and a\n bot for this; the process is rather cumbersome but it's documented everywhere. The Bot API key is a long string of alphanumeric characters and\n the chat id is a big, negative number.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u4ee5\u524dTelegram bot \u3092Nextcloud \u306eTOTP \u306e\u901a\u77e5\u8a2d\u5b9a\u306b\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u66f8\u3044\u305f\u30a8\u30f3\u30c8\u30ea\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\nNextcloud 14 \u306e Telegram \u3092\u4f7f\u3063\u305f2\u8981\u7d20\u8a8d\u8a3c \u2013 matoken’s blog\n\n\n\n\nTelegram bot \u304c\u4f5c\u6210\u3067\u304d\u305f\u3089\u5404\u30e6\u30fc\u30b6\u306e\u300cUser Settings…​\u300d\u306e\u300cTelegram notifications (bot key and chat id):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\nntfy \u3067\u901a\u77e5\n\n\nOSS \u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3084\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306b\u901a\u77e5\u304c\u3067\u304d\u308bntfy \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066snac \u306e\u901a\u77e5\u3092\u884c\u3046\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\nntfy.sh | Send push notifications to your phone via PUT/POST\n\n\n\n\n\n\n\nntfy notifications\n To enable notifications via ntfy (both self-hosted or standard ntfy.sh server), fill the two provided fields (ntfy server/topic and, if pro\u2010\n tected, the token). You need to refer to the https://ntfy.sh web site for more information on this process.\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u53ef\u80fd\u3067\u3059\u304c\uff0c\u3068\u308a\u3042\u3048\u305antfy.sh \u3092\u5229\u7528\u3057\u3066\u8a66\u3059\u3068\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\u300cUser Settings…​\u300d\u306e\u300cntfy notifications (ntfy server and token):\u300d\u306b\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\n\nWebhook \u3067\u901a\u77e5\n\n\n\u8272\u3005\u306a\u30b5\u30fc\u30d3\u30b9\u304c\u5bfe\u5fdc\u3057\u3066\u3044\u308bWebhook \u3082\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\n\nNotify webhook\n If this is set to an URL, an HTTP POST will be sent to it whenever a new notification happens (see the 'Webhook for notifications' section below\n for more information).\n\n\n\n\n— snac(1)\u3088\u308a\n\n\n\n\u4f8b\u3048\u3070Discord \u3067\u3042\u308c\u3070\uff0c\u300c\u30c1\u30e3\u30f3\u30cd\u30eb\u306e\u7de8\u96c6\u300d→\u300c\u9023\u643a\u30b5\u30fc\u30d3\u30b9\u300d→\u300c\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u4f5c\u6210\u300d\u3067\u751f\u6210\u3055\u308c\u308bURL \u3092\u5229\u7528\u3057\u3066\u901a\u77e5\u3067\u304d\u307e\u3059\uff0e\n\u3053\u308c\u3092\u300cUser Settings…​\u300d\u306e\u300cNotify webhook:\u300d\u306b\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u901a\u77e5\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u901a\u77e5\n\n\nsnac \u306fmastodon API \u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\u305d\u306e\u305f\u3081mastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff0e\nmastodon \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901a\u77e5\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u901a\u77e5\u3092\u53d7\u3051\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\uff0e", "date_published": "2025-12-18T20:28:14+09:00", "date_modified": "2025-12-18T20:28:15+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "notification", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4987", "url": "https://matoken.org/blog/2025/12/17/snac-theme/", "title": "snac\u306etheme\u3092\u8a2d\u5b9a", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u306etheme \u5909\u66f4\uff0e

\n
\n

\n
\n

snac \u306fCSS \u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30c6\u30fc\u30de\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e
\nCSS \u30d5\u30a1\u30a4\u30eb\u306f2\u7a2e\u985e\u3042\u308a\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5168\u4f53\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\uff0c {basedir}/style.css \u3068\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306e {basedir}/user/{\u30e6\u30fc\u30b6\u30fc\u540d}}/static/style.css \u3067\u3059\uff0e

\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

\u624b\u5143\u306esnac 2.8.5 \u3067\u8a66\u3057\u305f\u3068\u3053\u308d\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\u306a\u3044\u3068\u52b9\u304b\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\n\u3064\u307e\u308a\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u516c\u958b\u30da\u30fc\u30b8\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e
\n\u305d\u3057\u3066\uff0c\u8a2d\u5b9a\u306b\u306ftheme \u30d5\u30a1\u30a4\u30eb\u3092\u8a72\u5f53\u5834\u6240\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u30a6\u30a7\u30d6\u4e0a\u304b\u3089\u306f\u51fa\u6765\u306a\u3044\u306e\u3067\u7ba1\u7406\u8005\u306b\u304a\u9858\u3044\u3059\u308b\u306a\u3069\u306e\u624b\u9593\u304c\u304b\u304b\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
\n

\u81ea\u5206\u3067\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\uff0c README.md \u306e Incredibly awesome CSS themes for snac \u90e8\u5206\u306b\u3044\u304f\u3064\u304b\u306etheme \u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3053\u308c\u3092\u4f7f\u308f\u305b\u3066\u3082\u3089\u3063\u305f\u308a\u305d\u308c\u3092\u5143\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u306e\u3067\u3082\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ grep -A5 'Incredibly awesome CSS themes for snac' README.md\n## Incredibly awesome CSS themes for snac\n\n- [A compilation of themes for snac (by \u0412\u043e )](https://codeberg.org/voron/snac-style).\n- [A cool, elegant theme (by Haijo7)](https://codeberg.org/Haijo7/snac-custom-css).\n- [A terminal-like theme (by Tetra)](https://codeberg.org/ERROR404NULLNOTFOUND/snac-terminal-theme).
\n
\n
\n
\n

\u4ee5\u4e0b\u306f Pika \u3068\u3044\u3046theme \u3092\u8a2d\u5b9a\u3057\u305f\u4f8b\u3067\u3059\uff0e3\u30da\u30a4\u30f3\u306b\u306a\u308a\uff0cPC\u7b49\u306e\u6a2a\u9577\u753b\u9762\u3067\u306e\u64cd\u4f5c\u6027\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

\"snac

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u306etheme \u5909\u66f4\uff0e\n\n\n\nsnac \u306fCSS \u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30c6\u30fc\u30de\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\nCSS \u30d5\u30a1\u30a4\u30eb\u306f2\u7a2e\u985e\u3042\u308a\uff0c\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5168\u4f53\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\uff0c {basedir}/style.css \u3068\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u7528\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306e {basedir}/user/{\u30e6\u30fc\u30b6\u30fc\u540d}}/static/style.css \u3067\u3059\uff0e\n\n\n\n\n\nTip\n\n\n\n\u624b\u5143\u306esnac 2.8.5 \u3067\u8a66\u3057\u305f\u3068\u3053\u308d\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8CSS\u30d5\u30a1\u30a4\u30eb\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\u306a\u3044\u3068\u52b9\u304b\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\u3064\u307e\u308a\uff0c\u5404\u30e6\u30fc\u30b6\u30fc\u306e\u516c\u958b\u30da\u30fc\u30b8\u306f\u30b0\u30ed\u30fc\u30d0\u30eb\u8a2d\u5b9a\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\u305d\u3057\u3066\uff0c\u8a2d\u5b9a\u306b\u306ftheme \u30d5\u30a1\u30a4\u30eb\u3092\u8a72\u5f53\u5834\u6240\u306b\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u304c\uff0c\u30a6\u30a7\u30d6\u4e0a\u304b\u3089\u306f\u51fa\u6765\u306a\u3044\u306e\u3067\u7ba1\u7406\u8005\u306b\u304a\u9858\u3044\u3059\u308b\u306a\u3069\u306e\u624b\u9593\u304c\u304b\u304b\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\u81ea\u5206\u3067\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\uff0c README.md \u306e Incredibly awesome CSS themes for snac \u90e8\u5206\u306b\u3044\u304f\u3064\u304b\u306etheme \u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3053\u308c\u3092\u4f7f\u308f\u305b\u3066\u3082\u3089\u3063\u305f\u308a\u305d\u308c\u3092\u5143\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u306e\u3067\u3082\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n$ grep -A5 'Incredibly awesome CSS themes for snac' README.md\n## Incredibly awesome CSS themes for snac\n\n- [A compilation of themes for snac (by \u0412\u043e )](https://codeberg.org/voron/snac-style).\n- [A cool, elegant theme (by Haijo7)](https://codeberg.org/Haijo7/snac-custom-css).\n- [A terminal-like theme (by Tetra)](https://codeberg.org/ERROR404NULLNOTFOUND/snac-terminal-theme).\n\n\n\n\u4ee5\u4e0b\u306f Pika \u3068\u3044\u3046theme \u3092\u8a2d\u5b9a\u3057\u305f\u4f8b\u3067\u3059\uff0e3\u30da\u30a4\u30f3\u306b\u306a\u308a\uff0cPC\u7b49\u306e\u6a2a\u9577\u753b\u9762\u3067\u306e\u64cd\u4f5c\u6027\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e", "date_published": "2025-12-17T21:04:10+09:00", "date_modified": "2025-12-17T21:23:12+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "theme", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4881", "url": "https://matoken.org/blog/2025/12/16/ddg-easter-egg/", "title": "DuckDuckGo\u306e\u30a4\u30fc\u30b9\u30bf\u30fc\u30a8\u30c3\u30b0", "content_html": "

\n
\n

tumblr\u3067\u898b\u304b\u3051\u305f\u306e\u3067\u3059\u304c\uff0c\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u306eDuckDuckGo\u306e\u30a4\u30fc\u30b9\u30bf\u30fc\u30a8\u30c3\u30b0\u30921\u3064\u77e5\u308a\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

DuckDuckGo\u3067\u300clinux\u300d\u3068\u691c\u7d22\u3059\u308b\u3068\u691c\u7d22\u6587\u5b57\u5217\u306e\u5de6\u306e\u30a2\u30d2\u30eb\u30a2\u30a4\u30b3\u30f3\u304c\u30da\u30f3\u30ae\u30f3\u306b\u306a\u308b\u3068\u3044\u3046\u3082\u306e\uff0e

\n
\n
https://www.tumblr.com/matoken/802369996450906112/httpsduckduckgocomdistlogosdynamiclinuxpn
\n

\n
\n

\u81ea\u5206\u3067\u3082\u8a66\u3057\u3066\u307f\u308b\u3068\u305f\u3057\u304b\u306b\u30da\u30f3\u30ae\u30f3\u306b\uff0e

\n
\n
\n

\"ddg

\n
\n
\n

\u3053\u3061\u3089\u306eURL \u3067\u3044\u3064\u3067\u3082\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u305f\u3060\u3057\uff0c\u3044\u3064\u3082\u4f7f\u3063\u3066\u3044\u308bJavaScript \u306e\u5fc5\u8981\u306a\u3044html\u7248( https://html.duckduckgo.com/html/ )\u3060\u3068\u5909\u308f\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n

\u300cBSD\u300d\u3060\u3068\u7279\u306b\u4f55\u3082\u5909\u308f\u3089\u305a\uff0e
\n\u3068toot\u3057\u305f\u3068\u3053\u308d\uff0c\u300cFreeBSD\u300d\u3060\u3068\u30c7\u30fc\u30e2\u30f3\u304f\u3093\u306b\u306a\u308b\u3068\u6559\u3048\u3066\u3082\u3089\u3044\u307e\u3057\u305f\uff0e
\n\u305d\u306e\u4ed6\u300cOpenBSD\u300d\u3082\u3042\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\"ddg
\n\"ddg
\n\"ddg

\n
\n
\n

NetBSD\u306f\u7121\u3055\u305d\u3046\uff0e\u65d7\u306f\u30a2\u30a4\u30b3\u30f3\u306b\u3057\u3065\u3089\u304b\u3063\u305f?

\n
\n
\n

\u4e00\u90e8\u306e\u30dc\u30fc\u30ab\u30ed\u30a4\u30c9\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u63a2\u305b\u3070\u4ed6\u306b\u3082\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306d\uff0e

\n
\n", "content_text": "tumblr\u3067\u898b\u304b\u3051\u305f\u306e\u3067\u3059\u304c\uff0c\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u306eDuckDuckGo\u306e\u30a4\u30fc\u30b9\u30bf\u30fc\u30a8\u30c3\u30b0\u30921\u3064\u77e5\u308a\u307e\u3057\u305f\uff0e\n\n\n\nDuckDuckGo\u3067\u300clinux\u300d\u3068\u691c\u7d22\u3059\u308b\u3068\u691c\u7d22\u6587\u5b57\u5217\u306e\u5de6\u306e\u30a2\u30d2\u30eb\u30a2\u30a4\u30b3\u30f3\u304c\u30da\u30f3\u30ae\u30f3\u306b\u306a\u308b\u3068\u3044\u3046\u3082\u306e\uff0e\n\nhttps://www.tumblr.com/matoken/802369996450906112/httpsduckduckgocomdistlogosdynamiclinuxpn\n\n\n\u81ea\u5206\u3067\u3082\u8a66\u3057\u3066\u307f\u308b\u3068\u305f\u3057\u304b\u306b\u30da\u30f3\u30ae\u30f3\u306b\uff0e\n\n\n\n\n\n\u3053\u3061\u3089\u306eURL \u3067\u3044\u3064\u3067\u3082\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\nhttps://duckduckgo.com//dist/logos/dynamic/linux.png\n\n\n\n\n\u305f\u3060\u3057\uff0c\u3044\u3064\u3082\u4f7f\u3063\u3066\u3044\u308bJavaScript \u306e\u5fc5\u8981\u306a\u3044html\u7248( https://html.duckduckgo.com/html/ )\u3060\u3068\u5909\u308f\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\n\u300cBSD\u300d\u3060\u3068\u7279\u306b\u4f55\u3082\u5909\u308f\u3089\u305a\uff0e\n\u3068toot\u3057\u305f\u3068\u3053\u308d\uff0c\u300cFreeBSD\u300d\u3060\u3068\u30c7\u30fc\u30e2\u30f3\u304f\u3093\u306b\u306a\u308b\u3068\u6559\u3048\u3066\u3082\u3089\u3044\u307e\u3057\u305f\uff0e\n\u305d\u306e\u4ed6\u300cOpenBSD\u300d\u3082\u3042\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\nhttps://duckduckgo.com//dist/logos/dynamic/freebsd.png\n\n\nhttps://duckduckgo.com//dist/logos/dynamic/openbsd.png\n\n\n\n\n\n\n\n\n\nNetBSD\u306f\u7121\u3055\u305d\u3046\uff0e\u65d7\u306f\u30a2\u30a4\u30b3\u30f3\u306b\u3057\u3065\u3089\u304b\u3063\u305f?\n\n\n\u4e00\u90e8\u306e\u30dc\u30fc\u30ab\u30ed\u30a4\u30c9\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\n\u63a2\u305b\u3070\u4ed6\u306b\u3082\u3042\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u306d\uff0e", "date_published": "2025-12-16T20:13:39+09:00", "date_modified": "2025-12-15T19:51:35+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "DuckDuckGo", "easter egg", "\u672a\u5206\u985e" ] }, { "id": "https://matoken.org/blog/?p=4973", "url": "https://matoken.org/blog/2025/12/16/snac-welcome-page-costomsetting/", "title": "snac\u306eWelcome page\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\u305d\u306e2\uff0e
\n\u4ee5\u524d\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u306fhtml \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u63db\u3048\u3092\u884c\u3044\u307e\u3057\u305f\u304c\u4eca\u56de\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u66f8\u304d\u63db\u3048\u3067\u3059\uff0e

\n
\n
\n\n
\n

\n
\n

snac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e greeting.html \u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u51fa\u6765\u307e\u3059\u304c\uff0c\u4ed6\u306b\u3082\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u3082\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

show_instance_timeline \u3053\u308c\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068Welcome page \u306b\u6700\u65b0\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u6295\u7a3f\u3057\u305f\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e
\n\u307e\u305f\uff0c\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u9805\u76ee\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u305f\u5834\u5408\u305d\u308c\u3082\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

admin_email
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9

\n
\n
\n

admin_account
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u30a2\u30ab\u30a6\u30f3\u30c8

\n
\n
\n

title
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30bf\u30a4\u30c8\u30eb

\n
\n
\n

short_description
\n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5bfe\u3059\u308b\u77ed\u3044\u8aac\u660e

\n
\n
\n

short_description_raw
\nshort_description \u3092\u751f\u306e\u6587\u5b57\u5217\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u304b\uff0cHTML \u306b\u5909\u63db\u3059\u308b\u304b

\n
\n
\n

\u4f8b\u3048\u3070\u3053\u306e\u69d8\u306b\u8a2d\u5b9a\u3059\u308b\u3068\uff0c

\n
\n
\n
\n
$ grep -A5 show_instance_timeline snac-data/server.json\n    \"show_instance_timeline\": true,\n    \"admin_email\": \"\",\n    \"admin_account\": \"matoken\",\n    \"title\": \"🐈🐈🐈\",\n    \"short_description\": \"matoken\u306e\u500b\u4ebaActivityPub \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\",\n    \"short_description_raw\": false,
\n
\n
\n
\n

\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u6ce8\u610f\u70b9\u3068\u3057\u3066\uff0cshow_instance_timeline \u3092 true \u306b\u3059\u308b\u3068 greeting.html \u306f\u7121\u8996\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u7528\u9014\u3084\u597d\u307f\u306b\u5408\u308f\u305b\u3066\u3069\u3061\u3089\u304b\u3092\u5229\u7528\u3059\u308b\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\u305d\u306e2\uff0e\n\u4ee5\u524d\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u306fhtml \u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u63db\u3048\u3092\u884c\u3044\u307e\u3057\u305f\u304c\u4eca\u56de\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u66f8\u304d\u63db\u3048\u3067\u3059\uff0e\n\n\n\n\nsnac\u306eWelcome page\u306ehtml\u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba \u2013 matoken’s blog\n\n\n\n\n\nsnac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e greeting.html \u30d5\u30a1\u30a4\u30eb\u3092\u66f8\u304d\u63db\u3048\u308b\u3053\u3068\u3067\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u51fa\u6765\u307e\u3059\u304c\uff0c\u4ed6\u306b\u3082\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u3082\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u9805\u76ee\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\nshow_instance_timeline \u3053\u308c\u3092 true \u306b\u8a2d\u5b9a\u3059\u308b\u3068Welcome page \u306b\u6700\u65b0\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u6295\u7a3f\u3057\u305f\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\u307e\u305f\uff0c\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u9805\u76ee\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u305f\u5834\u5408\u305d\u308c\u3082\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\nadmin_email \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\n\n\nadmin_account \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u7ba1\u7406\u8005\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\n\n\ntitle \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30bf\u30a4\u30c8\u30eb\n\n\nshort_description \n\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306b\u5bfe\u3059\u308b\u77ed\u3044\u8aac\u660e\n\n\nshort_description_raw \nshort_description \u3092\u751f\u306e\u6587\u5b57\u5217\u3068\u3057\u3066\u89e3\u91c8\u3059\u308b\u304b\uff0cHTML \u306b\u5909\u63db\u3059\u308b\u304b\n\n\n\u4f8b\u3048\u3070\u3053\u306e\u69d8\u306b\u8a2d\u5b9a\u3059\u308b\u3068\uff0c\n\n\n\n$ grep -A5 show_instance_timeline snac-data/server.json\n \"show_instance_timeline\": true,\n \"admin_email\": \"\",\n \"admin_account\": \"matoken\",\n \"title\": \"🐈🐈🐈\",\n \"short_description\": \"matoken\u306e\u500b\u4ebaActivityPub \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\",\n \"short_description_raw\": false,\n\n\n\n\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u6ce8\u610f\u70b9\u3068\u3057\u3066\uff0cshow_instance_timeline \u3092 true \u306b\u3059\u308b\u3068 greeting.html \u306f\u7121\u8996\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\u7528\u9014\u3084\u597d\u307f\u306b\u5408\u308f\u305b\u3066\u3069\u3061\u3089\u304b\u3092\u5229\u7528\u3059\u308b\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e", "date_published": "2025-12-16T19:19:40+09:00", "date_modified": "2025-12-16T19:19:43+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4962", "url": "https://matoken.org/blog/2025/12/15/snac-spam-mitigation/", "title": "snac\u3067\u306eSPAM\u5bfe\u7b56", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eSPAM \u5bfe\u7b56\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

SPAM \u304c\u6765\u306a\u3044\u306b\u8d8a\u3057\u305f\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u304cActivityPub \u3067\u3082\u5076\u306b\u898b\u304b\u3051\u307e\u3059\uff0e\u3082\u3057SPAM \u304c\u6765\u308b\u3068\u304d\u306e\u3053\u3068\u3092\u8003\u3048\u3066\u5bfe\u7b56\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\uff0e
\nsnac \u3067\u306f2\u3064\u306e\u5bfe\u7b56\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n
SPAM Mitigation\n    There have been some SPAM attacks on the Fediverse and, as too many instances and server implementations out there still allow automatic account creation, it will only get worse.  snac includes some (not very strong) tools for try\u2010\n    ing to survive the SPAM flood that will eventually happen.
\n
\n
\n
\n
\n
The  min_account_age field in the main configuration file allows setting a minimum age (in seconds) to consider too recently created accounts suspicious of being a potential source of SPAM. This is a na\u00efve assumption, because spam\u2010\nmers can create accounts, let them dormant for a while and then start to use them. Also, some ActivityPub implementations don't even bother to return a creation date for their accounts, so this is not very useful.
\n
\n
\n
\n
\n
From version 2.50, post content can be filtered out by regular expressions.  These weapons of mass destruction can be written into the filter_reject.txt file in the server base directory, one per line;  if  this  file  exists,  all\nposts'  content  will  be  matched (after being stripped of HTML tags) against these regexes, one by one, and any match will make the post to be rejected. Use lower case, the regex will be case insensitive by default.  If you don't\nknow about regular expressions, don't use this option (or learn about them inw some tutorial, there are gazillions of them out there), as you and your users may start missing posts. Also, given that every regular expression  imple\u2010\nmentation supports a different set of features, consider reading the documentation about the one implemented in your system.
\n
\n
\n
\n
\n— snac(8) \u3088\u308a\n
\n
\n
\n
\n
\n

\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\u304b\u3089\u65e5\u306e\u6d45\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u62d2\u5426

\n
\n
\n

1\u3064\u76ee\u306f\u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u8a2d\u5b9a\u3067\u304d\u308b min_account_age \u3067\uff0c\u6295\u7a3f\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u304b\u3089\u306e\u6642\u9593\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff0e
\n\u305f\u3060\u3057\uff0cSPAM \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u5bdd\u304b\u305b\u3066\u304b\u3089\u904b\u7528\u3057\u305f\u308a\uff0c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u65e5\u3092\u8fd4\u3055\u306a\u3044\u5b9f\u88c5\u3082\u3042\u308b\u3089\u3057\u3044\u306e\u3067\u3042\u307e\u308a\u5f79\u306b\u7acb\u305f\u306a\u3044\u3088\u3046\u3067\u3059\uff0e
\n\u65e2\u5b9a\u5024\u306f 0 \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
$ jq .min_account_age server.json\n0
\n
\n
\n
\n
\n
\n

\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0

\n
\n
\n

2\u3064\u3081\u306f\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0esnac \u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b filter_reject.txt \u3092\u7528\u610f\u3057\u3066\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b1\u884c\u305a\u3064\u8a18\u8ff0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u306b\u3088\u308a\u5168\u3066\u306e\u6295\u7a3f\u3092HTML \u30bf\u30b0\u3092\u53d6\u308a\u9664\u3044\u305f\u5f8c\u6b63\u898f\u8868\u73fe\u30681\u3064\u305a\u3064\u7167\u5408\u3055\u308c\u4e00\u81f4\u3059\u308b\u6295\u7a3f\u306f\u62d2\u5426\u3055\u308c\u307e\u3059\uff0e
\n\u6b63\u898f\u8868\u73fe\u306a\u306e\u3067\u30c6\u30b9\u30c8\u3092\u5341\u5206\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

Reverse proxy \u3084Firewall \u306a\u3069snac \u306e\u5916\u3067\u5bfe\u7b56\u3082\u8003\u3048\u3089\u308c\u307e\u3059\uff0e\u305d\u306e\u4ed6\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0ee-mail \u3082\u3053\u3093\u306a\u611f\u3058\u3067\u591a\u6bb5\u306b\u3057\u305f\u308a\u3057\u307e\u3059\u306d\uff0e\u305d\u3046\u306a\u308b\u3068Received \u306e\u3088\u3046\u306a\u3082\u306e\u304c\u898b\u305f\u3044\u306a\u3068\u601d\u3063\u305f\u308a\u3082\uff0e

\n
\n\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eSPAM \u5bfe\u7b56\u306b\u3064\u3044\u3066\uff0e\n\n\n\nSPAM \u304c\u6765\u306a\u3044\u306b\u8d8a\u3057\u305f\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u304cActivityPub \u3067\u3082\u5076\u306b\u898b\u304b\u3051\u307e\u3059\uff0e\u3082\u3057SPAM \u304c\u6765\u308b\u3068\u304d\u306e\u3053\u3068\u3092\u8003\u3048\u3066\u5bfe\u7b56\u3092\u78ba\u8a8d\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\nsnac \u3067\u306f2\u3064\u306e\u5bfe\u7b56\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\nSPAM Mitigation\n There have been some SPAM attacks on the Fediverse and, as too many instances and server implementations out there still allow automatic account creation, it will only get worse. snac includes some (not very strong) tools for try\u2010\n ing to survive the SPAM flood that will eventually happen.\n\n\n\n\nThe min_account_age field in the main configuration file allows setting a minimum age (in seconds) to consider too recently created accounts suspicious of being a potential source of SPAM. This is a na\u00efve assumption, because spam\u2010\nmers can create accounts, let them dormant for a while and then start to use them. Also, some ActivityPub implementations don't even bother to return a creation date for their accounts, so this is not very useful.\n\n\n\n\nFrom version 2.50, post content can be filtered out by regular expressions. These weapons of mass destruction can be written into the filter_reject.txt file in the server base directory, one per line; if this file exists, all\nposts' content will be matched (after being stripped of HTML tags) against these regexes, one by one, and any match will make the post to be rejected. Use lower case, the regex will be case insensitive by default. If you don't\nknow about regular expressions, don't use this option (or learn about them inw some tutorial, there are gazillions of them out there), as you and your users may start missing posts. Also, given that every regular expression imple\u2010\nmentation supports a different set of features, consider reading the documentation about the one implemented in your system.\n\n\n\n\n— snac(8) \u3088\u308a\n\n\n\n\n\n\u30a2\u30ab\u30a6\u30f3\u30c8\u4f5c\u6210\u304b\u3089\u65e5\u306e\u6d45\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u62d2\u5426\n\n\n1\u3064\u76ee\u306f\u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3067\u8a2d\u5b9a\u3067\u304d\u308b min_account_age \u3067\uff0c\u6295\u7a3f\u3092\u53d7\u3051\u4ed8\u3051\u308b\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4f5c\u6210\u3055\u308c\u3066\u304b\u3089\u306e\u6642\u9593\u304c\u8a2d\u5b9a\u3067\u304d\u307e\u3059\uff0e\n\u305f\u3060\u3057\uff0cSPAM \u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u5bdd\u304b\u305b\u3066\u304b\u3089\u904b\u7528\u3057\u305f\u308a\uff0c\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u65e5\u3092\u8fd4\u3055\u306a\u3044\u5b9f\u88c5\u3082\u3042\u308b\u3089\u3057\u3044\u306e\u3067\u3042\u307e\u308a\u5f79\u306b\u7acb\u305f\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\n\u65e2\u5b9a\u5024\u306f 0 \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n$ jq .min_account_age server.json\n0\n\n\n\n\n\n\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\n\n\n2\u3064\u3081\u306f\u6295\u7a3f\u5185\u5bb9\u3092\u6b63\u898f\u8868\u73fe\u3067\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0esnac \u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b filter_reject.txt \u3092\u7528\u610f\u3057\u3066\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u4e2d\u306b1\u884c\u305a\u3064\u8a18\u8ff0\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u306b\u3088\u308a\u5168\u3066\u306e\u6295\u7a3f\u3092HTML \u30bf\u30b0\u3092\u53d6\u308a\u9664\u3044\u305f\u5f8c\u6b63\u898f\u8868\u73fe\u30681\u3064\u305a\u3064\u7167\u5408\u3055\u308c\u4e00\u81f4\u3059\u308b\u6295\u7a3f\u306f\u62d2\u5426\u3055\u308c\u307e\u3059\uff0e\n\u6b63\u898f\u8868\u73fe\u306a\u306e\u3067\u30c6\u30b9\u30c8\u3092\u5341\u5206\u3057\u3066\u8a2d\u5b9a\u3057\u305f\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\nReverse proxy \u3084Firewall \u306a\u3069snac \u306e\u5916\u3067\u5bfe\u7b56\u3082\u8003\u3048\u3089\u308c\u307e\u3059\uff0e\u305d\u306e\u4ed6\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3082\u3042\u308b\u3088\u3046\u3067\u3059\uff0ee-mail \u3082\u3053\u3093\u306a\u611f\u3058\u3067\u591a\u6bb5\u306b\u3057\u305f\u308a\u3057\u307e\u3059\u306d\uff0e\u305d\u3046\u306a\u308b\u3068Received \u306e\u3088\u3046\u306a\u3082\u306e\u304c\u898b\u305f\u3044\u306a\u3068\u601d\u3063\u305f\u308a\u3082\uff0e\n\n\n\n\nMastodon\u3068\u304b\u306eActivityPub\u30b5\u30fc\u30d0\u30fc\u3067\u4f7f\u3048\u308b\u30b9\u30d1\u30e0\u5bfe\u7b56\u30d7\u30ed\u30ad\u30b7\u3092\u4f5c\u3063\u305f\u3088 #mastodon – Qiita\n\n\nwebscrubbing/simple-activitypub-spam-filter: Check content and block it", "date_published": "2025-12-15T19:50:27+09:00", "date_modified": "2025-12-15T19:50:28+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "SPAM", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4953", "url": "https://matoken.org/blog/2025/12/14/snac-robots-txt/", "title": "snac\u306erobots.txt", "content_html": "
\n
\n
\n

\"susie64

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306erobots.txt \u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3067\u300csite:snac.kagolug.org\u300d\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u3066\u307f\u308b\u3068\u4f55\u3082\u51fa\u3066\u304d\u307e\u305b\u3093\uff0e\u904b\u7528\u958b\u59cb\u304b\u3089\u305d\u3046\u6642\u9593\u304c\u7d4c\u3063\u3066\u3044\u306a\u3044\u304b\u3089\u304b\u306a?\u3068\u601d\u3044\u3064\u3064\u5ff5\u306e\u70ba robots.txt \u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u5168\u3066\u62d2\u5426\u308b\u3059\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nDisallow: /
\n
\n
\n
\n

source \u3092\u78ba\u8a8d\u3059\u308b\u3068 httpd.c \u306e\u4e2d\u3067\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ grep -n -A5 robots.txt httpd.c\n321:    if (strcmp(q_path, \"/robots.txt\") == 0) {\n322-        status = HTTP_STATUS_OK;\n323-        *ctype = \"text/plain\";\n324-        *body  = xs_str_new(\"User-agent: *\\n\"\n325-                            \"Disallow: /\\n\");\n326-    }
\n
\n
\n
\n

snac \u306e\u8a2d\u5b9a\u3067\u3069\u3046\u306b\u304b\u3067\u304d\u308c\u3070\u3044\u3044\u3067\u3059\u304c\u6050\u3089\u304f\u7121\u7406\uff0eISSUE \u3092\u63a2\u3059\u3068\u4ee5\u4e0b\u306e\u3082\u306e\u304c\uff0e404\u30a8\u30e9\u30fc\u304c\u90aa\u9b54\u306a\u306e\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3044\u4eba\u306f\u524d\u6bb5\u306ehttp proxy \u3067\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u611f\u3058\u306e\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n

ISSUE \u3092\u7acb\u3066\u305f\u65b9\u306fnginx \u3067\u30ab\u30b9\u30bf\u30e0robots.txt \u3092\u8fd4\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

Actually, I am able to work around this by returning a custom robots.txt with nginx:

\n
\n
\n
\n
location = /robots.txt {\n\t\treturn 200 'User-agent: FediFetcher\\nAllow: /\\nUser-agent: *\\nDisallow: /\\n';\n}
\n
\n
\n
\n
\n
\n

\u81ea\u5206\u306e\u74b0\u5883\u306fApache2 httpd \u3067\u3059\u304c\u540c\u3058\u3088\u3046\u306a\u8a2d\u5b9a\u306f\u3067\u304d\u308b\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

Apache2 httpd \u306eAlias \u3067robots.txt \u3092\u8a2d\u5b9a

\n
\n
\n

\u4ee5\u524dNitter \u3092\u516c\u958b\u3057\u3066\u3044\u305f\u3068\u304d\u306b\u3082\u3084\u3063\u3066\u3044\u305f\u306e\u3067\u3053\u308c\u3092\u53c2\u8003\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e

\n
\n\n
\n

Apache2 httpd \u306esnac \u90e8\u5206\u306e\u8a2d\u5b9a\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\uff0e\u3053\u308c\u3067Linux \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u5185\u306e /var/lib/snac2/robots.txt \u304c /robots.txt \u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff0e

\n
\n
\n
\n
$ sudo git diff /etc/apache2/sites-available/011-snac.kagolug.org.conf\ndiff --git a/apache2/sites-available/011-snac.kagolug.org.conf b/apache2/sites-available/011-snac.kagolug.org.conf\nindex f5b5c7f..7bb72c1 100644\n--- a/apache2/sites-available/011-snac.kagolug.org.conf\n+++ b/apache2/sites-available/011-snac.kagolug.org.conf\n@@ -58,6 +58,11 @@\n        </Location>\n\n        Alias /static /var/www/static\n+       Alias /robots.txt /var/lib/snac2/robots.txt\n+       <Location \"/robots.txt\">\n+               ProxyPass !\n+               Require all granted\n+       </Location>\n\n        # Possible values include: debug, info, notice, warn, error, crit,\n        # alert, emerg.
\n
\n
\n
\n

\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u53cd\u6620\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo apache2ctl configtest\n$ sudo systemctl reload apache2
\n
\n
\n
\n

\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u304c\uff0c

\n
\n
\n
\n
$ sudo -u www-data cat /var/lib/snac2/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n

/robots.txt \u306b\u53cd\u6620\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n

\u3053\u308c\u3067\u5404\u7a2ebot \u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u304c\u8a31\u53ef\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

source \u66f8\u304d\u63db\u3048

\n
\n
\n

source \u304b\u3089build \u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u306fsource \u66f8\u304d\u63db\u3048\u3067\u3082robots.txt \u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3057\u305f\uff0e\u3067\u3082\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u305f\u3073\u306b\u30d1\u30c3\u30c1\u3092\u5f53\u3066\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u3084\u306f\u308aproxy \u3067\u8a2d\u5b9a\u3059\u308b\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
robots.txt \u3092\u7121\u304f\u3059(404 \u30a8\u30e9\u30fc\u304c\u305f\u304f\u3055\u3093\u306a\u306e\u3067\u3042\u307e\u308a\u826f\u304f\u7121\u3055\u305d\u3046)
\n
\n
$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..976fdd6 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -318,13 +318,6 @@ int server_get_handler(xs_dict *req, const char *q_path,\n         *body  = xs_json_dumps(j, 4);\n     }\n     else\n-    if (strcmp(q_path, \"/robots.txt\") == 0) {\n-        status = HTTP_STATUS_OK;\n-        *ctype = \"text/plain\";\n-        *body  = xs_str_new(\"User-agent: *\\n\"\n-                            \"Disallow: /\\n\");\n-    }\n-    else\n     if (strcmp(q_path, \"/style.css\") == 0) {\n         FILE *f;\n         xs *css_fn = xs_fmt(\"%s/style.css\", srv_basedir);
\n
\n
\n
\n
\n
$ w3m -dump https://snac.matoken.org/robots.txt\n404 Not Found (snac/2.85)
\n
\n
\n
\n
\u5168\u3066\u8a31\u53ef\u306b\u66f8\u304d\u63db\u3048
\n
\n
$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..c0bcaef 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -322,7 +322,7 @@ int server_get_handler(xs_dict *req, const char *q_path,\n         status = HTTP_STATUS_OK;\n         *ctype = \"text/plain\";\n         *body  = xs_str_new(\"User-agent: *\\n\"\n-                            \"Disallow: /\\n\");\n+                            \"Allow: /\\n\");\n     }\n     else\n     if (strcmp(q_path, \"/style.css\") == 0) {
\n
\n
\n
\n
\n
$ w3m -dump https://snac.matoken.org/robots.txt\nUser-agent: *\nAllow: /
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306erobots.txt \u306b\u3064\u3044\u3066\uff0e\n\n\n\n\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\u3067\u300csite:snac.kagolug.org\u300d\u306e\u3088\u3046\u306b\u691c\u7d22\u3057\u3066\u307f\u308b\u3068\u4f55\u3082\u51fa\u3066\u304d\u307e\u305b\u3093\uff0e\u904b\u7528\u958b\u59cb\u304b\u3089\u305d\u3046\u6642\u9593\u304c\u7d4c\u3063\u3066\u3044\u306a\u3044\u304b\u3089\u304b\u306a?\u3068\u601d\u3044\u3064\u3064\u5ff5\u306e\u70ba robots.txt \u3092\u78ba\u8a8d\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u5168\u3066\u62d2\u5426\u308b\u3059\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nDisallow: /\n\n\n\nsource \u3092\u78ba\u8a8d\u3059\u308b\u3068 httpd.c \u306e\u4e2d\u3067\u30cf\u30fc\u30c9\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ grep -n -A5 robots.txt httpd.c\n321: if (strcmp(q_path, \"/robots.txt\") == 0) {\n322- status = HTTP_STATUS_OK;\n323- *ctype = \"text/plain\";\n324- *body = xs_str_new(\"User-agent: *\\n\"\n325- \"Disallow: /\\n\");\n326- }\n\n\n\nsnac \u306e\u8a2d\u5b9a\u3067\u3069\u3046\u306b\u304b\u3067\u304d\u308c\u3070\u3044\u3044\u3067\u3059\u304c\u6050\u3089\u304f\u7121\u7406\uff0eISSUE \u3092\u63a2\u3059\u3068\u4ee5\u4e0b\u306e\u3082\u306e\u304c\uff0e404\u30a8\u30e9\u30fc\u304c\u90aa\u9b54\u306a\u306e\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u305f\u3044\u4eba\u306f\u524d\u6bb5\u306ehttp proxy \u3067\u30eb\u30fc\u30eb\u3092\u8ffd\u52a0\u3059\u308b\u611f\u3058\u306e\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n#223 – default robots.txt breaks integration with fedi-fetcher – grunfink/snac2 – Codeberg.org\n\n\n\n\nISSUE \u3092\u7acb\u3066\u305f\u65b9\u306fnginx \u3067\u30ab\u30b9\u30bf\u30e0robots.txt \u3092\u8fd4\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nActually, I am able to work around this by returning a custom robots.txt with nginx:\n\n\n\nlocation = /robots.txt {\n\t\treturn 200 'User-agent: FediFetcher\\nAllow: /\\nUser-agent: *\\nDisallow: /\\n';\n}\n\n\n\n\n\n\u81ea\u5206\u306e\u74b0\u5883\u306fApache2 httpd \u3067\u3059\u304c\u540c\u3058\u3088\u3046\u306a\u8a2d\u5b9a\u306f\u3067\u304d\u308b\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\nApache2 httpd \u306eAlias \u3067robots.txt \u3092\u8a2d\u5b9a\n\n\n\u4ee5\u524dNitter \u3092\u516c\u958b\u3057\u3066\u3044\u305f\u3068\u304d\u306b\u3082\u3084\u3063\u3066\u3044\u305f\u306e\u3067\u3053\u308c\u3092\u53c2\u8003\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e\n\n\n\n\nNitter\u306brobots.txt\u3092\u8a2d\u5b9a(Apache httpd\u306ereverse proxy\u74b0\u5883\u3067Alias\u8a2d\u5b9a) \u2013 matoken’s blog\n\n\n\n\nApache2 httpd \u306esnac \u90e8\u5206\u306e\u8a2d\u5b9a\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u4fee\u6b63\u3057\u307e\u3057\u305f\uff0e\u3053\u308c\u3067Linux \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u5185\u306e /var/lib/snac2/robots.txt \u304c /robots.txt \u306b\u306a\u308b\u306f\u305a\u3067\u3059\uff0e\n\n\n\n$ sudo git diff /etc/apache2/sites-available/011-snac.kagolug.org.conf\ndiff --git a/apache2/sites-available/011-snac.kagolug.org.conf b/apache2/sites-available/011-snac.kagolug.org.conf\nindex f5b5c7f..7bb72c1 100644\n--- a/apache2/sites-available/011-snac.kagolug.org.conf\n+++ b/apache2/sites-available/011-snac.kagolug.org.conf\n@@ -58,6 +58,11 @@\n </Location>\n\n Alias /static /var/www/static\n+ Alias /robots.txt /var/lib/snac2/robots.txt\n+ <Location \"/robots.txt\">\n+ ProxyPass !\n+ Require all granted\n+ </Location>\n\n # Possible values include: debug, info, notice, warn, error, crit,\n # alert, emerg.\n\n\n\n\u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u53cd\u6620\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo apache2ctl configtest\n$ sudo systemctl reload apache2\n\n\n\n\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u304c\uff0c\n\n\n\n$ sudo -u www-data cat /var/lib/snac2/robots.txt\nUser-agent: *\nAllow: /\n\n\n\n/robots.txt \u306b\u53cd\u6620\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/robots.txt\nUser-agent: *\nAllow: /\n\n\n\n\u3053\u308c\u3067\u5404\u7a2ebot \u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u304c\u8a31\u53ef\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nsource \u66f8\u304d\u63db\u3048\n\n\nsource \u304b\u3089build \u3057\u3066\u3044\u308b\u74b0\u5883\u3067\u306fsource \u66f8\u304d\u63db\u3048\u3067\u3082robots.txt \u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3057\u305f\uff0e\u3067\u3082\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u305f\u3073\u306b\u30d1\u30c3\u30c1\u3092\u5f53\u3066\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u3084\u306f\u308aproxy \u3067\u8a2d\u5b9a\u3059\u308b\u307b\u3046\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\nrobots.txt \u3092\u7121\u304f\u3059(404 \u30a8\u30e9\u30fc\u304c\u305f\u304f\u3055\u3093\u306a\u306e\u3067\u3042\u307e\u308a\u826f\u304f\u7121\u3055\u305d\u3046)\n\n$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..976fdd6 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -318,13 +318,6 @@ int server_get_handler(xs_dict *req, const char *q_path,\n *body = xs_json_dumps(j, 4);\n }\n else\n- if (strcmp(q_path, \"/robots.txt\") == 0) {\n- status = HTTP_STATUS_OK;\n- *ctype = \"text/plain\";\n- *body = xs_str_new(\"User-agent: *\\n\"\n- \"Disallow: /\\n\");\n- }\n- else\n if (strcmp(q_path, \"/style.css\") == 0) {\n FILE *f;\n xs *css_fn = xs_fmt(\"%s/style.css\", srv_basedir);\n\n\n\n\n$ w3m -dump https://snac.matoken.org/robots.txt\n404 Not Found (snac/2.85)\n\n\n\n\u5168\u3066\u8a31\u53ef\u306b\u66f8\u304d\u63db\u3048\n\n$ git diff httpd.c\ndiff --git a/httpd.c b/httpd.c\nindex a8cd849..c0bcaef 100644\n--- a/httpd.c\n+++ b/httpd.c\n@@ -322,7 +322,7 @@ int server_get_handler(xs_dict *req, const char *q_path,\n status = HTTP_STATUS_OK;\n *ctype = \"text/plain\";\n *body = xs_str_new(\"User-agent: *\\n\"\n- \"Disallow: /\\n\");\n+ \"Allow: /\\n\");\n }\n else\n if (strcmp(q_path, \"/style.css\") == 0) {\n\n\n\n\n$ w3m -dump https://snac.matoken.org/robots.txt\nUser-agent: *\nAllow: /", "date_published": "2025-12-14T18:26:00+09:00", "date_modified": "2025-12-14T18:12:04+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Apache2 httpd", "robots.txt", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4937", "url": "https://matoken.org/blog/2025/12/13/snac-welcome-page/", "title": "snac\u306eWelcome page\u306ehtml\u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page \u306ehtml \u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

snac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

\u3053\u306e\u30da\u30fc\u30b8\u306f greeting.html \u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
greeting.html
\n
\n
<!DOCTYPE html>\n<html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"https://%host%/favicon.ico\"/>\n<style>*{color-scheme:light dark}body{margin:auto;max-width:50em}</style>\n<title>Welcome to %host%</title>\n</head>\n<body>\n<p><b>%host%</b> is a <a href=\"https://en.wikipedia.org/wiki/Fediverse\">Fediverse</a> instance that uses the <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.</p>\n<p>This server runs the <a href=\"https://comam.es/what-is-snac\">snac</a> software and there is no automatic sign-up process.</p>\n<p>The following users are part of this community:</p>\n\n%userlist%\n\n<p>This site is powered by <abbr title=\"Social Networks Are Crap\">snac</abbr>.</p>\n</body></html>
\n
\n
\n
\n

\u4f8b\u3048\u3070\u65e5\u672c\u8a9e\u306b\u3057\u305f\u308a\uff0c\u30e6\u30fc\u30b6\u30fc\u30ea\u30b9\u30c8\u3092\u96a0\u3057\u305f\u308a\u3068\u3044\u3063\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u51fa\u6765\u307e\u3059\uff0e\u3053\u306ehtml \u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org\u306fActivityPub\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305fFediverse\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\u3053\n\u306e\u30db\u30b9\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u4e16\u754c\u4e2d\u306eMastodon, Pleroma, Friendica, \u306a\u3069\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\n\u5229\u7528\u3057\u3066\u3044\u308b\u4eba\u3005\u3068\u30b3\u30df\u30cb\u30e5\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\n\n\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306fsnac \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\u81ea\u52d5\u767b\u9332\u30d7\u30ed\u30bb\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\n\n\u4ee5\u4e0b\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3059:\n\n    @info@snac.kagolug.org (info)\n    @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.
\n
\n
\n
\n

\"snac

\n
\n
\n

\u4eca\u56de\u3068\u308a\u3042\u3048\u305a\u65e5\u672c\u8a9e\u306b\u3057\u307e\u3057\u305f\u304c\uff0cLUG \u306e\u8aac\u660e\u306a\u3069\u3082\u5165\u308c\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e

\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fsnac \u3067\u306eWelcome page \u306ehtml \u30d5\u30a1\u30a4\u30eb\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3064\u3044\u3066\uff0e\n\n\n\nsnac \u306etop page \u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6328\u62f6\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u306e\u30da\u30fc\u30b8\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org is a Fediverse instance that uses the ActivityPub protocol. In\nother words, users at this host can communicate with people that use software\nlike Mastodon, Pleroma, Friendica, etc. all around the world.\n\nThis server runs the snac software and there is no automatic sign-up process.\n\nThe following users are part of this community:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\n\u3053\u306e\u30da\u30fc\u30b8\u306f greeting.html \u3092\u8aad\u307f\u8fbc\u3093\u3067\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\ngreeting.html\n\n<!DOCTYPE html>\n<html><head>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/>\n<link rel=\"icon\" type=\"image/x-icon\" href=\"https://%host%/favicon.ico\"/>\n<style>*{color-scheme:light dark}body{margin:auto;max-width:50em}</style>\n<title>Welcome to %host%</title>\n</head>\n<body>\n<p><b>%host%</b> is a <a href=\"https://en.wikipedia.org/wiki/Fediverse\">Fediverse</a> instance that uses the <a href=\"https://en.wikipedia.org/wiki/ActivityPub\">ActivityPub</a> protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.</p>\n<p>This server runs the <a href=\"https://comam.es/what-is-snac\">snac</a> software and there is no automatic sign-up process.</p>\n<p>The following users are part of this community:</p>\n\n%userlist%\n\n<p>This site is powered by <abbr title=\"Social Networks Are Crap\">snac</abbr>.</p>\n</body></html>\n\n\n\n\u4f8b\u3048\u3070\u65e5\u672c\u8a9e\u306b\u3057\u305f\u308a\uff0c\u30e6\u30fc\u30b6\u30fc\u30ea\u30b9\u30c8\u3092\u96a0\u3057\u305f\u308a\u3068\u3044\u3063\u305f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u51fa\u6765\u307e\u3059\uff0e\u3053\u306ehtml \u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\n\n\n\n$ w3m -dump https://snac.kagolug.org/\nsnac.kagolug.org\u306fActivityPub\u30d7\u30ed\u30c8\u30b3\u30eb\u3092\u5229\u7528\u3057\u305fFediverse\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3059\uff0e\u3053\n\u306e\u30db\u30b9\u30c8\u306e\u30e6\u30fc\u30b6\u30fc\u306f\u4e16\u754c\u4e2d\u306eMastodon, Pleroma, Friendica, \u306a\u3069\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\n\u5229\u7528\u3057\u3066\u3044\u308b\u4eba\u3005\u3068\u30b3\u30df\u30cb\u30e5\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u53d6\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\n\n\u3053\u306e\u30b5\u30fc\u30d0\u30fc\u306fsnac \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\u81ea\u52d5\u767b\u9332\u30d7\u30ed\u30bb\u30b9\u306f\u3042\u308a\u307e\u305b\u3093\uff0e\n\n\u4ee5\u4e0b\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3053\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3059:\n\n @info@snac.kagolug.org (info)\n @matoken@snac.kagolug.org (matoken)\n\nThis site is powered by snac.\n\n\n\n\n\n\n\u4eca\u56de\u3068\u308a\u3042\u3048\u305a\u65e5\u672c\u8a9e\u306b\u3057\u307e\u3057\u305f\u304c\uff0cLUG \u306e\u8aac\u660e\u306a\u3069\u3082\u5165\u308c\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e", "date_published": "2025-12-13T18:43:34+09:00", "date_modified": "2025-12-16T06:26:44+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4923", "url": "https://matoken.org/blog/2025/12/12/ascii_moon/", "title": "\u6708\u306e\u6e80\u3061\u6b20\u3051\u3092TUI\u3067\u8868\u793a\u3059\u308bASCII Moon", "content_html": "

\n
\n

asciimoon.com \u3068\u3044\u3046\u6708\u306e\u6e80\u3061\u6b20\u3051\u304casciiart \u3067\u8868\u73fe\u3055\u308c\u305f\u30b5\u30a4\u30c8\u304c\u3042\u308a\u307e\u3059\uff0e\u305f\u3060\u3057JavaScript\u304c\u7121\u3044\u3068\u6e80\u3061\u6b20\u3051\u306f\u5206\u304b\u3089\u305aw3m \u306a\u3069\u3067\u306f\u4eca\u3072\u3068\u3064\u306a\u611f\u3058\u3067\u3057\u305f\uff0e

\n
\n
\n

ASCII Moon \u306f\u305d\u306esite\u306b\u30a4\u30f3\u30b9\u30d1\u30a4\u30a2\u3055\u308c\u305f\u6708\u306e\u6e80\u3061\u6b20\u3051\u3092TUI \u3067\u8868\u793a\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3059\uff0e

\n
\n
\n\n
\n

\n
\n

ASCII Moon \u306fReleases page \u306bLinux/macOS/Windows \u306eamd64 \u7248\u306e\u30d0\u30a4\u30ca\u30ea\u304c\u7f6e\u3044\u3066\u3042\u308a\u307e\u3059\uff0e
\nLinux armhf \u3067\u306f\u3069\u3046\u3060\u308d\u3046\u3068\u4eca\u56de\u306fsource \u304b\u3089build \u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ git clone https://github.com/rockydd/ascii_moon.git\n$ cd ascii_moon\n$ cargo build --release\n$ ./target/release/ascii_moon\n$ ./target/release/ascii_moon --help\nA TUI to show the moon phase\n\nUsage: ascii_moon [OPTIONS]\n\nOptions:\n  -d, --date <DATE>    Date in YYYY-MM-DD format (defaults to today)\n      --lines <LINES>  Render the moon to a specific number of lines (non-interactive)\n  -h, --help           Print help\n  -V, --version        Print version\n$ ./target/release/ascii_moon --version\nascii_moon 0.2.0
\n
\n
\n
\n

\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\uff0e
\n-d, --date <\u65e5\u4ed8(YYY-MM-DD)> \u3067\u7279\u5b9a\u306e\u65e5\u4ed8\u3067\u8d77\u52d5\uff0e
\n--lines <\u884c\u6570> \u306fscript \u3084MOTD \u306a\u3069\u5411\u3051\u3067\u6307\u5b9a\u3057\u305f\u884c\u6570\u3067\u6708\u306eAsciiArt \u3092\u51fa\u529b\u3057\u307e\u3059\uff0e
\n-d, --date \u3068 --lines \u306f\u4e00\u7dd2\u306b\u6307\u5b9a\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

\"ascii

\n
\n
\n

\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u3067\u306f\u30ab\u30fc\u30bd\u30eb\u5de6\u53f3\u30671\u65e5\u5358\u4f4d\u3067\u65e5\u4ed8\u3092\u64cd\u4f5c\u3067\u304d\u307e\u3059\uff0el key \u3067\u5730\u540d\u306e\u30e9\u30d9\u30eb\u306eon/off\uff0cL key \u3067\u30e9\u30d9\u30eb\u306e\u8a00\u8a9e\u5909\u66f4\uff0ci key \u3067\u4e0b\u90e8\u306e\u60c5\u5831\u306eon/off \u304c\u3067\u304d\u307e\u3059\uff0e
\n\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u306e\u52d5\u4f5c\u306e\u72b6\u614b\u306f\u4ee5\u4e0b\u306easciinema \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e

\n
\n

\n
\n

TUI \u3067\u3082\u3053\u306eAscii Moon, astroterm, tracker \u306a\u3069\u9762\u767d\u3044\u5929\u6587\u30a2\u30d7\u30ea\u304c\u5897\u3048\u3066\u3044\u308b\u611f\u3058\u304c\u3057\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n
\u74b0\u5883
\n
\n
$ ./target/release/ascii_moon --version\nascii_moon 0.2.0\n$ cargo version\nwarning: `/home/matoken/.cargo/config` is deprecated in favor of `config.toml`\n  |\n  = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo build --release\n$ lsb_release -dr\nNo LSB modules are available.\nDescription:    Raspbian GNU/Linux 12 (bookworm)\nRelease:        12\n$ arch\narmv7l\n$ cat /sys/firmware/devicetree/base/model\nRaspberry Pi 3 Model B Rev 1.2
\n
\n
\n

\n
Post by @matoken
\n
View on Mastodon
\n

\n

\n", "content_text": "asciimoon.com \u3068\u3044\u3046\u6708\u306e\u6e80\u3061\u6b20\u3051\u304casciiart \u3067\u8868\u73fe\u3055\u308c\u305f\u30b5\u30a4\u30c8\u304c\u3042\u308a\u307e\u3059\uff0e\u305f\u3060\u3057JavaScript\u304c\u7121\u3044\u3068\u6e80\u3061\u6b20\u3051\u306f\u5206\u304b\u3089\u305aw3m \u306a\u3069\u3067\u306f\u4eca\u3072\u3068\u3064\u306a\u611f\u3058\u3067\u3057\u305f\uff0e\n\n\nASCII Moon \u306f\u305d\u306esite\u306b\u30a4\u30f3\u30b9\u30d1\u30a4\u30a2\u3055\u308c\u305f\u6708\u306e\u6e80\u3061\u6b20\u3051\u3092TUI \u3067\u8868\u793a\u3059\u308b\u30b3\u30de\u30f3\u30c9\u3067\u3059\uff0e\n\n\n\n\nrockydd/ascii_moon: A TUI (Terminal User Interface) application written in Rust that displays the moon phase in ASCII art.\n\n\n\n\n\nASCII Moon \u306fReleases page \u306bLinux/macOS/Windows \u306eamd64 \u7248\u306e\u30d0\u30a4\u30ca\u30ea\u304c\u7f6e\u3044\u3066\u3042\u308a\u307e\u3059\uff0e\nLinux armhf \u3067\u306f\u3069\u3046\u3060\u308d\u3046\u3068\u4eca\u56de\u306fsource \u304b\u3089build \u3057\u307e\u3057\u305f\uff0e\n\n\n\n$ git clone https://github.com/rockydd/ascii_moon.git\n$ cd ascii_moon\n$ cargo build --release\n$ ./target/release/ascii_moon\n$ ./target/release/ascii_moon --help\nA TUI to show the moon phase\n\nUsage: ascii_moon [OPTIONS]\n\nOptions:\n -d, --date <DATE> Date in YYYY-MM-DD format (defaults to today)\n --lines <LINES> Render the moon to a specific number of lines (non-interactive)\n -h, --help Print help\n -V, --version Print version\n$ ./target/release/ascii_moon --version\nascii_moon 0.2.0\n\n\n\n\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\uff0e\n-d, --date <\u65e5\u4ed8(YYY-MM-DD)> \u3067\u7279\u5b9a\u306e\u65e5\u4ed8\u3067\u8d77\u52d5\uff0e\n--lines <\u884c\u6570> \u306fscript \u3084MOTD \u306a\u3069\u5411\u3051\u3067\u6307\u5b9a\u3057\u305f\u884c\u6570\u3067\u6708\u306eAsciiArt \u3092\u51fa\u529b\u3057\u307e\u3059\uff0e\n-d, --date \u3068 --lines \u306f\u4e00\u7dd2\u306b\u6307\u5b9a\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\n\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u3067\u306f\u30ab\u30fc\u30bd\u30eb\u5de6\u53f3\u30671\u65e5\u5358\u4f4d\u3067\u65e5\u4ed8\u3092\u64cd\u4f5c\u3067\u304d\u307e\u3059\uff0el key \u3067\u5730\u540d\u306e\u30e9\u30d9\u30eb\u306eon/off\uff0cL key \u3067\u30e9\u30d9\u30eb\u306e\u8a00\u8a9e\u5909\u66f4\uff0ci key \u3067\u4e0b\u90e8\u306e\u60c5\u5831\u306eon/off \u304c\u3067\u304d\u307e\u3059\uff0e\n\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u30e2\u30fc\u30c9\u306e\u52d5\u4f5c\u306e\u72b6\u614b\u306f\u4ee5\u4e0b\u306easciinema \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n\n\n\nTUI \u3067\u3082\u3053\u306eAscii Moon, astroterm, tracker \u306a\u3069\u9762\u767d\u3044\u5929\u6587\u30a2\u30d7\u30ea\u304c\u5897\u3048\u3066\u3044\u308b\u611f\u3058\u304c\u3057\u307e\u3059\uff0e\n\n\n\n\nastroterm\u3067\u7aef\u672b\u4e0a\u3067\u661f\u56f3\u3092\u697d\u3057\u3080 \u2013 matoken’s blog\n\n\nterminal\u885b\u661f\u8ffd\u8de1\u30a2\u30d7\u30ea\u306etracker \u2013 matoken’s blog\n\n\n\n\n\u74b0\u5883\n\n$ ./target/release/ascii_moon --version\nascii_moon 0.2.0\n$ cargo version\nwarning: `/home/matoken/.cargo/config` is deprecated in favor of `config.toml`\n |\n = help: if you need to support cargo 1.38 or earlier, you can symlink `config` to `config.toml`\ncargo 1.92.0 (344c4567c 2025-10-21)\n$ cargo build --release\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Raspbian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\narmv7l\n$ cat /sys/firmware/devicetree/base/model\nRaspberry Pi 3 Model B Rev 1.2\n\n\n \nPost by @matoken\nView on Mastodon", "date_published": "2025-12-12T20:07:15+09:00", "date_modified": "2025-12-12T20:07:17+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "moon", "RaspberryPi", "TUI", "bookworm", "Linux", "Raspberry Pi OS" ] }, { "id": "https://matoken.org/blog/?p=4909", "url": "https://matoken.org/blog/2025/12/11/latest-snac-using-debian-backports/", "title": "Debian 13 trixie\u3067backports\u3092\u4f7f\u3044\u6700\u65b0\u306esnac\u3092\u5229\u7528", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306fDebian trixie backports \u306esnac \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u3046\u3088\u3046\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n

\n

\n
\n
\n

Debian \u3067\u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3

\n
\n
\n

snac2 \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u3057\u304b\u3057\uff0cstable \u306eDebian 13 trixie \u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f 2.75-2 \u3067\u5c11\u3057\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\uff0e
\nstable-backports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u73fe\u5728\u306e\u4e0a\u6d41\u306e\u6700\u65b0\u3068\u540c\u3058 2.85 \u306a\u306e\u3067\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ rmadison snac2| grep -v debug\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2      | 2.75-2         | stable                    | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.84-3~bpo13+1 | stable-backports          | source, riscv64\nsnac2      | 2.85-1~bpo13+1 | stable-backports          | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2      | 2.85-1         | testing                   | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.85-1         | unstable                  | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
\n
\n
\n\n
\n
\n
\n

Debian 13 trixie \u306b backports \u3092\u8a2d\u5b9a

\n
\n
\n

Debian backports \u306fDebian stable \u3067\u4e00\u90e8\u306etesting \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u8abf\u6574\u3055\u308c\u305f\u3082\u306e\u3067\u5bfe\u5fdc\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3042\u308c\u3070stable \u3088\u308a\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n\n
\n

\u3053\u308c\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306fbackports \u60c5\u5831\u3092 sources.list \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u3053\u3053\u3067\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u540c\u3058 /etc/apt/sources.list.d/debian-backports.sources \u3068\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
/etc/apt/sources.list.d/debian-backports.sources \u3092\u4f5c\u6210
\n
\n
Types: deb deb-src\nURIs: http://deb.debian.org/debian\nSuites: trixie-backports\nComponents: main\nEnabled: yes\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg
\n
\n
\n
\n

\u7d9a\u3044\u3066\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u3092backports \u3092\u542b\u3080\u6700\u65b0\u72b6\u614b\u306b\u3057\u307e\u3059\uff0e

\n
\n
\n
\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u66f4\u65b0
\n
\n
$ sudo apt update
\n
\n
\n
\n

backports \u306e snac \u3092\u5c0e\u5165

\n
\n

backpots \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5c0e\u5165\u3055\u308c\u307e\u305b\u3093\uff0ebackports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3059\u308b\u306b\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306b /trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo apt install snac2/trixie-backports
\n
\n
\n
\n

\u3082\u3057\u304f\u306f -t trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3059\u308b\u3068\u4e0d\u8db3\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5c0e\u5165\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ sudo apt install -t trixie-backports snac2
\n
\n
\n
\n
\n
$ dpkg-query -W snac2\nsnac2   2.85-1~bpo13+1\n$ snac version\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n\nupgrade {basedir}                    Upgrade to a new version
\n
\n
\n
\n

\u5c0e\u5165\u3055\u308c\u305fbackports \u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u3068\u540c\u3058\u512a\u5148\u5ea6100\u306b\u56fa\u5b9a\u3055\u308c\u308b\u306e\u3067\u5c0e\u5165\u5f8c\u306f\u3044\u3064\u3082\u306e apt upgrade \u3067backports \u30d1\u30c3\u30b1\u30fc\u30b8\u3082\u66f4\u65b0\u3055\u308c\u307e\u3059\uff0e\u3064\u307e\u308a\u901a\u5e38\u306e\u904b\u7528\u3067\u5927\u4e08\u592b\u3067\u3059\uff0e

\n
\n
\n
\n
\n
\n

snac \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u64cd\u4f5c

\n
\n
\n

snac \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u6642\u306b\u30c7\u30a3\u30b9\u30af\u69cb\u6210\u304c\u5909\u308f\u308b\u3053\u3068\u304c\u3042\u308a\uff0c\u305d\u306e\u5834\u5408snac \u304c\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\u305d\u306e\u5834\u5408snac \u306e upgrade \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u81ea\u5206\u306f\u5ff5\u306e\u70ba\u6bce\u56de\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
snac(8)\u3088\u308a
\n
\n
\n
\n
Upgrading to a new version\n    Sometimes, the data storage disk layout changes between versions. If there is such a change, snac will refuse to run and require an upgrade. Do this by running
\n
\n
\n
\n
\n
snac upgrade $HOME/snac-data
\n
\n
\n
\n
\n
Take special care to execute this upgrade operation without any snac processes serving on the same folder. You can break everything. I know this because Tyler knows this.
\n
\n
\n
\n
\n
\n
\n
$ snac | grep upgrade\nupgrade {basedir}                    Upgrade to a new version
\n
\n
\n
\n

upgrade \u30b3\u30de\u30f3\u30c9\u306f\u30c7\u30fc\u30e2\u30f3\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u4e00\u65e6snac \u3092\u505c\u6b62\u3057\u3066\u304b\u3089\u5b9f\u884c\uff0c\u305d\u306e\u5f8csnac \u3092\u8d77\u52d5\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo service snac2 stop (1)\n$ sudo -u debian-snac snac upgrade /var/lib/snac2/ (2)\n19:45:50 Linux sandbox not compiled in\n19:45:50 OK\n$ sudo service snac2 start (3)\n$ w3m -dump https://snac.kagolug.org/info | tail -1 (4)\nabout this site - powered by snac/2.83
\n
\n
\n
\n
    \n
  1. \n

    snac \u505c\u6b62

    \n
  2. \n
  3. \n

    snac upgrade

    \n
  4. \n
  5. \n

    snac \u8d77\u52d5

    \n
  6. \n
  7. \n

    \u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d

    \n
  8. \n
\n
\n
\n

\u3068\u3044\u3046\u611f\u3058\u3067Debian stable \u3067\u3082\u6700\u65b0\u306esnac \u304c\u5229\u7528\u3067\u304d\u3066\u3044\u307e\u3059\uff0e\u4e00\u65e6\u8a2d\u5b9a\u3059\u308b\u3068\u901a\u5e38\u306eDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u66f4\u65b0\u64cd\u4f5c\u3067\u8ffd\u5f93\u3057\u3066\u304f\u308c\u308b\u306e\u3067\u904b\u7528\u3082\u3044\u3064\u3082\u3068\u5909\u308f\u308a\u307e\u305b\u3093\uff0e\u66f4\u65b0\u30bf\u30a4\u30df\u30f3\u30b0\u3082\u516c\u5f0f\u3068\u898b\u6bd4\u3079\u308b\u3068\u7d50\u69cb\u3059\u3050\u5bfe\u5fdc\u3057\u3066\u304f\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306fDebian trixie backports \u306esnac \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u3046\u3088\u3046\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\n\nDebian \u3067\u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\n\n\nsnac2 \u306fDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u3057\u304b\u3057\uff0cstable \u306eDebian 13 trixie \u306esnac2 \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f 2.75-2 \u3067\u5c11\u3057\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u3059\uff0e\nstable-backports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u73fe\u5728\u306e\u4e0a\u6d41\u306e\u6700\u65b0\u3068\u540c\u3058 2.85 \u306a\u306e\u3067\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ rmadison snac2| grep -v debug\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2 | 2.75-2 | stable | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.84-3~bpo13+1 | stable-backports | source, riscv64\nsnac2 | 2.85-1~bpo13+1 | stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, s390x\nsnac2 | 2.85-1 | testing | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.85-1 | unstable | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\n\n\n\n\n\nDebian — \u30d1\u30c3\u30b1\u30fc\u30b8\u691c\u7d22\u7d50\u679c — snac2\n\n\n\n\n\n\nDebian 13 trixie \u306b backports \u3092\u8a2d\u5b9a\n\n\nDebian backports \u306fDebian stable \u3067\u4e00\u90e8\u306etesting \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u8abf\u6574\u3055\u308c\u305f\u3082\u306e\u3067\u5bfe\u5fdc\u3057\u305f\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3042\u308c\u3070stable \u3088\u308a\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\nDebian Backports\n\n\nInstructions\n\n\n\n\n\u3053\u308c\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306b\u306fbackports \u60c5\u5831\u3092 sources.list \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e\n\u3053\u3053\u3067\u306f\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u540c\u3058 /etc/apt/sources.list.d/debian-backports.sources \u3068\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f\uff0e\n\n\n/etc/apt/sources.list.d/debian-backports.sources \u3092\u4f5c\u6210\n\nTypes: deb deb-src\nURIs: http://deb.debian.org/debian\nSuites: trixie-backports\nComponents: main\nEnabled: yes\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg\n\n\n\n\u7d9a\u3044\u3066\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u3092backports \u3092\u542b\u3080\u6700\u65b0\u72b6\u614b\u306b\u3057\u307e\u3059\uff0e\n\n\n\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u66f4\u65b0\n\n$ sudo apt update\n\n\n\nbackports \u306e snac \u3092\u5c0e\u5165\n\nbackpots \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3067\u306f\u5c0e\u5165\u3055\u308c\u307e\u305b\u3093\uff0ebackports \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u5c0e\u5165\u3059\u308b\u306b\u306f\u30d1\u30c3\u30b1\u30fc\u30b8\u540d\u306b /trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo apt install snac2/trixie-backports\n\n\n\n\u3082\u3057\u304f\u306f -t trixie-backports \u3092\u4ed8\u3051\u3066\u5c0e\u5165\u3059\u308b\u3068\u4e0d\u8db3\u3057\u305f\u4f9d\u5b58\u95a2\u4fc2\u3082\u5c0e\u5165\u3055\u308c\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ sudo apt install -t trixie-backports snac2\n\n\n\n\n$ dpkg-query -W snac2\nsnac2 2.85-1~bpo13+1\n$ snac version\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n\nupgrade {basedir} Upgrade to a new version\n\n\n\n\u5c0e\u5165\u3055\u308c\u305fbackports \u30d1\u30c3\u30b1\u30fc\u30b8\u306f\u901a\u5e38\u3068\u540c\u3058\u512a\u5148\u5ea6100\u306b\u56fa\u5b9a\u3055\u308c\u308b\u306e\u3067\u5c0e\u5165\u5f8c\u306f\u3044\u3064\u3082\u306e apt upgrade \u3067backports \u30d1\u30c3\u30b1\u30fc\u30b8\u3082\u66f4\u65b0\u3055\u308c\u307e\u3059\uff0e\u3064\u307e\u308a\u901a\u5e38\u306e\u904b\u7528\u3067\u5927\u4e08\u592b\u3067\u3059\uff0e\n\n\n\n\n\nsnac \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u64cd\u4f5c\n\n\nsnac \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u6642\u306b\u30c7\u30a3\u30b9\u30af\u69cb\u6210\u304c\u5909\u308f\u308b\u3053\u3068\u304c\u3042\u308a\uff0c\u305d\u306e\u5834\u5408snac \u304c\u8d77\u52d5\u3057\u306a\u3044\u3088\u3046\u3067\u3059\uff0e\u305d\u306e\u5834\u5408snac \u306e upgrade \u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\n\u81ea\u5206\u306f\u5ff5\u306e\u70ba\u6bce\u56de\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\nsnac(8)\u3088\u308a\n\n\n\nUpgrading to a new version\n Sometimes, the data storage disk layout changes between versions. If there is such a change, snac will refuse to run and require an upgrade. Do this by running\n\n\n\n\nsnac upgrade $HOME/snac-data\n\n\n\n\nTake special care to execute this upgrade operation without any snac processes serving on the same folder. You can break everything. I know this because Tyler knows this.\n\n\n\n\n\n\n$ snac | grep upgrade\nupgrade {basedir} Upgrade to a new version\n\n\n\nupgrade \u30b3\u30de\u30f3\u30c9\u306f\u30c7\u30fc\u30e2\u30f3\u304c\u8d77\u52d5\u3057\u3066\u3044\u306a\u3044\u72b6\u614b\u3067\u5b9f\u884c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u4e00\u65e6snac \u3092\u505c\u6b62\u3057\u3066\u304b\u3089\u5b9f\u884c\uff0c\u305d\u306e\u5f8csnac \u3092\u8d77\u52d5\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo service snac2 stop (1)\n$ sudo -u debian-snac snac upgrade /var/lib/snac2/ (2)\n19:45:50 Linux sandbox not compiled in\n19:45:50 OK\n$ sudo service snac2 start (3)\n$ w3m -dump https://snac.kagolug.org/info | tail -1 (4)\nabout this site - powered by snac/2.83\n\n\n\n\n\nsnac \u505c\u6b62\n\n\nsnac upgrade\n\n\nsnac \u8d77\u52d5\n\n\n\u30d0\u30fc\u30b8\u30e7\u30f3\u78ba\u8a8d\n\n\n\n\n\u3068\u3044\u3046\u611f\u3058\u3067Debian stable \u3067\u3082\u6700\u65b0\u306esnac \u304c\u5229\u7528\u3067\u304d\u3066\u3044\u307e\u3059\uff0e\u4e00\u65e6\u8a2d\u5b9a\u3059\u308b\u3068\u901a\u5e38\u306eDebian \u30d1\u30c3\u30b1\u30fc\u30b8\u66f4\u65b0\u64cd\u4f5c\u3067\u8ffd\u5f93\u3057\u3066\u304f\u308c\u308b\u306e\u3067\u904b\u7528\u3082\u3044\u3064\u3082\u3068\u5909\u308f\u308a\u307e\u305b\u3093\uff0e\u66f4\u65b0\u30bf\u30a4\u30df\u30f3\u30b0\u3082\u516c\u5f0f\u3068\u898b\u6bd4\u3079\u308b\u3068\u7d50\u69cb\u3059\u3050\u5bfe\u5fdc\u3057\u3066\u304f\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\u30bf\u30b0 – grunfink/snac2 – Codeberg.org\n\n\nDebian Package Tracker", "date_published": "2025-12-11T18:35:57+09:00", "date_modified": "2025-12-11T18:35:58+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Debian", "snac", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4889", "url": "https://matoken.org/blog/2025/12/10/snac-emoji/", "title": "snac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528", "content_html": "
\n

\"snac

\n
\n
\n

\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e
\n\u4eca\u65e5\u306f\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\uff0e

\n
\n

\n
\n

ActivityPub \u5404\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308b\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff0emisskey.io \u306a\u3093\u304b\u3067\u306f\u7279\u306b\u591a\u7528\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e
\nsnac \u3082\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u65e2\u5b9a\u5024\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u3066\u4f8b\u3048\u3070toot \u672c\u6587\u4e2d\u306b :-) \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🙂\u300d\u304c\uff0c :beer: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🍺\u300d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u4ed6\u306b :shrug2: \u3067\u300c¯\\_(ツ)_/¯\u300d\u306a\u3093\u3067\u3082\u306e\u3082\uff0e\u3067\u3082\u3053\u306e\u3042\u305f\u308a\u306eUnicode\u7d75\u6587\u5b57\u306a\u3069\u306f\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u304c\u3042\u308b\u3068\u3042\u307e\u308a\u6709\u308a\u96e3\u307f\u306f\u611f\u3058\u306a\u305d\u3046\u3067\u3059\uff0e\u3067\u3082\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

\u81ea\u5206\u3067\u7528\u610f\u3057\u305f\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n

\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306fsnac \u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b emojis.json \u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n

emojis.json \u306e\u65e2\u5b9a\u5024\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e
\ntoot \u672c\u6587\u4e2d\u306b\u8a18\u8ff0\u3059\u308bkey \u3068\uff0c\u5b9f\u969b\u306b\u8a55\u3055\u308c\u308b\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\uff0ekey \u306f\u4fdd\u7ba1\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b : \u3067\u56f2\u3080\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u5024\u306f\u4ee5\u4e0b\u3067\u306f\u6570\u5024\u6587\u5b57\u53c2\u7167\u53ca\u3073\u6587\u5b57\u5217\u3067\u3059\u304c\uff0cURL \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e

\n
\n
\n
\n
{\n    \":-)\": \"&#128578;\",\n    \":-D\": \"&#128512;\",\n    \"X-D\": \"&#128518;\",\n    \";-)\": \"&#128521;\",\n    \"B-)\": \"&#128526;\",\n    \">:-(\": \"&#128545;\",\n    \":-(\": \"&#128542;\",\n    \":-*\": \"&#128536;\",\n    \":-/\": \"&#128533;\",\n    \"8-o\": \"&#128562;\",\n    \"%-)\": \"&#129322;\",\n    \":_(\": \"&#128546;\",\n    \":-|\": \"&#128528;\",\n    \"<3\": \"&#10084;&#65039;\",\n    \":facepalm:\": \"&#129318;\",\n    \":shrug:\": \"&#129335;\",\n    \":shrug2:\": \"&#175;\\\\_(&#12484;)_/&#175;\",\n    \":eyeroll:\": \"&#128580;\",\n    \":beer:\": \"&#127866;\",\n    \":beers:\": \"&#127867;\",\n    \":munch:\": \"&#128561;\",\n    \":thumb:\": \"&#128077;\"\n}
\n
\n
\n
\n

\u3053\u3053\u306bsnac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0esnac \u306e\u30d9\u30fc\u30b9url \u306e\u4e0b\u306e /susie.png (kagolug \u3067\u306f https://snac.kagolug.org/susie.png )\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068snac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u306esusie \u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

emojis.json \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\uff0e

\n
\n
\n
\n
     \":beer:\": \"&#127866;\",\n     \":beers:\": \"&#127867;\",\n     \":munch:\": \"&#128561;\",\n-    \":thumb:\": \"&#128077;\"\n+    \":thumb:\": \"&#128077;\",\n+    \":susie:\": \"https://snac.kagolug.org/susie.png\"\n }
\n
\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

emojis.json \u306f\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u5185\u5bb9\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\u4e2d\u9014\u534a\u7aef\u306a\u72b6\u614b\u3067\u4fdd\u5b58\u3059\u308b\u3068\u5168\u3066\u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u305f\u308a\u3059\u308b\u306e\u3067\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\uff0e

\n
\n
\n
\n
\n

\u3053\u308c\u3067 :susie: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067 \"snac \u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n

\u66f4\u306b\u30da\u30f3\u30ae\u30f3\u306eTux \u3068\u30bf\u30b9\u30de\u30cb\u30a2\u30c7\u30d3\u30eb\u306eTuz \u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0e
\n\u30a2\u30a4\u30b3\u30f3\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u9759\u7684\u74b0\u5883\u306b\u8a2d\u7f6e\uff0c\u305d\u306eurl \u3092emojis.json \u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u307e\u3059\uff0e
\n\u4eca\u56de\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
     \":beer:\": \"&#127866;\",\n     \":beers:\": \"&#127867;\",\n     \":munch:\": \"&#128561;\",\n-    \":thumb:\": \"&#128077;\"\n+    \":thumb:\": \"&#128077;\",\n+    \":susie:\": \"https://snac.kagolug.org/susie.png\",\n+    \":tux:\": \"https://www.kagolug.org/snac-emoji/Tux.png\",\n+    \":tuz:\": \"https://www.kagolug.org/snac-emoji/Tuz.png\"\n }
\n
\n
\n
\n

\u3053\u308c\u3067 :susie:, :tux:, :tuz: \u306e3\u3064\u306e\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\ntoot \u3057\u3066\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
\n\u3082\u3057\u304f\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b5\u30a4\u30c8\u3067Mastodon \u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57API\u7d4c\u7531\u3067\u7d75\u6587\u5b57\u4e00\u89a7\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\"snac]

\n
\n
\n

snac \u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fsnac(8) \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e

\n
\n
\n
\n
\n
\n
Custom Emojis\n    From version 2.51, support for customized Emojis in posts is available (previously, they were hardcoded). Emojis are read from the emojis.json file in the instance base directory, as a JSON object of key / value pairs (if this file\n    does not exist, it will be created with the predefined set). Each key in the object contains the text to be found (e.g., the :-) for a smiling face), and its associated value, the text string that will replace it (in  this  example\n    case, the HTML entity for the Unicode codepoint for the smiley or the Emoji itself as text).
\n
\n
\n
\n
\n
Emoji values can also be URLs to image files; in this case, they will not be substituted in the post content, but added to the 'tag' array as an ActivityPub standard 'Emoji' object (it's recommendable that the Emoji key be enclosed\nin colons for maximum compatibility with other ActivityPub implementations, like e.g. :happydoggo:). These images can be served from an external source or from the static directory of the instance admin.
\n
\n
\n
\n
\n
If you want to disable any Emoji substitution, change the file to contain just an empty JSON object ({}).
\n
\n
\n
\n
\n", "content_text": "\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8efd\u91cfActivityPub Server \u306esnac \u306b\u3064\u3044\u3066\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f \u2013 matoken’s blog\n\n\n\n\n\u3053\u3053\u306b\u66f8\u304b\u306a\u304b\u3063\u305fsnac \u306e\u3053\u3068\u3092\u3044\u304f\u3064\u304b\u66f8\u3044\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\u4eca\u65e5\u306f\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\uff0e\n\n\n\nActivityPub \u5404\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u3088\u304f\u4f7f\u308f\u308c\u3066\u3044\u308b\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u308a\u307e\u3059\uff0emisskey.io \u306a\u3093\u304b\u3067\u306f\u7279\u306b\u591a\u7528\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\nsnac \u3082\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\u65e2\u5b9a\u5024\u3067\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u3066\u4f8b\u3048\u3070toot \u672c\u6587\u4e2d\u306b :-) \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🙂\u300d\u304c\uff0c :beer: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067\u300c🍺\u300d\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u4ed6\u306b :shrug2: \u3067\u300c¯\\_(ツ)_/¯\u300d\u306a\u3093\u3067\u3082\u306e\u3082\uff0e\u3067\u3082\u3053\u306e\u3042\u305f\u308a\u306eUnicode\u7d75\u6587\u5b57\u306a\u3069\u306f\u65e5\u672c\u8a9e\u5165\u529b\u74b0\u5883\u304c\u3042\u308b\u3068\u3042\u307e\u308a\u6709\u308a\u96e3\u307f\u306f\u611f\u3058\u306a\u305d\u3046\u3067\u3059\uff0e\u3067\u3082\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\u81ea\u5206\u3067\u7528\u610f\u3057\u305f\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e\n\n\n\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u8ffd\u52a0\u3059\u308b\u306b\u306fsnac \u306e\u30c7\u30fc\u30bf\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u3042\u308b emojis.json \u3092\u7de8\u96c6\u3059\u308b\u3053\u3068\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\uff0e\n\n\nemojis.json \u306e\u65e2\u5b9a\u5024\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e\ntoot \u672c\u6587\u4e2d\u306b\u8a18\u8ff0\u3059\u308bkey \u3068\uff0c\u5b9f\u969b\u306b\u8a55\u3055\u308c\u308b\u5024\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u3059\uff0ekey \u306f\u4fdd\u7ba1\u6027\u3092\u4fdd\u3064\u305f\u3081\u306b : \u3067\u56f2\u3080\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u5024\u306f\u4ee5\u4e0b\u3067\u306f\u6570\u5024\u6587\u5b57\u53c2\u7167\u53ca\u3073\u6587\u5b57\u5217\u3067\u3059\u304c\uff0cURL \u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e\n\n\n\n{\n \":-)\": \"&#128578;\",\n \":-D\": \"&#128512;\",\n \"X-D\": \"&#128518;\",\n \";-)\": \"&#128521;\",\n \"B-)\": \"&#128526;\",\n \">:-(\": \"&#128545;\",\n \":-(\": \"&#128542;\",\n \":-*\": \"&#128536;\",\n \":-/\": \"&#128533;\",\n \"8-o\": \"&#128562;\",\n \"%-)\": \"&#129322;\",\n \":_(\": \"&#128546;\",\n \":-|\": \"&#128528;\",\n \"<3\": \"&#10084;&#65039;\",\n \":facepalm:\": \"&#129318;\",\n \":shrug:\": \"&#129335;\",\n \":shrug2:\": \"&#175;\\\\_(&#12484;)_/&#175;\",\n \":eyeroll:\": \"&#128580;\",\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n \":thumb:\": \"&#128077;\"\n}\n\n\n\n\u3053\u3053\u306bsnac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0esnac \u306e\u30d9\u30fc\u30b9url \u306e\u4e0b\u306e /susie.png (kagolug \u3067\u306f https://snac.kagolug.org/susie.png )\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068snac \u30c7\u30d5\u30a9\u30eb\u30c8\u30a2\u30a4\u30b3\u30f3\u306esusie \u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\u3053\u308c\u3092\u5229\u7528\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\nemojis.json \u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u307e\u3059\uff0e\n\n\n\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n- \":thumb:\": \"&#128077;\"\n+ \":thumb:\": \"&#128077;\",\n+ \":susie:\": \"https://snac.kagolug.org/susie.png\"\n }\n\n\n\n\n\n\nTip\n\n\n\nemojis.json \u306f\u4fdd\u5b58\u3057\u305f\u6642\u70b9\u3067\u5185\u5bb9\u304c\u53cd\u6620\u3055\u308c\u307e\u3059\uff0e\u4e2d\u9014\u534a\u7aef\u306a\u72b6\u614b\u3067\u4fdd\u5b58\u3059\u308b\u3068\u5168\u3066\u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u306a\u304f\u306a\u3063\u305f\u308a\u3059\u308b\u306e\u3067\u6ce8\u610f\u3057\u307e\u3057\u3087\u3046\uff0e\n\n\n\n\n\n\n\u3053\u308c\u3067 :susie: \u3068\u5165\u529b\u3059\u308b\u3053\u3068\u3067 \u304c\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\u66f4\u306b\u30da\u30f3\u30ae\u30f3\u306eTux \u3068\u30bf\u30b9\u30de\u30cb\u30a2\u30c7\u30d3\u30eb\u306eTuz \u3092\u8ffd\u52a0\u3057\u3066\u307f\u307e\u3059\uff0e\n\u30a2\u30a4\u30b3\u30f3\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\uff0c\u9759\u7684\u74b0\u5883\u306b\u8a2d\u7f6e\uff0c\u305d\u306eurl \u3092emojis.json \u30d5\u30a1\u30a4\u30eb\u306b\u8a18\u8ff0\u3057\u307e\u3059\uff0e\n\u4eca\u56de\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n \":beer:\": \"&#127866;\",\n \":beers:\": \"&#127867;\",\n \":munch:\": \"&#128561;\",\n- \":thumb:\": \"&#128077;\"\n+ \":thumb:\": \"&#128077;\",\n+ \":susie:\": \"https://snac.kagolug.org/susie.png\",\n+ \":tux:\": \"https://www.kagolug.org/snac-emoji/Tux.png\",\n+ \":tuz:\": \"https://www.kagolug.org/snac-emoji/Tuz.png\"\n }\n\n\n\n\u3053\u308c\u3067 :susie:, :tux:, :tuz: \u306e3\u3064\u306e\u7d75\u6587\u5b57\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\ntoot \u3057\u3066\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n\u3082\u3057\u304f\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b5\u30a4\u30c8\u3067Mastodon \u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57API\u7d4c\u7531\u3067\u7d75\u6587\u5b57\u4e00\u89a7\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3082\u51fa\u6765\u307e\u3059\uff0e\n\n\n\n\nMastodon instance custom emoji listz\n\n\n\n\n]\n\n\nsnac \u306e\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306b\u3064\u3044\u3066\u306e\u8a73\u7d30\u306fsnac(8) \u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e\n\n\n\n\n\nCustom Emojis\n From version 2.51, support for customized Emojis in posts is available (previously, they were hardcoded). Emojis are read from the emojis.json file in the instance base directory, as a JSON object of key / value pairs (if this file\n does not exist, it will be created with the predefined set). Each key in the object contains the text to be found (e.g., the :-) for a smiling face), and its associated value, the text string that will replace it (in this example\n case, the HTML entity for the Unicode codepoint for the smiley or the Emoji itself as text).\n\n\n\n\nEmoji values can also be URLs to image files; in this case, they will not be substituted in the post content, but added to the 'tag' array as an ActivityPub standard 'Emoji' object (it's recommendable that the Emoji key be enclosed\nin colons for maximum compatibility with other ActivityPub implementations, like e.g. :happydoggo:). These images can be served from an external source or from the static directory of the instance admin.\n\n\n\n\nIf you want to disable any Emoji substitution, change the file to contain just an empty JSON object ({}).", "date_published": "2025-12-10T19:09:41+09:00", "date_modified": "2025-12-10T19:09:43+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "emoji", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=4863", "url": "https://matoken.org/blog/2025/12/09/sakura-knowledge/", "title": "\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f", "content_html": "
\n

\"5

\n
\n
\n

\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n

\n
\n

\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group\u306eVPS\u3092\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3055\u3093\u306b\u30b3\u30df\u30cb\u30e5\u30c6\u30a3\u652f\u63f4\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3044\u307e\u3059\uff0e\u3053\u306e\u7e01\u3067\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\n\u4eca\u56de\u306e\u5185\u5bb9\u306f\u8efd\u91cf\u306aActivityPub Server \u306esnac \u3092\u8a2d\u5b9a\u3057\u305f\u3068\u304d\u306e\u8a18\u9332\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\uff0e
\n\u5143\u306f\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10 \u3067\u767a\u8868\u3057\u305f\u3082\u306e\u3092\u5143\u306b\u3057\u305f\u3082\u306e\u3067\u3059\uff0e

\n
\n
\n

\u8208\u5473\u304c\u3042\u308c\u3070\u8aad\u3093\u3067\u3082\u3089\u3048\u308b\u3068\u5b09\u3057\u3044\u3067\u3059\uff0e

\n
\n
\n\n
\n", "content_text": "\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u306e\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306bsnac\u306e\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u3055\u304f\u3089\u306eVPS\u3067\u8a66\u3059\u3001\u8efd\u91cfActivityPub\u5b9f\u88c5\u300csnac\u300d\u306b\u3088\u308b\u30bb\u30eb\u30d5\u30db\u30b9\u30c8SNS\u69cb\u7bc9 | \u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\n\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group\u306eVPS\u3092\u3055\u304f\u3089\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u3055\u3093\u306b\u30b3\u30df\u30cb\u30e5\u30c6\u30a3\u652f\u63f4\u3068\u3057\u3066\u63d0\u4f9b\u3057\u3066\u3044\u305f\u3060\u3044\u3066\u3044\u307e\u3059\uff0e\u3053\u306e\u7e01\u3067\u3055\u304f\u3089\u306e\u30ca\u30ec\u30c3\u30b8\u306b\u8a18\u4e8b\u3092\u5bc4\u7a3f\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\u4eca\u56de\u306e\u5185\u5bb9\u306f\u8efd\u91cf\u306aActivityPub Server \u306esnac \u3092\u8a2d\u5b9a\u3057\u305f\u3068\u304d\u306e\u8a18\u9332\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\uff0e\n\u5143\u306f\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10 \u3067\u767a\u8868\u3057\u305f\u3082\u306e\u3092\u5143\u306b\u3057\u305f\u3082\u306e\u3067\u3059\uff0e\n\n\n\u8208\u5473\u304c\u3042\u308c\u3070\u8aad\u3093\u3067\u3082\u3089\u3048\u308b\u3068\u5b09\u3057\u3044\u3067\u3059\uff0e\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050(Linux User’s Group)\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.10(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac) – connpass\n\n\n\n\u30a2\u30ca\u30a6\u30f3\u30b9\u5411\u3051\u306b\u30df\u30cb\u30de\u30ea\u30b9\u30c8\u5411\u3051 ActivityPub Server \u306e snac \u3092\u5229\u7528\n\n\n\n\n\ninfo (@info@snac.kagolug.org)", "date_published": "2025-12-09T19:49:03+09:00", "date_modified": "2025-12-09T19:49:05+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "blog", "sakura internet", "snac", "\u52c9\u5f37\u4f1a" ] }, { "id": "https://matoken.org/blog/?p=4854", "url": "https://matoken.org/blog/2025/12/08/kagolug-2025-11/", "title": "\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.11\u306b\u53c2\u52a0", "content_html": "

\n
\n

\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group \u3067\u6708\u5730\u3092\u76ee\u6a19\u306b\uff0e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u300d\u3068\u3044\u3046\u52c9\u5f37\u4f1a\u3092\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u6700\u8fd1\u306f\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3057\u305f\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306a\u3069\u3092\u5229\u7528\u3057\u3066BoF\u3084\u30a2\u30f3\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u306e\u3088\u3046\u306a\u5f62\u5f0f\u3067\u30cd\u30bf\u306e\u3042\u308b\u4eba\u304c\u767a\u8868\uff0c\u305d\u308c\u306b\u30c4\u30c3\u30b3\u30df\u3092\u5165\u308c\u3066\u3044\u304f\u3088\u3046\u306a\u611f\u3058\u3067\u3059\uff0e

\n
\n

\n
\n

11\u6708\u306e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.11\u300d\u3067\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a71\u984c\u3067\u76db\u308a\u4e0a\u304c\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

\u81ea\u5206\u306f\u300cActivityPub Server \u306e snac \u305d\u306e2\u300d\u3068\u3057\u306610\u6708\u306b\u767a\u8868\u3057\u305fActivityPub Server \u306esnac \u306e\u7d9a\u304d\u306e\u8a71\u3092\u3057\u307e\u3057\u305f\uff0e
\n\u3053\u306e\u3068\u304d\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089

\n
\n
\n\n
\n
\n

\u7b2c\u4e00\u5f3e\u306e\u5148\u6708\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089\uff0e

\n
\n
\n\n
\n
\n

\u6700\u8fd1\u81ea\u5b85\u3067\u570f\u5185\u306b\u306a\u308bSoftBank\u56de\u7dda\u306e\u57fa\u5730\u5c40\u306e\u6a5f\u6750\u304c\u5909\u308f\u3063\u305f\u306e\u304b\u8a2d\u5b9a\u304c\u5909\u308f\u3063\u305f\u304b\u3067\u4e0a\u308a\u4e0b\u308a\u306e\u901f\u5ea6\u304c\u975e\u5bfe\u79f0\u306b\u306a\u308a\u4e0b\u308a\u306f\u65e9\u304f\u306a\u308a\u307e\u3057\u305f\u304c\uff0c\u4e0a\u308a\u304c\u3068\u3066\u3082\u7d30\u304f\u306a\u308a\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u63a5\u7d9a\u3057\u3066\u3082\u3059\u3050\u5207\u308c\u3066\u3057\u307e\u3046\u72b6\u614b\u306b\uff0e\u3068\u3044\u3046\u3053\u3068\u3067\u5c11\u3057\u6a19\u9ad8\u304c\u9ad8\u304fdocomo/au \u306e\u96fb\u6ce2\u304c\u5165\u308b\u88cf\u5c71\u304b\u3089\u53c2\u52a0\u3057\u307e\u3057\u305f\uff0e\u307e\u3060\u591a\u5c11\u868a\u304c\u51fa\u308b\u306e\u3067\u868a\u5e33\u3092\u88ab\u3063\u3066\u30dd\u30fc\u30bf\u30d6\u30eb\u30d0\u30c3\u30c6\u30ea\u30fc\u304b\u3089\u7d66\u96fb\u3057\u3064\u3064\u306e\u53c2\u52a0\uff0e
\n\u96e8\u3084\u3053\u308c\u304b\u3089\u5bd2\u304f\u306a\u308b\u3053\u3068\u3092\u8003\u3048\u308b\u3068\u3069\u3046\u306b\u304b\u3057\u305f\u3044\u3068\u3053\u308d\u2026\u2026\uff0e

\n
\n
\n

\"kagolug2025.11

\n
\n
\n

\u30a4\u30d9\u30f3\u30c8\u306f18:00\u8fc4\u3067\u3059\u304c\uff0c\u305d\u306e\u5f8c\u306f\u61c7\u89aa\u4f1a\u3068\u3044\u3046\u304b\u96d1\u8ac7\u30bf\u30a4\u30e0\u3067\u3059\uff0e\u4eca\u56de\u306f\u4e00\u65e6\u6642\u9593\u3092\u958b\u3051\u306619:00\u3088\u308a\u958b\u59cb\uff0c\u6700\u7d42\u7684\u306b\u306f24:00\u3092\u904e\u304e\u3066\u3044\u307e\u3057\u305f\u2026\u2026\uff0e
\n\u81ea\u5206\u306f\u81ea\u52d5\u8eca\u3067\u9053\u306e\u99c5\u307e\u3067\u884c\u3063\u3066\u81ea\u52d5\u8eca\u5185\u304b\u3089\u53c2\u52a0\u3057\u307e\u3057\u305f\uff0e\u81ea\u52d5\u8eca\u306e\u6905\u5b50\u306f\u8170\u306b\u60aa\u3044\u611f\u3058\u304c\u3057\u307e\u3059\u306d\uff0e
\n\u81ea\u52d5\u8eca\u306e\u30cf\u30f3\u30c9\u30eb\u306b\u5f15\u3063\u639b\u3051\u308b\u30c6\u30fc\u30d6\u30eb\u3092100\u5186\u30b7\u30e7\u30c3\u30d7\u3067\u5165\u624b\u3057\u305f\u306e\u3067\u4eca\u56de\u3053\u308c\u3082\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c100\u5186\u3060\u3051\u3042\u3063\u3066\u6253\u9375\u6642\u306b\u63fa\u308c\u3066\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\uff0e\u30af\u30c3\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb\u304c\u3044\u3044\u306e\u3067\u306f\u3068\u6559\u3048\u3066\u3082\u3089\u3063\u305f\u306e\u3067\u6b21\u56de\u307e\u3067\u306b\u8003\u3048\u3066\u304a\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e

\n
\n
\n

\"kagolug2025.11

\n
\n
\n\n
\n
\n

\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u6b21\u56de\u306f12/21(\u65e5)\u306e\u4e88\u5b9a\u3067\u3059\uff0e

\n
\n
\n\n
\n", "content_text": "\u9e7f\u5150\u5cf6\u3089\u3050\u3068\u3044\u3046Linux User Group \u3067\u6708\u5730\u3092\u76ee\u6a19\u306b\uff0e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u300d\u3068\u3044\u3046\u52c9\u5f37\u4f1a\u3092\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n\u9e7f\u5150\u5cf6\u3089\u3050(Linux User’s Group)\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.11(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac) – connpass\n\n\n\n\n\u6700\u8fd1\u306f\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3057\u305f\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306a\u3069\u3092\u5229\u7528\u3057\u3066BoF\u3084\u30a2\u30f3\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u306e\u3088\u3046\u306a\u5f62\u5f0f\u3067\u30cd\u30bf\u306e\u3042\u308b\u4eba\u304c\u767a\u8868\uff0c\u305d\u308c\u306b\u30c4\u30c3\u30b3\u30df\u3092\u5165\u308c\u3066\u3044\u304f\u3088\u3046\u306a\u611f\u3058\u3067\u3059\uff0e\n\n\n\n11\u6708\u306e\u300c\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.11\u300d\u3067\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a71\u984c\u3067\u76db\u308a\u4e0a\u304c\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\u300cActivityPub Server \u306e snac \u305d\u306e2\u300d\n\n\n\u300ckhal + vdirsyncer \u89e6\u308c\u3066\u307f\u305f\u300d\n\n\n\u300c\u521d\u4ee3EchoShow5\u3067Termux\u300d\n\n\n\u300c\u958b\u767a\u7d42\u4e86\u3057\u305f\u30bd\u30d5\u30c8\u30a6\u30a8\u30a2\u3092\u77e5\u308b\u306b\u306f?GitHub Archive\u306a\u3069\u300d\n\n\n\u300copenSUSE Leap 16.0 \u30ea\u30ea\u30fc\u30b9\u30a4\u30d9\u30f3\u30c8\u30ec\u30dd\u30fc\u30c8\u300d\n\n\n\n\n\u81ea\u5206\u306f\u300cActivityPub Server \u306e snac \u305d\u306e2\u300d\u3068\u3057\u306610\u6708\u306b\u767a\u8868\u3057\u305fActivityPub Server \u306esnac \u306e\u7d9a\u304d\u306e\u8a71\u3092\u3057\u307e\u3057\u305f\uff0e\n\u3053\u306e\u3068\u304d\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089\n\n\n\n\nhttps://codeberg.org/matoken/kagolug-2025.11/src/branch/main/slide/slide.adoc\n\n\n\n\n\u7b2c\u4e00\u5f3e\u306e\u5148\u6708\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089\uff0e\n\n\n\n\nhttps://codeberg.org/matoken/kagolug-2025.10/src/branch/main/slide/slide.adoc\n\n\n\n\n\u6700\u8fd1\u81ea\u5b85\u3067\u570f\u5185\u306b\u306a\u308bSoftBank\u56de\u7dda\u306e\u57fa\u5730\u5c40\u306e\u6a5f\u6750\u304c\u5909\u308f\u3063\u305f\u306e\u304b\u8a2d\u5b9a\u304c\u5909\u308f\u3063\u305f\u304b\u3067\u4e0a\u308a\u4e0b\u308a\u306e\u901f\u5ea6\u304c\u975e\u5bfe\u79f0\u306b\u306a\u308a\u4e0b\u308a\u306f\u65e9\u304f\u306a\u308a\u307e\u3057\u305f\u304c\uff0c\u4e0a\u308a\u304c\u3068\u3066\u3082\u7d30\u304f\u306a\u308a\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u63a5\u7d9a\u3057\u3066\u3082\u3059\u3050\u5207\u308c\u3066\u3057\u307e\u3046\u72b6\u614b\u306b\uff0e\u3068\u3044\u3046\u3053\u3068\u3067\u5c11\u3057\u6a19\u9ad8\u304c\u9ad8\u304fdocomo/au \u306e\u96fb\u6ce2\u304c\u5165\u308b\u88cf\u5c71\u304b\u3089\u53c2\u52a0\u3057\u307e\u3057\u305f\uff0e\u307e\u3060\u591a\u5c11\u868a\u304c\u51fa\u308b\u306e\u3067\u868a\u5e33\u3092\u88ab\u3063\u3066\u30dd\u30fc\u30bf\u30d6\u30eb\u30d0\u30c3\u30c6\u30ea\u30fc\u304b\u3089\u7d66\u96fb\u3057\u3064\u3064\u306e\u53c2\u52a0\uff0e\n\u96e8\u3084\u3053\u308c\u304b\u3089\u5bd2\u304f\u306a\u308b\u3053\u3068\u3092\u8003\u3048\u308b\u3068\u3069\u3046\u306b\u304b\u3057\u305f\u3044\u3068\u3053\u308d\u2026\u2026\uff0e\n\n\n\n\n\n\u30a4\u30d9\u30f3\u30c8\u306f18:00\u8fc4\u3067\u3059\u304c\uff0c\u305d\u306e\u5f8c\u306f\u61c7\u89aa\u4f1a\u3068\u3044\u3046\u304b\u96d1\u8ac7\u30bf\u30a4\u30e0\u3067\u3059\uff0e\u4eca\u56de\u306f\u4e00\u65e6\u6642\u9593\u3092\u958b\u3051\u306619:00\u3088\u308a\u958b\u59cb\uff0c\u6700\u7d42\u7684\u306b\u306f24:00\u3092\u904e\u304e\u3066\u3044\u307e\u3057\u305f\u2026\u2026\uff0e\n\u81ea\u5206\u306f\u81ea\u52d5\u8eca\u3067\u9053\u306e\u99c5\u307e\u3067\u884c\u3063\u3066\u81ea\u52d5\u8eca\u5185\u304b\u3089\u53c2\u52a0\u3057\u307e\u3057\u305f\uff0e\u81ea\u52d5\u8eca\u306e\u6905\u5b50\u306f\u8170\u306b\u60aa\u3044\u611f\u3058\u304c\u3057\u307e\u3059\u306d\uff0e\n\u81ea\u52d5\u8eca\u306e\u30cf\u30f3\u30c9\u30eb\u306b\u5f15\u3063\u639b\u3051\u308b\u30c6\u30fc\u30d6\u30eb\u3092100\u5186\u30b7\u30e7\u30c3\u30d7\u3067\u5165\u624b\u3057\u305f\u306e\u3067\u4eca\u56de\u3053\u308c\u3082\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u304c100\u5186\u3060\u3051\u3042\u3063\u3066\u6253\u9375\u6642\u306b\u63fa\u308c\u3066\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\uff0e\u30af\u30c3\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb\u304c\u3044\u3044\u306e\u3067\u306f\u3068\u6559\u3048\u3066\u3082\u3089\u3063\u305f\u306e\u3067\u6b21\u56de\u307e\u3067\u306b\u8003\u3048\u3066\u304a\u3053\u3046\u3068\u601d\u3044\u307e\u3059\uff0e\n\n\n\n\n\n\n\n\u8eca\u7528\u30cf\u30f3\u30c9\u30eb\u30c6\u30fc\u30d6\u30eb – 100\u5747 \u901a\u8ca9 \u30c0\u30a4\u30bd\u30fc\u30cd\u30c3\u30c8\u30b9\u30c8\u30a2\u3010\u516c\u5f0f\u3011\n\n\nAmazon.co.jp: \u5c71\u5584(YAMAZEN) \u30d3\u30fc\u30ba\u30af\u30c3\u30b7\u30e7\u30f3 \u30af\u30c3\u30b7\u30e7\u30f3\u30c6\u30fc\u30d6\u30eb \u819d\u4e0a \u5929\u677f\u304c\u53d6\u308a\u5916\u305b\u308b \u30ab\u30d0\u30fc\u304c\u6d17\u3048\u308b \u30d3\u30fc\u30ba\u88dc\u5145\u53ef \u5c02\u7528\u30b1\u30fc\u30b9\u4ed8\u304d PC\u30c6\u30fc\u30d6\u30eb \u30e9\u30a4\u30c8\u30b0\u30ec\u30fc AHT-3526M(LGY) : \u30db\u30fc\u30e0\uff06\u30ad\u30c3\u30c1\u30f3\n\n\n\n\u30a2\u30d5\u30a7\u30ea\u30a8\u30a4\u30c8\u30ea\u30f3\u30af\n\n\n\n\n\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a\u6b21\u56de\u306f12/21(\u65e5)\u306e\u4e88\u5b9a\u3067\u3059\uff0e\n\n\n\n\n\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.12(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac) – connpass", "date_published": "2025-12-08T23:56:33+09:00", "date_modified": "2025-12-08T23:56:35+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "kagolug", "linuxusersgroup", "\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a", "\u9e7f\u5150\u5cf6\u3089\u3050", "\u52c9\u5f37\u4f1a" ] }, { "id": "https://matoken.org/blog/?p=4819", "url": "https://matoken.org/blog/2025/12/08/sot/", "title": "\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30b7\u30b9\u30c6\u30e0\u89b3\u5bdf\uff0c\u60c5\u5831\u8868\u793a\uff0c\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30c4\u30fc\u30eb\u306esot", "content_html": "
\n
\n
\n

\"sot

\n
\n\n
\n

top \u307f\u305f\u3044\u306a\u30b7\u30b9\u30c6\u30e0\u89b3\u5bdf\u306e\u4ed6\u306bscreenfetch \u306e\u3088\u3046\u306a\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\uff0c\u66f4\u306b\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u6a5f\u80fd\u306e\u3042\u308bsot \u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n

\n
\n
\n

sot \u5c0e\u5165

\n
\n
\n

sot \u306f\u3044\u304f\u3064\u304b\u306e\u5c0e\u5165\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff0e curl | bash \u304c\u6700\u521d\u306b\u304a\u52e7\u3081\u3068\u3057\u3066\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u500b\u4eba\u7684\u306b\u3053\u308c\u306f\u597d\u304d\u3067\u306f\u306a\u3044\u306e\u3067uv \u3067\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ uv tool install sot\n$ which sot\n/home/matoken/.local/bin/sot\n$ sot --version\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 System Observation Tool \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                                                 \u2502\n\u2502        \u2584\u2580\u2580  \u2584\u2580\u2580\u2584  \u2580\u2588\u2580                                           \u2502\n\u2502        \u2580\u2580\u2584  \u2588  \u2588   \u2588                                            \u2502\n\u2502        \u2584\u2584\u2580  \u2580\u2584\u2584\u2580   \u2588                                            \u2502\n\u2502                                                                 \u2502\n\u2502  System Observation Tool                                        \u2502\n\u2502                                                                 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 📋 Version Information \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502                                                                 \u2502\n\u2502   Version:      5.0.0                                           \u2502\n\u2502   Python:       3.13.11                                         \u2502\n\u2502   Platform:     Linux (Debian GNU/Linux n/a)                    \u2502\n\u2502   Architectur\u2026  x86_64                                          \u2502\n\u2502                                                                 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502  MIT License \u00a9 2024-2025 Kumar Anirudha                         \u2502\n\u2502  🔗 https://github.com/anistark/sot | 📖 sot --help | 🚀 sot    \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f
\n
\n
\n
\n

\"sot

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n
\n

sot 4.4.2 \u3067\u8a66\u3057\u305f\u3068\u304d\u306fuv \u53ca\u3073pipx \u3067\u306e\u5c0e\u5165\u6642\u306b\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u8868\u793a\u6a5f\u80fd\u306e info option \u3084
\nbenchmark \u6a5f\u80fd\u306e bench option \u304c\u51fa\u3066\u3053\u305a\u4f7f\u3048\u307e\u305b\u3093\u3067\u3057\u305f\uff0esource \u304b\u3089\u5c0e\u5165\u3057\u305f\u3089ok\uff0e

\n
\n
\n
\n
sot: error: unrecognized arguments: info\nsot: error: unrecognized arguments: bench
\n
\n
\n
\n
\n
\n
\n
\n

sot \u5b9f\u884c

\n
\n
\n

\u307e\u305a\u306f\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067sot \u5b9f\u884c\uff0etop \u306e\u3088\u3046\u306a\u52d5\u304d\u3067\u3059\uff0e
\no key \u3067\u4e26\u3079\u66ff\u3048\u30e2\u30fc\u30c9\u306b\u306a\u308a\u77e2\u5370\u30ad\u30fc\u3067\u8a2d\u5b9a\uff0cEnter \u3067\u7dcf\u5de1\u822a\u9806\u5909\u66f4\uff0c q \u3067\u4e26\u3079\u66ff\u3048\u30e2\u30fc\u30c9\u304b\u3089\u629c\u3051\u307e\u3059\uff0e
\nCtrl+q \u3067\u7d42\u4e86\u3067\u3059\uff0e
\n\u30ab\u30e9\u30d5\u30eb\u3067\u697d\u3057\u3044\u3067\u3059\uff0e

\n
\n
\n

\"sot

\n
\n
\n
\n
\n

sot \u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u8868\u793a(info)

\n
\n
\n

\u6b21\u306b\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u8868\u793a\u306e info \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a66\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sot info\n       _,met$$$$$gg.            Host        -  matoken@tp-l13\n    ,g$$$$$$$$$$$$$$$P.\n  ,g$$P\"     \"\"\"Y$$.\"`.         OS          -  Debian GNU/Linux n/a\n ,$$P'              `$$$.       Kernel      -  6.17.10+deb14-amd64\n',$$P       ,ggs.     `$$b:     DE          -  i3\n`d$$'     ,$P\"'   .    $$$      WM          -  x11\n $$P      d$'     ,    $$P      Shell       -  bash\n $$:      $$.   -    ,d$$'      Terminal    -  xterm-kitty\n $$;      Y$b._   _,d$P'\n Y$$.    `.`\"Y$$$$P\"'           Memory      -  9 GiB / 15 GiB\n `$$b      \"-.__\n  `Y$$\n   `Y$$.                        Uptime      -  8h 53m\n     `$$b.                      Battery     -  100% & Discharging\n       `Y$$b.
\n
\n
\n
\n

Battery \u304c\u3042\u308b\u306e\u306f\u73cd\u3057\u3044\u3067\u3059\u306d\uff0e\u3067\u3082\u5024\u306f\u9593\u9055\u3063\u3066\u3044\u305d\u3046?
\nlogo\u306e\u7a2e\u985e\u306f\u4ee5\u4e0b\u306e\u901a\u308a\uff0e\u5c11\u3057\u5c11\u306a\u3081\uff0e

\n
\n
\n
\n
\n

macOS: Apple logo

\n
\n
\n

Linux Distributions:

\n
\n
\n
\n
Ubuntu\nDebian\nFedora\nRed Hat / RHEL\nArch Linux\nManjaro\nPop!_OS\nCentOS\nGeneric Linux/Tux (fallback)
\n
\n
\n
\n

Windows: Windows logo

\n
\n
\n
\n
\n
\n
\n

sot \u30d9\u30f3\u30c1\u30de\u30fc\u30af(bench)

\n
\n
\n

\u6b21\u306b\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u306e bench \u30aa\u30d7\u30b7\u30e7\u30f3\uff0e
\n\u5b9f\u884c\u6642\u306b\u30b7\u30b9\u30c6\u30e0\u5185\u306e\u30c7\u30a3\u30b9\u30af\u304c\u8868\u793a\u3055\u308c\u308b\u306e\u3067\u30d9\u30f3\u30c1\u5bfe\u8c61\u3092\u30ab\u30fc\u30bd\u30eb\u3067\u9078\u629e\u3057\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3092\u5b9f\u884c\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
Use arrow keys (\u2191\u2193) to navigate, Enter to select, or 'q' to quit:\n\n  \u276f 0: System - 450.9 GiB total, 4.6 GiB free\n    1: efi - 511.0 MiB total, 501.9 MiB free\n    2: boot - 455.1 MiB total, 338.7 MiB free\n    3: 068d2d0a-235d-4c86-839e-4d37081979a2 - 457.4 GiB total, 197.5 MiB free\n\n\u2713 Selected: System\n  Using partition: /dev/mapper/tp--l13--vg-root (/)\n\nRunning benchmarks on System...\n\nPer-benchmark duration: 10.0s\n\nBenchmarking... \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 100% 00:01:31.39\n\n\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 System \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502 Disk ID: /dev/mapper/tp--l13--vg-root (System)                                                                                                                                                                                              \u2502\n\u2502 Total Capacity: 450.9 GiB                                                                                                                                                                                                                   \u2502\n\u2502 Free Space: 4.6 GiB                                                                                                                                                                                                                         \u2502\n\u2502 Cache Directory: /home/matoken/.sot/bench                                                                                                                                                                                                   \u2502\n\u2502                                                                                                                                                                                                                                             \u2502\n\u2502 Partitions:                                                                                                                                                                                                                                 \u2502\n\u2502   \u2022 /dev/mapper/tp--l13--vg-root \u2192 /                                                                                                                                                                                                       \u2502   \u2022 /dev/mapper/tp--l13--vg-root \u2192 /run/schroot/mount/bookworm-i386-53c15ea2-b9a4-4693-b02b-be7786ca929f                                                                                                                                   \u2502   \u2022 /dev/mapper/tp--l13--vg-root \u2192 /run/schroot/mount/bookworm-i386-53c15ea2-b9a4-4693-b02b-be7786ca929f/home                                                                                                                              \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                     Benchmark Results\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 Test              \u2503 Throughput/IOPS \u2503 Avg Latency \u2503 p95 Latency \u2503 p99 Latency \u2503 Duration \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 Sequential Read   \u2502 245.9 MB/s      \u2502 4.06 ms     \u2502 11.76 ms    \u2502 24.01 ms    \u2502 10.00 s  \u2502\n\u2502 Sequential Write  \u2502 177.7 MB/s      \u2502 5.59 ms     \u2502 9.13 ms     \u2502 12.46 ms    \u2502 10.00 s  \u2502\n\u2502 Random Read IOPS  \u2502 40.61 KIO/s     \u2502 20.43 \u00b5s    \u2502 107.53 \u00b5s   \u2502 211.48 \u00b5s   \u2502 10.00 s  \u2502\n\u2502 Random Write IOPS \u2502 834.60 IO/s     \u2502 1.18 ms     \u2502 2.59 ms     \u2502 5.12 ms     \u2502 10.00 s  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\u2713 Benchmarking completed successfully
\n
\n
\n
\n

\u7c21\u6613\u7684\u306a\u30d9\u30f3\u30c1\u306b\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

sot \u30c7\u30a3\u30b9\u30af\u60c5\u5831(disk)

\n
\n
\n

\u3082\u3046\u4e00\u3064disk \u30aa\u30d7\u30b7\u30e7\u30f3\uff0e\u3053\u308c\u306f\u6700\u8fd1\u8ffd\u52a0\u3055\u308c\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u3088\u3046\u3067\u30c7\u30a3\u30b9\u30af\u60c5\u5831\u3092\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306b\u8868\u793a\u3059\u308b\u3082\u306e\u306e\u3088\u3046\u3067\u3059\uff0e
\n\u30ab\u30fc\u30bd\u30eb\u3067\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e\u3057\u3066Enter \u3067\u60c5\u5831\u304c\u898b\u308c\u307e\u3059\uff0e

\n
\n
\n
\n
$ sot disk
\n
\n
\n
\n

\"sot

\n
\n
\n
\n", "content_text": "anistark/sot: Command-line System Obervation Tool\n\n\n\nsot – Command-line System Observation Tool. – Terminal Trove\n\n\n\n\n\n\n\ntop \u307f\u305f\u3044\u306a\u30b7\u30b9\u30c6\u30e0\u89b3\u5bdf\u306e\u4ed6\u306bscreenfetch \u306e\u3088\u3046\u306a\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\uff0c\u66f4\u306b\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u6a5f\u80fd\u306e\u3042\u308bsot \u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\n\nsot \u5c0e\u5165\n\n\nsot \u306f\u3044\u304f\u3064\u304b\u306e\u5c0e\u5165\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff0e curl | bash \u304c\u6700\u521d\u306b\u304a\u52e7\u3081\u3068\u3057\u3066\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u500b\u4eba\u7684\u306b\u3053\u308c\u306f\u597d\u304d\u3067\u306f\u306a\u3044\u306e\u3067uv \u3067\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e\n\n\n\n$ uv tool install sot\n$ which sot\n/home/matoken/.local/bin/sot\n$ sot --version\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 System Observation Tool \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 \u2502\n\u2502 \u2584\u2580\u2580 \u2584\u2580\u2580\u2584 \u2580\u2588\u2580 \u2502\n\u2502 \u2580\u2580\u2584 \u2588 \u2588 \u2588 \u2502\n\u2502 \u2584\u2584\u2580 \u2580\u2584\u2584\u2580 \u2588 \u2502\n\u2502 \u2502\n\u2502 System Observation Tool \u2502\n\u2502 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 📋 Version Information \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 \u2502\n\u2502 Version: 5.0.0 \u2502\n\u2502 Python: 3.13.11 \u2502\n\u2502 Platform: Linux (Debian GNU/Linux n/a) \u2502\n\u2502 Architectur\u2026 x86_64 \u2502\n\u2502 \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\n\u2502 MIT License \u00a9 2024-2025 Kumar Anirudha \u2502\n\u2502 🔗 https://github.com/anistark/sot | 📖 sot --help | 🚀 sot \u2502\n\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\n\n\n\n\n\n\n\n\n\nNote\n\n\n\nsot 4.4.2 \u3067\u8a66\u3057\u305f\u3068\u304d\u306fuv \u53ca\u3073pipx \u3067\u306e\u5c0e\u5165\u6642\u306b\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u8868\u793a\u6a5f\u80fd\u306e info option \u3084\nbenchmark \u6a5f\u80fd\u306e bench option \u304c\u51fa\u3066\u3053\u305a\u4f7f\u3048\u307e\u305b\u3093\u3067\u3057\u305f\uff0esource \u304b\u3089\u5c0e\u5165\u3057\u305f\u3089ok\uff0e\n\n\n\nsot: error: unrecognized arguments: info\nsot: error: unrecognized arguments: bench\n\n\n\n\n\n\n\n\n\nsot \u5b9f\u884c\n\n\n\u307e\u305a\u306f\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067sot \u5b9f\u884c\uff0etop \u306e\u3088\u3046\u306a\u52d5\u304d\u3067\u3059\uff0e\no key \u3067\u4e26\u3079\u66ff\u3048\u30e2\u30fc\u30c9\u306b\u306a\u308a\u77e2\u5370\u30ad\u30fc\u3067\u8a2d\u5b9a\uff0cEnter \u3067\u7dcf\u5de1\u822a\u9806\u5909\u66f4\uff0c q \u3067\u4e26\u3079\u66ff\u3048\u30e2\u30fc\u30c9\u304b\u3089\u629c\u3051\u307e\u3059\uff0e\nCtrl+q \u3067\u7d42\u4e86\u3067\u3059\uff0e\n\u30ab\u30e9\u30d5\u30eb\u3067\u697d\u3057\u3044\u3067\u3059\uff0e\n\n\n\n\n\n\n\nsot \u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u8868\u793a(info)\n\n\n\u6b21\u306b\u30b7\u30b9\u30c6\u30e0\u60c5\u5831\u8868\u793a\u306e info \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u8a66\u3057\u307e\u3059\uff0e\n\n\n\n$ sot info\n _,met$$$$$gg. Host - matoken@tp-l13\n ,g$$$$$$$$$$$$$$$P.\n ,g$$P\" \"\"\"Y$$.\"`. OS - Debian GNU/Linux n/a\n ,$$P' `$$$. Kernel - 6.17.10+deb14-amd64\n',$$P ,ggs. `$$b: DE - i3\n`d$$' ,$P\"' . $$$ WM - x11\n $$P d$' , $$P Shell - bash\n $$: $$. - ,d$$' Terminal - xterm-kitty\n $$; Y$b._ _,d$P'\n Y$$. `.`\"Y$$$$P\"' Memory - 9 GiB / 15 GiB\n `$$b \"-.__\n `Y$$\n `Y$$. Uptime - 8h 53m\n `$$b. Battery - 100% & Discharging\n `Y$$b.\n\n\n\nBattery \u304c\u3042\u308b\u306e\u306f\u73cd\u3057\u3044\u3067\u3059\u306d\uff0e\u3067\u3082\u5024\u306f\u9593\u9055\u3063\u3066\u3044\u305d\u3046?\nlogo\u306e\u7a2e\u985e\u306f\u4ee5\u4e0b\u306e\u901a\u308a\uff0e\u5c11\u3057\u5c11\u306a\u3081\uff0e\n\n\n\n\nmacOS: Apple logo\n\n\nLinux Distributions:\n\n\n\nUbuntu\nDebian\nFedora\nRed Hat / RHEL\nArch Linux\nManjaro\nPop!_OS\nCentOS\nGeneric Linux/Tux (fallback)\n\n\n\nWindows: Windows logo\n\n\n\n\n\n\nsot \u30d9\u30f3\u30c1\u30de\u30fc\u30af(bench)\n\n\n\u6b21\u306b\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u306e bench \u30aa\u30d7\u30b7\u30e7\u30f3\uff0e\n\u5b9f\u884c\u6642\u306b\u30b7\u30b9\u30c6\u30e0\u5185\u306e\u30c7\u30a3\u30b9\u30af\u304c\u8868\u793a\u3055\u308c\u308b\u306e\u3067\u30d9\u30f3\u30c1\u5bfe\u8c61\u3092\u30ab\u30fc\u30bd\u30eb\u3067\u9078\u629e\u3057\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u3092\u5b9f\u884c\u3057\u307e\u3059\uff0e\n\n\n\nUse arrow keys (\u2191\u2193) to navigate, Enter to select, or 'q' to quit:\n\n \u276f 0: System - 450.9 GiB total, 4.6 GiB free\n 1: efi - 511.0 MiB total, 501.9 MiB free\n 2: boot - 455.1 MiB total, 338.7 MiB free\n 3: 068d2d0a-235d-4c86-839e-4d37081979a2 - 457.4 GiB total, 197.5 MiB free\n\n\u2713 Selected: System\n Using partition: /dev/mapper/tp--l13--vg-root (/)\n\nRunning benchmarks on System...\n\nPer-benchmark duration: 10.0s\n\nBenchmarking... \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 100% 00:01:31.39\n\n\n\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 System \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502 Disk ID: /dev/mapper/tp--l13--vg-root (System) \u2502\n\u2502 Total Capacity: 450.9 GiB \u2502\n\u2502 Free Space: 4.6 GiB \u2502\n\u2502 Cache Directory: /home/matoken/.sot/bench \u2502\n\u2502 \u2502\n\u2502 Partitions: \u2502\n\u2502 \u2022 /dev/mapper/tp--l13--vg-root \u2192 / \u2502 \u2022 /dev/mapper/tp--l13--vg-root \u2192 /run/schroot/mount/bookworm-i386-53c15ea2-b9a4-4693-b02b-be7786ca929f \u2502 \u2022 /dev/mapper/tp--l13--vg-root \u2192 /run/schroot/mount/bookworm-i386-53c15ea2-b9a4-4693-b02b-be7786ca929f/home \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Benchmark Results\n\u250f\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2533\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2513\n\u2503 Test \u2503 Throughput/IOPS \u2503 Avg Latency \u2503 p95 Latency \u2503 p99 Latency \u2503 Duration \u2503\n\u2521\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2547\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2529\n\u2502 Sequential Read \u2502 245.9 MB/s \u2502 4.06 ms \u2502 11.76 ms \u2502 24.01 ms \u2502 10.00 s \u2502\n\u2502 Sequential Write \u2502 177.7 MB/s \u2502 5.59 ms \u2502 9.13 ms \u2502 12.46 ms \u2502 10.00 s \u2502\n\u2502 Random Read IOPS \u2502 40.61 KIO/s \u2502 20.43 \u00b5s \u2502 107.53 \u00b5s \u2502 211.48 \u00b5s \u2502 10.00 s \u2502\n\u2502 Random Write IOPS \u2502 834.60 IO/s \u2502 1.18 ms \u2502 2.59 ms \u2502 5.12 ms \u2502 10.00 s \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n\u2713 Benchmarking completed successfully\n\n\n\n\u7c21\u6613\u7684\u306a\u30d9\u30f3\u30c1\u306b\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n\nsot \u30c7\u30a3\u30b9\u30af\u60c5\u5831(disk)\n\n\n\u3082\u3046\u4e00\u3064disk \u30aa\u30d7\u30b7\u30e7\u30f3\uff0e\u3053\u308c\u306f\u6700\u8fd1\u8ffd\u52a0\u3055\u308c\u305f\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u3088\u3046\u3067\u30c7\u30a3\u30b9\u30af\u60c5\u5831\u3092\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306b\u8868\u793a\u3059\u308b\u3082\u306e\u306e\u3088\u3046\u3067\u3059\uff0e\n\u30ab\u30fc\u30bd\u30eb\u3067\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e\u3057\u3066Enter \u3067\u60c5\u5831\u304c\u898b\u308c\u307e\u3059\uff0e\n\n\n\n$ sot disk", "date_published": "2025-12-08T00:02:11+09:00", "date_modified": "2025-12-08T17:37:06+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "command line", "sot", "system info", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=4807", "url": "https://matoken.org/blog/2025/12/06/mapillary-and-kartaview/", "title": "\u30b9\u30de\u30db\u3092\u4f7f\u3063\u3066\u624b\u8efd\u306bMapillary \u3068KartaView \u306b\u5199\u771f\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9", "content_html": "
\n

\u3057\u3070\u3089\u304f\u524d\u304b\u3089\u6708\u306b1\u301c4\u56de\u4f4d\u306e\u983b\u5ea6\u3067\u6b6f\u533b\u8005\u306b\u901a\u3063\u3066\u3044\u307e\u3059\uff0e\u3044\u3064\u3082\u306f\u6697\u3044\u6642\u9593\u5e2f\u306b\u79fb\u52d5\u3059\u308b\u306e\u3067\u660e\u308b\u3044\u6642\u9593\u306b\u79fb\u52d5\u3059\u308b\u306e\u304c\u65b0\u9bae\uff0e\u3068\u3044\u3046\u3053\u3068\u3067\u4e45\u3005\u306bMapillary \u3092\u3084\u3063\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u7acb\u3061\u307e\u3057\u305f\uff0e

\n
\n
\n

Mapillary \u306f\u30b8\u30aa\u30bf\u30b0\u4ed8\u304d\u306e\u5199\u771f\u3092\u5171\u6709\u3057\u3044\u3047Google \u30aa\u30fc\u30d7\u30f3\u30b9\u30c8\u30ea\u30fc\u30c8\u30de\u30c3\u30d7\u306e\u3088\u3046\u306a\u3082\u306e\u3092\u307f\u3093\u306a\u3067\u3064\u304f\u308b\u3088\u3046\u306a\u3082\u306e\u3067\u3059\uff0eMapillary \u306bUp \u3055\u308c\u305f\u30c7\u30fc\u30bf\u306fCC-BY-SA-4.0 \u306e\u3082\u3068\u3067\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\u307e\u305f\uff0cOpenStreetMap \u306b\u6295\u7a3f\u3059\u308b\u305f\u3081\u306b\u5199\u771f\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u308a\u51fa\u3059\u305f\u3081\u306b\u306f\u7279\u5225\u306a\u8a31\u53ef\u3092\u5f97\u3066\u3044\u308b\u306e\u3067OpenStreetMap \u306e\u30de\u30c3\u30d4\u30f3\u30b0\u306b\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e

\n
\n

\n
\n

\u4ee5\u524d\u306f\u30a2\u30af\u30b7\u30e7\u30f3\u30ab\u30e0+GPS\u30ed\u30ac\u30fc\u306a\u3093\u304b\u3092\u4f7f\u3063\u3066\u3044\u307e\u3057\u305f\u304c\u58ca\u308c\u3066\u4e45\u3057\u3044\u3067\u3059\uff0e\u3068\u308a\u3042\u3048\u305a\u30b5\u30d6\u3067\u533b\u7642\u3057\u3066\u3044\u308b\u5c11\u3057\u53e4\u3044Android\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3+Mapillary \u30a2\u30d7\u30ea\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306b\uff0e\u753b\u8cea\u3084\u753b\u89d2\u306f\u3044\u307e\u3044\u3061\u306a\u611f\u3058\u304c\u3057\u307e\u3059\u304c\uff0c\u81ea\u5206\u306e\u884c\u52d5\u570f\u5185\u3092\u898b\u308b\u3068\u307b\u307c\u771f\u3063\u767d\u306a\u306e\u3067\u4f55\u3082\u306a\u3044\u3088\u308a\u306f\u307e\u3057\u3060\u308d\u3046\u3068\u601d\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

Mapillary \u30a2\u30d7\u30ea\u3092\u4e45\u3005\u306b\u8d77\u52d5\u3059\u308b\u3068\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3059\uff0e\u30bf\u30a4\u30df\u30f3\u30b0\u304c\u60aa\u304b\u3063\u305f\u304b\u306a\u3068\u601d\u3044\u6642\u9593\u3092\u305a\u3089\u3057\u3066\u4f55\u5ea6\u304b\u8a66\u3057\u307e\u3057\u305f\u304c\u6570\u9031\u9593\u3057\u3066\u3082\u3060\u3081\u3067\u3059\uff0e

\n
\n
\n

\"mapillary

\n
\n
\n

\u30a2\u30d7\u30ea\u30b9\u30c8\u30a2\u306e\u30ec\u30d3\u30e5\u30fc\u3092\u898b\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\uff0c\u30a2\u30d7\u30ea\u540d\u306e\u5f8c\u308d\u306b\u300cdiscontinued\u300d \u3068\u4ed8\u3044\u3066\u3044\u307e\u3059\uff0e\u3048\uff0c\u3068\u601d\u3044Mapillary \u306esite \u304b\u3089\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068 app.mapillary → com.mapillary.app \u3068\u9055\u3046\u30a2\u30d7\u30ea\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

\u3053\u306e\u65b0\u3057\u3044\u65b9\u306e\u30a2\u30d7\u30ea\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u3067\u8a8d\u8a3c\u3082\u6210\u529f\u3057\uff0c\u30ed\u30b0\u30a4\u30f3\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u30a2\u30a4\u30b3\u30f3\u3082\u5fae\u5999\u306b\u5909\u308f\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\"mapillary

\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067Mapillary \u30a2\u30d7\u30ea\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u81ea\u52d5\u8eca\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u7f6e\u3044\u3066\u64ae\u5f71\u3057\u3066\u307f\u307e\u3057\u305f\uff0e
\n\u64ae\u5f71\u6642\u306f\u3053\u3093\u306a\u611f\u3058\uff0e

\n
\n

\n
Post by @matoken
\n
View on Mastodon
\n

\n

\n
\n

\u81ea\u52d5\u8eca\u306e\u30b7\u30ac\u30fc\u30bd\u30b1\u30c3\u30c8\u304b\u3089USB\u306b\u5909\u63db\u3057\u305f\u3082\u306e\u304b\u3089\u30b1\u30fc\u30d6\u30eb\u3092\u5f15\u3063\u5f35\u3063\u3066\u7d66\u96fb\u3057\u3064\u3064\u30c0\u30a4\u30bd\u30fc\u306e\u30b9\u30de\u30db\u30b9\u30bf\u30f3\u30c9\u306b\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u3092\u7acb\u3066\u304b\u3051\u3066Mapillary \u30a2\u30d7\u30ea\u3067\u64ae\u5f71\u3057\u3066\u3044\u307e\u3059\uff0e
\n\u3053\u306e\u72b6\u614b\u3060\u3068\u30ab\u30fc\u30d6\u3067\u305a\u308c\u308b\u306e\u3067\u73fe\u5728\u306f\u6ed1\u308a\u6b62\u3081\u3092\u6577\u3044\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u3053\u308c\u3067\u5c11\u3057\u65e9\u3081\u306b\u5bb6\u3092\u51fa\u3066\u5c11\u3057\u56de\u308a\u9053\u3092\u3057\u3064\u3064\u79fb\u52d5\u3057\u3066\u307f\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u5e30\u5b85\u5f8c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u8a66\u307f\u307e\u3059\u304c1\u679a\u3082\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\uff0e

\n
\n
\n

\"mapillary

\n
\n
\n

\u3053\u308c\u306f\u56de\u7dda\u306e\u554f\u984c(\u697d\u5929\u30e2\u30d0\u30a4\u30ebau\u30ed\u30fc\u30df\u30f3\u30b0\u30a8\u30ea\u30a2\u306e\u7aef\u3063\u3053)\u306e\u3088\u3046\u3067\u30e2\u30d0\u30a4\u30eb\u30eb\u30fc\u30bf\u30fc\u3092\u90fd\u4f1a\u306b\u6301\u3061\u51fa\u3057\u3066\u305d\u3053\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u8a66\u307f\u308b\u3053\u3068\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n

\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5f8c\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089Mapillary \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u53cd\u6620\u3055\u308c\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

\u3068\u3044\u3046\u3088\u3046\u306a\u8a71\u3092\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.11(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac)\u7d42\u4e86\u5f8c\u306e\u96d1\u8ac7\u6642\u306b\u8a71\u3057\u3066\u3044\u305f\u3089\u300c(Mapillary \u306f)META \u53c2\u52a0\u306a\u306e\u3067\u3059\u306d\u300d\u3068\u3044\u308f\u308c\u78ba\u8a8d\u3059\u308b\u30682020\u5e746\u6708\u306bFacebook(\u73feMETA)\u3078\u58f2\u5374\u3055\u308c\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n

\u305d\u3046\u3044\u3048\u3070\u985e\u4f3c\u30b5\u30fc\u30d3\u30b9\u306eOpenStreetCam \u306f?\u3068\u78ba\u8a8d\u3059\u308b\u3068\u65e7OpenStreetCam \u304a\u3088\u3073OpenStreetView \u306fKartaView \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u306b\u306a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e
\nKartaView \u3082\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306fCC-BY-SA-4.0 \u306b\u306a\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n

KartaView \u3092\u5c11\u3057\u78ba\u8a8d\u3059\u308b\u3068\uff0cBETA \u3067\u3059\u304c\uff0cKartaView \u304b\u3089Mapillary \u3078\u306e\u9023\u643a\u6a5f\u80fd\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u3068KartaView \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u5199\u771f\u304cMapillary \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\uff0eKartaView \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3060\u3051\u3067\u4e21\u65b9\u306bUp \u3067\u304d\u308b\u306e\u3067\u826f\u3055\u305d\u3046\u3067\u3059\uff0e
\n\u30ea\u30f3\u30af\u624b\u9806\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u30e6\u30fc\u30b6\u30da\u30fc\u30b8\u306b\u5165\u308b\u3053\u3068\u3067\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n

\"kartaview

\n
\n
\n

KartaView \u306b\u3082iOS/Android \u30a2\u30d7\u30ea\u304c\u3042\u308a\u307e\u3059\uff0eMapillary \u306b\u7121\u3044\u6a5f\u80fd\u3068\u3057\u3066OBD2 \u9023\u643a\u6a5f\u80fd\u3042\u3042\u308a\u307e\u3059\uff0e\u30c8\u30f3\u30cd\u30eb\u306a\u3069\u306eGNSS \u96fb\u6ce2\u306e\u5c4a\u304b\u306a\u3044\uff0c\u5f31\u3044\u5834\u6240\u3067OBD2 \u306e\u30c7\u30fc\u30bf\u3067\u88dc\u5f37\u3057\u3066\u5236\u5ea6\u3092\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u6050\u3089\u304f\u3055\u3044\u304d\u3093\u306e\u81ea\u52d5\u8eca\u3067\u3042\u308c\u3070\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3092\u53d6\u308a\u4ed8\u3051\u308b\u3053\u3068\u3067\u5236\u5ea6\u304c\u4e0a\u304c\u308b\u3068\u601d\u3044\u307e\u3059\u7de8\u307f\u78ba\u8a8d\u3067\u3059\uff0e\u81ea\u5206\u306f\u5207\u308a\u901a\u3057\u3084\u6728\u3005\u3067\u56f2\u307e\u308c\u305f\u9053\u8def\u3092\u3088\u304f\u901a\u308aGNSS \u96fb\u6ce2\u3092\u898b\u5931\u3046\u3053\u3068\u304c\u3088\u304f\u3042\u308b\u306e\u3067\u8a66\u3057\u3066\u307f\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e

\n
\n
\n

Amazon JP \u3092\u773a\u3081\u308b\u3068\u65e5\u672c\u3067\u9069\u6cd5\u3067\u5229\u7528\u3067\u304d\u305d\u3046\u306a\u3082\u306e\u306f\u3053\u306e\u8fba\u3067\u3057\u3087\u3046\u304b\uff0e\uffe53,132 \u7a0e\u8fbc\uff0e

\n
\n
\n\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067\u3053\u308c\u304b\u3089\u306fKartaView \u30a2\u30d7\u30ea\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n
\n

\u4eca\u65e5\u306fState of the Map Japan 2025 \u958b\u50ac\u65e5\u3068\u3044\u3046\u3053\u3068\u3067\u5c11\u3057\u95a2\u9023\u3057\u305d\u3046\u306a\u8a18\u4e8b\u306b\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\u5f8c\u3067\u52d5\u753b\u3092\u8996\u8074\u3057\u305f\u3044\u3068\u3053\u308d\uff0e

\n
\n\n
\n
\n", "content_text": "\u3057\u3070\u3089\u304f\u524d\u304b\u3089\u6708\u306b1\u301c4\u56de\u4f4d\u306e\u983b\u5ea6\u3067\u6b6f\u533b\u8005\u306b\u901a\u3063\u3066\u3044\u307e\u3059\uff0e\u3044\u3064\u3082\u306f\u6697\u3044\u6642\u9593\u5e2f\u306b\u79fb\u52d5\u3059\u308b\u306e\u3067\u660e\u308b\u3044\u6642\u9593\u306b\u79fb\u52d5\u3059\u308b\u306e\u304c\u65b0\u9bae\uff0e\u3068\u3044\u3046\u3053\u3068\u3067\u4e45\u3005\u306bMapillary \u3092\u3084\u3063\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u7acb\u3061\u307e\u3057\u305f\uff0e\n\n\nMapillary \u306f\u30b8\u30aa\u30bf\u30b0\u4ed8\u304d\u306e\u5199\u771f\u3092\u5171\u6709\u3057\u3044\u3047Google \u30aa\u30fc\u30d7\u30f3\u30b9\u30c8\u30ea\u30fc\u30c8\u30de\u30c3\u30d7\u306e\u3088\u3046\u306a\u3082\u306e\u3092\u307f\u3093\u306a\u3067\u3064\u304f\u308b\u3088\u3046\u306a\u3082\u306e\u3067\u3059\uff0eMapillary \u306bUp \u3055\u308c\u305f\u30c7\u30fc\u30bf\u306fCC-BY-SA-4.0 \u306e\u3082\u3068\u3067\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\uff0e\u307e\u305f\uff0cOpenStreetMap \u306b\u6295\u7a3f\u3059\u308b\u305f\u3081\u306b\u5199\u771f\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u308a\u51fa\u3059\u305f\u3081\u306b\u306f\u7279\u5225\u306a\u8a31\u53ef\u3092\u5f97\u3066\u3044\u308b\u306e\u3067OpenStreetMap \u306e\u30de\u30c3\u30d4\u30f3\u30b0\u306b\u3082\u5229\u7528\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\u4ee5\u524d\u306f\u30a2\u30af\u30b7\u30e7\u30f3\u30ab\u30e0+GPS\u30ed\u30ac\u30fc\u306a\u3093\u304b\u3092\u4f7f\u3063\u3066\u3044\u307e\u3057\u305f\u304c\u58ca\u308c\u3066\u4e45\u3057\u3044\u3067\u3059\uff0e\u3068\u308a\u3042\u3048\u305a\u30b5\u30d6\u3067\u533b\u7642\u3057\u3066\u3044\u308b\u5c11\u3057\u53e4\u3044Android\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3+Mapillary \u30a2\u30d7\u30ea\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306b\uff0e\u753b\u8cea\u3084\u753b\u89d2\u306f\u3044\u307e\u3044\u3061\u306a\u611f\u3058\u304c\u3057\u307e\u3059\u304c\uff0c\u81ea\u5206\u306e\u884c\u52d5\u570f\u5185\u3092\u898b\u308b\u3068\u307b\u307c\u771f\u3063\u767d\u306a\u306e\u3067\u4f55\u3082\u306a\u3044\u3088\u308a\u306f\u307e\u3057\u3060\u308d\u3046\u3068\u601d\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\nMapillary \u30a2\u30d7\u30ea\u3092\u4e45\u3005\u306b\u8d77\u52d5\u3059\u308b\u3068\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3059\uff0e\u30bf\u30a4\u30df\u30f3\u30b0\u304c\u60aa\u304b\u3063\u305f\u304b\u306a\u3068\u601d\u3044\u6642\u9593\u3092\u305a\u3089\u3057\u3066\u4f55\u5ea6\u304b\u8a66\u3057\u307e\u3057\u305f\u304c\u6570\u9031\u9593\u3057\u3066\u3082\u3060\u3081\u3067\u3059\uff0e\n\n\n\n\n\n\u30a2\u30d7\u30ea\u30b9\u30c8\u30a2\u306e\u30ec\u30d3\u30e5\u30fc\u3092\u898b\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\uff0c\u30a2\u30d7\u30ea\u540d\u306e\u5f8c\u308d\u306b\u300cdiscontinued\u300d \u3068\u4ed8\u3044\u3066\u3044\u307e\u3059\uff0e\u3048\uff0c\u3068\u601d\u3044Mapillary \u306esite \u304b\u3089\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068 app.mapillary → com.mapillary.app \u3068\u9055\u3046\u30a2\u30d7\u30ea\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nMapillary (discontinued) – Google Play \u306e\u30a2\u30d7\u30ea \u65e7\n\n\nMapillary – Google Play \u306e\u30a2\u30d7\u30ea \u65b0\n\n\n\n\n\u3053\u306e\u65b0\u3057\u3044\u65b9\u306e\u30a2\u30d7\u30ea\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u3067\u8a8d\u8a3c\u3082\u6210\u529f\u3057\uff0c\u30ed\u30b0\u30a4\u30f3\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u30a2\u30a4\u30b3\u30f3\u3082\u5fae\u5999\u306b\u5909\u308f\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067Mapillary \u30a2\u30d7\u30ea\u304c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u3067\u81ea\u52d5\u8eca\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u7f6e\u3044\u3066\u64ae\u5f71\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\u64ae\u5f71\u6642\u306f\u3053\u3093\u306a\u611f\u3058\uff0e\n\n \nPost by @matoken\nView on Mastodon\n \n \n\n\u81ea\u52d5\u8eca\u306e\u30b7\u30ac\u30fc\u30bd\u30b1\u30c3\u30c8\u304b\u3089USB\u306b\u5909\u63db\u3057\u305f\u3082\u306e\u304b\u3089\u30b1\u30fc\u30d6\u30eb\u3092\u5f15\u3063\u5f35\u3063\u3066\u7d66\u96fb\u3057\u3064\u3064\u30c0\u30a4\u30bd\u30fc\u306e\u30b9\u30de\u30db\u30b9\u30bf\u30f3\u30c9\u306b\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u3092\u7acb\u3066\u304b\u3051\u3066Mapillary \u30a2\u30d7\u30ea\u3067\u64ae\u5f71\u3057\u3066\u3044\u307e\u3059\uff0e\n\u3053\u306e\u72b6\u614b\u3060\u3068\u30ab\u30fc\u30d6\u3067\u305a\u308c\u308b\u306e\u3067\u73fe\u5728\u306f\u6ed1\u308a\u6b62\u3081\u3092\u6577\u3044\u3066\u3044\u307e\u3059\uff0e\n\n\n\u3053\u308c\u3067\u5c11\u3057\u65e9\u3081\u306b\u5bb6\u3092\u51fa\u3066\u5c11\u3057\u56de\u308a\u9053\u3092\u3057\u3064\u3064\u79fb\u52d5\u3057\u3066\u307f\u3066\u3044\u307e\u3059\uff0e\n\n\n\u5e30\u5b85\u5f8c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u8a66\u307f\u307e\u3059\u304c1\u679a\u3082\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u305b\u3093\uff0e\n\n\n\n\n\n\u3053\u308c\u306f\u56de\u7dda\u306e\u554f\u984c(\u697d\u5929\u30e2\u30d0\u30a4\u30ebau\u30ed\u30fc\u30df\u30f3\u30b0\u30a8\u30ea\u30a2\u306e\u7aef\u3063\u3053)\u306e\u3088\u3046\u3067\u30e2\u30d0\u30a4\u30eb\u30eb\u30fc\u30bf\u30fc\u3092\u90fd\u4f1a\u306b\u6301\u3061\u51fa\u3057\u3066\u305d\u3053\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3092\u8a66\u307f\u308b\u3053\u3068\u3067\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\n\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u5f8c\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089Mapillary \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u53cd\u6620\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\n\n\n\u3068\u3044\u3046\u3088\u3046\u306a\u8a71\u3092\u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2025.11(\u30aa\u30f3\u30e9\u30a4\u30f3\u958b\u50ac)\u7d42\u4e86\u5f8c\u306e\u96d1\u8ac7\u6642\u306b\u8a71\u3057\u3066\u3044\u305f\u3089\u300c(Mapillary \u306f)META \u53c2\u52a0\u306a\u306e\u3067\u3059\u306d\u300d\u3068\u3044\u308f\u308c\u78ba\u8a8d\u3059\u308b\u30682020\u5e746\u6708\u306bFacebook(\u73feMETA)\u3078\u58f2\u5374\u3055\u308c\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\u305d\u3046\u3044\u3048\u3070\u985e\u4f3c\u30b5\u30fc\u30d3\u30b9\u306eOpenStreetCam \u306f?\u3068\u78ba\u8a8d\u3059\u308b\u3068\u65e7OpenStreetCam \u304a\u3088\u3073OpenStreetView \u306fKartaView \u3068\u3044\u3046\u30b5\u30fc\u30d3\u30b9\u306b\u306a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\nKartaView \u3082\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306fCC-BY-SA-4.0 \u306b\u306a\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\nKartaView \u3092\u5c11\u3057\u78ba\u8a8d\u3059\u308b\u3068\uff0cBETA \u3067\u3059\u304c\uff0cKartaView \u304b\u3089Mapillary \u3078\u306e\u9023\u643a\u6a5f\u80fd\u304c\u3042\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u308c\u3092\u6709\u52b9\u306b\u3059\u308b\u3068KartaView \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u305f\u5199\u771f\u304cMapillary \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\uff0eKartaView \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3060\u3051\u3067\u4e21\u65b9\u306bUp \u3067\u304d\u308b\u306e\u3067\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\u30ea\u30f3\u30af\u624b\u9806\u306f\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u30e6\u30fc\u30b6\u30da\u30fc\u30b8\u306b\u5165\u308b\u3053\u3068\u3067\u53ef\u80fd\u3067\u3059\uff0e\n\n\n\n\n\nKartaView \u306b\u3082iOS/Android \u30a2\u30d7\u30ea\u304c\u3042\u308a\u307e\u3059\uff0eMapillary \u306b\u7121\u3044\u6a5f\u80fd\u3068\u3057\u3066OBD2 \u9023\u643a\u6a5f\u80fd\u3042\u3042\u308a\u307e\u3059\uff0e\u30c8\u30f3\u30cd\u30eb\u306a\u3069\u306eGNSS \u96fb\u6ce2\u306e\u5c4a\u304b\u306a\u3044\uff0c\u5f31\u3044\u5834\u6240\u3067OBD2 \u306e\u30c7\u30fc\u30bf\u3067\u88dc\u5f37\u3057\u3066\u5236\u5ea6\u3092\u4e0a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\u6050\u3089\u304f\u3055\u3044\u304d\u3093\u306e\u81ea\u52d5\u8eca\u3067\u3042\u308c\u3070\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3092\u53d6\u308a\u4ed8\u3051\u308b\u3053\u3068\u3067\u5236\u5ea6\u304c\u4e0a\u304c\u308b\u3068\u601d\u3044\u307e\u3059\u7de8\u307f\u78ba\u8a8d\u3067\u3059\uff0e\u81ea\u5206\u306f\u5207\u308a\u901a\u3057\u3084\u6728\u3005\u3067\u56f2\u307e\u308c\u305f\u9053\u8def\u3092\u3088\u304f\u901a\u308aGNSS \u96fb\u6ce2\u3092\u898b\u5931\u3046\u3053\u3068\u304c\u3088\u304f\u3042\u308b\u306e\u3067\u8a66\u3057\u3066\u307f\u305f\u3044\u3068\u3053\u308d\u3067\u3059\uff0e\n\n\nAmazon JP \u3092\u773a\u3081\u308b\u3068\u65e5\u672c\u3067\u9069\u6cd5\u3067\u5229\u7528\u3067\u304d\u305d\u3046\u306a\u3082\u306e\u306f\u3053\u306e\u8fba\u3067\u3057\u3087\u3046\u304b\uff0e\uffe53,132 \u7a0e\u8fbc\uff0e\n\n\n\n\nAmazon.co.jp: NEXAS Nexlink OBD2 / EOBD \u6545\u969c\u8a3a\u65ad\u6a5f \u30b9\u30ad\u30e3\u30f3\u30c4\u30fc\u30eb [ \u8eca \u30fb \u30d0\u30a4\u30af \u517c\u7528 ] (Bluetooth 5.0) [ iPhone Android Windows \u5bfe\u5fdc ] \u65e5\u672c\u8a9e\u8aac\u660e\u66f8\u4ed8\u5c5e TELEC\u8a8d\u8a3c\u6e08 (\u6280\u9069\u756a\u53f7\uff1a214-120673) : \u8eca\uff06\u30d0\u30a4\u30af\n\n\n\n\u30a2\u30d5\u30a7\u30ea\u30a8\u30a4\u30c8\u30ea\u30f3\u30af\n\n\n\n\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067\u3053\u308c\u304b\u3089\u306fKartaView \u30a2\u30d7\u30ea\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\nNote\n\n\n\n\u4eca\u65e5\u306fState of the Map Japan 2025 \u958b\u50ac\u65e5\u3068\u3044\u3046\u3053\u3068\u3067\u5c11\u3057\u95a2\u9023\u3057\u305d\u3046\u306a\u8a18\u4e8b\u306b\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\u5f8c\u3067\u52d5\u753b\u3092\u8996\u8074\u3057\u305f\u3044\u3068\u3053\u308d\uff0e\n\n\n\n\nState of the Map Japan 2025 – State of the Map Japan 2025\n\n\n\nA.\u3064\u304f\u308b\u5834\n\n\nB.\u611f\u3058\u308b\u5834\n\n\nC.\u77e5\u308b\u5834", "date_published": "2025-12-06T19:47:35+09:00", "date_modified": "2025-12-06T19:48:59+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "KartaView", "Mapillary", "OpenStreetMap", "Android" ] }, { "id": "https://matoken.org/blog/?p=4794", "url": "https://matoken.org/blog/2025/12/05/pdfgrep/", "title": "pdf\u30d5\u30a1\u30a4\u30eb\u3092\u76f4\u63a5grep\u3067\u304d\u308bpdfgrep", "content_html": "

\n
\n

Terminal Trove \u3067pdfgrep \u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n

\n
\n

pdfgrep \u306fpdf \u30d5\u30a1\u30a4\u30eb\u3092grep \u3068\u540c\u69d8\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30c1\u3059\u308b\u884c\u3092\u8868\u793a\u3057\u3066\u304f\u308c\u308b\u3082\u306e\u3067\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f GNU grep \u3092\u3042\u308b\u7a0b\u5ea6\u8e0f\u8972\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
Debian sid \u74b0\u5883\u3067source \u304b\u3089build \u3059\u308b\u4f8b
\n
\n
$ sudo apt install libgcrypt20-dev libpoppler-cpp-dev\n$ git clone https://gitlab.com/pdfgrep/pdfgrep\n$ cd pdfgrep\n$ ./autogen.sh\n$ ./configure --prefix=$HOME/usr/local\n$ make\n$ make install
\n
\n
\n
\n
help
\n
\n
$ pdfgrep --help\nUsage: ./src/pdfgrep [OPTION]... PATTERN FILE...\n\nSearch for PATTERN in each FILE.\nPATTERN is, by default, an extended regular expression.\n\nCommonly used options:\n -i, --ignore-case              Ignore case distinctions\n -P, --perl-regexp              Use Perl compatible regular expressions (PCRE)\n -H, --with-filename            Print the file name for each match\n -h, --no-filename              Suppress the prefixing of file name on output\n -n, --page-number              Print page number with output lines\n -c, --count                    Print only a count of matches per file\n     --color WHEN               Use colors for highlighting;\n                                WHEN can be `always', `never' or `auto'\n -p, --page-count               Print only a count of matches per page\n -m, --max-count NUM            Stop reading after NUM matching lines (per file)\n -q, --quiet                    Suppress normal output\n -r, --recursive                Search directories recursively\n -R, --dereference-recursive    Likewise, but follow all symlinks\n     --cache                    Use cache for faster operation\n     --help                     Print this help\n -V, --version                  Show version information\n\nThe above list is only a selection of commonly used options. Please refer\nto the man page for a complete list.
\n
\n
\n
\n
\u9069\u5f53\u306apdf \u30d5\u30a1\u30a4\u30eb\u3092grep
\n
\n
$ pdfgrep raspberry ~/Downloads/MagPi128.pdf | head\nraspberrypi.com\n                       magpi@raspberrypi.com\n                       forums.raspberrypi.com\n                                                     lucy@raspberrypi.com\n                                                     rob@raspberrypi.com\n                                                     charlotte.milligan@raspberrypi.com\n                                                     brian.jepson@raspberrypi.com\n Learn Sense HAT             magpi@raspberrypi.com             (CC BY-NC-SA 3.0).
\n
\n
\n
\n
GNU grep \u3067\u3088\u304f\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5229\u7528
\n
\n
$ pdfgrep -m5 -n -i raspberry ~/Downloads/MagPi128.pdf\n1:Issue 128     April 2023   magpi.cc    The official Raspberry Pi magazine\n1:   Discover coding with Raspberry Pi\n1:            NEW! RASPBERRY PI GLOBAL SHUTTER CAMERA\n2: Industrial Raspberry Pi\n3:(page 44) can help you out on this journey. I hope you take it.                 Raspberry Pi office\n                                     This Month in Raspberry Pi
\n
\n
\n
\n
\u65e5\u672c\u8a9e\u3082ok
\n
\n
$ pdfgrep -r -m1 -n \u30b5\u30fc\u30d0\u30fc ~/Nextcloud_matoken\\@files.matoken.org/Linux/2025/\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//sakura-cominuty-2025/snac-kagolug.pdf:2:\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3092\u7de8\u96c6\u3057\u307e\u3059\u3002 \"protocol\" \u3092\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.08/slide/slide.pdf:1:  \u30eb\u30b5\u30fc\u30d0\u30fc\u306e\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.09/slide/slide.pdf:19:ActivityPub\u3082\u5c11\u3057\u63a2\u3057\u305f\u304c\uff0c\u81ea\u5206\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u843d\u3061\u3066\u3044\u308b\u3082\u306e\u3057\u304b\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.09/slide/matoken-slide.pdf:19:ActivityPub\u3082\u5c11\u3057\u63a2\u3057\u305f\u304c\uff0c\u81ea\u5206\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u843d\u3061\u3066\u3044\u308b\u3082\u306e\u3057\u304b\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.10/slide/slide.pdf:10:     2     \u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\uff0e\"protocol\" \u3092 \"http\"
\n
\n
\n
\n

\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a73\u7d30\u306f\u4ee5\u4e0b\u3092\uff0e

\n
\n
\n\n
\n
\n

\u3053\u308c\u307e\u3067\u306fpdf \u30d5\u30a1\u30a4\u30eb\u3092pdftotext \u306a\u3069\u3067\u30c6\u30ad\u30b9\u30c8\u306b\u5909\u63db\u3057\u3064\u3064grep \u306a\u3069\u3057\u3066\u3044\u307e\u3057\u305f\u304c\u3053\u308c\u3060\u3068\u3069\u306e\u30da\u30fc\u30b8\u5316\u304c\u5206\u304b\u308a\u3065\u3089\u304b\u3063\u305f\u3067\u3059\uff0epdfgrep \u3060\u3068 -n \u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u884c\u6570\u3067\u306f\u306a\u304f\u30da\u30fc\u30b8\u6570\u306b\u306a\u308b\u306e\u3067\u3053\u306e\u3042\u305f\u308a\u304c\u308f\u304b\u308a\u3084\u3059\u304f\u306a\u3063\u3066\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ pdftotext ~/Downloads/RetroBSD_and_LiteBSD.pdf - | grep -m5 -n -i retro\n1:RetroBSD and LiteBSD:\n15:  Contributing to RetroBSD since 2013\n30:  RetroBSD: an OS from the past in 128k RAM\n35:\n   RetroBSD and LiteBSD: an overview\n39:  RetroBSD: PIC32MX\n$ pdfgrep -m5 -n -i retro ~/Downloads/RetroBSD_and_LiteBSD.pdf\n1:RetroBSD and LiteBSD:\n3:  Contributing to RetroBSD since 2013\n4:  RetroBSD: an OS from the past in 128k RAM\n5:RetroBSD and LiteBSD: an overview\n5:     RetroBSD: PIC32MX
\n
\n
\n
\n

\u3068\uff0c\u4e00\u901a\u308a\u904a\u3093\u3067\u304b\u3089\u6c17\u3065\u3044\u305f\u306e\u3067\u3059\u304c\uff0cdebian \u306b\u306fpdfgrep \u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u7d50\u69cb\u524d\u304b\u3089\u5b58\u5728\u3057\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ apt-cache search pdfgrep\npdfgrep - \u6b63\u898f\u8868\u73fe\u306b\u30de\u30c3\u30c1\u3059\u308b\u6587\u5b57\u5217\u3092 pdf \u30d5\u30a1\u30a4\u30eb\u5185\u3067\u691c\u7d22\n$ rmadison pdfgrep\npdfgrep    | 2.1.2-1       | oldoldstable   | source, amd64, arm64, armhf, i386\npdfgrep    | 2.1.2-1       | oldstable      | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\npdfgrep    | 2.2.0-0.1     | stable         | source\npdfgrep    | 2.2.0-0.1     | testing        | source\npdfgrep    | 2.2.0-0.1     | unstable       | source\npdfgrep    | 2.2.0-0.1     | unstable-debug | source\npdfgrep    | 2.2.0-0.1+b2  | stable         | amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\npdfgrep    | 2.2.0-0.1+b2  | testing        | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\npdfgrep    | 2.2.0-0.1+b2  | unstable       | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\n$ sudo apt install pdfgrep\n$ /usr/bin/pdfgrep -V\nThis is pdfgrep version 2.2.0.\n\nUsing poppler version 25.03.0\nUsing libpcre2 version 10.46 2025-08-27
\n
\n
\n
\n
\u74b0\u5883
\n
\n
$ pdfgrep -V\nThis is pdfgrep version 2.2.0.\n\nUsing poppler version 25.03.0\nUsing libpcre2 version 10.46 2025-08-27\nBuilt from git-commit v2.2.0-7-gaa71955\n$ /usr/bin/pdfgrep -V\nThis is pdfgrep version 2.2.0.\n\nUsing poppler version 25.03.0\nUsing libpcre2 version 10.46 2025-08-27\n$ dpkg-query -W poppler-utils\npoppler-utils   25.03.0-11.1+b1\n$ pdftotext -v\npdftotext version 25.03.0\nCopyright 2005-2025 The Poppler Developers - http://poppler.freedesktop.org\nCopyright 1996-2011, 2022 Glyph & Cog, LLC\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n", "content_text": "Terminal Trove \u3067pdfgrep \u3068\u3044\u3046\u30c4\u30fc\u30eb\u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\npdfgrep / pdfgrep \u00b7 GitLab\n\n\n\npdfgrep – A command line utility to search text in PDF files. – Terminal Trove\n\n\n\n\n\npdfgrep\n\n\n\n\n\npdfgrep \u306fpdf \u30d5\u30a1\u30a4\u30eb\u3092grep \u3068\u540c\u69d8\u30d1\u30bf\u30fc\u30f3\u306b\u30de\u30c3\u30c1\u3059\u308b\u884c\u3092\u8868\u793a\u3057\u3066\u304f\u308c\u308b\u3082\u306e\u3067\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f GNU grep \u3092\u3042\u308b\u7a0b\u5ea6\u8e0f\u8972\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\nDebian sid \u74b0\u5883\u3067source \u304b\u3089build \u3059\u308b\u4f8b\n\n$ sudo apt install libgcrypt20-dev libpoppler-cpp-dev\n$ git clone https://gitlab.com/pdfgrep/pdfgrep\n$ cd pdfgrep\n$ ./autogen.sh\n$ ./configure --prefix=$HOME/usr/local\n$ make\n$ make install\n\n\n\nhelp\n\n$ pdfgrep --help\nUsage: ./src/pdfgrep [OPTION]... PATTERN FILE...\n\nSearch for PATTERN in each FILE.\nPATTERN is, by default, an extended regular expression.\n\nCommonly used options:\n -i, --ignore-case Ignore case distinctions\n -P, --perl-regexp Use Perl compatible regular expressions (PCRE)\n -H, --with-filename Print the file name for each match\n -h, --no-filename Suppress the prefixing of file name on output\n -n, --page-number Print page number with output lines\n -c, --count Print only a count of matches per file\n --color WHEN Use colors for highlighting;\n WHEN can be `always', `never' or `auto'\n -p, --page-count Print only a count of matches per page\n -m, --max-count NUM Stop reading after NUM matching lines (per file)\n -q, --quiet Suppress normal output\n -r, --recursive Search directories recursively\n -R, --dereference-recursive Likewise, but follow all symlinks\n --cache Use cache for faster operation\n --help Print this help\n -V, --version Show version information\n\nThe above list is only a selection of commonly used options. Please refer\nto the man page for a complete list.\n\n\n\n\u9069\u5f53\u306apdf \u30d5\u30a1\u30a4\u30eb\u3092grep\n\n$ pdfgrep raspberry ~/Downloads/MagPi128.pdf | head\nraspberrypi.com\n magpi@raspberrypi.com\n forums.raspberrypi.com\n lucy@raspberrypi.com\n rob@raspberrypi.com\n charlotte.milligan@raspberrypi.com\n brian.jepson@raspberrypi.com\n Learn Sense HAT magpi@raspberrypi.com (CC BY-NC-SA 3.0).\n\n\n\nGNU grep \u3067\u3088\u304f\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5229\u7528\n\n$ pdfgrep -m5 -n -i raspberry ~/Downloads/MagPi128.pdf\n1:Issue 128 April 2023 magpi.cc The official Raspberry Pi magazine\n1: Discover coding with Raspberry Pi\n1: NEW! RASPBERRY PI GLOBAL SHUTTER CAMERA\n2: Industrial Raspberry Pi\n3:(page 44) can help you out on this journey. I hope you take it. Raspberry Pi office\n This Month in Raspberry Pi\n\n\n\n\u65e5\u672c\u8a9e\u3082ok\n\n$ pdfgrep -r -m1 -n \u30b5\u30fc\u30d0\u30fc ~/Nextcloud_matoken\\@files.matoken.org/Linux/2025/\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//sakura-cominuty-2025/snac-kagolug.pdf:2:\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u3092\u7de8\u96c6\u3057\u307e\u3059\u3002 \"protocol\" \u3092\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.08/slide/slide.pdf:1: \u30eb\u30b5\u30fc\u30d0\u30fc\u306e\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.09/slide/slide.pdf:19:ActivityPub\u3082\u5c11\u3057\u63a2\u3057\u305f\u304c\uff0c\u81ea\u5206\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u843d\u3061\u3066\u3044\u308b\u3082\u306e\u3057\u304b\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.09/slide/matoken-slide.pdf:19:ActivityPub\u3082\u5c11\u3057\u63a2\u3057\u305f\u304c\uff0c\u81ea\u5206\u3068\u30b5\u30fc\u30d0\u30fc\u306e\u843d\u3061\u3066\u3044\u308b\u3082\u306e\u3057\u304b\n/home/matoken/Nextcloud_matoken@files.matoken.org/Linux/2025//kagolug2025.10/slide/slide.pdf:10: 2 \u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\uff0e\"protocol\" \u3092 \"http\"\n\n\n\n\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a73\u7d30\u306f\u4ee5\u4e0b\u3092\uff0e\n\n\n\n\npdfgrep – Manpage for 2.2.0\n\n\n\n\n\u3053\u308c\u307e\u3067\u306fpdf \u30d5\u30a1\u30a4\u30eb\u3092pdftotext \u306a\u3069\u3067\u30c6\u30ad\u30b9\u30c8\u306b\u5909\u63db\u3057\u3064\u3064grep \u306a\u3069\u3057\u3066\u3044\u307e\u3057\u305f\u304c\u3053\u308c\u3060\u3068\u3069\u306e\u30da\u30fc\u30b8\u5316\u304c\u5206\u304b\u308a\u3065\u3089\u304b\u3063\u305f\u3067\u3059\uff0epdfgrep \u3060\u3068 -n \u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u884c\u6570\u3067\u306f\u306a\u304f\u30da\u30fc\u30b8\u6570\u306b\u306a\u308b\u306e\u3067\u3053\u306e\u3042\u305f\u308a\u304c\u308f\u304b\u308a\u3084\u3059\u304f\u306a\u3063\u3066\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n$ pdftotext ~/Downloads/RetroBSD_and_LiteBSD.pdf - | grep -m5 -n -i retro\n1:RetroBSD and LiteBSD:\n15: Contributing to RetroBSD since 2013\n30: RetroBSD: an OS from the past in 128k RAM\n35:\n RetroBSD and LiteBSD: an overview\n39: RetroBSD: PIC32MX\n$ pdfgrep -m5 -n -i retro ~/Downloads/RetroBSD_and_LiteBSD.pdf\n1:RetroBSD and LiteBSD:\n3: Contributing to RetroBSD since 2013\n4: RetroBSD: an OS from the past in 128k RAM\n5:RetroBSD and LiteBSD: an overview\n5: RetroBSD: PIC32MX\n\n\n\n\u3068\uff0c\u4e00\u901a\u308a\u904a\u3093\u3067\u304b\u3089\u6c17\u3065\u3044\u305f\u306e\u3067\u3059\u304c\uff0cdebian \u306b\u306fpdfgrep \u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u7d50\u69cb\u524d\u304b\u3089\u5b58\u5728\u3057\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n$ apt-cache search pdfgrep\npdfgrep - \u6b63\u898f\u8868\u73fe\u306b\u30de\u30c3\u30c1\u3059\u308b\u6587\u5b57\u5217\u3092 pdf \u30d5\u30a1\u30a4\u30eb\u5185\u3067\u691c\u7d22\n$ rmadison pdfgrep\npdfgrep | 2.1.2-1 | oldoldstable | source, amd64, arm64, armhf, i386\npdfgrep | 2.1.2-1 | oldstable | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\npdfgrep | 2.2.0-0.1 | stable | source\npdfgrep | 2.2.0-0.1 | testing | source\npdfgrep | 2.2.0-0.1 | unstable | source\npdfgrep | 2.2.0-0.1 | unstable-debug | source\npdfgrep | 2.2.0-0.1+b2 | stable | amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\npdfgrep | 2.2.0-0.1+b2 | testing | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\npdfgrep | 2.2.0-0.1+b2 | unstable | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\n$ sudo apt install pdfgrep\n$ /usr/bin/pdfgrep -V\nThis is pdfgrep version 2.2.0.\n\nUsing poppler version 25.03.0\nUsing libpcre2 version 10.46 2025-08-27\n\n\n\n\u74b0\u5883\n\n$ pdfgrep -V\nThis is pdfgrep version 2.2.0.\n\nUsing poppler version 25.03.0\nUsing libpcre2 version 10.46 2025-08-27\nBuilt from git-commit v2.2.0-7-gaa71955\n$ /usr/bin/pdfgrep -V\nThis is pdfgrep version 2.2.0.\n\nUsing poppler version 25.03.0\nUsing libpcre2 version 10.46 2025-08-27\n$ dpkg-query -W poppler-utils\npoppler-utils 25.03.0-11.1+b1\n$ pdftotext -v\npdftotext version 25.03.0\nCopyright 2005-2025 The Poppler Developers - http://poppler.freedesktop.org\nCopyright 1996-2011, 2022 Glyph & Cog, LLC\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64", "date_published": "2025-12-05T20:27:51+09:00", "date_modified": "2025-12-05T20:27:53+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "pdf", "pdfgrep", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=4778", "url": "https://matoken.org/blog/2025/12/04/pcmanfm-qt-custom-actions/", "title": "PCManFM-Qt \u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fc\u306b\u30ab\u30b9\u30bf\u30e0\u9805\u76ee\u3092\u8ffd\u52a0", "content_html": "
\n

\"pcmanfm

\n
\n
\n

\u6700\u8fd1\u30d5\u30a1\u30a4\u30eb\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306bPCManFM-Qt \u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n\n
\n
\n

naitilus \u3060\u3068\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fc\u306b\u30ab\u30b9\u30bf\u30e0\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u8a2d\u5b9a\u3067\u304d\u3066\u4fbf\u5229\u3060\u3063\u305f\u306e\u3067PCManFM-Qt \u3067\u3082\u51fa\u6765\u306a\u3044\u304b\u306a\u3068\u8abf\u3079\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u898b\u3048\u305f\u3089\u7121\u304b\u3063\u305f\u306e\u3067\u4ee5\u4e0b\u306e\u3042\u305f\u308a\u3092\u53c2\u8003\u306b\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n
\n

~/.local/share/file-manager/actions/ \u4ee5\u4e0b\u306b .desktop \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u5b9f\u73fe\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210
\n
\n
$ mkdir -p ~/.local/share/file-manager/actions/
\n
\n
\n
\n

\u6b21\u306b\u3084\u308a\u305f\u3044\u3053\u3068\u3092.decktop \u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u307e\u3059\uff0e

\n
\n
\n
~/.local/share/file-manager/actions/fuse-archive.desktop
\n
\n
[Desktop Entry]\nType=Action\nProfiles=profile_id\nName=archive file mount\nIcon=application-default-icon\n\n[X-Action-Profile profile_id]\nMimeTypes=application/*;\nExec=fuse-archive %f
\n
\n
\n
\n

MimeTypes \u306b\u66f8\u3044\u305ftype \u306b\u4e00\u81f4\u3059\u308b\u3068\u304d\u306b\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306a\u306e\u3067\u3061\u3083\u3093\u3068\u66f8\u3044\u305f\u307b\u3046\u304c\u3044\u3044\u306e\u3067\u3059\u304c\uff0c\u4eca\u56de\u306f\u5bfe\u8c61\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u3067\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb\u304c\u5927\u91cf\u3067\u3059\u3068\u308a\u3042\u3048\u305a MimeTypes=application/*; \u306b\u3057\u3066\u304a\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n

https://www.iana.org/assignments/media-types/media-types.xhtml#application

\n
\n
\n

\u3053\u306e\u5f8cPCManFM-Qt \u3092\u8d77\u52d5\u3057\u76f4\u3059\u3068\u8a72\u5f53\u306e .desktop \u304c\u8a8d\u8b58\u3055\u308c\uff0c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e
\nnautilug \u306f\u5373\u53cd\u6620\u3055\u308c\u3066\u3044\u305f\u306e\u3067\u5c11\u3057\u9762\u5012\u3067\u3059\u306d\uff0e

\n
\n
\n

\"pcmanfm

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W pcmanfm-qt\npcmanfm-qt      2.2.0-1\n$ fuse-archive --version\nfuse-archive version: 1.7\nlibarchive version: libarchive 3.7.4\nbzlib version: 1.0.8, 13-Jul-2019\nliblz4 version: 1.10.0\nliblzma version: 5.8.1\nlibzstd version: 1.5.7\nzlib version: 1.3.1\nFUSE library version: 2.9.9\nfusermount3 version: 3.17.4\nusing FUSE kernel interface version 7.19\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n", "content_text": "\u6700\u8fd1\u30d5\u30a1\u30a4\u30eb\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306bPCManFM-Qt \u3092\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nlxqt/pcmanfm-qt: File manager and desktop icon manager (Qt port of PCManFM and libfm)\n\n\n\n\nnaitilus \u3060\u3068\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fc\u306b\u30ab\u30b9\u30bf\u30e0\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u8a2d\u5b9a\u3067\u304d\u3066\u4fbf\u5229\u3060\u3063\u305f\u306e\u3067PCManFM-Qt \u3067\u3082\u51fa\u6765\u306a\u3044\u304b\u306a\u3068\u8abf\u3079\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u898b\u3048\u305f\u3089\u7121\u304b\u3063\u305f\u306e\u3067\u4ee5\u4e0b\u306e\u3042\u305f\u308a\u3092\u53c2\u8003\u306b\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30e1\u30cb\u30e5\u30fc\u3078\u306e\u30ab\u30b9\u30bf\u30e0\u9805\u76ee\u306e\u8ffd\u52a0\n\n\nscripting_pcmanfm [Batocera.linux – Wiki]\n\n\npaius1/pcmanfm-actions: Collection of Custom Action Scripts for PcManFM\n\n\n\n\n~/.local/share/file-manager/actions/ \u4ee5\u4e0b\u306b .desktop \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u5b9f\u73fe\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\n\n$ mkdir -p ~/.local/share/file-manager/actions/\n\n\n\n\u6b21\u306b\u3084\u308a\u305f\u3044\u3053\u3068\u3092.decktop \u30d5\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u307e\u3059\uff0e\n\n\n~/.local/share/file-manager/actions/fuse-archive.desktop\n\n[Desktop Entry]\nType=Action\nProfiles=profile_id\nName=archive file mount\nIcon=application-default-icon\n\n[X-Action-Profile profile_id]\nMimeTypes=application/*;\nExec=fuse-archive %f\n\n\n\nMimeTypes \u306b\u66f8\u3044\u305ftype \u306b\u4e00\u81f4\u3059\u308b\u3068\u304d\u306b\u8868\u793a\u3055\u308c\u308b\u3088\u3046\u306a\u306e\u3067\u3061\u3083\u3093\u3068\u66f8\u3044\u305f\u307b\u3046\u304c\u3044\u3044\u306e\u3067\u3059\u304c\uff0c\u4eca\u56de\u306f\u5bfe\u8c61\u304c\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb\u3067\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb\u304c\u5927\u91cf\u3067\u3059\u3068\u308a\u3042\u3048\u305a MimeTypes=application/*; \u306b\u3057\u3066\u304a\u304d\u307e\u3057\u305f\uff0e\n\n\nhttps://www.iana.org/assignments/media-types/media-types.xhtml#application\n\n\n\u3053\u306e\u5f8cPCManFM-Qt \u3092\u8d77\u52d5\u3057\u76f4\u3059\u3068\u8a72\u5f53\u306e .desktop \u304c\u8a8d\u8b58\u3055\u308c\uff0c\u5229\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\nnautilug \u306f\u5373\u53cd\u6620\u3055\u308c\u3066\u3044\u305f\u306e\u3067\u5c11\u3057\u9762\u5012\u3067\u3059\u306d\uff0e\n\n\n\n\n\n\u74b0\u5883\n\n$ dpkg-query -W pcmanfm-qt\npcmanfm-qt 2.2.0-1\n$ fuse-archive --version\nfuse-archive version: 1.7\nlibarchive version: libarchive 3.7.4\nbzlib version: 1.0.8, 13-Jul-2019\nliblz4 version: 1.10.0\nliblzma version: 5.8.1\nlibzstd version: 1.5.7\nzlib version: 1.3.1\nFUSE library version: 2.9.9\nfusermount3 version: 3.17.4\nusing FUSE kernel interface version 7.19\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64", "date_published": "2025-12-04T20:00:13+09:00", "date_modified": "2025-12-04T20:00:15+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9?s=512&d=mm&r=g" }, "tags": [ "filemanager", "PCManFM", "Debian", "Linux", "sid" ] } ] }