{ "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/category/linux/debian-linux/feed/json -- and add it your reader.", "next_url": "https://matoken.org/blog/category/linux/debian-linux/feed/json?paged=2", "home_page_url": "https://matoken.org/blog/category/linux/debian-linux", "feed_url": "https://matoken.org/blog/category/linux/debian-linux/feed/json", "language": "ja", "title": "Debian – 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=5332", "url": "https://matoken.org/blog/2026/03/13/firefox-extension-snapwer/", "title": "Web\u4e0a\u306eActivityPub\u6295\u7a3f\u3092snac\u3067\u4f7f\u3044\u3084\u3059\u304f\u3059\u308bFirefox\u62e1\u5f35\u6a5f\u80fd\u306eSnacWer", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u8efd\u91cfActivityPub server \u306esnac\u7528Firefox addon \u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u3053\u306eAddOn\u4f5c\u8005\u306e\u65b9\u306etoot\u3092snac\u306e\u4f5c\u8005\u304cboost\u3057\u3066\u3044\u305f\u306e\u3067\u77e5\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

Hello #snac users. If you enjoy exploring the Fediverse via the web, you might find this #FirefoxExtension I created helpful. It lets you interact with almost any post more easily. It also works, of course, on Firefox derivates.

\n
\n
\n

Feel free to take a look.

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

Web\u3067snac\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4fbf\u5229\u306b\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u306e\u3088\u3046\u3067\u3059\uff0e
\n\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

\u4ee5\u4e0b\u304b\u3089Firefox\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u767b\u9332\u3057\u307e\u3059\uff0e

\n
\n\n
\n

\u62e1\u5f35\u6a5f\u80fd\u306e\u8a2d\u5b9a\u304b\u3089\u81ea\u5206\u306esnac\u30a2\u30c9\u30ec\u30b9\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\u3053\u308c\u3067\u6e96\u5099\u5b8c\u4e86\u3067\u3059\uff0e

\n
\n
\n

\"snacwer00\"

\n
\n
\n

\u8a66\u3057\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\uff0eMastodon\u306a\u3069\u306eActivityPub\u306e\u516c\u958b\u6295\u7a3f\u3092\u958b\u304d\u307e\u3059\uff0e\u3059\u308b\u3068\uff0c\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306e\u53f3\u5074\u306bsnac\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n
\n

\"snacwer01\"

\n
\n
\n

snac\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u8a2d\u5b9a\u3057\u305f\u81ea\u5206\u306esnac\u3067\u305d\u306e\u6295\u7a3f\u304c\u958b\u304b\u308c\u307e\u3059\uff0e\u3053\u3053\u3067Like\u3084Boost\u306a\u3069\u306e\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0eURL\u3092\u30b3\u30d4\u30fc\u3057\u3066snac\u306b\u6301\u3063\u3066\u3044\u3063\u305f\u308a\u3059\u308b\u3088\u308a\u4fbf\u5229\u3067\u3059 :)

\n
\n
\n

\"snacwer02\"

\n
\n
\n
\u74b0\u5883
\n
\n
\n

SnacWer \u30d0\u30fc\u30b8\u30e7\u30f3 1.0.1

\n
\n
\n
\n
\n
\n
$ dpkg-query -W firefox\nfirefox 148.0.2-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n\n
\n
\n", "content_text": "\u8efd\u91cfActivityPub server \u306esnac\u7528Firefox addon \u3092\u77e5\u3063\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\u3053\u306eAddOn\u4f5c\u8005\u306e\u65b9\u306etoot\u3092snac\u306e\u4f5c\u8005\u304cboost\u3057\u3066\u3044\u305f\u306e\u3067\u77e5\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\nHello #snac users. If you enjoy exploring the Fediverse via the web, you might find this #FirefoxExtension I created helpful. It lets you interact with almost any post more easily. It also works, of course, on Firefox derivates.\n\n\nFeel free to take a look.\n\n\nhttps://addons.mozilla.org/addon/snacwer/\n\n\nSource code:\nhttps://codeberg.org/fidiben/SnacWer\n\n\n\n— unlogged (@unlogged@snac.unlogged.it)\n\n\n\nWeb\u3067snac\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4fbf\u5229\u306b\u306a\u308b\u62e1\u5f35\u6a5f\u80fd\u306e\u3088\u3046\u3067\u3059\uff0e\n\u65e9\u901f\u5c0e\u5165\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\u4ee5\u4e0b\u304b\u3089Firefox\u306b\u62e1\u5f35\u6a5f\u80fd\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\n\n\n\n\nSnacWer \u2013 Firefox (ja) \u5411\u3051\u62e1\u5f35\u6a5f\u80fd\u3092\u5165\u624b\n\n\n\n\n\u62e1\u5f35\u6a5f\u80fd\u306e\u8a2d\u5b9a\u304b\u3089\u81ea\u5206\u306esnac\u30a2\u30c9\u30ec\u30b9\u3092\u767b\u9332\u3057\u307e\u3059\uff0e\u3053\u308c\u3067\u6e96\u5099\u5b8c\u4e86\u3067\u3059\uff0e\n\n\n\n\n\n\u8a66\u3057\u306b\u4f7f\u3063\u3066\u307f\u307e\u3057\u3087\u3046\uff0eMastodon\u306a\u3069\u306eActivityPub\u306e\u516c\u958b\u6295\u7a3f\u3092\u958b\u304d\u307e\u3059\uff0e\u3059\u308b\u3068\uff0c\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306e\u53f3\u5074\u306bsnac\u306e\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n\nsnac\u306e\u30a2\u30a4\u30b3\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u8a2d\u5b9a\u3057\u305f\u81ea\u5206\u306esnac\u3067\u305d\u306e\u6295\u7a3f\u304c\u958b\u304b\u308c\u307e\u3059\uff0e\u3053\u3053\u3067Like\u3084Boost\u306a\u3069\u306e\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0eURL\u3092\u30b3\u30d4\u30fc\u3057\u3066snac\u306b\u6301\u3063\u3066\u3044\u3063\u305f\u308a\u3059\u308b\u3088\u308a\u4fbf\u5229\u3067\u3059 :)\n\n\n\n\n\n\u74b0\u5883\n\n\nSnacWer \u30d0\u30fc\u30b8\u30e7\u30f3 1.0.1\n\n\n\n\n\n$ dpkg-query -W firefox\nfirefox 148.0.2-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\ntoot\n\n\nunlogged (@unlogged@snac.unlogged.it)\n\n\nmatoken:susie: (@matoken@snac.matoken.org)", "date_published": "2026-03-13T06:45:02+09:00", "date_modified": "2026-03-13T06:45:05+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "Firefox", "snac", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5314", "url": "https://matoken.org/blog/2026/03/07/gnome-setting-reset/", "title": "\u4e45\u3005\u306bGNOME\u74b0\u5883\u3092\u8d77\u52d5\u3057\u305f\u3089\u64cd\u4f5c\u3067\u304d\u306a\u304f\u306a\u3063\u3066\u3044\u305f\u306e\u3067\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8", "content_html": "
\n
\n

\n
\n

\u3044\u3064\u3082Xfce4 \u3067\u4f7f\u3063\u3066\u3044\u308bDebian statble(trixie) \u74b0\u5883\u3067\u4e45\u3005\u306bGNOME \u74b0\u5883\u3092\u8d77\u52d5\u3057\u305f\u3089\u64cd\u4f5c\u3092\u53d7\u3051\u4ed8\u3051\u307e\u305b\u3093\uff0e
\n\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u3066\u5fa9\u65e7\u3057\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

GNOME \u306e\u72b6\u6cc1\u306f\u4e0a\u90e8\u306e\u6642\u8a08\u3084\u62e1\u5f35\u6a5f\u80fd\u306eRunCat \u306a\u3093\u304b\u306f\u52d5\u3044\u3066\u3044\u308b\u3051\u3069\u30ad\u30fc\u306e\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305a\u64cd\u4f5c\u3067\u304d\u307e\u305b\u3093\uff0e\u30de\u30a6\u30b9\u3082\u30ab\u30fc\u30bd\u30eb\u304c\u5076\u306b\u898b\u3048\u308b\u3051\u3069\u30af\u30ea\u30c3\u30af\u3057\u3066\u3082\u4f55\u3082\u8d77\u304d\u307e\u305b\u3093\uff0e
\n\u3068\u3044\u3046\u611f\u3058\u3067\u4f7f\u3044\u7269\u306b\u306a\u308a\u307e\u305b\u3093\uff0e
\n\u5143\u3005\u307b\u3068\u3093\u3069\u4f7f\u3063\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u8a2d\u5b9a\u3092\u521d\u671f\u5316\u3057\u3066\u307f\u308b\u3053\u3068\u306b\uff0e

\n
\n
\n

\u307e\u305a\u306fGNOME \u304b\u3089\u3069\u3046\u306b\u304b\u3057\u3066\u629c\u3051\u307e\u3059\uff0e\u4eca\u56de\u306f\u30ad\u30fc\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305aCtrl+Alt+F1 \u306a\u3093\u304b\u3067\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u3082\u964d\u308a\u308c\u306a\u3044\u306e\u3067\u56f0\u308a\u307e\u3057\u305f\u304c\uff0csshd \u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u305f\u306e\u3067\u305d\u308c\u3067\u5165\u3063\u3066\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u30de\u30cd\u30fc\u30b8\u30e3(\u4eca\u56de\u306fLightDM) \u3092\u518d\u8d77\u52d5\u3057\u3066\u629c\u3051\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ sudo service lightdm restart
\n
\n
\n
\n\n\n\n\n\n
\n
Tip
\n
\n
\n

\u3082\u3057\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u3082\u3067\u304d\u306a\u3044\u5834\u5408Magic SysRq key \u306f\u53cd\u5fdc\u3057\u305f\u306e\u3067\u3053\u308c\u3067\u518d\u8d77\u52d5\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\uff0e

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

GNOME \u304b\u3089\u629c\u3051\u305f\u5f8c\uff0cGNOME \u4ee5\u5916\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u74b0\u5883\u304b\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\uff0cssh \u306a\u3069\u3067dconf \u30b3\u30de\u30f3\u30c9\u3067\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ dconf dump / > dconf.backup (1)\n$ dconf reset -f /org/gnome (2)
\n
\n
\n
\n
    \n
  1. \n

    \u5ff5\u306e\u70badconf \u3092backup

    \n
  2. \n
  3. \n

    dconf \u306egnome \u4ee5\u4e0b\u3092\u30ea\u30bb\u30c3\u30c8

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

\u3053\u306e\u5f8cGNOME \u306b\u5165\u308a\u76f4\u3059\u3053\u3068\u3067\u5fa9\u65e7\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n

\"GNOME48

\n
\n
\n

\u99c4\u76ee\u3060\u3063\u305f\u5834\u5408 dconf reset -f / \u307e\u3067\u3084\u3063\u3066\u307f\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e
\n\u305d\u308c\u3067\u3082\u99c4\u76ee\u306a\u3089$HOME \u4ee5\u4e0b\u306eGNOME \u95a2\u9023\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u6d88\u3059\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e

\n
\n
\n

\u3053\u306e\u74b0\u5883\u306fDebian bookworm \u304b\u3089dist-upgrade \u3057\u305f\u74b0\u5883\u306a\u306e\u3067dist-uograde \u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u304a\u58ca\u308c\u305f\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e
\n\u62e1\u5f35\u6a5f\u80fd\u3082\u602a\u3057\u3044\u304b\u306a\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\u4eca\u56de\u306e\u30ea\u30bb\u30c3\u30c8\u3067\u306f\u62e1\u5f35\u6a5f\u80fd\u306f\u8a2d\u5b9a\u3055\u308c\u305f\u307e\u307e\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u306e\u3067\u6050\u3089\u304f\u95a2\u4fc2\u306a\u304b\u3063\u305f\u3067\u3059\uff0e(\u62e1\u5f35\u6a5f\u80fd\u306e\u554f\u984c\u306e\u5834\u5408\u4eca\u56de\u306e\u65b9\u6cd5\u3067\u306f\u30ea\u30bb\u30c3\u30c8\u3067\u304d\u306a\u3044\u3067\u3059\u306d)

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W gnome lightdm dconf-cli\ndconf-cli       0.40.0-5\ngnome   1:48+2\nlightdm 1.32.0-6+b2\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u3044\u3064\u3082Xfce4 \u3067\u4f7f\u3063\u3066\u3044\u308bDebian statble(trixie) \u74b0\u5883\u3067\u4e45\u3005\u306bGNOME \u74b0\u5883\u3092\u8d77\u52d5\u3057\u305f\u3089\u64cd\u4f5c\u3092\u53d7\u3051\u4ed8\u3051\u307e\u305b\u3093\uff0e\n\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u3066\u5fa9\u65e7\u3057\u307e\u3057\u305f\uff0e\n\n\n\nGNOME \u306e\u72b6\u6cc1\u306f\u4e0a\u90e8\u306e\u6642\u8a08\u3084\u62e1\u5f35\u6a5f\u80fd\u306eRunCat \u306a\u3093\u304b\u306f\u52d5\u3044\u3066\u3044\u308b\u3051\u3069\u30ad\u30fc\u306e\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305a\u64cd\u4f5c\u3067\u304d\u307e\u305b\u3093\uff0e\u30de\u30a6\u30b9\u3082\u30ab\u30fc\u30bd\u30eb\u304c\u5076\u306b\u898b\u3048\u308b\u3051\u3069\u30af\u30ea\u30c3\u30af\u3057\u3066\u3082\u4f55\u3082\u8d77\u304d\u307e\u305b\u3093\uff0e\n\u3068\u3044\u3046\u611f\u3058\u3067\u4f7f\u3044\u7269\u306b\u306a\u308a\u307e\u305b\u3093\uff0e\n\u5143\u3005\u307b\u3068\u3093\u3069\u4f7f\u3063\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u8a2d\u5b9a\u3092\u521d\u671f\u5316\u3057\u3066\u307f\u308b\u3053\u3068\u306b\uff0e\n\n\n\u307e\u305a\u306fGNOME \u304b\u3089\u3069\u3046\u306b\u304b\u3057\u3066\u629c\u3051\u307e\u3059\uff0e\u4eca\u56de\u306f\u30ad\u30fc\u5165\u529b\u3092\u53d7\u3051\u4ed8\u3051\u305aCtrl+Alt+F1 \u306a\u3093\u304b\u3067\u30b3\u30f3\u30bd\u30fc\u30eb\u306b\u3082\u964d\u308a\u308c\u306a\u3044\u306e\u3067\u56f0\u308a\u307e\u3057\u305f\u304c\uff0csshd \u3092\u6709\u52b9\u306b\u3057\u3066\u3044\u305f\u306e\u3067\u305d\u308c\u3067\u5165\u3063\u3066\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u30de\u30cd\u30fc\u30b8\u30e3(\u4eca\u56de\u306fLightDM) \u3092\u518d\u8d77\u52d5\u3057\u3066\u629c\u3051\u307e\u3057\u305f\uff0e\n\n\n\n$ sudo service lightdm restart\n\n\n\n\n\n\nTip\n\n\n\n\u3082\u3057\u30ea\u30e2\u30fc\u30c8\u64cd\u4f5c\u3082\u3067\u304d\u306a\u3044\u5834\u5408Magic SysRq key \u306f\u53cd\u5fdc\u3057\u305f\u306e\u3067\u3053\u308c\u3067\u518d\u8d77\u52d5\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\uff0e\n\n\n\n\nkernel.org/doc/Documentation/admin-guide/sysrq.rst\n\n\n\n\n\n\n\n\nGNOME \u304b\u3089\u629c\u3051\u305f\u5f8c\uff0cGNOME \u4ee5\u5916\u306e\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u74b0\u5883\u304b\uff0c\u30b3\u30f3\u30bd\u30fc\u30eb\uff0cssh \u306a\u3069\u3067dconf \u30b3\u30de\u30f3\u30c9\u3067\u8a2d\u5b9a\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3059\uff0e\n\n\n\n$ dconf dump / > dconf.backup (1)\n$ dconf reset -f /org/gnome (2)\n\n\n\n\n\n\u5ff5\u306e\u70badconf \u3092backup\n\n\ndconf \u306egnome \u4ee5\u4e0b\u3092\u30ea\u30bb\u30c3\u30c8\n\n\n\n\n\u3053\u306e\u5f8cGNOME \u306b\u5165\u308a\u76f4\u3059\u3053\u3068\u3067\u5fa9\u65e7\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u99c4\u76ee\u3060\u3063\u305f\u5834\u5408 dconf reset -f / \u307e\u3067\u3084\u3063\u3066\u307f\u3066\u3082\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e\n\u305d\u308c\u3067\u3082\u99c4\u76ee\u306a\u3089$HOME \u4ee5\u4e0b\u306eGNOME \u95a2\u9023\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u6d88\u3059\u611f\u3058\u3067\u3057\u3087\u3046\u304b\uff0e\n\n\n\u3053\u306e\u74b0\u5883\u306fDebian bookworm \u304b\u3089dist-upgrade \u3057\u305f\u74b0\u5883\u306a\u306e\u3067dist-uograde \u306e\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u304a\u58ca\u308c\u305f\u306e\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0e\n\u62e1\u5f35\u6a5f\u80fd\u3082\u602a\u3057\u3044\u304b\u306a\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\u4eca\u56de\u306e\u30ea\u30bb\u30c3\u30c8\u3067\u306f\u62e1\u5f35\u6a5f\u80fd\u306f\u8a2d\u5b9a\u3055\u308c\u305f\u307e\u307e\u3067\u52d5\u4f5c\u3057\u3066\u3044\u308b\u306e\u3067\u6050\u3089\u304f\u95a2\u4fc2\u306a\u304b\u3063\u305f\u3067\u3059\uff0e(\u62e1\u5f35\u6a5f\u80fd\u306e\u554f\u984c\u306e\u5834\u5408\u4eca\u56de\u306e\u65b9\u6cd5\u3067\u306f\u30ea\u30bb\u30c3\u30c8\u3067\u304d\u306a\u3044\u3067\u3059\u306d)\n\n\n\u74b0\u5883\n\n$ dpkg-query -W gnome lightdm dconf-cli\ndconf-cli 0.40.0-5\ngnome 1:48+2\nlightdm 1.32.0-6+b2\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch\nx86_64", "date_published": "2026-03-07T05:46:07+09:00", "date_modified": "2026-03-07T05:46:09+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "dconf", "Gnome", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5297", "url": "https://matoken.org/blog/2026/03/02/ndlocr-lite/", "title": "dGPU\u304c\u306a\u304f\u3066\u3082\u52d5\u4f5c\u3059\u308b\u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u306eNDLOCR-Lite\u304c\u516c\u958b\u3055\u308c\u3066\u3044\u305f\u306e\u3067\u8a66\u3059", "content_html": "
\n
\n

\n
\n

\u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u304cNDL\u30e9\u30dc\u3067NDLOCR-Lite \u3092\u516c\u958b\u3057\u307e\u3057\u305f\uff0e
\n\u5143\u3005NDLOCR \u304c\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u304cCUDA \u5bfe\u5fdc\u306eNVIDIA GPU \u304c\u5fc5\u9808\u3067\u3057\u305f\uff0e\u4eca\u56de\u306eNDLOCR-Lite \u306fdGPU \u306e\u7121\u3044PC \u3067\u3082\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306a\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n
\n
\n

NDLOCR-Lite\u306f\u3001NDLOCR\u306e\u8efd\u91cf\u7248\u3092\u76ee\u6307\u3057\u3066\u958b\u767a\u3057\u305fOCR\u3067\u3042\u308a\u3001\u30ce\u30fc\u30c8\u30d1\u30bd\u30b3\u30f3\u7b49\u306e\u4e00\u822c\u7684\u306a\u5bb6\u5ead\u7528\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3084OS\u74b0\u5883\u3067\u3001\u56f3\u66f8\u3084\u96d1\u8a8c\u3068\u3044\u3063\u305f\u8cc7\u6599\u306e\u30c7\u30b8\u30bf\u30eb\u5316\u753b\u50cf\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u304c\u4f5c\u6210\u3067\u304d\u308bOCR\u3067\u3059\u3002

\n
\n
\n

GPU\uff08Graphics Processing Unit\u3002\u753b\u50cf\u63cf\u753b\u7b49\u306e\u9ad8\u5ea6\u306a\u4e26\u5217\u8a08\u7b97\u3092\u51e6\u7406\u3059\u308b\u88c5\u7f6e\u3002\uff09\u3092\u5fc5\u8981\u3068\u305b\u305a\u3001\u8efd\u91cf\u306aOCR\u51e6\u7406\u304c\u53ef\u80fd\u3067\u3059\u3002

\n
\n
\n

\u307e\u305f\u3001NDLOCR\u304c\u4e0d\u5f97\u610f\u3068\u3057\u3066\u3044\u305f\u82f1\u6587\u3084\u624b\u66f8\u304d\u6587\u5b57\u7b49\u306b\u3064\u3044\u3066\u3082\u5b9f\u9a13\u7684\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002

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

\u5b9f\u969b\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u3053\u3061\u3089\uff0e

\n
\n\n
\n

\u985e\u4f3c\u306e\u3082\u306e\u306bNDL\u53e4\u5178\u7c4dOCR-Lite \u3068\u3044\u3046\u3082\u306e\u3082\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3082dGPU \u306e\u5fc5\u8981\u306a\u3044OCR \u3067\u81ea\u5206\u3067\u306f\u8aad\u3081\u306a\u3044\u53e4\u5178\u3092OCR \u3067\u8aad\u3081\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u308a\u3057\u3066\u9762\u767d\u3044\u3067\u3059\uff0e
\n\u4ee5\u4e0b\u306f\u4ee5\u524d #kagokug \u3067\u767a\u8868\u3057\u305f\u95a2\u9023\u8cc7\u6599\u3067\u3059\uff0e

\n
\n
\n\n
\n
\n
\n
\n
    \n
  • \n

    NDLOCR \u8981NVIDIA GPU

    \n
    \n
      \n
    • \n

      NDL\u53e4\u5178\u7c4dOCR-Lite\u306e\u3088\u3046\u306bNDLOCR-Lite\u304c\u51fa\u306a\u3044\u304b\u306a?

      \n
    • \n
    \n
    \n
  • \n
\n
\n
\n
\n
\n

\u3053\u306e\u3068\u304d\u3053\u3093\u306a\u3053\u3068\u3092\u66f8\u3044\u3066\u3044\u307e\u3057\u305f\u304c\u5b9f\u73fe\u3057\u307e\u3057\u305f :)

\n
\n
\n
\n
\n

GUI\u7248\u3092\u8a66\u3059

\n
\n
\n

Windows\u7248\u306f\u4ee5\u4e0b\u306b\u4f7f\u3044\u65b9\u304c\u3042\u308a\u307e\u3059\uff0e\u81ea\u5206\u306fLinux\u7248\u3092\u8a66\u3057\u307e\u3057\u305f\u304c\u8d77\u52d5\u5f8c\u306e\u64cd\u4f5c\u306f\u540c\u3058\u3060\u3068\u601d\u3044\u307e\u3059\uff0e

\n
\n\n
\n

GitHub \u306eReleases \u304b\u3089\u6700\u65b0\u306e\u30d0\u30a4\u30ca\u30ea\u3092\u5165\u624b\u3057\u307e\u3059\uff0ev1.1.0 \u6642\u70b9\u3067\u306fLinux amd64 / macOS arm64, amd64 / Windows(amd64?) \u304c\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u3053\u3067\u306fLinux\u7248\uff0e

\n
\n
\n
\n
$ wget -c https://github.com/ndl-lab/ndlocr-lite/releases/download/1.1.0/ndlocr_lite_v1.1.0_linux.tar.gz (1)\n$ sha512sum ndlocr_lite_v1.1.0_linux.tar.gz (2)\n61faed1fc843266095852697bbf29a721db4fb5a054f6d66ae8850301d22a4b1e29535eed150e439f7fd35760a17790a39cf0d45afd7c0ed72e7a3928e47ed93  ndlocr_lite_v1.1.0_linux.tar.gz\n$ fuse-archive ndlocr_lite_v1.1.0_linux.tar.gz (3)\n$ file ndlocr_lite_v1.1.0_linux/linux/ndlocr_lite_gui (4)\nndlocr_lite_v1.1.0_linux/linux/ndlocr_lite_gui: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=55e769c1bfe893353a55cdddbe7066033dc540bf, for GNU/Linux 3.2.0, not stripped\n$ ndlocr_lite_v1.1.0_linux/linux/ndlocr_lite_gui (5)
\n
\n
\n
\n
    \n
  1. \n

    \u30d0\u30a4\u30ca\u30ea\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u5165\u624b

    \n
  2. \n
  3. \n

    hash

    \n
  4. \n
  5. \n

    fuse-archive \u3067\u30a2\u30c9\u30db\u30c3\u30af\u306b\u5c55\u958b

    \n
  6. \n
  7. \n

    \u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3092\u78ba\u8a8d

    \n
  8. \n
  9. \n

    NDLOCR-Lite \u5b9f\u884c

    \n
  10. \n
\n
\n
\n

NDL\u53e4\u5178\u7c4dOCR-Lite \u3068\u540c\u3058\u3088\u3046\u306b\u6271\u3048\u308b\u611f\u3058\u3067\u3059\uff0e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\uff0c\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u306e\u683c\u7d0d\u3055\u308c\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u4e00\u62ec\u51e6\u7406\u306a\u3069\u304c\u53ef\u80fd\u3067\u3059\uff0e
\n\u305d\u306e\u4ed6\uff0c\u753b\u9762\u306e\u6307\u5b9a\u3057\u305f\u7bc4\u56f2\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3057\u3066OCR \u3059\u308b\u30ad\u30e3\u30d7\u30c1\u30e3\u30e2\u30fc\u30c9\u3082\u4fbf\u5229\u3067\u3059\uff0e\u305f\u3060\uff0c\u3053\u306e\u30e2\u30fc\u30c9\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u306fi3 wm \u3067\u306f\u5225\u306eworkspace \u306f\u30ad\u30e3\u30d7\u30c1\u30e3\u3067\u304d\u306a\u3055\u305d\u3046\u3067\u5c11\u3057\u4f7f\u3044\u52dd\u624b\u304c\u60aa\u3044\u3067\u3059\uff0e

\n
\n
\n

\"NDLOCR

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n\u753b\u50cf\u306e\u51fa\u5178\uff1a\u7d0d\u8c37\u53cb\u4e00 \u8a33\u8a3b\u300e\u9ed2\u732b\u300f,\u5065\u6587\u793e,1952. \u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u30c7\u30b8\u30bf\u30eb\u30b3\u30ec\u30af\u30b7\u30e7\u30f3 https://dl.ndl.go.jp/pid/2436688\n
\n
\n
\n
\n
\n

CLI\u7248\u3092\u4f7f\u3046

\n
\n
\n

CLI\u7248\u306fPython 3.10+ \u304c\u5fc5\u8981\u3067\u3059\uff0e\u4eca\u56de\u306fDebian sid amd64 \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u5c0e\u5165\u3057\u305fPython 3.13.12 \u3092\u5229\u7528\u3057\u307e\u3057\u305f\uff0e
\nREADME.md \u306b\u306fpip \u3067\u306e\u5c0e\u5165\u3068\uff0cuv \u3067\u306e\u5c0e\u5165\u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u983b\u7e41\u306b\u4f7f\u3046\u5834\u5408\u306fuv \u306e\u65b9\u304c\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u304a\u597d\u307f\u306e\u65b9\u3067\uff0e

\n
\n
\n
pip \u3067venv \u4ee5\u4e0b\u306b\u5c0e\u5165\u3057\u305f\u4f8b
\n
\n
$ git clone https://github.com/ndl-lab/ndlocr-lite\n$ cd ndlocr-lite\n$ python -m venv venv\n$ source venv/bin/activate\n$ pip install -r requirements.txt\n$ python3 src/ocr.py -h\nusage: ocr.py [-h] [--sourcedir SOURCEDIR] [--sourceimg SOURCEIMG] --output OUTPUT [--viz VIZ] [--det-weights DET_WEIGHTS] [--det-classes DET_CLASSES] [--det-score-threshold DET_SCORE_THRESHOLD] [--det-conf-threshold DET_CONF_THRESHOLD]\n              [--det-iou-threshold DET_IOU_THRESHOLD] [--simple-mode SIMPLE_MODE] [--rec-weights30 REC_WEIGHTS30] [--rec-weights50 REC_WEIGHTS50] [--rec-weights REC_WEIGHTS] [--rec-classes REC_CLASSES] [--device {cpu,cuda}]\n\nArguments for NDLkotenOCR-Lite\n\noptions:\n  -h, --help            show this help message and exit\n  --sourcedir SOURCEDIR\n                        Path to image directory\n  --sourceimg SOURCEIMG\n                        Path to image directory\n  --output OUTPUT       Path to output directory\n  --viz VIZ             Save visualized image\n  --det-weights DET_WEIGHTS\n                        Path to deim onnx file\n  --det-classes DET_CLASSES\n                        Path to list of class in yaml file\n  --det-score-threshold DET_SCORE_THRESHOLD\n  --det-conf-threshold DET_CONF_THRESHOLD\n  --det-iou-threshold DET_IOU_THRESHOLD\n  --simple-mode SIMPLE_MODE\n                        Read line with one model(Setting this option to True will slow down processing, but it simplifies the architecture and may slightly improve accuracy.)\n  --rec-weights30 REC_WEIGHTS30\n                        Path to parseq-tiny onnx file\n  --rec-weights50 REC_WEIGHTS50\n                        Path to parseq-tiny onnx file\n  --rec-weights REC_WEIGHTS\n                        Path to parseq-tiny onnx file\n  --rec-classes REC_CLASSES\n                        Path to list of class in yaml file\n  --device {cpu,cuda}   Device use (cpu or cuda)
\n
\n
\n
\n
uv \u3067\u5c0e\u5165\u3057\u305f\u4f8b
\n
\n
$ git clone https://github.com/ndl-lab/ndlocr-lite\n$ cd ndlocr-lite\n$ uv tool install .\n$ which ndlocr-lite\n/home/matoken/.local/bin/ndlocr-lite\n$ ndlocr-lite --help\nusage: ndlocr-lite [-h] [--sourcedir SOURCEDIR] [--sourceimg SOURCEIMG] --output OUTPUT [--viz VIZ] [--det-weights DET_WEIGHTS] [--det-classes DET_CLASSES] [--det-score-threshold DET_SCORE_THRESHOLD]\n                   [--det-conf-threshold DET_CONF_THRESHOLD] [--det-iou-threshold DET_IOU_THRESHOLD] [--simple-mode SIMPLE_MODE] [--rec-weights30 REC_WEIGHTS30] [--rec-weights50 REC_WEIGHTS50] [--rec-weights REC_WEIGHTS]\n                   [--rec-classes REC_CLASSES] [--device {cpu,cuda}]\n\nArguments for NDLkotenOCR-Lite\n\noptions:\n  -h, --help            show this help message and exit\n  --sourcedir SOURCEDIR\n                        Path to image directory\n  --sourceimg SOURCEIMG\n                        Path to image directory\n  --output OUTPUT       Path to output directory\n  --viz VIZ             Save visualized image\n  --det-weights DET_WEIGHTS\n                        Path to deim onnx file\n  --det-classes DET_CLASSES\n                        Path to list of class in yaml file\n  --det-score-threshold DET_SCORE_THRESHOLD\n  --det-conf-threshold DET_CONF_THRESHOLD\n  --det-iou-threshold DET_IOU_THRESHOLD\n  --simple-mode SIMPLE_MODE\n                        Read line with one model(Setting this option to True will slow down processing, but it simplifies the architecture and may slightly improve accuracy.)\n  --rec-weights30 REC_WEIGHTS30\n                        Path to parseq-tiny onnx file\n  --rec-weights50 REC_WEIGHTS50\n                        Path to parseq-tiny onnx file\n  --rec-weights REC_WEIGHTS\n                        Path to parseq-tiny onnx file\n  --rec-classes REC_CLASSES\n                        Path to list of class in yaml file\n  --device {cpu,cuda}   Device use (cpu or cuda)
\n
\n
\n
\n

\u3082\u3057cuda \u5bfe\u5fdcGPU \u306e\u3042\u308b\u74b0\u5883\u3067\u3042\u308c\u3070\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b --device cuda \u3092\u6e21\u3059\u3053\u3068\u3067\u901f\u304f\u306a\u308b\u3068\u601d\u3044\u307e\u3059\uff0e

\n
\n
\n

cli\u7248\u5b9f\u884c\u4f8b

\n
\n

--sourcedir (\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u8907\u6570\u753b\u50cf)\u304b --sourceimg (1\u3064\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb)\u3067\u51e6\u7406\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u51e6\u7406\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\uff0c --output \u3067\u7d50\u679c\u306e\u51fa\u529b\u5148\u3092\u6307\u5b9a\uff0c--viz True \u3067\u53ef\u8996\u5316\u753b\u50cf\u3092\u6709\u52b9\u306b\u3057\u3066\u5b9f\u884c\uff08\u30aa\u30d7\u30b7\u30e7\u30f3)

\n
\n
\n
\n
$ time ndlocr-lite --sourcedir . --output . --viz True\n[INFO] Intialize Model\n[INFO] Inference Image\n69\n[INFO] Saving result on ./viz_digidepo_2436688_0001-0.jpg\nTotal calculation time (Detection + Recognition): 13.220851182937622\n  :\nreal    2m15.882s\nuser    10m16.273s\nsys     0m5.189s\n$ ls\ndigidepo_2436688_0001-0.jpg   digidepo_2436688_0001-4.json  digidepo_2436688_0001-8.txt\ndigidepo_2436688_0001-0.json  digidepo_2436688_0001-4.txt   digidepo_2436688_0001-8.xml\ndigidepo_2436688_0001-0.txt   digidepo_2436688_0001-4.xml   digidepo_2436688_0001-9.jpg\ndigidepo_2436688_0001-0.xml   digidepo_2436688_0001-5.jpg   digidepo_2436688_0001-9.json\ndigidepo_2436688_0001-1.jpg   digidepo_2436688_0001-5.json  digidepo_2436688_0001-9.txt\ndigidepo_2436688_0001-1.json  digidepo_2436688_0001-5.txt   digidepo_2436688_0001-9.xml\ndigidepo_2436688_0001-1.txt   digidepo_2436688_0001-5.xml   viz_digidepo_2436688_0001-0.jpg\ndigidepo_2436688_0001-1.xml   digidepo_2436688_0001-6.jpg   viz_digidepo_2436688_0001-1.jpg\ndigidepo_2436688_0001-2.jpg   digidepo_2436688_0001-6.json  viz_digidepo_2436688_0001-2.jpg\ndigidepo_2436688_0001-2.json  digidepo_2436688_0001-6.txt   viz_digidepo_2436688_0001-3.jpg\ndigidepo_2436688_0001-2.txt   digidepo_2436688_0001-6.xml   viz_digidepo_2436688_0001-4.jpg\ndigidepo_2436688_0001-2.xml   digidepo_2436688_0001-7.jpg   viz_digidepo_2436688_0001-5.jpg\ndigidepo_2436688_0001-3.jpg   digidepo_2436688_0001-7.json  viz_digidepo_2436688_0001-6.jpg\ndigidepo_2436688_0001-3.json  digidepo_2436688_0001-7.txt   viz_digidepo_2436688_0001-7.jpg\ndigidepo_2436688_0001-3.txt   digidepo_2436688_0001-7.xml   viz_digidepo_2436688_0001-8.jpg\ndigidepo_2436688_0001-3.xml   digidepo_2436688_0001-8.jpg   viz_digidepo_2436688_0001-9.jpg\ndigidepo_2436688_0001-4.jpg   digidepo_2436688_0001-8.json
\n
\n
\n
\n

\u3053\u3053\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u7fa4\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
digidepo_2436688_0001-“${N}”.jpg
\n
\n

OCR \u5bfe\u8c61\u753b\u50cf

\n
\n
digidepo_2436688_0001-“${N}”.json, digidepo_2436688_0001-“${N}”.txt, digidepo_2436688_0001-“${N}”.xml
\n
\n

OCR \u7d50\u679c

\n
\n
viz_digidepo_2436688_0001-“${N}”.jpg
\n
\n

\u53ef\u8996\u5316\u753b\u50cf(\u30aa\u30d7\u30b7\u30e7\u30f3)

\n
\n
\n
\n
\n

\u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305fpdf \u306e10\u30b3\u30de(20\u30da\u30fc\u30b8\u5206)\u3092Imagemagick \u3067jpeg \u753b\u50cf\u306b\u5909\u63db\u3057\u305f\u3082\u306e\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3057\u305f\u3068\u3053\u308d2\u520616\u79d2\u307b\u3069\u639b\u304b\u308a\u307e\u3057\u305f\uff0e1\u753b\u50cf\u3042\u305f\u308a13.6\u79d2\uff0c1\u30da\u30fc\u30b8\u3042\u305f\u308a6.8\u79d2\u307b\u3069\uff0e\u82f1\u8a9e\u65e5\u672c\u8a9e\u6df7\u3058\u308a\u3067\u3082\u7cbe\u5ea6\u826f\u3055\u305d\u3046\u3067\u3059\uff0e
\nOCR \u74b0\u5883\u306f\uff0cLENOVO ThinkPad L13 (G1), CPU: Intel® Core™ i7-10510U CPU @ 1.80GHz, RAM: DDR4 16GB, SSD: NVMe TOSHIBA KXG6AZNV512G \u306bDebian sid amd64 \u3092\u5c0e\u5165\u3057\u305f\u74b0\u5883\u3067\u3059\uff0e

\n
\n
\n

\u30b9\u30ad\u30e3\u30f3\u3057\u305f\u753b\u50cf\u30c7\u30fc\u30bf\u306f\u3053\u3093\u306a\u611f\u3058(1\u30b3\u30de2\u30da\u30fc\u30b8\u5206)

\n
\n
\n
\n
$ file viz_digidepo_2436688_0001-0.jpg\nviz_digidepo_2436688_0001-0.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 2481x1761, components 3
\n
\n
\n
\n

GNU time \u306e -f %M \u3067RAM \u306e\u5229\u7528\u91cf\u3092\u898b\u305f\u3068\u3053\u308d\u3053\u306e\u753b\u50cf1\u679a\u306e\u51e6\u7406\u3067600MB \u8fd1\u304f\uff0c10\u679a\u3067860MB \u7a0b\u3067\u3057\u305f\uff0e

\n
\n
\n

\"NDLOCR

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n\u753b\u50cf\u306e\u51fa\u5178\uff1a\u7d0d\u8c37\u53cb\u4e00 \u8a33\u8a3b\u300e\u9ed2\u732b\u300f,\u5065\u6587\u793e,1952. \u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u30c7\u30b8\u30bf\u30eb\u30b3\u30ec\u30af\u30b7\u30e7\u30f3 https://dl.ndl.go.jp/pid/2436688\n
\n
\n
\n
\n
\n
\n

Linux\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u3067\u30ad\u30e3\u30d7\u30c1\u30e3\u30e2\u30fc\u30c9

\n
\n
\n

NDLOCR-Lite GUI\u7248\u306b\u306f\u30ad\u30e3\u30d7\u30c1\u30e3\u30e2\u30fc\u30c9\u304c\u3042\u308a\u4fbf\u5229\u305d\u3046\u3067\u3059\u304c\uff0cNDLOCR-Lite \u3092\u8d77\u52d5\u3057\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e
\n\u540c\u3058\u3088\u3046\u306a\u3053\u3068\u3092\u4ee5\u524d\u304b\u3089 tesseract-ocr \u3067\u3084\u3063\u3066\u3044\u307e\u3057\u305f\uff0e\u3053\u308c\u306f\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u74b0\u5883\u306b\u767b\u9332\u3057\u305f\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3067\u30b9\u30af\u30ea\u30fc\u30f3\u30ad\u30e3\u30d7\u30c1\u30e3\u3068OCR \u3092\u884c\u3044\uff0c\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u7d50\u679c\u3092\u8fd4\u3059\u3082\u306e\u3067\u3057\u305f\uff0e\u3053\u308c\u3092NDLOCR-Lite \u3067\u52d5\u304f\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ cat ~/bin/ndlocr-lite.bash\n#!/bin/bash\n\nTMPDIR=$(mktemp -d)\nIMAGEFILE=\"$(mktemp).png\"\nimport png:\"${IMAGEFILE}\" (1)\n#sixelv \"${IMAGEFILE}\"\nconvert \"${IMAGEFILE}\" sixel: (2)\nndlocr-lite --sourceimg \"${IMAGEFILE}\" --output \"${TMPDIR}\" (3)\n\nif [ $? ]; then\n  cat \"${TMPDIR}\"/*.txt | pee cat \"xsel -b\" (4)\n  notify-send 'ocr📋(primary)' (5)\nelse\n  notify-send 'ocr error'\n  exit 1\nfi\n\nrm \"${IMAGEFILE}\" (6)\nrm -r \"${TMPDIR}\"
\n
\n
\n
\n
    \n
  1. \n

    Imagemagick \u306eimport \u30b3\u30de\u30f3\u30c9\u3067\u4efb\u610f\u306e\u5834\u6240\u3092\u30ad\u30e3\u30d7\u30c1\u30e3

    \n
  2. \n
  3. \n

    \u30c7\u30d0\u30c3\u30b0\u7528\u306b\u753b\u50cf\u51fa\u529b

    \n
  4. \n
  5. \n

    NDLOCR-Lite \u3067\u6587\u5b57\u8d77\u3053\u3057

    \n
  6. \n
  7. \n

    \u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u683c\u7d0d

    \n
  8. \n
  9. \n

    notify-send \u3067\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306b\u901a\u77e5

    \n
  10. \n
\n
\n
\n

\u5b9f\u884c\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e\u52d5\u753b\u5185\u306e\u30b9\u30e9\u30a4\u30c9\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3057\u3066\u3044\u307e\u3059\uff0e\u89e3\u50cf\u5ea6\u304c\u4f4e\u3044\u3068\u3044\u307e\u3044\u3061\u3067\u3059\u304c\u89e3\u50cf\u5ea6\u304c\u9ad8\u3044\u3068\u3044\u3044\u611f\u3058\u3067\u3059\uff0etermial \u3067\u53e9\u304f\u3068\u30c7\u30d0\u30c3\u30b0\u7528\u306bSixel \u3067\u30ad\u30e3\u30d7\u30c1\u30e3\u753b\u50cf\u3082\u51fa\u3059\u3088\u3046\u306b\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n

\"NDLOCR

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n\u753b\u50cf\u306e\u51fa\u5178\uff1a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b92026 Tokyo/Spring 2\u65e5\u76ee\u30e9\u30a4\u30c8\u30cb\u30f3\u30b0\u30c8\u30fc\u30af\u306e\u30aa\u30fc\u30d7\u30cb\u30f3\u30b0\u3088\u308a https://www.youtube.com/watch?v=xtb3ZFb6WvA\n
\n
\n
\n

\u3053\u306ebash script \u3092WindowManager \u306b\u767b\u9332\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\u4ee5\u4e0b\u306fi3 wm \u3067 Super+Shift+o \u3067\u547c\u3073\u51fa\u305b\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n

~/.config/i3/config

\n
\n
\n
\n
$ grep ocr ~/.config/i3/config\n#OCR https://gitlab.com/matoken/kagolug-2022.05/-/blob/main/slide/ocr.adoc\nbindsym $mod+Shift+o exec --no-startup-id ~/bin/ndlocr-lite.bash
\n
\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067\u4fbf\u5229\u306b\u4f7f\u3048\u305d\u3046\u3067\u3059\uff0e
\n\u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u306e\u9060\u9694\u9001\u4fe1\u30b5\u30fc\u30d3\u30b9\u3067\u95b2\u89a7\u53ef\u80fd\u306a\u66f8\u7c4d\u306a\u3069\u3092\u5c0f\u3055\u306a\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306a\u3069\u306e\u7aef\u672b\u3067\u8aad\u3080\u306e\u306f\u3044\u307e\u3044\u3061\u3068\u601d\u3063\u3066\u3044\u305f\u306e\u3067\u3059\u304c\uff0c\u3053\u308c\u3067\u6587\u5b57\u8d77\u3053\u3057\u3057\u3066\u8aad\u3093\u3067\u307f\u308b\u306e\u3082\u3042\u308a\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0c

\n
\n
\n
\n
\n

\u74b0\u5883

\n
\n
\n
\n
$ git log --pretty=oneline -1\n4f0748be4244a2e36d4dd43af05d6eebded3d56d (HEAD -> master, origin/master, origin/HEAD) Merge pull request #13 from mattn/fallback-line\n$ pipx list | grep uv\n   package uv 0.10.7, installed using Python 3.13.3\n    - uv\n    - uvx\n$ dpkg-query -W python3 python3-venv\npython3 3.13.9-3\npython3-venv    3.13.9-3\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n
\n
\n
\n

toot

\n
\n\n
\n
\n", "content_text": "\u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u304cNDL\u30e9\u30dc\u3067NDLOCR-Lite \u3092\u516c\u958b\u3057\u307e\u3057\u305f\uff0e\n\u5143\u3005NDLOCR \u304c\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u304cCUDA \u5bfe\u5fdc\u306eNVIDIA GPU \u304c\u5fc5\u9808\u3067\u3057\u305f\uff0e\u4eca\u56de\u306eNDLOCR-Lite \u306fdGPU \u306e\u7121\u3044PC \u3067\u3082\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306a\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\n\nNDLOCR-Lite\u306f\u3001NDLOCR\u306e\u8efd\u91cf\u7248\u3092\u76ee\u6307\u3057\u3066\u958b\u767a\u3057\u305fOCR\u3067\u3042\u308a\u3001\u30ce\u30fc\u30c8\u30d1\u30bd\u30b3\u30f3\u7b49\u306e\u4e00\u822c\u7684\u306a\u5bb6\u5ead\u7528\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u3084OS\u74b0\u5883\u3067\u3001\u56f3\u66f8\u3084\u96d1\u8a8c\u3068\u3044\u3063\u305f\u8cc7\u6599\u306e\u30c7\u30b8\u30bf\u30eb\u5316\u753b\u50cf\u304b\u3089\u30c6\u30ad\u30b9\u30c8\u30c7\u30fc\u30bf\u304c\u4f5c\u6210\u3067\u304d\u308bOCR\u3067\u3059\u3002\n\n\nGPU\uff08Graphics Processing Unit\u3002\u753b\u50cf\u63cf\u753b\u7b49\u306e\u9ad8\u5ea6\u306a\u4e26\u5217\u8a08\u7b97\u3092\u51e6\u7406\u3059\u308b\u88c5\u7f6e\u3002\uff09\u3092\u5fc5\u8981\u3068\u305b\u305a\u3001\u8efd\u91cf\u306aOCR\u51e6\u7406\u304c\u53ef\u80fd\u3067\u3059\u3002\n\n\n\u307e\u305f\u3001NDLOCR\u304c\u4e0d\u5f97\u610f\u3068\u3057\u3066\u3044\u305f\u82f1\u6587\u3084\u624b\u66f8\u304d\u6587\u5b57\u7b49\u306b\u3064\u3044\u3066\u3082\u5b9f\u9a13\u7684\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002\n\n\n\n— NDLOCR-Lite\u306e\u516c\u958b\u306b\u3064\u3044\u3066 | NDL\u30e9\u30dc\n\n\n\n\u5b9f\u969b\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306f\u3053\u3061\u3089\uff0e\n\n\n\n\nndl-lab/ndlocr-lite: NDLOCR\u2011Lite application repository (including source code)\n\n\n\n\n\u985e\u4f3c\u306e\u3082\u306e\u306bNDL\u53e4\u5178\u7c4dOCR-Lite \u3068\u3044\u3046\u3082\u306e\u3082\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u3082dGPU \u306e\u5fc5\u8981\u306a\u3044OCR \u3067\u81ea\u5206\u3067\u306f\u8aad\u3081\u306a\u3044\u53e4\u5178\u3092OCR \u3067\u8aad\u3081\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u308a\u3057\u3066\u9762\u767d\u3044\u3067\u3059\uff0e\n\u4ee5\u4e0b\u306f\u4ee5\u524d #kagokug \u3067\u767a\u8868\u3057\u305f\u95a2\u9023\u8cc7\u6599\u3067\u3059\uff0e\n\n\n\n\nOCR\u3067\u753b\u50cf\u6587\u5b57\u3092\u6587\u5b57\u30c7\u30fc\u30bf\u306b \u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2022.05 \u3067\u767a\u8868 \n\u30d3\u30c7\u30aa\u3084\u753b\u50cf\u306a\u3069\u306b\u66f8\u304b\u308c\u305f\u6587\u5b57\u3092OCR \u3059\u308bScript \u3084NDLOCR \u306e\u7d39\u4ecb\n\n\n\u6700\u8fd1\u8a66\u3057\u305fLinux\u306eOCR\u30c4\u30fc\u30eb(NDL\u53e4\u5178\u7c4dOCR-Lite/YomiToku) \u9e7f\u5150\u5cf6Linux\u52c9\u5f37\u4f1a 2024.12 \u3067\u767a\u8868 \nDL\u53e4\u5178\u7c4dOCR-Lite \u306e\u7d39\u4ecb\u306a\u3069\n\n\n\n\n\n\n\n\nNDLOCR \u8981NVIDIA GPU\n\n\n\nNDL\u53e4\u5178\u7c4dOCR-Lite\u306e\u3088\u3046\u306bNDLOCR-Lite\u304c\u51fa\u306a\u3044\u304b\u306a?\n\n\n\n\n\n\n\n\n\n\u3053\u306e\u3068\u304d\u3053\u3093\u306a\u3053\u3068\u3092\u66f8\u3044\u3066\u3044\u307e\u3057\u305f\u304c\u5b9f\u73fe\u3057\u307e\u3057\u305f :)\n\n\n\n\nGUI\u7248\u3092\u8a66\u3059\n\n\nWindows\u7248\u306f\u4ee5\u4e0b\u306b\u4f7f\u3044\u65b9\u304c\u3042\u308a\u307e\u3059\uff0e\u81ea\u5206\u306fLinux\u7248\u3092\u8a66\u3057\u307e\u3057\u305f\u304c\u8d77\u52d5\u5f8c\u306e\u64cd\u4f5c\u306f\u540c\u3058\u3060\u3068\u601d\u3044\u307e\u3059\uff0e\n\n\n\n\nNDLOCR-Lite\u306e\u4f7f\u3044\u65b9 | NDL\u30e9\u30dc\n\n\n\n\nGitHub \u306eReleases \u304b\u3089\u6700\u65b0\u306e\u30d0\u30a4\u30ca\u30ea\u3092\u5165\u624b\u3057\u307e\u3059\uff0ev1.1.0 \u6642\u70b9\u3067\u306fLinux amd64 / macOS arm64, amd64 / Windows(amd64?) \u304c\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\u3053\u3053\u3067\u306fLinux\u7248\uff0e\n\n\n\n$ wget -c https://github.com/ndl-lab/ndlocr-lite/releases/download/1.1.0/ndlocr_lite_v1.1.0_linux.tar.gz (1)\n$ sha512sum ndlocr_lite_v1.1.0_linux.tar.gz (2)\n61faed1fc843266095852697bbf29a721db4fb5a054f6d66ae8850301d22a4b1e29535eed150e439f7fd35760a17790a39cf0d45afd7c0ed72e7a3928e47ed93 ndlocr_lite_v1.1.0_linux.tar.gz\n$ fuse-archive ndlocr_lite_v1.1.0_linux.tar.gz (3)\n$ file ndlocr_lite_v1.1.0_linux/linux/ndlocr_lite_gui (4)\nndlocr_lite_v1.1.0_linux/linux/ndlocr_lite_gui: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=55e769c1bfe893353a55cdddbe7066033dc540bf, for GNU/Linux 3.2.0, not stripped\n$ ndlocr_lite_v1.1.0_linux/linux/ndlocr_lite_gui (5)\n\n\n\n\n\n\u30d0\u30a4\u30ca\u30ea\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u5165\u624b\n\n\nhash\n\n\nfuse-archive \u3067\u30a2\u30c9\u30db\u30c3\u30af\u306b\u5c55\u958b\n\n\n\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u3092\u78ba\u8a8d\n\n\nNDLOCR-Lite \u5b9f\u884c\n\n\n\n\nNDL\u53e4\u5178\u7c4dOCR-Lite \u3068\u540c\u3058\u3088\u3046\u306b\u6271\u3048\u308b\u611f\u3058\u3067\u3059\uff0e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\uff0c\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u306e\u683c\u7d0d\u3055\u308c\u305f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u3089\u4e00\u62ec\u51e6\u7406\u306a\u3069\u304c\u53ef\u80fd\u3067\u3059\uff0e\n\u305d\u306e\u4ed6\uff0c\u753b\u9762\u306e\u6307\u5b9a\u3057\u305f\u7bc4\u56f2\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3057\u3066OCR \u3059\u308b\u30ad\u30e3\u30d7\u30c1\u30e3\u30e2\u30fc\u30c9\u3082\u4fbf\u5229\u3067\u3059\uff0e\u305f\u3060\uff0c\u3053\u306e\u30e2\u30fc\u30c9\u306e\u30ad\u30e3\u30d7\u30c1\u30e3\u306fi3 wm \u3067\u306f\u5225\u306eworkspace \u306f\u30ad\u30e3\u30d7\u30c1\u30e3\u3067\u304d\u306a\u3055\u305d\u3046\u3067\u5c11\u3057\u4f7f\u3044\u52dd\u624b\u304c\u60aa\u3044\u3067\u3059\uff0e\n\n\n\n\n\n\n\n\nNote\n\n\n\u753b\u50cf\u306e\u51fa\u5178\uff1a\u7d0d\u8c37\u53cb\u4e00 \u8a33\u8a3b\u300e\u9ed2\u732b\u300f,\u5065\u6587\u793e,1952. \u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u30c7\u30b8\u30bf\u30eb\u30b3\u30ec\u30af\u30b7\u30e7\u30f3 https://dl.ndl.go.jp/pid/2436688\n\n\n\n\n\n\n\nCLI\u7248\u3092\u4f7f\u3046\n\n\nCLI\u7248\u306fPython 3.10+ \u304c\u5fc5\u8981\u3067\u3059\uff0e\u4eca\u56de\u306fDebian sid amd64 \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u5c0e\u5165\u3057\u305fPython 3.13.12 \u3092\u5229\u7528\u3057\u307e\u3057\u305f\uff0e\nREADME.md \u306b\u306fpip \u3067\u306e\u5c0e\u5165\u3068\uff0cuv \u3067\u306e\u5c0e\u5165\u304c\u7d39\u4ecb\u3055\u308c\u3066\u3044\u307e\u3059\uff0e\u983b\u7e41\u306b\u4f7f\u3046\u5834\u5408\u306fuv \u306e\u65b9\u304c\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u304a\u597d\u307f\u306e\u65b9\u3067\uff0e\n\n\npip \u3067venv \u4ee5\u4e0b\u306b\u5c0e\u5165\u3057\u305f\u4f8b\n\n$ git clone https://github.com/ndl-lab/ndlocr-lite\n$ cd ndlocr-lite\n$ python -m venv venv\n$ source venv/bin/activate\n$ pip install -r requirements.txt\n$ python3 src/ocr.py -h\nusage: ocr.py [-h] [--sourcedir SOURCEDIR] [--sourceimg SOURCEIMG] --output OUTPUT [--viz VIZ] [--det-weights DET_WEIGHTS] [--det-classes DET_CLASSES] [--det-score-threshold DET_SCORE_THRESHOLD] [--det-conf-threshold DET_CONF_THRESHOLD]\n [--det-iou-threshold DET_IOU_THRESHOLD] [--simple-mode SIMPLE_MODE] [--rec-weights30 REC_WEIGHTS30] [--rec-weights50 REC_WEIGHTS50] [--rec-weights REC_WEIGHTS] [--rec-classes REC_CLASSES] [--device {cpu,cuda}]\n\nArguments for NDLkotenOCR-Lite\n\noptions:\n -h, --help show this help message and exit\n --sourcedir SOURCEDIR\n Path to image directory\n --sourceimg SOURCEIMG\n Path to image directory\n --output OUTPUT Path to output directory\n --viz VIZ Save visualized image\n --det-weights DET_WEIGHTS\n Path to deim onnx file\n --det-classes DET_CLASSES\n Path to list of class in yaml file\n --det-score-threshold DET_SCORE_THRESHOLD\n --det-conf-threshold DET_CONF_THRESHOLD\n --det-iou-threshold DET_IOU_THRESHOLD\n --simple-mode SIMPLE_MODE\n Read line with one model(Setting this option to True will slow down processing, but it simplifies the architecture and may slightly improve accuracy.)\n --rec-weights30 REC_WEIGHTS30\n Path to parseq-tiny onnx file\n --rec-weights50 REC_WEIGHTS50\n Path to parseq-tiny onnx file\n --rec-weights REC_WEIGHTS\n Path to parseq-tiny onnx file\n --rec-classes REC_CLASSES\n Path to list of class in yaml file\n --device {cpu,cuda} Device use (cpu or cuda)\n\n\n\nuv \u3067\u5c0e\u5165\u3057\u305f\u4f8b\n\n$ git clone https://github.com/ndl-lab/ndlocr-lite\n$ cd ndlocr-lite\n$ uv tool install .\n$ which ndlocr-lite\n/home/matoken/.local/bin/ndlocr-lite\n$ ndlocr-lite --help\nusage: ndlocr-lite [-h] [--sourcedir SOURCEDIR] [--sourceimg SOURCEIMG] --output OUTPUT [--viz VIZ] [--det-weights DET_WEIGHTS] [--det-classes DET_CLASSES] [--det-score-threshold DET_SCORE_THRESHOLD]\n [--det-conf-threshold DET_CONF_THRESHOLD] [--det-iou-threshold DET_IOU_THRESHOLD] [--simple-mode SIMPLE_MODE] [--rec-weights30 REC_WEIGHTS30] [--rec-weights50 REC_WEIGHTS50] [--rec-weights REC_WEIGHTS]\n [--rec-classes REC_CLASSES] [--device {cpu,cuda}]\n\nArguments for NDLkotenOCR-Lite\n\noptions:\n -h, --help show this help message and exit\n --sourcedir SOURCEDIR\n Path to image directory\n --sourceimg SOURCEIMG\n Path to image directory\n --output OUTPUT Path to output directory\n --viz VIZ Save visualized image\n --det-weights DET_WEIGHTS\n Path to deim onnx file\n --det-classes DET_CLASSES\n Path to list of class in yaml file\n --det-score-threshold DET_SCORE_THRESHOLD\n --det-conf-threshold DET_CONF_THRESHOLD\n --det-iou-threshold DET_IOU_THRESHOLD\n --simple-mode SIMPLE_MODE\n Read line with one model(Setting this option to True will slow down processing, but it simplifies the architecture and may slightly improve accuracy.)\n --rec-weights30 REC_WEIGHTS30\n Path to parseq-tiny onnx file\n --rec-weights50 REC_WEIGHTS50\n Path to parseq-tiny onnx file\n --rec-weights REC_WEIGHTS\n Path to parseq-tiny onnx file\n --rec-classes REC_CLASSES\n Path to list of class in yaml file\n --device {cpu,cuda} Device use (cpu or cuda)\n\n\n\n\u3082\u3057cuda \u5bfe\u5fdcGPU \u306e\u3042\u308b\u74b0\u5883\u3067\u3042\u308c\u3070\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b --device cuda \u3092\u6e21\u3059\u3053\u3068\u3067\u901f\u304f\u306a\u308b\u3068\u601d\u3044\u307e\u3059\uff0e\n\n\ncli\u7248\u5b9f\u884c\u4f8b\n\n--sourcedir (\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u8907\u6570\u753b\u50cf)\u304b --sourceimg (1\u3064\u306e\u753b\u50cf\u30d5\u30a1\u30a4\u30eb)\u3067\u51e6\u7406\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304b\u51e6\u7406\u5bfe\u8c61\u30d5\u30a1\u30a4\u30eb\u3092\u6307\u5b9a\uff0c --output \u3067\u7d50\u679c\u306e\u51fa\u529b\u5148\u3092\u6307\u5b9a\uff0c--viz True \u3067\u53ef\u8996\u5316\u753b\u50cf\u3092\u6709\u52b9\u306b\u3057\u3066\u5b9f\u884c\uff08\u30aa\u30d7\u30b7\u30e7\u30f3)\n\n\n\n$ time ndlocr-lite --sourcedir . --output . --viz True\n[INFO] Intialize Model\n[INFO] Inference Image\n69\n[INFO] Saving result on ./viz_digidepo_2436688_0001-0.jpg\nTotal calculation time (Detection + Recognition): 13.220851182937622\n :\nreal 2m15.882s\nuser 10m16.273s\nsys 0m5.189s\n$ ls\ndigidepo_2436688_0001-0.jpg digidepo_2436688_0001-4.json digidepo_2436688_0001-8.txt\ndigidepo_2436688_0001-0.json digidepo_2436688_0001-4.txt digidepo_2436688_0001-8.xml\ndigidepo_2436688_0001-0.txt digidepo_2436688_0001-4.xml digidepo_2436688_0001-9.jpg\ndigidepo_2436688_0001-0.xml digidepo_2436688_0001-5.jpg digidepo_2436688_0001-9.json\ndigidepo_2436688_0001-1.jpg digidepo_2436688_0001-5.json digidepo_2436688_0001-9.txt\ndigidepo_2436688_0001-1.json digidepo_2436688_0001-5.txt digidepo_2436688_0001-9.xml\ndigidepo_2436688_0001-1.txt digidepo_2436688_0001-5.xml viz_digidepo_2436688_0001-0.jpg\ndigidepo_2436688_0001-1.xml digidepo_2436688_0001-6.jpg viz_digidepo_2436688_0001-1.jpg\ndigidepo_2436688_0001-2.jpg digidepo_2436688_0001-6.json viz_digidepo_2436688_0001-2.jpg\ndigidepo_2436688_0001-2.json digidepo_2436688_0001-6.txt viz_digidepo_2436688_0001-3.jpg\ndigidepo_2436688_0001-2.txt digidepo_2436688_0001-6.xml viz_digidepo_2436688_0001-4.jpg\ndigidepo_2436688_0001-2.xml digidepo_2436688_0001-7.jpg viz_digidepo_2436688_0001-5.jpg\ndigidepo_2436688_0001-3.jpg digidepo_2436688_0001-7.json viz_digidepo_2436688_0001-6.jpg\ndigidepo_2436688_0001-3.json digidepo_2436688_0001-7.txt viz_digidepo_2436688_0001-7.jpg\ndigidepo_2436688_0001-3.txt digidepo_2436688_0001-7.xml viz_digidepo_2436688_0001-8.jpg\ndigidepo_2436688_0001-3.xml digidepo_2436688_0001-8.jpg viz_digidepo_2436688_0001-9.jpg\ndigidepo_2436688_0001-4.jpg digidepo_2436688_0001-8.json\n\n\n\n\u3053\u3053\u3067\u306e\u30d5\u30a1\u30a4\u30eb\u7fa4\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\ndigidepo_2436688_0001-“${N}”.jpg\n\nOCR \u5bfe\u8c61\u753b\u50cf\n\ndigidepo_2436688_0001-“${N}”.json, digidepo_2436688_0001-“${N}”.txt, digidepo_2436688_0001-“${N}”.xml\n\nOCR \u7d50\u679c\n\nviz_digidepo_2436688_0001-“${N}”.jpg\n\n\u53ef\u8996\u5316\u753b\u50cf(\u30aa\u30d7\u30b7\u30e7\u30f3)\n\n\n\n\n\u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305fpdf \u306e10\u30b3\u30de(20\u30da\u30fc\u30b8\u5206)\u3092Imagemagick \u3067jpeg \u753b\u50cf\u306b\u5909\u63db\u3057\u305f\u3082\u306e\u306b\u5bfe\u3057\u3066\u5b9f\u884c\u3057\u305f\u3068\u3053\u308d2\u520616\u79d2\u307b\u3069\u639b\u304b\u308a\u307e\u3057\u305f\uff0e1\u753b\u50cf\u3042\u305f\u308a13.6\u79d2\uff0c1\u30da\u30fc\u30b8\u3042\u305f\u308a6.8\u79d2\u307b\u3069\uff0e\u82f1\u8a9e\u65e5\u672c\u8a9e\u6df7\u3058\u308a\u3067\u3082\u7cbe\u5ea6\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\nOCR \u74b0\u5883\u306f\uff0cLENOVO ThinkPad L13 (G1), CPU: Intel® Core™ i7-10510U CPU @ 1.80GHz, RAM: DDR4 16GB, SSD: NVMe TOSHIBA KXG6AZNV512G \u306bDebian sid amd64 \u3092\u5c0e\u5165\u3057\u305f\u74b0\u5883\u3067\u3059\uff0e\n\n\n\u30b9\u30ad\u30e3\u30f3\u3057\u305f\u753b\u50cf\u30c7\u30fc\u30bf\u306f\u3053\u3093\u306a\u611f\u3058(1\u30b3\u30de2\u30da\u30fc\u30b8\u5206)\n\n\n\n$ file viz_digidepo_2436688_0001-0.jpg\nviz_digidepo_2436688_0001-0.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 2481x1761, components 3\n\n\n\nGNU time \u306e -f %M \u3067RAM \u306e\u5229\u7528\u91cf\u3092\u898b\u305f\u3068\u3053\u308d\u3053\u306e\u753b\u50cf1\u679a\u306e\u51e6\u7406\u3067600MB \u8fd1\u304f\uff0c10\u679a\u3067860MB \u7a0b\u3067\u3057\u305f\uff0e\n\n\n\n\n\n\n\n\nNote\n\n\n\u753b\u50cf\u306e\u51fa\u5178\uff1a\u7d0d\u8c37\u53cb\u4e00 \u8a33\u8a3b\u300e\u9ed2\u732b\u300f,\u5065\u6587\u793e,1952. \u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u30c7\u30b8\u30bf\u30eb\u30b3\u30ec\u30af\u30b7\u30e7\u30f3 https://dl.ndl.go.jp/pid/2436688\n\n\n\n\n\n\n\n\nLinux\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u3067\u30ad\u30e3\u30d7\u30c1\u30e3\u30e2\u30fc\u30c9\n\n\nNDLOCR-Lite GUI\u7248\u306b\u306f\u30ad\u30e3\u30d7\u30c1\u30e3\u30e2\u30fc\u30c9\u304c\u3042\u308a\u4fbf\u5229\u305d\u3046\u3067\u3059\u304c\uff0cNDLOCR-Lite \u3092\u8d77\u52d5\u3057\u3066\u304a\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e\n\u540c\u3058\u3088\u3046\u306a\u3053\u3068\u3092\u4ee5\u524d\u304b\u3089 tesseract-ocr \u3067\u3084\u3063\u3066\u3044\u307e\u3057\u305f\uff0e\u3053\u308c\u306f\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u74b0\u5883\u306b\u767b\u9332\u3057\u305f\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3067\u30b9\u30af\u30ea\u30fc\u30f3\u30ad\u30e3\u30d7\u30c1\u30e3\u3068OCR \u3092\u884c\u3044\uff0c\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u7d50\u679c\u3092\u8fd4\u3059\u3082\u306e\u3067\u3057\u305f\uff0e\u3053\u308c\u3092NDLOCR-Lite \u3067\u52d5\u304f\u3088\u3046\u306b\u66f8\u304d\u63db\u3048\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n$ cat ~/bin/ndlocr-lite.bash\n#!/bin/bash\n\nTMPDIR=$(mktemp -d)\nIMAGEFILE=\"$(mktemp).png\"\nimport png:\"${IMAGEFILE}\" (1)\n#sixelv \"${IMAGEFILE}\"\nconvert \"${IMAGEFILE}\" sixel: (2)\nndlocr-lite --sourceimg \"${IMAGEFILE}\" --output \"${TMPDIR}\" (3)\n\nif [ $? ]; then\n cat \"${TMPDIR}\"/*.txt | pee cat \"xsel -b\" (4)\n notify-send 'ocr📋(primary)' (5)\nelse\n notify-send 'ocr error'\n exit 1\nfi\n\nrm \"${IMAGEFILE}\" (6)\nrm -r \"${TMPDIR}\"\n\n\n\n\n\nImagemagick \u306eimport \u30b3\u30de\u30f3\u30c9\u3067\u4efb\u610f\u306e\u5834\u6240\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\n\n\n\u30c7\u30d0\u30c3\u30b0\u7528\u306b\u753b\u50cf\u51fa\u529b\n\n\nNDLOCR-Lite \u3067\u6587\u5b57\u8d77\u3053\u3057\n\n\n\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u306b\u683c\u7d0d\n\n\nnotify-send \u3067\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u306b\u901a\u77e5\n\n\n\n\n\u5b9f\u884c\u3059\u308b\u3068\u3053\u3093\u306a\u611f\u3058\uff0e\u52d5\u753b\u5185\u306e\u30b9\u30e9\u30a4\u30c9\u3092\u30ad\u30e3\u30d7\u30c1\u30e3\u3057\u3066\u3044\u307e\u3059\uff0e\u89e3\u50cf\u5ea6\u304c\u4f4e\u3044\u3068\u3044\u307e\u3044\u3061\u3067\u3059\u304c\u89e3\u50cf\u5ea6\u304c\u9ad8\u3044\u3068\u3044\u3044\u611f\u3058\u3067\u3059\uff0etermial \u3067\u53e9\u304f\u3068\u30c7\u30d0\u30c3\u30b0\u7528\u306bSixel \u3067\u30ad\u30e3\u30d7\u30c1\u30e3\u753b\u50cf\u3082\u51fa\u3059\u3088\u3046\u306b\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\n\n\nNote\n\n\n\u753b\u50cf\u306e\u51fa\u5178\uff1a\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b92026 Tokyo/Spring 2\u65e5\u76ee\u30e9\u30a4\u30c8\u30cb\u30f3\u30b0\u30c8\u30fc\u30af\u306e\u30aa\u30fc\u30d7\u30cb\u30f3\u30b0\u3088\u308a https://www.youtube.com/watch?v=xtb3ZFb6WvA\n\n\n\n\n\n\u3053\u306ebash script \u3092WindowManager \u306b\u767b\u9332\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\u4ee5\u4e0b\u306fi3 wm \u3067 Super+Shift+o \u3067\u547c\u3073\u51fa\u305b\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n~/.config/i3/config\n\n\n\n$ grep ocr ~/.config/i3/config\n#OCR https://gitlab.com/matoken/kagolug-2022.05/-/blob/main/slide/ocr.adoc\nbindsym $mod+Shift+o exec --no-startup-id ~/bin/ndlocr-lite.bash\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067\u4fbf\u5229\u306b\u4f7f\u3048\u305d\u3046\u3067\u3059\uff0e\n\u56fd\u7acb\u56fd\u4f1a\u56f3\u66f8\u9928\u306e\u9060\u9694\u9001\u4fe1\u30b5\u30fc\u30d3\u30b9\u3067\u95b2\u89a7\u53ef\u80fd\u306a\u66f8\u7c4d\u306a\u3069\u3092\u5c0f\u3055\u306a\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306a\u3069\u306e\u7aef\u672b\u3067\u8aad\u3080\u306e\u306f\u3044\u307e\u3044\u3061\u3068\u601d\u3063\u3066\u3044\u305f\u306e\u3067\u3059\u304c\uff0c\u3053\u308c\u3067\u6587\u5b57\u8d77\u3053\u3057\u3057\u3066\u8aad\u3093\u3067\u307f\u308b\u306e\u3082\u3042\u308a\u304b\u3082\u3057\u308c\u307e\u305b\u3093\uff0c\n\n\n\n\n\u74b0\u5883\n\n\n\n$ git log --pretty=oneline -1\n4f0748be4244a2e36d4dd43af05d6eebded3d56d (HEAD -> master, origin/master, origin/HEAD) Merge pull request #13 from mattn/fallback-line\n$ pipx list | grep uv\n package uv 0.10.7, installed using Python 3.13.3\n - uv\n - uvx\n$ dpkg-query -W python3 python3-venv\npython3 3.13.9-3\npython3-venv 3.13.9-3\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\n\n\ntoot\n\n\n\n\nmatoken :fox:: “NDL\u53e4\u5178\u7c4dOCR-Lite \u306b\u7d9a\u304dNDLOCR-Lite \u2026” – \u3044\u306a\u3053\u3093", "date_published": "2026-03-02T23:15:44+09:00", "date_modified": "2026-03-03T19:19:47+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "NDL", "NDLOCR-Lite", "OCR", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5284", "url": "https://matoken.org/blog/2026/02/25/changedetection-io/", "title": "ChangeDetection.io\u3092\u66f4\u65b0\u3057\u305f\u3089\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8IP\u3092\u5229\u7528\u3057\u305fURL\u304c\u30a8\u30e9\u30fc\u306b\u306a\u308b", "content_html": "
\n
\n

\n
\n

ChangeDetection.io \u3092\u66f4\u65b0\u3057\u305f\u3089\u30eb\u30fc\u30bf\u30fc\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

ChangeDetection.io \u306f\u306f\u3066\u306a\u30a2\u30f3\u30c6\u30ca\u306e\u3088\u3046\u306b\u767b\u9332\u30b5\u30a4\u30c8\u3092\u5b9a\u671f\u7684\u306b\u5de1\u56de\u3057\u3066\u66f4\u65b0\u3092\u6559\u3048\u3066\u304f\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304a\u3088\u3073\u30b5\u30fc\u30d3\u30b9\u3067\u3059\uff0e
\n\u81ea\u5206\u306f\u30ed\u30fc\u30ab\u30ebPC \u306b\u5165\u308c\u3066\u52d5\u304b\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n\n
\n

#kagolug 2025.03 \u3067\u767a\u8868\u3057\u305f\u3068\u304d\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089\uff0e

\n
\n\n
\n

\u4eca\u56de\u66f4\u65b0\u901a\u77e5\u304c\u6765\u3066\u3044\u305f\u306e\u3067\u6700\u65b0\u306b\u66f4\u65b0\u3057\u307e\u3057\u305f\uff0ev0.54.1 \u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ w3m -dump http://100.121.84.16:5000/ | grep ^v\nv0.54.1
\n
\n
\n
\n

\u3059\u308b\u3068router \u306e\u8a2d\u5b9a\u304c\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u30ed\u30b0\u304c\u53d6\u308c\u306a\u304f\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
 > DISABLED\n> Exception: Invalid URL 'DISABLED': No scheme supplied. Perhaps you meant https://DISABLED?\n[Create a link to share watch config with others]
\n
\n
\n
\n

\"changedetection.io

\n
\n
\n

Edit \u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u7de8\u96c6\u753b\u9762\u306b\u9077\u79fb\u3059\u308b\u3068\u554f\u984c\u306a\u3055\u305d\u3046\uff0e\u3067\u3082\u4e0a\u66f8\u304d\u4fdd\u5b58\u3057\u3088\u3046\u3068\u3057\u305f\u3089\u6012\u3089\u308c\u307e\u3059\uff0e
\n\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u304b\u3089\u306fURL \u304c\u304a\u304b\u3057\u305d\u3046\u3067\u3059\u304c\uff0c\u3053\u306eURL \u306f\u666e\u901a\u306b\u958b\u3051\u308b\u3057\u305d\u3082\u305d\u3082\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u307e\u3067\u306f\u52d5\u3044\u3066\u3044\u305f\u3082\u306e\u3067\u3059\uff0e

\n
\n
\n
\n
* Watch protocol is not permitted or invalid URL format
\n
\n
\n
\n

\"changedetection.io

\n
\n
\n

\u306a\u3093\u304b\u30d0\u30b0\u8e0f\u3093\u3060?\u524d\u30d0\u30fc\u30b8\u30e7\u30f3\u304b\u3089\u4eca\u56de\u307e\u3067\u306ediff \u898b\u308b\u304b\u2026\u2026\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0cSSRF \u5bfe\u7b56\u3067\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8IP \u304c\u7121\u52b9\u306b\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3088\u3046\u3067\u3059\uff0e

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

ALLOW_IANA_RESTRICTED_ADDRESSES=true \u3067\u9003\u3052\u3089\u308c\u308b\u3088\u3046\u306a\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

docker-compose \u3067\u904b\u7528\u3057\u3066\u3044\u308b\u306e\u3067\uff0cdocker-compose.yml \u3092\u958b\u304d\uff0cchangedetection \u90e8\u5206\u306e environment: \u306b ALLOW_IANA_RESTRICTED_ADDRESSES=true \u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\uff0e\u305d\u3057\u3066up \u3059\u308b\u3053\u3068\u3067\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8IP \u30a2\u30c9\u30ec\u30b9\u306eURL \u3082\u307e\u305f\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ docker compose --file ~/src/changedetection.io/docker-compose.yml up -d
\n
\n
\n
\n

\u3053\u308c\u3053\u306e\u30a2\u30c9\u30ec\u30b9\u3060\u3051\u8a31\u53ef\u306e\u3088\u3046\u306a\u8a2d\u5b9a\u3082\u3067\u304d\u308b\u3068\u826f\u3055\u305d\u3046\u3067\u3059\u306d\uff0e

\n
\n
\n
\n
\n

\u74b0\u5883

\n
\n
\n
$ docker images ghcr.io/dgtlmoon/changedetection.io:latest\n                                                                                                                                                                   i Info     U  In Use\nIMAGE                                        ID             DISK USAGE   CONTENT SIZE   EXTRA\nghcr.io/dgtlmoon/changedetection.io:latest   cf4a98d2a980        889MB             0B    U\n$ w3m http://127.0.0.1:5000/ | grep ^v\nv0.54.1\n$ dpkg-query -W docker.io docker-compose-plugin\ndocker-compose-plugin   5.1.0-1~debian.12~bookworm\ndocker.io       26.1.5+dfsg1-4+b1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n
\n
\n

toot

\n
\n\n
\n
\n", "content_text": "ChangeDetection.io \u3092\u66f4\u65b0\u3057\u305f\u3089\u30eb\u30fc\u30bf\u30fc\u306e\u30a2\u30c9\u30ec\u30b9\u304c\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e\n\n\n\nChangeDetection.io \u306f\u306f\u3066\u306a\u30a2\u30f3\u30c6\u30ca\u306e\u3088\u3046\u306b\u767b\u9332\u30b5\u30a4\u30c8\u3092\u5b9a\u671f\u7684\u306b\u5de1\u56de\u3057\u3066\u66f4\u65b0\u3092\u6559\u3048\u3066\u304f\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304a\u3088\u3073\u30b5\u30fc\u30d3\u30b9\u3067\u3059\uff0e\n\u81ea\u5206\u306f\u30ed\u30fc\u30ab\u30ebPC \u306b\u5165\u308c\u3066\u52d5\u304b\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\ndgtlmoon/changedetection.io: Best and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock alerts, and website defacement monitoring\u2014all for free or enjoy our SaaS plan!\n\n\n\n\n#kagolug 2025.03 \u3067\u767a\u8868\u3057\u305f\u3068\u304d\u306e\u8cc7\u6599\u306f\u3053\u3061\u3089\uff0e\n\n\n\n\nChangeDetection.io\u3067\u30a6\u30a7\u30d6\u30da\u30fc\u30b8\u3092\u5b9a\u671f\u30c1\u30a7\u30c3\u30af\n\n\n\n\n\u4eca\u56de\u66f4\u65b0\u901a\u77e5\u304c\u6765\u3066\u3044\u305f\u306e\u3067\u6700\u65b0\u306b\u66f4\u65b0\u3057\u307e\u3057\u305f\uff0ev0.54.1 \u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n$ w3m -dump http://100.121.84.16:5000/ | grep ^v\nv0.54.1\n\n\n\n\u3059\u308b\u3068router \u306e\u8a2d\u5b9a\u304c\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u30ed\u30b0\u304c\u53d6\u308c\u306a\u304f\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n > DISABLED\n> Exception: Invalid URL 'DISABLED': No scheme supplied. Perhaps you meant https://DISABLED?\n[Create a link to share watch config with others]\n\n\n\n\n\n\nEdit \u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u7de8\u96c6\u753b\u9762\u306b\u9077\u79fb\u3059\u308b\u3068\u554f\u984c\u306a\u3055\u305d\u3046\uff0e\u3067\u3082\u4e0a\u66f8\u304d\u4fdd\u5b58\u3057\u3088\u3046\u3068\u3057\u305f\u3089\u6012\u3089\u308c\u307e\u3059\uff0e\n\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u304b\u3089\u306fURL \u304c\u304a\u304b\u3057\u305d\u3046\u3067\u3059\u304c\uff0c\u3053\u306eURL \u306f\u666e\u901a\u306b\u958b\u3051\u308b\u3057\u305d\u3082\u305d\u3082\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u307e\u3067\u306f\u52d5\u3044\u3066\u3044\u305f\u3082\u306e\u3067\u3059\uff0e\n\n\n\n* Watch protocol is not permitted or invalid URL format\n\n\n\n\n\n\n\u306a\u3093\u304b\u30d0\u30b0\u8e0f\u3093\u3060?\u524d\u30d0\u30fc\u30b8\u30e7\u30f3\u304b\u3089\u4eca\u56de\u307e\u3067\u306ediff \u898b\u308b\u304b\u2026\u2026\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0cSSRF \u5bfe\u7b56\u3067\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8IP \u304c\u7121\u52b9\u306b\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\n\nCVE-2026-27696 – Server-Side Request Forgery (SSRF) via Watch URLs, set env var ALLOW_IANA_RESTRICTED_ADDRESSES to true to access IANA reserved URLs such as http://169.254.169.254, http://10.0.0.1/, http://127.0.0.1/, etc.\n\n\n\n\n\n— Release 0.54.1 \u00b7 dgtlmoon/changedetection.io\n\n\n\n\u5dee\u5206\u3092\u898b\u308b\u3068IPv6 \u306eloopback \u3084local \u3082\u5bfe\u8c61\u306e\u3088\u3046\u3067\u3059\uff0e\n\n\nALLOW_IANA_RESTRICTED_ADDRESSES=true \u3067\u9003\u3052\u3089\u308c\u308b\u3088\u3046\u306a\u306e\u3067\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\ndocker-compose \u3067\u904b\u7528\u3057\u3066\u3044\u308b\u306e\u3067\uff0cdocker-compose.yml \u3092\u958b\u304d\uff0cchangedetection \u90e8\u5206\u306e environment: \u306b ALLOW_IANA_RESTRICTED_ADDRESSES=true \u3092\u8ffd\u52a0\u3057\u307e\u3057\u305f\uff0e\u305d\u3057\u3066up \u3059\u308b\u3053\u3068\u3067\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8IP \u30a2\u30c9\u30ec\u30b9\u306eURL \u3082\u307e\u305f\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n$ docker compose --file ~/src/changedetection.io/docker-compose.yml up -d\n\n\n\n\u3053\u308c\u3053\u306e\u30a2\u30c9\u30ec\u30b9\u3060\u3051\u8a31\u53ef\u306e\u3088\u3046\u306a\u8a2d\u5b9a\u3082\u3067\u304d\u308b\u3068\u826f\u3055\u305d\u3046\u3067\u3059\u306d\uff0e\n\n\n\n\n\u74b0\u5883\n\n\n$ docker images ghcr.io/dgtlmoon/changedetection.io:latest\n i Info U In Use\nIMAGE ID DISK USAGE CONTENT SIZE EXTRA\nghcr.io/dgtlmoon/changedetection.io:latest cf4a98d2a980 889MB 0B U\n$ w3m http://127.0.0.1:5000/ | grep ^v\nv0.54.1\n$ dpkg-query -W docker.io docker-compose-plugin\ndocker-compose-plugin 5.1.0-1~debian.12~bookworm\ndocker.io 26.1.5+dfsg1-4+b1\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\n\ntoot\n\n\n\nmatoken :fox:: “ChangeDetection.io \u3092\u66f4\u65b0 v0.54.1\u2026” – \u3044\u306a\u3053\u3093", "date_published": "2026-02-25T07:19:29+09:00", "date_modified": "2026-02-25T07:19:31+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ChangeDetection.io", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5258", "url": "https://matoken.org/blog/2026/02/20/yt-dlp_subtitle_429error/", "title": "yt-dlp\u3067YouTube\u306e\u5b57\u5e55\u30d5\u30a1\u30a4\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557(HTTP Error 429: Too Many Requests)", "content_html": "
\n
\n

\n
\n

Tokyo Linux Users Group \u306eTechnical Meeting \u306e\u30d3\u30c7\u30aa\u304cYouTube \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u308b\u3068\u5148\u65e5\u306e #kagolug \u3067\u6559\u3048\u3066\u3082\u3089\u3063\u305f\u306e\u3067\u89b3\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3057\u305f\uff0e
\n\u3067\u3082TLUG \u306f\u82f1\u8a9e\u3067\u3059\uff0e\u4ee5\u524d\u306fWisper.cpp \u3067\u6587\u5b57\u8d77\u3053\u3057 & \u6a5f\u68b0\u7ffb\u8a33\u3067\u5b57\u5e55\u3092\u4f5c\u3063\u3066\u3044\u307e\u3057\u305f\u304c\u6700\u8fd1\u306eYouTube \u306e\u6587\u5b57\u8d77\u3053\u3057\u306f\u5927\u5206\u826f\u304f\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u305d\u308c\u3092\u4f7f\u304a\u3046\u3068\u30ed\u30fc\u30ab\u30eb\u306b\u30d3\u30c7\u30aa\u3068\u5b57\u5e55\u3092dl \u3057\u3088\u3046\u3068\u3057\u305f\u3068\u3053\u308d\u5b57\u5e55\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\uff0e

\n
\n\n

\n
\n

\u9069\u5f53\u306a\u89e3\u50cf\u5ea6\u306e\u30d3\u30c7\u30aa\u3068\u30aa\u30fc\u30c7\u30a3\u30aa\uff0c\u305d\u308c\u3068\u82f1\u8a9e\u306e\u6587\u5b57\u8d77\u3053\u3057\u5b57\u5e55\u3068\uff0c\u305d\u308c\u3092\u65e5\u672c\u8a9e\u306b\u7ffb\u8a33\u3057\u305f\u3082\u306e\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ yt-dlp -f 244+251 yYgF87nqyKI --write-auto-subs --sub-langs ja,en_orig\n[youtube] Extracting URL: yYgF87nqyKI\n[youtube] yYgF87nqyKI: Downloading webpage\n[youtube] yYgF87nqyKI: Downloading android vr player API JSON\n[youtube] yYgF87nqyKI: Downloading web safari player API JSON\n[youtube] yYgF87nqyKI: Downloading player 4c5cf06a-tv\n[youtube] [jsc:deno] Solving JS challenges using deno\n[youtube] yYgF87nqyKI: Downloading m3u8 information\n[info] yYgF87nqyKI: Downloading subtitles: ja\n[info] yYgF87nqyKI: Downloading 1 format(s): 244+251\n[info] Writing video subtitles to: CDImage - Cam [yYgF87nqyKI].ja.vtt\nWARNING: The extractor specified to use impersonation for this download, but no impersonate target is available. If you encounter errors, then see  https://github.com/yt-dlp/yt-dlp#impersonation  for information on installing the required dependencies\nERROR: Unable to download video subtitles for 'ja': HTTP Error 429: Too Many Requests
\n
\n
\n
\n

*Too Many Requests* \u3068\u304b\u8a00\u308f\u308c\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e\u4eca\u65e5\u521d\u3081\u3066\u5b9f\u884c\u3057\u305f\u306e\u306b\u306a\u3093\u3067?

\n
\n
\n

--verbose \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u3066\u307f\u307e\u3057\u305f\u304c\u3088\u304f\u308f\u304b\u308a\u307e\u305b\u3093

\n
\n
\n
\n
[info] Writing video subtitles to: CDImage - Cam [yYgF87nqyKI].ja.vtt\n[debug] Invoking http downloader on \"https://www.youtube.com/api/timedtext?v=yYgF87nqyKI&ei=M4WXaZnECfax2roP_YqAqAc&caps=asr&opi=112496729&xoaf=5&xowf=1&xospf=1&hl=en&ip=0.0.0.0&ipbits=0&expire=1771562915&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=1B0AC6AA8FB20AFE9B45B2F66DBB1000F04DE626.909918AF43ACD2AFD3E0C2C61E53A3C72E49AB6C&key=yt8&kind=asr&lang=en&fmt=vtt&tlang=ja\"\nWARNING: The extractor specified to use impersonation for this download, but no impersonate target is available. If you encounter errors, then see  https://github.com/yt-dlp/yt-dlp#impersonation  for information on installing the required dependencies\nERROR: Unable to download video subtitles for 'ja': HTTP Error 429: Too Many Requests\nTraceback (most recent call last):\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 4449, in _write_subtitles\n    self.dl(sub_filename, sub_copy, subtitle=True)\n    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 3285, in dl\n    return fd.download(name, new_info, subtitle)\n           ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/downloader/common.py\", line 480, in download\n    ret = self.real_download(filename, info_dict)\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/downloader/http.py\", line 362, in real_download\n    establish_connection()\n    ~~~~~~~~~~~~~~~~~~~~^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/downloader/http.py\", line 119, in establish_connection\n    ctx.data = self.ydl.urlopen(request)\n               ~~~~~~~~~~~~~~~~^^^^^^^^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 4260, in urlopen\n    return self._request_director.send(req)\n           ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/common.py\", line 117, in send\n    response = handler.send(request)\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/_helper.py\", line 194, in wrapper\n    return func(self, *args, **kwargs)\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/common.py\", line 359, in send\n    return self._send(request)\n           ~~~~~~~~~~^^^^^^^^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/_requests.py\", line 361, in _send\n    raise HTTPError(res, redirect_loop=max_redirects_exceeded)\nyt_dlp.networking.exceptions.HTTPError: HTTP Error 429: Too Many Requests\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 1698, in wrapper\n    return func(self, *args, **kwargs)\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 1854, in __extract_info\n    return self.process_ie_result(ie_result, download, extra_info)\n           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 1913, in process_ie_result\n    ie_result = self.process_video_result(ie_result, download=download)\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 3096, in process_video_result\n    self.process_info(new_info)\n    ~~~~~~~~~~~~~~~~~^^^^^^^^^^\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 189, in wrapper\n    return func(self, *args, **kwargs)\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 3353, in process_info\n    sub_files = self._write_subtitles(info_dict, temp_filename)\n  File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 4457, in _write_subtitles\n    raise DownloadError(msg)\nyt_dlp.utils.DownloadError: Unable to download video subtitles for 'ja': HTTP Error 429: Too Many Requests
\n
\n
\n
\n

ISSUES \u3092\u63a2\u3059\u3068\u65e2\u77e5\u306e\u554f\u984c\u306e\u3088\u3046\u3067\u30ef\u30fc\u30af\u30a2\u30e9\u30a6\u30f3\u30c9\u304c\u3042\u308a\u307e\u3057\u305f\uff0e

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

[FreeTubeApp/FreeTube#7484](https://github.com/FreeTubeApp/FreeTube/pull/7484)

\n
\n
\n
\n
\n

FreeTube is adding a PO token to their subtitles requests. But FreeTube doesn’t use auto-translated subs AFAICT.
\n# Manual subtitles and original language automatic captions are not affected by this HTTP Error 429 issue.

\n
\n
\n

Only subtitles/captions that have been automatically translated into another language are affected. So you may be able to get the subs you want without a problem if you are precise with your --sub-langs and --write-subs vs --write-auto-subs arguments.

\n
\n
\n

But if you want translated auto subs,
\n# there are 2 known ways of avoiding this HTTP Error 429:

\n
\n
\n
    \n
  • \n

    Pass fresh cookies to yt-dlp from a browser session where you’ve very recently loaded auto-translated subs

    \n
  • \n
  • \n

    Wait ~60 seconds after extraction and before downloading the auto subs, e.g. --sleep-subtitles 60

    \n
  • \n
\n
\n
\n

(Either of these 2 methods will work individually, you do not need to combine them)

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

\u3068\u3044\u3046\u3053\u3068\u3067\u3068\u308a\u3042\u3048\u305a --sleep-subtitles 60 \u3092\u4ed8\u3051\u3066\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u5b57\u5e55\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u306bsleep \u3057\u3066\u6012\u3089\u308c\u305a\u306b\u5b57\u5e55\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ yt-dlp -f 244+251 yYgF87nqyKI --write-auto-subs --sub-langs ja,en_orig --sleep-subtitles 60
\n
\n
\n
\n

\u305d\u3057\u3066mpv \u7b49\u3067\u3053\u3093\u306a\u611f\u3058\u3067\u5b57\u5e55\u30922\u3064\u8868\u793a\u3057\u306a\u304c\u3089\u8996\u8074\u53ef\u80fd\u306b :)

\n
\n
\n
\n
$ mpv --sub-files='CDImage - Cam [yYgF87nqyKI].en.vtt:CDImage - Cam [yYgF87nqyKI].ja.vtt' --secondary-sid=2 'CDImage - Cam [yYgF87nqyKI].webm'
\n
\n
\n
\n

\"mpv

\n
\n
\n
\u74b0\u5883
\n
\n
$ yt-dlp --version\n2026.02.04\n$ deno --version\ndeno 2.6.8 (stable, release, x86_64-unknown-linux-gnu)\nv8 14.5.201.2-rusty\ntypescript 5.9.2\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n\n
\n
\n", "content_text": "Tokyo Linux Users Group \u306eTechnical Meeting \u306e\u30d3\u30c7\u30aa\u304cYouTube \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u308b\u3068\u5148\u65e5\u306e #kagolug \u3067\u6559\u3048\u3066\u3082\u3089\u3063\u305f\u306e\u3067\u89b3\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3057\u305f\uff0e\n\u3067\u3082TLUG \u306f\u82f1\u8a9e\u3067\u3059\uff0e\u4ee5\u524d\u306fWisper.cpp \u3067\u6587\u5b57\u8d77\u3053\u3057 & \u6a5f\u68b0\u7ffb\u8a33\u3067\u5b57\u5e55\u3092\u4f5c\u3063\u3066\u3044\u307e\u3057\u305f\u304c\u6700\u8fd1\u306eYouTube \u306e\u6587\u5b57\u8d77\u3053\u3057\u306f\u5927\u5206\u826f\u304f\u306a\u3063\u3066\u3044\u308b\u306e\u3067\u305d\u308c\u3092\u4f7f\u304a\u3046\u3068\u30ed\u30fc\u30ab\u30eb\u306b\u30d3\u30c7\u30aa\u3068\u5b57\u5e55\u3092dl \u3057\u3088\u3046\u3068\u3057\u305f\u3068\u3053\u308d\u5b57\u5e55\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\nTokyo Linux Users Group\n\n\nhttps://www.youtube.com/@TokyoLinuxUsersGroup\n\n\n\n\n\n\u9069\u5f53\u306a\u89e3\u50cf\u5ea6\u306e\u30d3\u30c7\u30aa\u3068\u30aa\u30fc\u30c7\u30a3\u30aa\uff0c\u305d\u308c\u3068\u82f1\u8a9e\u306e\u6587\u5b57\u8d77\u3053\u3057\u5b57\u5e55\u3068\uff0c\u305d\u308c\u3092\u65e5\u672c\u8a9e\u306b\u7ffb\u8a33\u3057\u305f\u3082\u306e\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3088\u3046\u3068\u3057\u307e\u3057\u305f\uff0e\n\n\n\n$ yt-dlp -f 244+251 yYgF87nqyKI --write-auto-subs --sub-langs ja,en_orig\n[youtube] Extracting URL: yYgF87nqyKI\n[youtube] yYgF87nqyKI: Downloading webpage\n[youtube] yYgF87nqyKI: Downloading android vr player API JSON\n[youtube] yYgF87nqyKI: Downloading web safari player API JSON\n[youtube] yYgF87nqyKI: Downloading player 4c5cf06a-tv\n[youtube] [jsc:deno] Solving JS challenges using deno\n[youtube] yYgF87nqyKI: Downloading m3u8 information\n[info] yYgF87nqyKI: Downloading subtitles: ja\n[info] yYgF87nqyKI: Downloading 1 format(s): 244+251\n[info] Writing video subtitles to: CDImage - Cam [yYgF87nqyKI].ja.vtt\nWARNING: The extractor specified to use impersonation for this download, but no impersonate target is available. If you encounter errors, then see https://github.com/yt-dlp/yt-dlp#impersonation for information on installing the required dependencies\nERROR: Unable to download video subtitles for 'ja': HTTP Error 429: Too Many Requests\n\n\n\n*Too Many Requests* \u3068\u304b\u8a00\u308f\u308c\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e\u4eca\u65e5\u521d\u3081\u3066\u5b9f\u884c\u3057\u305f\u306e\u306b\u306a\u3093\u3067?\n\n\n--verbose \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u3066\u307f\u307e\u3057\u305f\u304c\u3088\u304f\u308f\u304b\u308a\u307e\u305b\u3093\n\n\n\n[info] Writing video subtitles to: CDImage - Cam [yYgF87nqyKI].ja.vtt\n[debug] Invoking http downloader on \"https://www.youtube.com/api/timedtext?v=yYgF87nqyKI&ei=M4WXaZnECfax2roP_YqAqAc&caps=asr&opi=112496729&xoaf=5&xowf=1&xospf=1&hl=en&ip=0.0.0.0&ipbits=0&expire=1771562915&sparams=ip%2Cipbits%2Cexpire%2Cv%2Cei%2Ccaps%2Copi%2Cxoaf&signature=1B0AC6AA8FB20AFE9B45B2F66DBB1000F04DE626.909918AF43ACD2AFD3E0C2C61E53A3C72E49AB6C&key=yt8&kind=asr&lang=en&fmt=vtt&tlang=ja\"\nWARNING: The extractor specified to use impersonation for this download, but no impersonate target is available. If you encounter errors, then see https://github.com/yt-dlp/yt-dlp#impersonation for information on installing the required dependencies\nERROR: Unable to download video subtitles for 'ja': HTTP Error 429: Too Many Requests\nTraceback (most recent call last):\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 4449, in _write_subtitles\n self.dl(sub_filename, sub_copy, subtitle=True)\n ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 3285, in dl\n return fd.download(name, new_info, subtitle)\n ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/downloader/common.py\", line 480, in download\n ret = self.real_download(filename, info_dict)\n File \"/home/matoken/bin/yt-dlp/yt_dlp/downloader/http.py\", line 362, in real_download\n establish_connection()\n ~~~~~~~~~~~~~~~~~~~~^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/downloader/http.py\", line 119, in establish_connection\n ctx.data = self.ydl.urlopen(request)\n ~~~~~~~~~~~~~~~~^^^^^^^^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 4260, in urlopen\n return self._request_director.send(req)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/common.py\", line 117, in send\n response = handler.send(request)\n File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/_helper.py\", line 194, in wrapper\n return func(self, *args, **kwargs)\n File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/common.py\", line 359, in send\n return self._send(request)\n ~~~~~~~~~~^^^^^^^^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/networking/_requests.py\", line 361, in _send\n raise HTTPError(res, redirect_loop=max_redirects_exceeded)\nyt_dlp.networking.exceptions.HTTPError: HTTP Error 429: Too Many Requests\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 1698, in wrapper\n return func(self, *args, **kwargs)\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 1854, in __extract_info\n return self.process_ie_result(ie_result, download, extra_info)\n ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 1913, in process_ie_result\n ie_result = self.process_video_result(ie_result, download=download)\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 3096, in process_video_result\n self.process_info(new_info)\n ~~~~~~~~~~~~~~~~~^^^^^^^^^^\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 189, in wrapper\n return func(self, *args, **kwargs)\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 3353, in process_info\n sub_files = self._write_subtitles(info_dict, temp_filename)\n File \"/home/matoken/bin/yt-dlp/yt_dlp/YoutubeDL.py\", line 4457, in _write_subtitles\n raise DownloadError(msg)\nyt_dlp.utils.DownloadError: Unable to download video subtitles for 'ja': HTTP Error 429: Too Many Requests\n\n\n\nISSUES \u3092\u63a2\u3059\u3068\u65e2\u77e5\u306e\u554f\u984c\u306e\u3088\u3046\u3067\u30ef\u30fc\u30af\u30a2\u30e9\u30a6\u30f3\u30c9\u304c\u3042\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\n[FreeTubeApp/FreeTube#7484](https://github.com/FreeTubeApp/FreeTube/pull/7484)\n\n\n\n\nFreeTube is adding a PO token to their subtitles requests. But FreeTube doesn’t use auto-translated subs AFAICT.\n# Manual subtitles and original language automatic captions are not affected by this HTTP Error 429 issue.\n\n\nOnly subtitles/captions that have been automatically translated into another language are affected. So you may be able to get the subs you want without a problem if you are precise with your --sub-langs and --write-subs vs --write-auto-subs arguments.\n\n\nBut if you want translated auto subs,\n# there are 2 known ways of avoiding this HTTP Error 429:\n\n\n\n\nPass fresh cookies to yt-dlp from a browser session where you’ve very recently loaded auto-translated subs\n\n\nWait ~60 seconds after extraction and before downloading the auto subs, e.g. --sleep-subtitles 60\n\n\n\n\n(Either of these 2 methods will work individually, you do not need to combine them)\n\n\n\n— [YouTube] Unable to download video subtitles: HTTP Error 429: Too Many Requests \u00b7 Issue #13831 \u00b7 yt-dlp/yt-dlp\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067\u3068\u308a\u3042\u3048\u305a --sleep-subtitles 60 \u3092\u4ed8\u3051\u3066\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u5b57\u5e55\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u6642\u306bsleep \u3057\u3066\u6012\u3089\u308c\u305a\u306b\u5b57\u5e55\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\n\n$ yt-dlp -f 244+251 yYgF87nqyKI --write-auto-subs --sub-langs ja,en_orig --sleep-subtitles 60\n\n\n\n\u305d\u3057\u3066mpv \u7b49\u3067\u3053\u3093\u306a\u611f\u3058\u3067\u5b57\u5e55\u30922\u3064\u8868\u793a\u3057\u306a\u304c\u3089\u8996\u8074\u53ef\u80fd\u306b :)\n\n\n\n$ mpv --sub-files='CDImage - Cam [yYgF87nqyKI].en.vtt:CDImage - Cam [yYgF87nqyKI].ja.vtt' --secondary-sid=2 'CDImage - Cam [yYgF87nqyKI].webm'\n\n\n\n\n\n\n\u74b0\u5883\n\n$ yt-dlp --version\n2026.02.04\n$ deno --version\ndeno 2.6.8 (stable, release, x86_64-unknown-linux-gnu)\nv8 14.5.201.2-rusty\ntypescript 5.9.2\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\ntoot\n\n\nmatoken :fox:: “#tlug \u306e\u30d3\u30c7\u30aa\u304cYouTube \u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u2026” – \u3044\u306a\u3053\u3093", "date_published": "2026-02-20T07:17:00+09:00", "date_modified": "2026-02-20T07:17:01+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "mpv", "subtitle", "yt-dlp", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5251", "url": "https://matoken.org/blog/2026/02/19/snac-static/", "title": "snac\u306e\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306estatic\u30c7\u30a3\u30ec\u30af\u30c8\u30ea", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

snac\u306e\u305f\u3081\u306e\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092apache2 httpd \u3067\u8a2d\u5b9a\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u8a2d\u7f6e\u5834\u6240\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e

\n
\n\n
\n

\u5b9f\u306f\u8a2d\u5b9a\u305b\u305a\u3068\u3082\u30e6\u30fc\u30b6\u3054\u3068\u306b\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u304d\u3063\u304b\u3051\u306f\u3053\u3061\u3089\uff0e

\n
\n
\n
\n
\n

Use https://snac.rohrmoser.name/social/marcus/s/readme.txt (i.e. add a /s/ between your account id and the file).

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

${SNAC-URL}/${USER}/s/ \u306e\u4e0b\u304c\u4f7f\u3048\u308b\u3088\u3046\u3067\u3059\uff0e
\n\u5b9f\u969b\u306b\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
\n

$ cd ${SNAC-DATA}/user/${USER}/static <.>
\n$ echo test > test <.>
\n$ w3m -dump_extra https://snac.matoken.org/matoken/s/test | grep ^HTTP/ -A99 <.>
\nHTTP/1.1 200 OK
\nDate: Wed, 18 Feb 2026 20:50:37 GMT
\nServer: Apache/2.4.66 (Debian)
\ncontent-type: application/octet-stream
\nx-creator: snac/2.90
\netag: W/”snac-1771444525″
\naccess-control-allow-origin: *
\naccess-control-allow-headers: *
\naccess-control-expose-headers: Link
\nContent-Security-Policy: script-src ;
\ncontent-length: 5
\nConnection: close

\n
\n
\n

test

\n
\n
\n
\n
\n
    \n
  1. \n

    \u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e static \u306b\u79fb\u52d5

    \n
  2. \n
  3. \n

    \u30c6\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210

    \n
  4. \n
  5. \n

    \u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e s \u4ee5\u4e0b\u306e\u8a72\u5f53\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d

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

\u3068\u3044\u3046\u3053\u3068\u3067snac server \u306e ${SNAC-DATA}/user/${USER}/static \u4ee5\u4e0b\u306b\u7f6e\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u304c ${SNAC-URL}/${USER}/s/ \u4ee5\u4e0b\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
\ntheme \u3067\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5229\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u304c\uff0ctheme \u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u3082ok \u306a\u3093\u3067\u3059\u306d\uff0e

\n
\n\n
\n
\u74b0\u5883
\n
\n
$ sudo -u snac ~snac/snac2/snac state ~snac/snac-data\nserver: snac.matoken.org (snac/2.90)\nuptime: 1:11:46:03\njob fifo size (cur): 0\njob fifo size (peak): 11\nthread #0 state: waiting\nthread #1 state: waiting\nthread #2 state: waiting\nthread #3 state: waiting\n$ lsb_release -dr\nNo LSB modules are available.\nDescription:    Debian GNU/Linux 12 (bookworm)\nRelease:        12\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "snac\u306e\u305f\u3081\u306e\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092apache2 httpd \u3067\u8a2d\u5b9a\u3057\u3066\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u8a2d\u7f6e\u5834\u6240\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nsnac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528 \u2013 matoken’s blog\n\n\n\n\n\u5b9f\u306f\u8a2d\u5b9a\u305b\u305a\u3068\u3082\u30e6\u30fc\u30b6\u3054\u3068\u306b\u9759\u7684\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u3042\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e\n\n\n\n\u304d\u3063\u304b\u3051\u306f\u3053\u3061\u3089\uff0e\n\n\n\n\nUse https://snac.rohrmoser.name/social/marcus/s/readme.txt (i.e. add a /s/ between your account id and the file).\n\n\n\n— https://comam.es/snac/grunfink/p/1771335084.798855\n\n\n\n${SNAC-URL}/${USER}/s/ \u306e\u4e0b\u304c\u4f7f\u3048\u308b\u3088\u3046\u3067\u3059\uff0e\n\u5b9f\u969b\u306b\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n\n$ cd ${SNAC-DATA}/user/${USER}/static <.>\n$ echo test > test <.>\n$ w3m -dump_extra https://snac.matoken.org/matoken/s/test | grep ^HTTP/ -A99 <.>\nHTTP/1.1 200 OK\nDate: Wed, 18 Feb 2026 20:50:37 GMT\nServer: Apache/2.4.66 (Debian)\ncontent-type: application/octet-stream\nx-creator: snac/2.90\netag: W/”snac-1771444525″\naccess-control-allow-origin: *\naccess-control-allow-headers: *\naccess-control-expose-headers: Link\nContent-Security-Policy: script-src ;\ncontent-length: 5\nConnection: close\n\n\ntest\n\n\n\n\n\n\n\u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e static \u306b\u79fb\u52d5\n\n\n\u30c6\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\n\n\n\u30e6\u30fc\u30b6\u30fc\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4e0b\u306e s \u4ee5\u4e0b\u306e\u8a72\u5f53\u30d5\u30a1\u30a4\u30eb\u3092\u78ba\u8a8d\n\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067snac server \u306e ${SNAC-DATA}/user/${USER}/static \u4ee5\u4e0b\u306b\u7f6e\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u304c ${SNAC-URL}/${USER}/s/ \u4ee5\u4e0b\u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\ntheme \u3067\u3053\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306f\u5229\u7528\u3057\u3066\u3044\u307e\u3057\u305f\u304c\uff0ctheme \u4ee5\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u3082ok \u306a\u3093\u3067\u3059\u306d\uff0e\n\n\n\n\nsnac\u306etheme\u3092\u8a2d\u5b9a \u2013 matoken’s blog\n\n\n\n\n\u74b0\u5883\n\n$ sudo -u snac ~snac/snac2/snac state ~snac/snac-data\nserver: snac.matoken.org (snac/2.90)\nuptime: 1:11:46:03\njob fifo size (cur): 0\njob fifo size (peak): 11\nthread #0 state: waiting\nthread #1 state: waiting\nthread #2 state: waiting\nthread #3 state: waiting\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Debian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\nx86_64", "date_published": "2026-02-19T05:51:26+09:00", "date_modified": "2026-02-19T05:51:26+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "bookworm", "Debian", "Linux" ] }, { "id": "https://matoken.org/blog/?p=5235", "url": "https://matoken.org/blog/2026/02/16/firefox-lock-tab/", "title": "Firefox\u306e\u6307\u5b9a\u30bf\u30d6\u3092\u4fdd\u8b77(\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u96e2\u8131\u9632\u6b62)", "content_html": "
\n
\n
\n

\"2683779

\n
\n
\n

\u3053\u306e\u571f\u65e5\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3067\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3057\u305f\uff0e\uff11\u3064\u306fzoom.us, \u3082\u30461\u3064\u306fGalene \u3067\u3057\u305f\uff0e
\n\u3069\u3061\u3089\u3082\u53c2\u52a0\u4e2d\u306b\u64cd\u4f5c\u30df\u30b9\u3067\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30bf\u30d6\u304b\u3089\u79fb\u52d5\u3057\u3066\u3057\u307e\u3044\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u304b\u3089\u96e2\u8131\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e
\n\u30bf\u30d6\u3092\u62e1\u5f35\u6a5f\u80fd\u3067\u4fdd\u8b77\u3067\u304d\u306a\u3044\u304b\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u306f\u3058\u3081\u8a66\u3057\u305f\u306e\u306f\u3053\u3061\u3089\u306e\u300cTabloc\u300d\uff0etext chat \u306e\u30ea\u30f3\u30af\u3092\u62bc\u3059\u3068\u65b0\u3057\u3044\u30bf\u30d6\u3067\u958b\u304b\u308c\u308b\u3057\u3053\u308c\u3067\u3044\u3044\u304b\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0c\u53f3\u4e0a\u306e\u30e1\u30cb\u30e5\u30fc\u306e\u5c65\u6b74\u304b\u3089\u5fa9\u5143\u3057\u305f\u3089\u99c4\u76ee\u3067\u3059\uff0e

\n
\n\n
\n

\u6b21\u306b\u8a66\u3057\u305f\u306e\u306f\u4ee5\u4e0b\u306e\u300c\u30bf\u30d6\u306e\u30da\u30fc\u30b8\u3092\u30ed\u30c3\u30af\u3059\u308b\u300d\uff0e\u3053\u3061\u3089\u3060\u3068\u5c65\u6b74\u3092\u5fa9\u5143\u3057\u3088\u3046\u3068\u3057\u3042\u305f\u308a\u30bf\u30d6\u3092\u4e2d\u30af\u30ea\u30c3\u30af\u3067\u9589\u3058\u3088\u3046\u3068\u3059\u308b\u3068\u300c\u3053\u306e\u30da\u30fc\u30b8\u304b\u3089\u79fb\u52d5\u3057\u307e\u3059\u304b\uff1f\u5165\u529b\u3057\u305f\u60c5\u5831\u306f\u4fdd\u5b58\u3055\u308c\u307e\u305b\u3093\u3002\u300d\u3068\u3044\u3046\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3067\u3059\u3050\u306b\u306f\u9589\u3058\u306a\u304f\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\"fx
\n\"fx

\n
\n
\n

\u4fdd\u8b77\u3057\u305f\u30bf\u30d6\u306b\u306f\"\ud83d\udd12\"\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e

\n
\n\n
\n
\u74b0\u5883
\n
\n
\u30bf\u30d6\u306e\u30da\u30fc\u30b8\u3092\u30ed\u30c3\u30af\u3059\u308b: \u30d0\u30fc\u30b8\u30e7\u30f3 1.2025.1227.0\n$ dpkg-query -W firefox\nfirefox 147.0.3-1+b1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u3053\u306e\u571f\u65e5\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3067\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u306b\u53c2\u52a0\u3057\u3066\u3044\u307e\u3057\u305f\uff0e\uff11\u3064\u306fzoom.us, \u3082\u30461\u3064\u306fGalene \u3067\u3057\u305f\uff0e\n\u3069\u3061\u3089\u3082\u53c2\u52a0\u4e2d\u306b\u64cd\u4f5c\u30df\u30b9\u3067\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30bf\u30d6\u304b\u3089\u79fb\u52d5\u3057\u3066\u3057\u307e\u3044\u30d3\u30c7\u30aa\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u304b\u3089\u96e2\u8131\u3057\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e\n\u30bf\u30d6\u3092\u62e1\u5f35\u6a5f\u80fd\u3067\u4fdd\u8b77\u3067\u304d\u306a\u3044\u304b\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\u306f\u3058\u3081\u8a66\u3057\u305f\u306e\u306f\u3053\u3061\u3089\u306e\u300cTabloc\u300d\uff0etext chat \u306e\u30ea\u30f3\u30af\u3092\u62bc\u3059\u3068\u65b0\u3057\u3044\u30bf\u30d6\u3067\u958b\u304b\u308c\u308b\u3057\u3053\u308c\u3067\u3044\u3044\u304b\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0c\u53f3\u4e0a\u306e\u30e1\u30cb\u30e5\u30fc\u306e\u5c65\u6b74\u304b\u3089\u5fa9\u5143\u3057\u305f\u3089\u99c4\u76ee\u3067\u3059\uff0e\n\n\n\n\nTabloc \u2013 Firefox (ja) \u5411\u3051\u62e1\u5f35\u6a5f\u80fd\u3092\u5165\u624b\n\n\n\n\n\u6b21\u306b\u8a66\u3057\u305f\u306e\u306f\u4ee5\u4e0b\u306e\u300c\u30bf\u30d6\u306e\u30da\u30fc\u30b8\u3092\u30ed\u30c3\u30af\u3059\u308b\u300d\uff0e\u3053\u3061\u3089\u3060\u3068\u5c65\u6b74\u3092\u5fa9\u5143\u3057\u3088\u3046\u3068\u3057\u3042\u305f\u308a\u30bf\u30d6\u3092\u4e2d\u30af\u30ea\u30c3\u30af\u3067\u9589\u3058\u3088\u3046\u3068\u3059\u308b\u3068\u300c\u3053\u306e\u30da\u30fc\u30b8\u304b\u3089\u79fb\u52d5\u3057\u307e\u3059\u304b\uff1f\u5165\u529b\u3057\u305f\u60c5\u5831\u306f\u4fdd\u5b58\u3055\u308c\u307e\u305b\u3093\u3002\u300d\u3068\u3044\u3046\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3067\u3059\u3050\u306b\u306f\u9589\u3058\u306a\u304f\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\n\u4fdd\u8b77\u3057\u305f\u30bf\u30d6\u306b\u306f\u30a2\u30a4\u30b3\u30f3\u304c\u8868\u793a\u3055\u308c\u307e\u3059\uff0e\n\n\n\n\n\u30bf\u30d6\u306e\u30da\u30fc\u30b8\u3092\u30ed\u30c3\u30af\u3059\u308b \u2013 Firefox (ja) \u5411\u3051\u62e1\u5f35\u6a5f\u80fd\u3092\u5165\u624b\n\n\n\n\n\u74b0\u5883\n\n\u30bf\u30d6\u306e\u30da\u30fc\u30b8\u3092\u30ed\u30c3\u30af\u3059\u308b: \u30d0\u30fc\u30b8\u30e7\u30f3 1.2025.1227.0\n$ dpkg-query -W firefox\nfirefox 147.0.3-1+b1\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64", "date_published": "2026-02-16T19:03:27+09:00", "date_modified": "2026-02-16T23:15:14+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "extension", "Firefox", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5226", "url": "https://matoken.org/blog/2026/02/10/nextcloud-upgrade-fail/", "title": "Nextcloud\u306e\u81ea\u52d5\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306b\u5931\u6557\u3057\u3066\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u3067disk full", "content_html": "
\n
\n

\n
\n

\u30b5\u30fc\u30d0\u304cdisk full \u306b\u306a\u308a\u8abf\u3079\u305f\u3089Nextcloud \u304c\u81ea\u52d5\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068\u81ea\u52d5\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\uff0c\u3057\u304b\u3057\u5931\u6557\u3068\u3044\u3046\u306e\u3092\u6bce\u65e5\u7e70\u308a\u8fd4\u3057\u3066disk full \u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u306f\u3058\u30811\u6708\u307b\u3069\u524d\u306bdisk full \u306b\u306a\u308a\uff0ccron \u3067\u52d5\u304b\u3057\u3066\u3044\u308b\u30c7\u30a4\u30ea\u30fc\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u6e9c\u307e\u3063\u3066\u3044\u308b\u305b\u3044\u304b\u3068\u601d\u3044\u305d\u3053\u3092\u6383\u9664\u3057\u305f\u306e\u3067\u3059\u304c\u4eca\u6708\u306b\u306a\u3063\u3066\u307e\u305fdisk full \u306b\uff0e
\ndu \u30b3\u30de\u30f3\u30c9\u306a\u3069\u3067\u78ba\u8a8d\u3059\u308b\u3068Nextcloud \u306e\u4e0b\u306e data/updater-${instanceid}/backups/ \u306b\u6bce\u65e5Nextcloud \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u4f5c\u3089\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u306e\u305b\u3044\u3067disk full \u306b\u306a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3057\u305f\uff0e

\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n${instanceid} \u306b\u3064\u3044\u3066\u306f config/config.php \u306e 'instanceid' \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n
\n
\n
\n

\u3053\u3053\u306bNextcloud \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u4f5c\u3089\u308c\u308b\u306e\u306fNextcloud \u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u6642\u3067\u3059\uff0e\u307e\u305a\u306f\u624b\u52d5\u3067\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo -u www-data php updater/updater.phar\n\n  :\n\n[\u2718] Verify integrity failed\nThere are more files than the downloaded archive in the downloads/ folder.\n\nUpdate failed. To resume or retry just execute the updater again.
\n
\n
\n
\n

\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305fNextcloud \u30a2\u30fc\u30ab\u30a4\u30d6\u304c\u304a\u304b\u3057\u305d\u3046\u3067\u3059\uff0e\u8a73\u7d30\u3092\u77e5\u308b\u305f\u3081\u306b\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u307e\u3059\uff0e

\n
\n
\n
data/updater.log
\n
\n
2026-02-08T22:30:46+0000 T8hDMIut3r [info] storage location: /var/www/files.matoken.org/data/updater-ocws62au2wl3/downloads/\n2026-02-08T22:30:57+0000 T8hDMIut3r [info] end of verifyIntegrity()
\n
\n
\n
\n

\u3053\u306e storage location \u306e\u4e0b\u3092\u898b\u308b\u3068\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u304c\u6b8b\u3063\u3066\u3044\u3066\u3053\u308c\u304c\u602a\u3057\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ ls -lA  /var/www/files.matoken.org/data/updater-ocws62au2wl3/downloads/\n\u5408\u8a08 610548\n-rw-r--r-- 1 www-data www-data 312581794  1\u6708 16 04:09 nextcloud-32.0.4.zip\n-rw-r--r-- 1 www-data www-data 312597357  2\u6708  9 07:24 nextcloud-32.0.5.zip
\n
\n
\n
\n

\u53e4\u3044\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u524a\u9664\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ rm /var/www/files.matoken.org/data/updater-ocws62au2wl3/downloads/nextcloud-32.0.4.zip
\n
\n
\n
\n

\u518d\u5ea6\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u8a66\u307f\u307e\u3059\uff0e(\u5148\u7a0b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u53d6\u5f97\u3057\u3066\u3044\u308b\u306e\u3067\u4eca\u56de\u306f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u30b9\u30ad\u30c3\u30d7)

\n
\n
\n
\n
$ sudo -u www-data php updater/updater.phar --no-backup\n\n  :\n\n\"occ upgrade\" finished\n\nKeep maintenance mode active? [y/N]\nMaintenance mode disabled\n\nMaintenance mode is disabled
\n
\n
\n
\n

\u4eca\u5ea6\u306f\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n

\"nextcloud

\n
\n
\n

\u6b21\u306e\u65e5\u306b\u78ba\u8a8d\u3057\u3066\u3082\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u4f5c\u6210\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u3053\u308c\u3067\u3042\u305f\u308a\u306e\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\u74b0\u5883
\n
\n
$ sudo -u www-data php /var/www/files.matoken.org/occ --version\nNextcloud 32.0.3\n$ lsb_release -dr\nNo LSB modules are available.\nDescription:    Debian GNU/Linux 12 (bookworm)\nRelease:        12\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u30b5\u30fc\u30d0\u304cdisk full \u306b\u306a\u308a\u8abf\u3079\u305f\u3089Nextcloud \u304c\u81ea\u52d5\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068\u81ea\u52d5\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\uff0c\u3057\u304b\u3057\u5931\u6557\u3068\u3044\u3046\u306e\u3092\u6bce\u65e5\u7e70\u308a\u8fd4\u3057\u3066disk full \u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n\u306f\u3058\u30811\u6708\u307b\u3069\u524d\u306bdisk full \u306b\u306a\u308a\uff0ccron \u3067\u52d5\u304b\u3057\u3066\u3044\u308b\u30c7\u30a4\u30ea\u30fc\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u6e9c\u307e\u3063\u3066\u3044\u308b\u305b\u3044\u304b\u3068\u601d\u3044\u305d\u3053\u3092\u6383\u9664\u3057\u305f\u306e\u3067\u3059\u304c\u4eca\u6708\u306b\u306a\u3063\u3066\u307e\u305fdisk full \u306b\uff0e\ndu \u30b3\u30de\u30f3\u30c9\u306a\u3069\u3067\u78ba\u8a8d\u3059\u308b\u3068Nextcloud \u306e\u4e0b\u306e data/updater-${instanceid}/backups/ \u306b\u6bce\u65e5Nextcloud \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u4f5c\u3089\u308c\u3066\u3044\u307e\u3059\uff0e\u3053\u308c\u306e\u305b\u3044\u3067disk full \u306b\u306a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3057\u305f\uff0e\n\n\n\n\n\nNote\n\n\n${instanceid} \u306b\u3064\u3044\u3066\u306f config/config.php \u306e 'instanceid' \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\n\u3053\u3053\u306bNextcloud \u306e\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u304c\u4f5c\u3089\u308c\u308b\u306e\u306fNextcloud \u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u6642\u3067\u3059\uff0e\u307e\u305a\u306f\u624b\u52d5\u3067\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u5b9f\u884c\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ sudo -u www-data php updater/updater.phar\n\n :\n\n[\u2718] Verify integrity failed\nThere are more files than the downloaded archive in the downloads/ folder.\n\nUpdate failed. To resume or retry just execute the updater again.\n\n\n\n\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305fNextcloud \u30a2\u30fc\u30ab\u30a4\u30d6\u304c\u304a\u304b\u3057\u305d\u3046\u3067\u3059\uff0e\u8a73\u7d30\u3092\u77e5\u308b\u305f\u3081\u306b\u30ed\u30b0\u3092\u78ba\u8a8d\u3057\u307e\u3059\uff0e\n\n\ndata/updater.log\n\n2026-02-08T22:30:46+0000 T8hDMIut3r [info] storage location: /var/www/files.matoken.org/data/updater-ocws62au2wl3/downloads/\n2026-02-08T22:30:57+0000 T8hDMIut3r [info] end of verifyIntegrity()\n\n\n\n\u3053\u306e storage location \u306e\u4e0b\u3092\u898b\u308b\u3068\u524d\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u304c\u6b8b\u3063\u3066\u3044\u3066\u3053\u308c\u304c\u602a\u3057\u305d\u3046\u3067\u3059\uff0e\n\n\n\n$ ls -lA /var/www/files.matoken.org/data/updater-ocws62au2wl3/downloads/\n\u5408\u8a08 610548\n-rw-r--r-- 1 www-data www-data 312581794 1\u6708 16 04:09 nextcloud-32.0.4.zip\n-rw-r--r-- 1 www-data www-data 312597357 2\u6708 9 07:24 nextcloud-32.0.5.zip\n\n\n\n\u53e4\u3044\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u524a\u9664\u3057\u307e\u3059\uff0e\n\n\n\n$ rm /var/www/files.matoken.org/data/updater-ocws62au2wl3/downloads/nextcloud-32.0.4.zip\n\n\n\n\u518d\u5ea6\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u8a66\u307f\u307e\u3059\uff0e(\u5148\u7a0b\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u53d6\u5f97\u3057\u3066\u3044\u308b\u306e\u3067\u4eca\u56de\u306f\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u30b9\u30ad\u30c3\u30d7)\n\n\n\n$ sudo -u www-data php updater/updater.phar --no-backup\n\n :\n\n\"occ upgrade\" finished\n\nKeep maintenance mode active? [y/N]\nMaintenance mode disabled\n\nMaintenance mode is disabled\n\n\n\n\u4eca\u5ea6\u306f\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\u6b21\u306e\u65e5\u306b\u78ba\u8a8d\u3057\u3066\u3082\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306f\u4f5c\u6210\u3055\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u3053\u308c\u3067\u3042\u305f\u308a\u306e\u3088\u3046\u3067\u3059\uff0e\n\n\n\u74b0\u5883\n\n$ sudo -u www-data php /var/www/files.matoken.org/occ --version\nNextcloud 32.0.3\n$ lsb_release -dr\nNo LSB modules are available.\nDescription: Debian GNU/Linux 12 (bookworm)\nRelease: 12\n$ arch\nx86_64", "date_published": "2026-02-10T05:55:20+09:00", "date_modified": "2026-02-10T05:55:21+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "disk full", "nextcloud", "bookworm", "Debian", "Linux" ] }, { "id": "https://matoken.org/blog/?p=5219", "url": "https://matoken.org/blog/2026/02/06/gnu-coreutils-9-10-paste/", "title": "GNU coreutils 9.10\u3067paste\u306e\u30c7\u30ea\u30df\u30bf\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u304c\u5229\u7528\u53ef\u80fd\u306b", "content_html": "
\n
\n

\n
\n

GNU coreutils 9.10 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n
\n

paste \u3067\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u8a8d\u8b58\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u305d\u3046\u3067\u3059\uff0e\u307e\u3060\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u304b\u3063\u305f\u3093\u3060\u3068\u3061\u3087\u3063\u3068\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n
    \n
  • \n

    paste(1) is now multi-byte character aware

    \n
  • \n
\n
\n
\n
\n

\n
\n

\u307e\u305a\u306f\u9069\u5f53\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ echo '1\n2\n3' > num\n$ echo '\u3044\n\u308d\n\u306f' > data
\n
\n
\n
\n

GNU coreutils 9.7 \u306epaste \u3067\u8a66\u3059\u3068\u65e5\u672c\u8a9e\u306e\u30c7\u30fc\u30bf\u3082\u3046\u307e\u304f\u52d5\u3044\u3066\u3044\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ paste --version | head -1\npaste (GNU coreutils) 9.7\n$ paste num data\n1       \u3044\n2       \u308d\n3       \u306f
\n
\n
\n
\n

NEWS \u306e\u4e0b\u306e\u65b9\u3092\u898b\u308b\u3068\u5c11\u3057\u8a73\u3057\u304f\u66f8\u3044\u3066\u3042\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n
\n
'paste' now supports multi-byte --delimiters characters.
\n
\n
\n
\n
\n
\n

\u30c7\u30ea\u30df\u30bf\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067\u518d\u5ea6\uff0c\u4eca\u5ea6\u306f\u30c7\u30df\u30ea\u30bf\u3092\u6307\u5b9a\u3057\u307e\u3059\uff0e

\n
\n
\n
GNU coreutils 9.7 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b , \u3092\u6307\u5b9a
\n
\n
$ paste num data -d,\n1,\u3044\n2,\u308d\n3,\u306f
\n
\n
\n
\n
GNU coreutils 9.7 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b \uff1d \u3092\u6307\u5b9a
\n
\n
$ paste num data -d\uff1d\n1\ufffd\ufffd\n2\ufffd\ufffd\n3\ufffd\ufffd
\n
\n
\n
\n

\u305f\u3057\u304b\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u4f7f\u3046\u3068\u304a\u304b\u3057\u304f\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
GNU coreutils 9.10 \u3092\u7528\u610f
\n
\n
$ wget https://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.xz \\\n\thttps://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.xz.sig\n$ echo 'SHA256 (coreutils-9.10.tar.xz) = FlNamt8LEANzZOLWEqrT2fTso6NElJztdNEvr0vVHSU=' | cksum -a sha256 --check\ncoreutils-9.10.tar.xz: OK\n$ gpg --verify coreutils-9.10.tar.xz.sig\ngpg: assuming signed data in 'coreutils-9.10.tar.xz'\ngpg: Signature made Wed Feb  4 21:46:29 2026 JST\ngpg:                using RSA key 6C37DC12121A5006BC1DB804DF6FD971306037D9\ngpg: Good signature from \"P draig Brady <P@draigBrady.com>\" [unknown]\ngpg:                 aka \"P draig Brady <pixelbeat@gnu.org>\" [unknown]\ngpg: WARNING: This key is not certified with a trusted signature!\ngpg:          There is no indication that the signature belongs to the owner.\nPrimary key fingerprint: 6C37 DC12 121A 5006 BC1D  B804 DF6F D971 3060 37D9\n$ tar xvf coreutils-9.10.tar.xz\n$ cd coreutils-9.10\n$ sudo apt build-dep coreutils\n$ ./configure\n$ make\n$ src/paste --version | head -1\npaste (GNU coreutils) 9.10
\n
\n
\n
\n
GNU coreutils 9.10 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u6307\u5b9a
\n
\n
$ ./src/paste num data -d\uff1d\n1\uff1d\u3044\n2\uff1d\u308d\n3\uff1d\u306f\n$ ./src/paste num data -d🐈\n1🐈\u3044\n2🐈\u308d\n3🐈\u306f
\n
\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067GNU coreutils 9.10 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\uff0e
\n\u4f7f\u3044\u9053\u306f\u3042\u307e\u308a\u6d6e\u304b\u3073\u307e\u305b\u3093\u304c\u2026\u2026\uff0e

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W coreutils\ncoreutils       9.7-3\n$ src/paste --version\npaste (GNU coreutils) 9.10\nCopyright (C) 2026 Free Software Foundation, Inc.\nLicense GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\nWritten by David M. Ihnat and David MacKenzie.\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n\n
\n
\n", "content_text": "GNU coreutils 9.10 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\ncoreutils-9.10 released [stable]\n\n\n\n\npaste \u3067\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u8a8d\u8b58\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u305d\u3046\u3067\u3059\uff0e\u307e\u3060\u5bfe\u5fdc\u3057\u3066\u3044\u306a\u304b\u3063\u305f\u3093\u3060\u3068\u3061\u3087\u3063\u3068\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\n\n\npaste(1) is now multi-byte character aware\n\n\n\n\n\n\n\n\u307e\u305a\u306f\u9069\u5f53\u306a\u30d5\u30a1\u30a4\u30eb\u3092\u7528\u610f\u3057\u307e\u3059\uff0e\n\n\n\n$ echo '1\n2\n3' > num\n$ echo '\u3044\n\u308d\n\u306f' > data\n\n\n\nGNU coreutils 9.7 \u306epaste \u3067\u8a66\u3059\u3068\u65e5\u672c\u8a9e\u306e\u30c7\u30fc\u30bf\u3082\u3046\u307e\u304f\u52d5\u3044\u3066\u3044\u305d\u3046\u3067\u3059\uff0e\n\n\n\n$ paste --version | head -1\npaste (GNU coreutils) 9.7\n$ paste num data\n1 \u3044\n2 \u308d\n3 \u306f\n\n\n\nNEWS \u306e\u4e0b\u306e\u65b9\u3092\u898b\u308b\u3068\u5c11\u3057\u8a73\u3057\u304f\u66f8\u3044\u3066\u3042\u308a\u307e\u3057\u305f\uff0e\n\n\n\n\n\n'paste' now supports multi-byte --delimiters characters.\n\n\n\n\n\n\u30c7\u30ea\u30df\u30bf\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u3063\u305f\u3088\u3046\u3067\u3059\uff0e\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067\u518d\u5ea6\uff0c\u4eca\u5ea6\u306f\u30c7\u30df\u30ea\u30bf\u3092\u6307\u5b9a\u3057\u307e\u3059\uff0e\n\n\nGNU coreutils 9.7 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b , \u3092\u6307\u5b9a\n\n$ paste num data -d,\n1,\u3044\n2,\u308d\n3,\u306f\n\n\n\nGNU coreutils 9.7 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b \uff1d \u3092\u6307\u5b9a\n\n$ paste num data -d\uff1d\n1\ufffd\ufffd\n2\ufffd\ufffd\n3\ufffd\ufffd\n\n\n\n\u305f\u3057\u304b\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u4f7f\u3046\u3068\u304a\u304b\u3057\u304f\u306a\u308a\u307e\u3059\uff0e\n\n\nGNU coreutils 9.10 \u3092\u7528\u610f\n\n$ wget https://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.xz \\\n\thttps://ftp.gnu.org/gnu/coreutils/coreutils-9.10.tar.xz.sig\n$ echo 'SHA256 (coreutils-9.10.tar.xz) = FlNamt8LEANzZOLWEqrT2fTso6NElJztdNEvr0vVHSU=' | cksum -a sha256 --check\ncoreutils-9.10.tar.xz: OK\n$ gpg --verify coreutils-9.10.tar.xz.sig\ngpg: assuming signed data in 'coreutils-9.10.tar.xz'\ngpg: Signature made Wed Feb 4 21:46:29 2026 JST\ngpg: using RSA key 6C37DC12121A5006BC1DB804DF6FD971306037D9\ngpg: Good signature from \"P draig Brady <P@draigBrady.com>\" [unknown]\ngpg: aka \"P draig Brady <pixelbeat@gnu.org>\" [unknown]\ngpg: WARNING: This key is not certified with a trusted signature!\ngpg: There is no indication that the signature belongs to the owner.\nPrimary key fingerprint: 6C37 DC12 121A 5006 BC1D B804 DF6F D971 3060 37D9\n$ tar xvf coreutils-9.10.tar.xz\n$ cd coreutils-9.10\n$ sudo apt build-dep coreutils\n$ ./configure\n$ make\n$ src/paste --version | head -1\npaste (GNU coreutils) 9.10\n\n\n\nGNU coreutils 9.10 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u3092\u6307\u5b9a\n\n$ ./src/paste num data -d\uff1d\n1\uff1d\u3044\n2\uff1d\u308d\n3\uff1d\u306f\n$ ./src/paste num data -d🐈\n1🐈\u3044\n2🐈\u308d\n3🐈\u306f\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067GNU coreutils 9.10 \u306epaste \u3067\u30c7\u30ea\u30df\u30bf\u306b\u30de\u30eb\u30c1\u30d0\u30a4\u30c8\u6587\u5b57\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\uff0e\n\u4f7f\u3044\u9053\u306f\u3042\u307e\u308a\u6d6e\u304b\u3073\u307e\u305b\u3093\u304c\u2026\u2026\uff0e\n\n\n\u74b0\u5883\n\n$ dpkg-query -W coreutils\ncoreutils 9.7-3\n$ src/paste --version\npaste (GNU coreutils) 9.10\nCopyright (C) 2026 Free Software Foundation, Inc.\nLicense GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law.\n\nWritten by David M. Ihnat and David MacKenzie.\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\ntoot\n\n\nmatoken :fox:: “coreutils-9.10 released [stabl\u2026” – \u3044\u306a\u3053\u3093", "date_published": "2026-02-06T06:07:07+09:00", "date_modified": "2026-02-06T06:07:09+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "GNU coreutils", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5214", "url": "https://matoken.org/blog/2026/02/06/virustotal-api-limit/", "title": "VirusTotal\u306ecli tool\u3068\u3042\u307e\u308a\u306b\u5c0f\u3055\u3044API\u5236\u9650", "content_html": "
\n
\n

\n
\n

\u4e45\u3005\u306bcli \u3067VirusTotal \u3092\u4f7f\u304a\u3046\u3068\u3057\u305f\u3089\u30c4\u30fc\u30eb\u304c\u5909\u66f4\u306b\u306a\u3063\u3066\u3044\u305f\u308a\uff0cAPI \u5236\u9650\u304c\u304a\u304b\u3057\u304f\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u4ee5\u524d\u306eblog \u30a8\u30f3\u30c8\u30ea\u3092\u78ba\u8a8d\u3059\u308b\u3068\uff0c

\n
\n\n
\n

\u4ee5\u4e0b\u306e\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u3044\u305f\u3088\u3046\u3067\u3059\u304c\uff0cArchived \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n\n
\n

\u73fe\u5728\u306f\u4ee5\u4e0b\u306e\u30c4\u30fc\u30eb\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u3088\u3046\u306a\u306e\u3067\u3053\u3061\u3089\u3092\u4f7f\u3046\u3053\u3068\u306b\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n
build
\n
\n
$ git clone https://github.com/VirusTotal/vt-cli\n$ cd vt-cli\n$ make\n$ build/vt -h\nA command-line tool for interacting with VirusTotal.\n\nUsage:\n  vt [command]\n\nAvailable Commands:\n  analysis       Get a file or URL analysis\n  collection     Get information about collections\n  completion     Output shell completion code for the specified shell (bash or zsh)\n  domain         Get information about Internet domains\n  download       Download files\n  file           Get information about files\n  group          Get information about VirusTotal groups\n  help           Help about any command\n  hunting        Manage malware hunting rules and notifications\n  init           Initialize or re-initialize vt command-line tool\n  iocstream      Manage IoC Stream notifications\n  ip             Get information about IP addresses\n  meta           Returns metadata about VirusTotal\n  monitor        Manage your monitor account\n  monitorpartner Manage your monitor partner account\n  retrohunt      Manage retrohunt jobs\n  scan           Scan files or URLs\n  search         Search for files in VirusTotal Intelligence\n  threatprofile  Get information about Threat Profiles\n  url            Get information about URLs\n  user           Get information about VirusTotal users\n  version        Show version number\n\nFlags:\n  -k, --apikey string   API key\n      --format string   Output format (yaml/json/csv) (default \"yaml\")\n  -h, --help            help for vt\n  -s, --silent          Silent or quiet mode. Do not show progress meter\n  -v, --verbose         verbose output\n\nUse \"vt [command] --help\" for more information about a command.
\n
\n
\n
\n
API key \u767b\u9332
\n
\n
$ build/vt init\n\n\u2588\u2588\u2557   \u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557   \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\n\u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\n\u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551   \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557   \u2588\u2588\u2551   \u2588\u2588\u2551   \u2588\u2588\u2551   \u2588\u2588\u2551   \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551\n\u255a\u2588\u2588\u2557 \u2588\u2588\u2554\u255d\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551   \u2588\u2588\u2551\u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551   \u2588\u2588\u2551   \u2588\u2588\u2551   \u2588\u2588\u2551   \u2588\u2588\u2551   \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551\n \u255a\u2588\u2588\u2588\u2588\u2554\u255d \u2588\u2588\u2551\u2588\u2588\u2551  \u2588\u2588\u2551\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551   \u2588\u2588\u2551   \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d   \u2588\u2588\u2551   \u2588\u2588\u2551  \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n  \u255a\u2550\u2550\u2550\u255d  \u255a\u2550\u255d\u255a\u2550\u255d  \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d   \u255a\u2550\u255d    \u255a\u2550\u2550\u2550\u2550\u2550\u255d    \u255a\u2550\u255d   \u255a\u2550\u255d  \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n\nVirusTotal Command-Line Interface: Threat Intelligence at your fingertips.\n\nEnter your API key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nAPI key written to config file: /home/matoken/.vt.toml\nRelationships cache written to: /home/matoken/.cache/.vt.relationships.cache
\n
\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n
\n

API key \u306fVirusTotal \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\uff0c\u53f3\u4e0a\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b\u51fa\u3066\u304f\u308b\u300cAPI key\u300d\u304b\u3089\u53d6\u5f97\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n

\u6e96\u5099\u304c\u3067\u304d\u305f\u306e\u3067\u30b9\u30ad\u30e3\u30f3\u3057\u305f\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\uff0e

\n
\n
\n
\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9
\n
\n
$ build/vt scan file ~/Downloads/briar-desktop-x64-0.6.4-beta.AppImage\n/home/matoken/Downloads/briar-desktop-x64-0.6.4-beta.AppImage YTg3MzBiNGEwOWFmODUxMjgwYmFjOGI0YjE1YmQ4MTE6MTc3MDE5NDcyOA==
\n
\n
\n
\n

\u7d50\u679c\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\u3068\u3057\u307e\u3059\uff0e\u3057\u304b\u3057\u5236\u9650\u306b\u639b\u304b\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\u7d50\u679c\u306e\u78ba\u8a8d
\n
\n
$ build/vt analysis YTg3MzBiNGEwOWFmODUxMjgwYmFjOGI0YjE1YmQ4MTE6MTc3MDE5NDcyOA==\nQuota exceeded
\n
\n
\n
\n

\u7121\u6599\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u5236\u9650\u3092\u78ba\u8a8d\u3059\u308b\u30681\u65e5\u3042\u305f\u308a500\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u304b1\u5206\u8fba\u308a4\u4ef6\u3068\u304b\u3067\u7d50\u69cb\u5e83\u304f\u306a\u305c\u5236\u9650\u3055\u308c\u305f\u306e\u304b\u308f\u304b\u308a\u307e\u305b\u3093\uff0e

\n
\n
\n
\n
\n

Public API constraints and restrictions

\n
\n
\n

The Public API is limited to 500 requests per day and a rate of 4 requests per minute.
\nThe Public API must not be used in commercial products or services.
\nThe Public API must not be used in business workflows that do not contribute new files.
\nYou are not allowed to register multiple accounts to overcome the aforementioned limitations.

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

\u81ea\u5206\u306eAPI \u30da\u30fc\u30b8\u3092\u78ba\u8a8d\u3059\u308b\u3068\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u30da\u30fc\u30b8\u3068\u9055\u3044\u4ee5\u4e0b\u306e\u3088\u3046\u306b1\u65e51\u554f\u3044\u5408\u308f\u305b\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u5c11\u306a\u3059\u304e\u308b\u2026\u2026.

\n
\n
\n
\n
Access level\n Limited , standard free public API\nUpgrade to premium\nUsage \tMust not be used in business workflows, commercial products or services.\nRequest rate \t1 lookups / min\nDaily quota \t1 lookups / day\nMonthly quota \t31 lookups / month
\n
\n
\n
\n

\"virustotal
\n\"virustotal
\n\"virustotal

\n
\n
\n

\u4ee5\u4e0b\u306e\u30d5\u30a9\u30fc\u30e9\u30e0\u3092\u898b\u308b\u3068\u7d50\u69cb\u53e4\u3044\u554f\u984c\u306e\u3088\u3046\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u308a\u76f4\u3055\u306a\u3044\u3068\u6cbb\u3089\u306a\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
\n

If you have an old account with stricter limitations than described, it might be best to set up a new account to ensure you benefit from current limitations stated.

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

\u3061\u306a\u307f\u306b\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u30da\u30fc\u30b8\u306f\u3053\u3093\u306a\u611f\u3058\u30679\u5e74\u524d\u306b\u4f5c\u3063\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n

\"virustotal

\n
\n
\n

\u4ed5\u65b9\u304c\u306a\u3044\u306e\u3067VirusTotal \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u4f5c\u308a\u76f4\u3057\u307e\u3059\uff0e

\n
\n
\n

\"virustotal

\n
\n
\n
    \n
  • \n

    \u65e2\u5b58\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664

    \n
  • \n
  • \n

    \u65e2\u5b58\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089\u30ed\u30b0\u30a2\u30a6\u30c8

    \n
  • \n
  • \n

    \u65b0\u898f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210

    \n
    \n
      \n
    • \n

      \u3053\u306e\u3068\u304d\u30a2\u30ab\u30a6\u30f3\u30c8\u540d\u3068\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u540c\u3058\u3060\u3068\u99c4\u76ee

      \n
    • \n
    \n
    \n
  • \n
  • \n

    API key \u3092\u53d6\u5f97\u3057\u3066 vt init \u3092\u5b9f\u884c\u3057\u3066API key \u518d\u767b\u9332

    \n
  • \n
\n
\n
\n

\u65b0\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u6b63\u3044\u5236\u9650\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
Access level\n Limited , standard free public API\nUpgrade to premium\nUsage \tMust not be used in business workflows, commercial products or services.\nRequest rate \t4 lookups / min\nDaily quota \t500 lookups / day\nMonthly quota \t15.5 K lookups / month
\n
\n
\n
\n

\u3053\u308c\u3067\u666e\u901a\u306b\u52d5\u304b\u305b\u305d\u3046\u306a\u611f\u3058\u3067\u3059\uff0e

\n
\n
\n
\n
$ build/vt analysis YTg3MzBiNGEwOWFmODUxMjgwYmFjOGI0YjE1YmQ4MTE6MTc3MDE5NDcyOA== | tail -10\n  stats:\n    confirmed-timeout: 0\n    failure: 0\n    harmless: 0\n    malicious: 0\n    suspicious: 0\n    timeout: 0\n    type-unsupported: 12\n    undetected: 64\n  status: \"completed\"
\n
\n
\n
\n
\u74b0\u5883
\n
\n
$ build/vt version\nvt-cli\n$ git log --pretty=oneline -1\nd3405587c568b6486ccd5ac773cde1a25e4bb762 (HEAD -> master, origin/master, origin/HEAD) chore: upgrade `vt-go` to version 1.1.0.\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n\n
\n
\n", "content_text": "\u4e45\u3005\u306bcli \u3067VirusTotal \u3092\u4f7f\u304a\u3046\u3068\u3057\u305f\u3089\u30c4\u30fc\u30eb\u304c\u5909\u66f4\u306b\u306a\u3063\u3066\u3044\u305f\u308a\uff0cAPI \u5236\u9650\u304c\u304a\u304b\u3057\u304f\u306a\u3063\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n\u4ee5\u524d\u306eblog \u30a8\u30f3\u30c8\u30ea\u3092\u78ba\u8a8d\u3059\u308b\u3068\uff0c\n\n\n\n\nVirusTotal\u3092\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u5229\u7528\u3059\u308b \u2013 matoken’s blog\n\n\n\n\n\u4ee5\u4e0b\u306e\u30c4\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u3044\u305f\u3088\u3046\u3067\u3059\u304c\uff0cArchived \u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nVirusTotal/c-vtapi: Official implementation of the VirusTotal API in C programming language\n\n\n\n\n\u73fe\u5728\u306f\u4ee5\u4e0b\u306e\u30c4\u30fc\u30eb\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u3088\u3046\u306a\u306e\u3067\u3053\u3061\u3089\u3092\u4f7f\u3046\u3053\u3068\u306b\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\nVirusTotal/vt-cli: VirusTotal Command Line Interface\n\n\n\n\nbuild\n\n$ git clone https://github.com/VirusTotal/vt-cli\n$ cd vt-cli\n$ make\n$ build/vt -h\nA command-line tool for interacting with VirusTotal.\n\nUsage:\n vt [command]\n\nAvailable Commands:\n analysis Get a file or URL analysis\n collection Get information about collections\n completion Output shell completion code for the specified shell (bash or zsh)\n domain Get information about Internet domains\n download Download files\n file Get information about files\n group Get information about VirusTotal groups\n help Help about any command\n hunting Manage malware hunting rules and notifications\n init Initialize or re-initialize vt command-line tool\n iocstream Manage IoC Stream notifications\n ip Get information about IP addresses\n meta Returns metadata about VirusTotal\n monitor Manage your monitor account\n monitorpartner Manage your monitor partner account\n retrohunt Manage retrohunt jobs\n scan Scan files or URLs\n search Search for files in VirusTotal Intelligence\n threatprofile Get information about Threat Profiles\n url Get information about URLs\n user Get information about VirusTotal users\n version Show version number\n\nFlags:\n -k, --apikey string API key\n --format string Output format (yaml/json/csv) (default \"yaml\")\n -h, --help help for vt\n -s, --silent Silent or quiet mode. Do not show progress meter\n -v, --verbose verbose output\n\nUse \"vt [command] --help\" for more information about a command.\n\n\n\nAPI key \u767b\u9332\n\n$ build/vt init\n\n\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255d\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u255a\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255d\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\n\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551\n\u255a\u2588\u2588\u2557 \u2588\u2588\u2554\u255d\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u255a\u2550\u2550\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551\n \u255a\u2588\u2588\u2588\u2588\u2554\u255d \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u255a\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255d \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n \u255a\u2550\u2550\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u2550\u2550\u2550\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d \u255a\u2550\u255d\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n\nVirusTotal Command-Line Interface: Threat Intelligence at your fingertips.\n\nEnter your API key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nAPI key written to config file: /home/matoken/.vt.toml\nRelationships cache written to: /home/matoken/.cache/.vt.relationships.cache\n\n\n\n\n\n\nNote\n\n\n\nAPI key \u306fVirusTotal \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u3066\u30ed\u30b0\u30a4\u30f3\u3057\u305f\u72b6\u614b\u3067\uff0c\u53f3\u4e0a\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b\u51fa\u3066\u304f\u308b\u300cAPI key\u300d\u304b\u3089\u53d6\u5f97\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\n\n\n\u6e96\u5099\u304c\u3067\u304d\u305f\u306e\u3067\u30b9\u30ad\u30e3\u30f3\u3057\u305f\u3044\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\uff0e\n\n\n\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n\n$ build/vt scan file ~/Downloads/briar-desktop-x64-0.6.4-beta.AppImage\n/home/matoken/Downloads/briar-desktop-x64-0.6.4-beta.AppImage YTg3MzBiNGEwOWFmODUxMjgwYmFjOGI0YjE1YmQ4MTE6MTc3MDE5NDcyOA==\n\n\n\n\u7d50\u679c\u3092\u78ba\u8a8d\u3057\u3066\u307f\u3088\u3046\u3068\u3057\u307e\u3059\uff0e\u3057\u304b\u3057\u5236\u9650\u306b\u639b\u304b\u3063\u3066\u3057\u307e\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\u7d50\u679c\u306e\u78ba\u8a8d\n\n$ build/vt analysis YTg3MzBiNGEwOWFmODUxMjgwYmFjOGI0YjE1YmQ4MTE6MTc3MDE5NDcyOA==\nQuota exceeded\n\n\n\n\u7121\u6599\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u5236\u9650\u3092\u78ba\u8a8d\u3059\u308b\u30681\u65e5\u3042\u305f\u308a500\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u304b1\u5206\u8fba\u308a4\u4ef6\u3068\u304b\u3067\u7d50\u69cb\u5e83\u304f\u306a\u305c\u5236\u9650\u3055\u308c\u305f\u306e\u304b\u308f\u304b\u308a\u307e\u305b\u3093\uff0e\n\n\n\n\nPublic API constraints and restrictions\n\n\nThe Public API is limited to 500 requests per day and a rate of 4 requests per minute. \nThe Public API must not be used in commercial products or services. \nThe Public API must not be used in business workflows that do not contribute new files. \nYou are not allowed to register multiple accounts to overcome the aforementioned limitations.\n\n\n\n— Public vs Premium API\n\n\n\n\u81ea\u5206\u306eAPI \u30da\u30fc\u30b8\u3092\u78ba\u8a8d\u3059\u308b\u3068\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u30da\u30fc\u30b8\u3068\u9055\u3044\u4ee5\u4e0b\u306e\u3088\u3046\u306b1\u65e51\u554f\u3044\u5408\u308f\u305b\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u5c11\u306a\u3059\u304e\u308b\u2026\u2026.\n\n\n\nAccess level\n Limited , standard free public API\nUpgrade to premium\nUsage \tMust not be used in business workflows, commercial products or services.\nRequest rate \t1 lookups / min\nDaily quota \t1 lookups / day\nMonthly quota \t31 lookups / month\n\n\n\n\n\n\n\n\n\u4ee5\u4e0b\u306e\u30d5\u30a9\u30fc\u30e9\u30e0\u3092\u898b\u308b\u3068\u7d50\u69cb\u53e4\u3044\u554f\u984c\u306e\u3088\u3046\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u308a\u76f4\u3055\u306a\u3044\u3068\u6cbb\u3089\u306a\u305d\u3046\u3067\u3059\uff0e\n\n\n\n\nIf you have an old account with stricter limitations than described, it might be best to set up a new account to ensure you benefit from current limitations stated.\n\n\n\n— VirusTotal Functionality – GlassWire Help – GlassWire Internet Security Forum\n\n\n\n\u3061\u306a\u307f\u306b\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u30da\u30fc\u30b8\u306f\u3053\u3093\u306a\u611f\u3058\u30679\u5e74\u524d\u306b\u4f5c\u3063\u305f\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\n\n\u4ed5\u65b9\u304c\u306a\u3044\u306e\u3067VirusTotal \u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u4f5c\u308a\u76f4\u3057\u307e\u3059\uff0e\n\n\n\n\n\n\n\n\u65e2\u5b58\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u524a\u9664\n\n\n\u65e2\u5b58\u30a2\u30ab\u30a6\u30f3\u30c8\u304b\u3089\u30ed\u30b0\u30a2\u30a6\u30c8\n\n\n\u65b0\u898f\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\n\n\n\n\u3053\u306e\u3068\u304d\u30a2\u30ab\u30a6\u30f3\u30c8\u540d\u3068\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u540c\u3058\u3060\u3068\u99c4\u76ee\n\n\n\n\n\nAPI key \u3092\u53d6\u5f97\u3057\u3066 vt init \u3092\u5b9f\u884c\u3057\u3066API key \u518d\u767b\u9332\n\n\n\n\n\u65b0\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u6b63\u3044\u5236\u9650\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\nAccess level\n Limited , standard free public API\nUpgrade to premium\nUsage \tMust not be used in business workflows, commercial products or services.\nRequest rate \t4 lookups / min\nDaily quota \t500 lookups / day\nMonthly quota \t15.5 K lookups / month\n\n\n\n\u3053\u308c\u3067\u666e\u901a\u306b\u52d5\u304b\u305b\u305d\u3046\u306a\u611f\u3058\u3067\u3059\uff0e\n\n\n\n$ build/vt analysis YTg3MzBiNGEwOWFmODUxMjgwYmFjOGI0YjE1YmQ4MTE6MTc3MDE5NDcyOA== | tail -10\n stats:\n confirmed-timeout: 0\n failure: 0\n harmless: 0\n malicious: 0\n suspicious: 0\n timeout: 0\n type-unsupported: 12\n undetected: 64\n status: \"completed\"\n\n\n\n\u74b0\u5883\n\n$ build/vt version\nvt-cli\n$ git log --pretty=oneline -1\nd3405587c568b6486ccd5ac773cde1a25e4bb762 (HEAD -> master, origin/master, origin/HEAD) chore: upgrade `vt-go` to version 1.1.0.\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\ntoot\n\n\nmatoken :fox:: “VirusTotal \u306e\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30ebArchived\u2026” – \u3044\u306a\u3053\u3093", "date_published": "2026-02-06T05:49:13+09:00", "date_modified": "2026-02-06T05:49:15+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "VirusTotal", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5203", "url": "https://matoken.org/blog/2026/02/03/do-not-auto-shutdown-with-power-button/", "title": "\u96fb\u6e90\u30dc\u30bf\u30f3\u3067\u81ea\u52d5\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u3092\u6291\u5236", "content_html": "
\n
\n

\n
\n

laptop \u3092\u5c11\u3057\u79fb\u52d5\u3057\u305f\u3089\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u51e6\u7406\u304c\u8d70\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e\u30ed\u30b0\u3092\u898b\u308b\u3068\u96fb\u6e90\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u3066\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u51e6\u7406\u304c\u8d70\u3063\u305f\u3088\u3046\u3067\u3059\uff0e
\n\u3053\u308c\u3092\u6291\u5236\u3057\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u30ed\u30b0\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e

\n
\n
\n
\u30ea\u30b9\u30c8 1. syslog \u3088\u308a
\n
\n
2026-02-02T06:38:41.358362+09:00 tp-l13 acpid: received input layer event \"button/power PBTN 00000080 00000000\"\n2026-02-02T06:38:41.359609+09:00 tp-l13 acpid: rule from /etc/acpi/events/powerbtn-acpi-support matched\n2026-02-02T06:38:41.362438+09:00 tp-l13 acpid: executing action \"/etc/acpi/powerbtn-acpi-support.sh\"
\n
\n
\n
\n

/etc/systemd/logind.conf \u306e\u96fb\u6e90\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u305f\u3068\u304d\u306e HandlePowerKey \u306e\u30b3\u30e1\u30f3\u30c8\u3092\u89e3\u9664\u3057\u3066 poweroff \u3092 ignore \u306b\u66f8\u304d\u63db\u3048\u3066\u96fb\u6e90\u30dc\u30bf\u30f3\u3067\u4f55\u3082\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo git -C /etc diff HEAD~~ /etc/systemd/logind.conf\ndiff --git a/systemd/logind.conf b/systemd/logind.conf\nindex 02ec007..d7e2dbe 100644\n--- a/systemd/logind.conf\n+++ b/systemd/logind.conf\n@@ -25,7 +25,7 @@\n #InhibitDelayMaxSec=5\n #UserStopDelaySec=10\n #SleepOperation=suspend-then-hibernate suspend\n-#HandlePowerKey=poweroff\n+HandlePowerKey=igore\n #HandlePowerKeyLongPress=ignore\n #HandleRebootKey=reboot\n #HandleRebootKeyLongPress=poweroff
\n
\n
\n
\n

\u30c7\u30fc\u30e2\u30f3\u3092\u518d\u8d77\u52d5\u3057\u3066\u8a2d\u5b9a\u3092\u53cd\u6620\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ sudo systemctl restart systemd-logind
\n
\n
\n
\n

\u96fb\u6e90\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u51e6\u7406\u304c\u8d70\u3089\u306a\u3044\u306e\u3092\u78ba\u8a8d\u3057\u307e\u3059\uff0e

\n
\n
\n
\u30ea\u30b9\u30c8 2. \u74b0\u5883
\n
\n
$ dpkg-query -W systemd acpi\nacpi    1.8-1\nsystemd 259-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64\n$ sudo lshw -sanitize -json | jq '.\"vendor\", .\"version\"'\n\"LENOVO\"\n\"ThinkPad L13\"
\n
\n
\n
\n
\n", "content_text": "laptop \u3092\u5c11\u3057\u79fb\u52d5\u3057\u305f\u3089\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u51e6\u7406\u304c\u8d70\u3063\u3066\u3057\u307e\u3044\u307e\u3057\u305f\uff0e\u30ed\u30b0\u3092\u898b\u308b\u3068\u96fb\u6e90\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u3066\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u51e6\u7406\u304c\u8d70\u3063\u305f\u3088\u3046\u3067\u3059\uff0e\n\u3053\u308c\u3092\u6291\u5236\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\u30ed\u30b0\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e\n\n\n\u30ea\u30b9\u30c8 1. syslog \u3088\u308a\n\n2026-02-02T06:38:41.358362+09:00 tp-l13 acpid: received input layer event \"button/power PBTN 00000080 00000000\"\n2026-02-02T06:38:41.359609+09:00 tp-l13 acpid: rule from /etc/acpi/events/powerbtn-acpi-support matched\n2026-02-02T06:38:41.362438+09:00 tp-l13 acpid: executing action \"/etc/acpi/powerbtn-acpi-support.sh\"\n\n\n\n/etc/systemd/logind.conf \u306e\u96fb\u6e90\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u305f\u3068\u304d\u306e HandlePowerKey \u306e\u30b3\u30e1\u30f3\u30c8\u3092\u89e3\u9664\u3057\u3066 poweroff \u3092 ignore \u306b\u66f8\u304d\u63db\u3048\u3066\u96fb\u6e90\u30dc\u30bf\u30f3\u3067\u4f55\u3082\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo git -C /etc diff HEAD~~ /etc/systemd/logind.conf\ndiff --git a/systemd/logind.conf b/systemd/logind.conf\nindex 02ec007..d7e2dbe 100644\n--- a/systemd/logind.conf\n+++ b/systemd/logind.conf\n@@ -25,7 +25,7 @@\n #InhibitDelayMaxSec=5\n #UserStopDelaySec=10\n #SleepOperation=suspend-then-hibernate suspend\n-#HandlePowerKey=poweroff\n+HandlePowerKey=igore\n #HandlePowerKeyLongPress=ignore\n #HandleRebootKey=reboot\n #HandleRebootKeyLongPress=poweroff\n\n\n\n\u30c7\u30fc\u30e2\u30f3\u3092\u518d\u8d77\u52d5\u3057\u3066\u8a2d\u5b9a\u3092\u53cd\u6620\u3057\u307e\u3059\uff0e\n\n\n\n$ sudo systemctl restart systemd-logind\n\n\n\n\u96fb\u6e90\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3\u51e6\u7406\u304c\u8d70\u3089\u306a\u3044\u306e\u3092\u78ba\u8a8d\u3057\u307e\u3059\uff0e\n\n\n\u30ea\u30b9\u30c8 2. \u74b0\u5883\n\n$ dpkg-query -W systemd acpi\nacpi 1.8-1\nsystemd 259-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n$ sudo lshw -sanitize -json | jq '.\"vendor\", .\"version\"'\n\"LENOVO\"\n\"ThinkPad L13\"", "date_published": "2026-02-03T19:16:37+09:00", "date_modified": "2026-02-03T19:16:40+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "acpi", "button", "power", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5191", "url": "https://matoken.org/blog/2026/01/27/mystify-term/", "title": "\u61d0\u304b\u3057\u3044\u611f\u3058\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u306emystify-term", "content_html": "
\n
\n

\n
\n

\u53e4\u3044Windows \u3092\u4f7f\u3063\u3066\u3044\u305f\u65b9\u306f\u61d0\u304b\u3057\u304f\u611f\u3058\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u306emystify-term \u3068\u3044\u3046\u3082\u306e\u3092\u898b\u304b\u3051\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n
\n\n
\n

\n

\n
\n
\n

install

\n
\n
\n

c\u88fd\u3067\u4f9d\u5b58\u3082\u5c11\u306a\u3044\u306e\u3067make \u4e00\u767a\u306a\u611f\u3058\u3067\u3059\uff0eDebian sind amd64/Raspberry Pi bookworm armhf \u3068\u3082\u306b\u554f\u984c\u306a\u304f\u52d5\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ git clone https://github.com/adsr/mystify-term\n$ cd mystify-term\n$ install mystify-term ~/bin/\n$ which mystify-term\n/home/matoken/bin/mystify-term\n$ mystify-term --help\nUsage:\n  mystify-term [options]\n\nOptions:\n  -h, --help                  Show this help\n  -v, --version               Show program version\n  -q, --polys=<int>           Set number of polygons (default=2, max=16)\n  -p, --points=<int>          Set number of points per polygon (default=4, max=16)\n  -t, --trails=<int>          Set number of trails lines (default=20, max=64)\n  -f, --fps=<int>             Set frames per second (default=60)\n  -e, --max-velocity=<float>  Set max velocity per point (default=1.00, min=0.01, max=10.00)\n  -s, --no-status             Hide status text\n  -i, --trail-incr=<int>      Render every nth trail (default=4, max=64)\n$ mystify-term --version\nmystify-term v0.1.0
\n
\n
\n
\n
\n
\n

\u5b9f\u884c\u4f8b

\n
\n
\n

\u3068\u308a\u3042\u3048\u305a\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067\u8d77\u52d5\u3057\u307e\u3059\uff0e\u61d0\u304b\u3057\u3044\u611f\u3058\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u304c\u8d77\u52d5\u3057\u307e\u3059\uff0e

\n
\n
\n

\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e

\n
\n
\n

\"mystify

\n
\n
\n

UTF-8 \u306e\u56db\u89d2\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\uff0cUTF-8 \u304c\u4f7f\u3048\u306a\u3044\u3068\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u3063\u305f\u308a\u3057\u307e\u3059\uff0e\u307e\u3042\u3053\u308c\u306f\u3053\u308c\u3067\uff0e

\n
\n
\n

\"mystify

\n
\n
\n

\u52d5\u3044\u3066\u3044\u308b\u69d8\u5b50\u306f\u4ee5\u4e0b\u306easciinema \u3092\uff0e

\n
\n

\n

\n
\n
\n

\u30ad\u30fc\u30d0\u30a4\u30f3\u30c9

\n
\n
\n

\u4e0b\u306e\u65b9\u306b\u3042\u308b\u3068\u304a\u308a\u4ee5\u4e0b\u306e\u30ad\u30fc\u30d0\u30a4\u30f3\u30c9\u3067\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
\n

p=pause, s=step, r=reinit, w=status, q=quit

\n
\n
\n
\n
\n
\n
p
\n
\n

\u4e00\u6642\u505c\u6b62/\u518d\u958b

\n
\n
s
\n
\n

\u505c\u6b62/\u30b3\u30de\u9001\u308a(p\u3067\u518d\u958b)

\n
\n
r
\n
\n

\u518d\u521d\u671f\u5316

\n
\n
w
\n
\n

\u30b9\u30c6\u30fc\u30bf\u30b9\u8868\u793a/\u975e\u8868\u793a

\n
\n
q
\n
\n

\u7d42\u4e86

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

\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3

\n
\n
\n

\u30b9\u30bf\u30fc\u30bf\u30b9\u3092\u3044\u3058\u308c\u307e\u3059\u304c\uff0c -s, --no-status \u304f\u3089\u3044\u3067\u3042\u3068\u306f\u65e2\u5b9a\u5024\u3067\u3044\u3044\u304b\u306a\u3068\u8a00\u3046\u611f\u3058\uff0e

\n
\n
\n
\n
\n
\n
-h, --help                  Show this help
\n
\n
\n
\n
\n
\n

\u3053\u306e\u30d8\u30eb\u30d7\u3092\u8868\u793a

\n
\n
\n
\n
\n
\n
-v, --version               Show program version
\n
\n
\n
\n
\n
\n

\u30d0\u30fc\u30b8\u30e7\u30f3\u8868\u793a

\n
\n
\n
\n
\n
\n
-q, --polys=<int>           Set number of polygons (default=2, max=16)
\n
\n
\n
\n
\n
\n

\u30dd\u30ea\u30b4\u30f3\u6570

\n
\n
\n
\n
\n
\n
-p, --points=<int>          Set number of points per polygon (default=4, max=16)
\n
\n
\n
\n
\n
\n

\u30dd\u30a4\u30f3\u30c8\u6570(\u4f8b\u3048\u30703\u3067\u4e09\u89d2\u5f62\uff0c4\u3067\u56db\u89d2\u5f62)

\n
\n
\n
\n
\n
\n
-t, --trails=<int>          Set number of trails lines (default=20, max=64)
\n
\n
\n
\n
\n
\n

\u30c8\u30ec\u30a4\u30eb\u30e9\u30a4\u30f3\u306e\u6570

\n
\n
\n
\n
\n
\n
-f, --fps=<int>             Set frames per second (default=60)
\n
\n
\n
\n
\n
\n

1\u79d2\u3042\u305f\u308a\u306e\u30d5\u30ec\u30fc\u30e0\u6570

\n
\n
\n
\n
\n
\n
-e, --max-velocity=<float>  Set max velocity per point (default=1.00, min=0.01, max=10.00)
\n
\n
\n
\n
\n
\n

\u6700\u5927\u901f\u5ea6

\n
\n
\n
\n
\n
\n
-s, --no-status             Hide status text
\n
\n
\n
\n
\n
\n

\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u96a0\u3059

\n
\n
\n
\n
\n
\n
-i, --trail-incr=<int>      Render every nth trail (default=4, max=64)
\n
\n
\n
\n
\n
\n

n\u756a\u76ee\u306e\u30c8\u30ec\u30a4\u30eb\u3054\u3068\u306b\u63cf\u753b

\n
\n
\n
\n
\n

tmux \u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u306b\u8a2d\u5b9a

\n
\n
\n

\u30bf\u30fc\u30df\u30ca\u30eb\u30de\u30eb\u30c1\u30d7\u30ec\u30af\u30b5\u306etmux \u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u306b\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n

\u307e\u305a\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u3092\u8a18\u8ff0\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
set -g lock-after-time 900 #\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u304c\u8d77\u52d5\u3059\u308b\u307e\u3067\u306e\u79d2\u6570\nset -g lock-command \"mystify-term -s\" #\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u30b3\u30de\u30f3\u30c9
\n
\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n
\n

tmux \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f

\n
\n
\n
\n
       ~/.tmux.conf\n       $XDG_CONFIG_HOME/tmux/tmux.conf\n       ~/.config/tmux/tmux.conf
\n
\n
\n
\n

byobu \u304b\u3089\u8d77\u52d5\u3057\u3066\u3044\u308b\u5834\u5408\u306f

\n
\n
\n
\n
       ~/.byobu/.tmux.conf
\n
\n
\n
\n
\n
\n

\u6b21\u56de\u8d77\u52d5\u6642\u304b\u3089\u53cd\u6620\u3055\u308c\u307e\u3059\u304c\uff0c\u73fe\u5728\u306etmux \u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u53cd\u6620\u3057\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b tmux source \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb \u3068\u3057\u3066\u53cd\u6620\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ tmux source ~/.byobu/.tmux.conf
\n
\n
\n
\n
\n
\n

SEE ALSO

\n
\n\n
\n
\n", "content_text": "\u53e4\u3044Windows \u3092\u4f7f\u3063\u3066\u3044\u305f\u65b9\u306f\u61d0\u304b\u3057\u304f\u611f\u3058\u308b\u304b\u3082\u3057\u308c\u306a\u3044\u30bf\u30fc\u30df\u30ca\u30eb\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u306emystify-term \u3068\u3044\u3046\u3082\u306e\u3092\u898b\u304b\u3051\u305f\u306e\u3067\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\nadsr/mystify-term\n\n\n\n\n\n\n\ninstall\n\n\nc\u88fd\u3067\u4f9d\u5b58\u3082\u5c11\u306a\u3044\u306e\u3067make \u4e00\u767a\u306a\u611f\u3058\u3067\u3059\uff0eDebian sind amd64/Raspberry Pi bookworm armhf \u3068\u3082\u306b\u554f\u984c\u306a\u304f\u52d5\u304d\u307e\u3057\u305f\uff0e\n\n\n\n$ git clone https://github.com/adsr/mystify-term\n$ cd mystify-term\n$ install mystify-term ~/bin/\n$ which mystify-term\n/home/matoken/bin/mystify-term\n$ mystify-term --help\nUsage:\n mystify-term [options]\n\nOptions:\n -h, --help Show this help\n -v, --version Show program version\n -q, --polys=<int> Set number of polygons (default=2, max=16)\n -p, --points=<int> Set number of points per polygon (default=4, max=16)\n -t, --trails=<int> Set number of trails lines (default=20, max=64)\n -f, --fps=<int> Set frames per second (default=60)\n -e, --max-velocity=<float> Set max velocity per point (default=1.00, min=0.01, max=10.00)\n -s, --no-status Hide status text\n -i, --trail-incr=<int> Render every nth trail (default=4, max=64)\n$ mystify-term --version\nmystify-term v0.1.0\n\n\n\n\n\n\u5b9f\u884c\u4f8b\n\n\n\u3068\u308a\u3042\u3048\u305a\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057\u3067\u8d77\u52d5\u3057\u307e\u3059\uff0e\u61d0\u304b\u3057\u3044\u611f\u3058\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u304c\u8d77\u52d5\u3057\u307e\u3059\uff0e\n\n\n\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e\n\n\n\n\n\nUTF-8 \u306e\u56db\u89d2\u3092\u4f7f\u3063\u3066\u3044\u308b\u306e\u3067\uff0cUTF-8 \u304c\u4f7f\u3048\u306a\u3044\u3068\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u3063\u305f\u308a\u3057\u307e\u3059\uff0e\u307e\u3042\u3053\u308c\u306f\u3053\u308c\u3067\uff0e\n\n\n\n\n\n\u52d5\u3044\u3066\u3044\u308b\u69d8\u5b50\u306f\u4ee5\u4e0b\u306easciinema \u3092\uff0e\n\n\n\n\n\n\u30ad\u30fc\u30d0\u30a4\u30f3\u30c9\n\n\n\u4e0b\u306e\u65b9\u306b\u3042\u308b\u3068\u304a\u308a\u4ee5\u4e0b\u306e\u30ad\u30fc\u30d0\u30a4\u30f3\u30c9\u3067\u64cd\u4f5c\u304c\u3067\u304d\u307e\u3059\uff0e\n\n\n\n\np=pause, s=step, r=reinit, w=status, q=quit\n\n\n\n\n\np\n\n\u4e00\u6642\u505c\u6b62/\u518d\u958b\n\ns\n\n\u505c\u6b62/\u30b3\u30de\u9001\u308a(p\u3067\u518d\u958b)\n\nr\n\n\u518d\u521d\u671f\u5316\n\nw\n\n\u30b9\u30c6\u30fc\u30bf\u30b9\u8868\u793a/\u975e\u8868\u793a\n\nq\n\n\u7d42\u4e86\n\n\n\n\n\n\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\n\n\n\u30b9\u30bf\u30fc\u30bf\u30b9\u3092\u3044\u3058\u308c\u307e\u3059\u304c\uff0c -s, --no-status \u304f\u3089\u3044\u3067\u3042\u3068\u306f\u65e2\u5b9a\u5024\u3067\u3044\u3044\u304b\u306a\u3068\u8a00\u3046\u611f\u3058\uff0e\n\n\n\n\n\n-h, --help Show this help\n\n\n\n\n\n\u3053\u306e\u30d8\u30eb\u30d7\u3092\u8868\u793a\n\n\n\n\n\n-v, --version Show program version\n\n\n\n\n\n\u30d0\u30fc\u30b8\u30e7\u30f3\u8868\u793a\n\n\n\n\n\n-q, --polys=<int> Set number of polygons (default=2, max=16)\n\n\n\n\n\n\u30dd\u30ea\u30b4\u30f3\u6570\n\n\n\n\n\n-p, --points=<int> Set number of points per polygon (default=4, max=16)\n\n\n\n\n\n\u30dd\u30a4\u30f3\u30c8\u6570(\u4f8b\u3048\u30703\u3067\u4e09\u89d2\u5f62\uff0c4\u3067\u56db\u89d2\u5f62)\n\n\n\n\n\n-t, --trails=<int> Set number of trails lines (default=20, max=64)\n\n\n\n\n\n\u30c8\u30ec\u30a4\u30eb\u30e9\u30a4\u30f3\u306e\u6570\n\n\n\n\n\n-f, --fps=<int> Set frames per second (default=60)\n\n\n\n\n\n1\u79d2\u3042\u305f\u308a\u306e\u30d5\u30ec\u30fc\u30e0\u6570\n\n\n\n\n\n-e, --max-velocity=<float> Set max velocity per point (default=1.00, min=0.01, max=10.00)\n\n\n\n\n\n\u6700\u5927\u901f\u5ea6\n\n\n\n\n\n-s, --no-status Hide status text\n\n\n\n\n\n\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u96a0\u3059\n\n\n\n\n\n-i, --trail-incr=<int> Render every nth trail (default=4, max=64)\n\n\n\n\n\nn\u756a\u76ee\u306e\u30c8\u30ec\u30a4\u30eb\u3054\u3068\u306b\u63cf\u753b\n\n\n\n\ntmux \u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u306b\u8a2d\u5b9a\n\n\n\u30bf\u30fc\u30df\u30ca\u30eb\u30de\u30eb\u30c1\u30d7\u30ec\u30af\u30b5\u306etmux \u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u306b\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\u307e\u305a\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u4ee5\u4e0b\u3092\u8a18\u8ff0\u3057\u307e\u3059\uff0e\n\n\n\nset -g lock-after-time 900 #\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u304c\u8d77\u52d5\u3059\u308b\u307e\u3067\u306e\u79d2\u6570\nset -g lock-command \"mystify-term -s\" #\u30b9\u30af\u30ea\u30fc\u30f3\u30bb\u30fc\u30d0\u30fc\u30b3\u30de\u30f3\u30c9\n\n\n\n\n\n\nNote\n\n\n\ntmux \u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306f\n\n\n\n ~/.tmux.conf\n $XDG_CONFIG_HOME/tmux/tmux.conf\n ~/.config/tmux/tmux.conf\n\n\n\nbyobu \u304b\u3089\u8d77\u52d5\u3057\u3066\u3044\u308b\u5834\u5408\u306f\n\n\n\n ~/.byobu/.tmux.conf\n\n\n\n\n\n\n\n\u6b21\u56de\u8d77\u52d5\u6642\u304b\u3089\u53cd\u6620\u3055\u308c\u307e\u3059\u304c\uff0c\u73fe\u5728\u306etmux \u30bb\u30c3\u30b7\u30e7\u30f3\u306b\u53cd\u6620\u3057\u305f\u3044\u5834\u5408\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b tmux source \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb \u3068\u3057\u3066\u53cd\u6620\u3067\u304d\u307e\u3059\uff0e\n\n\n\n$ tmux source ~/.byobu/.tmux.conf\n\n\n\n\n\nSEE ALSO\n\n\n\n\nattogram/bash-screensavers: Turn your idle shell into a visual playground with this collection of Bash screensav\u00aders", "date_published": "2026-01-27T05:48:08+09:00", "date_modified": "2026-01-27T05:48:10+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ScreenSaver", "terminal", "bookworm", "Debian", "Linux", "Raspberry Pi OS", "sid" ] }, { "id": "https://matoken.org/blog/?p=5181", "url": "https://matoken.org/blog/2026/01/25/snac-2-89/", "title": "\u8efd\u91cfActivityPub Server\u306esnac 2.89\u30ea\u30ea\u30fc\u30b9", "content_html": "
\n
\n
\n

\"susie64

\n
\n
\n

\u8efd\u91cfActivityPub Server \u306esnac 2.89 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n

\n
\n
\n

RELEASE NOTES

\n
\n
\n
\n
\n

## 2.89

\n
\n
\n

Fixed crash in pronouns processing (contributed by byte).

\n
\n
\n

Added counters in the people page (contributed by byte).

\n
\n
\n

New command-line option refresh, to refresh all follower and following Actor objects, marking them as broken if they are.

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

\u4eca\u56de\u306e\u65b0\u6a5f\u80fd\u306f2\u3064\uff0e

\n
\n
\n
    \n
  • \n

    people \u30da\u30fc\u30b8\u306b\u30ab\u30a6\u30f3\u30bf\u30fc\u3092\u8ffd\u52a0

    \n
  • \n
\n
\n
\n

\"snac

\n
\n
\n
    \n
  • \n

    \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u30d5\u30a9\u30ed\u30ef\u30fc\u3068\u30d5\u30a9\u30ed\u30fc\u4e2d\u306e\u30a2\u30af\u30bf\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b refresh \u3092\u8ffd\u52a0\uff0e

    \n
  • \n
\n
\n
\n
\n
$ snac | grep refresh\nrefresh {basedir} {uid}              Refreshes all actors\n$ snac snac-data matoken
\n
\n
\n
\n

\u7279\u306b\u554f\u984c\u304c\u306a\u304b\u3063\u305f\u306e\u304b\u4f55\u3082\u51fa\u529b\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n

Debian package \u306f\u307e\u30602.88 \u3067\u3059\uff0e

\n
\n
\n
\n
$ rmadison snac2\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports       | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2      | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2      | 2.75-2         | stable                    | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1~bpo13+1 | stable-backports          | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1~bpo13+1 | stable-backports-debug    | source\nsnac2      | 2.88-1         | testing                   | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2      | 2.88-1         | unstable                  | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2      | 2.88-1         | unstable-debug            | source
\n
\n
\n\n
\n
\n", "content_text": "\u8efd\u91cfActivityPub Server \u306esnac 2.89 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink@comam.es) \u4f5c\u8005\u306etoot\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\ngrunfink/snac2: A simple, minimalistic ActivityPub instance written in portable C – Codeberg.org tag 2.89\n\n\n\n\n\n\n\nRELEASE NOTES\n\n\n\n\n## 2.89\n\n\nFixed crash in pronouns processing (contributed by byte).\n\n\nAdded counters in the people page (contributed by byte).\n\n\nNew command-line option refresh, to refresh all follower and following Actor objects, marking them as broken if they are.\n\n\n\n— snac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\nMerge pull request ‘segfault fix’ (#521) from byte/snac2:fix_segfault into master \u00b7 3e95d9639d – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘simple cosmetic counters’ (#519) from byte/snac2:counters into master \u00b7 33b066733e – grunfink/snac2 – Codeberg.org\n\n\nNew command-line option ‘refresh’. \u00b7 d8d40acfd1 – grunfink/snac2 – Codeberg.org\n\n\n\n\n\u4eca\u56de\u306e\u65b0\u6a5f\u80fd\u306f2\u3064\uff0e\n\n\n\n\npeople \u30da\u30fc\u30b8\u306b\u30ab\u30a6\u30f3\u30bf\u30fc\u3092\u8ffd\u52a0\n\n\n\n\n\n\n\n\n\n\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u306b\u30d5\u30a9\u30ed\u30ef\u30fc\u3068\u30d5\u30a9\u30ed\u30fc\u4e2d\u306e\u30a2\u30af\u30bf\u30fc\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u66f4\u65b0\u3059\u308b refresh \u3092\u8ffd\u52a0\uff0e\n\n\n\n\n\n$ snac | grep refresh\nrefresh {basedir} {uid} Refreshes all actors\n$ snac snac-data matoken\n\n\n\n\u7279\u306b\u554f\u984c\u304c\u306a\u304b\u3063\u305f\u306e\u304b\u4f55\u3082\u51fa\u529b\u3055\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\nDebian package \u306f\u307e\u30602.88 \u3067\u3059\uff0e\n\n\n\n$ rmadison snac2\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports | source, amd64, arm64, armel, armhf, i386, mips64el, mipsel, ppc64el, s390x\nsnac2 | 2.75-2~bpo12+1 | oldstable-backports-debug | source\nsnac2 | 2.75-2 | stable | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1~bpo13+1 | stable-backports | source, amd64, arm64, armel, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1~bpo13+1 | stable-backports-debug | source\nsnac2 | 2.88-1 | testing | source, amd64, arm64, armhf, i386, ppc64el, riscv64, s390x\nsnac2 | 2.88-1 | unstable | source, amd64, arm64, armhf, i386, loong64, ppc64el, riscv64, s390x\nsnac2 | 2.88-1 | unstable-debug | source\n\n\n\n\n\nsnac2 – Debian Package Tracker", "date_published": "2026-01-25T19:16:05+09:00", "date_modified": "2026-01-25T19:16:10+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5167", "url": "https://matoken.org/blog/2026/01/21/mlterm-mouseout/", "title": "x11\u4e0a\u306emlterm\u3067\u30de\u30a6\u30b9\u30a2\u30a6\u30c8\u6642\u306b\u6587\u5b57\u5165\u529b\u304c\u3067\u304d\u306a\u3044", "content_html": "
\n
\n

\n
\n

\u305f\u304f\u3055\u3093\u306e\u74b0\u5883\u3067\u52d5\u4f5c\u3059\u308b\u8efd\u91cf\u3067\u591a\u6a5f\u80fd\u306a\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u30fc\u306emlterm(Multi Lingual TERMinal)\u3092\u8fd1\u5e74\u30e1\u30a4\u30f3\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e

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

\u6700\u8fd1\u306e\u554f\u984c\u3068\u3057\u3066mlterm \u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u304b\u3089\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u5916\u308c\u308b\u3068mlterm \u304c\u30a2\u30af\u30c6\u30a3\u30d6\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3082\u6587\u5b57\u304c\u5165\u529b\u3067\u304d\u307e\u305b\u3093\uff0e\u6587\u5b57\u304c\u5165\u529b\u3067\u304d\u306a\u3044→\u30ab\u30fc\u30bd\u30eb\u3092mlterm \u306b\u6301\u3063\u3066\u304f\u308b\u3068\u3044\u3046\u306e\u304c\u5730\u5473\u306b\u9762\u5012\u3067\u3059\uff0e
\n\u4eca\u56de\u3053\u308c\u3092\u8abf\u3079\u3066\u89e3\u6c7a\u3057\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u307e\u305a\u691c\u7d22\u3057\u3066\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

\u89e3\u6c7a\u65b9\u6cd5\u306f\u3001

\n
\n
\n

~/.mlterm/main

\n
\n
\n

\u306b

\n
\n
\n

input_method=ibus

\n
\n
\n

\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3002

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

\u76f4\u63a5\u30de\u30a6\u30b9\u30a2\u30a6\u30c8\u306e\u3068\u304d\u306e\u8a2d\u5b9a\u3067\u306f\u306a\u3044\u306e\u3067\u3059\u304c\uff0c\u3053\u308c\u3092\u771f\u4f3c\u3059\u308b\u3068\u78ba\u304b\u306b\u30de\u30a6\u30b9\u30a2\u30a6\u30c8\u3057\u3066\u3082\u6587\u5b57\u304c\u5165\u529b\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
~/.mlterm/main \u306b\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0
\n
\n
input_method = fcitx
\n
\n
\n
\n

\u3057\u304b\u3057\uff0c\u4eca\u5ea6\u306f\u65e5\u672c\u8a9e\u304c\u5165\u529b\u3067\u304d\u307e\u305b\u3093\uff0e
\nmlterm \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u898b\u3066\u3082\u8a2d\u5b9a\u306f\u5927\u4e08\u592b\u305d\u3046\uff0e

\n
\n
\n
doc/ja/README.ja \u3088\u308a
\n
\n
      o input_method (*default*) (#)\n        \u4f7f\u7528\u3059\u308b\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\n        default \u306f\u3001x11 \u7248\u306e mlterm \u3067\u306f xim\u3001\u305d\u308c\u4ee5\u5916\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u63d0\u4f9b\u3059\u308b\u6a19\u6e96\n        \u306e\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n        \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\n\n        [input method];[option1]:[option2]\n\n        [input method] \u306b\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9(xim/uim/m17nlib/scim/kbd/skk/wnn/\n        canna/iiimf)\u3092\u6307\u5b9a\u3057\u3001\u5fc5\u8981\u3067\u3042\u308c\u3070 \":\" \u3067\u533a\u5207\u3063\u3066\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5217\u6319\u3057\u307e\u3059\u3002\n\n        \u5404\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002\n\n        xim \u306e\u5834\u5408: xim:[xim server]:[locale]\n        [xim server] \u3067 XIM \u30b5\u30fc\u30d0\u30fc\u540d(kinput2, Ami, xcin \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\n        \u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u3001\u74b0\u5883\u5909\u6570 XMODIFIERS \u3067\u6307\u5b9a\u3057\u305f XIM \u30b5\u30fc\u30d0\u30fc\u304c\n        \u4f7f\u7528\u3055\u308c\u307e\u3059\u3002[locale] \u306b\u306f XIM \u30b5\u30fc\u30d0\u30fc\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u6307\u5b9a\u3057\n        \u306a\u304b\u3063\u305f\u5834\u5408\u306f\u30b7\u30b9\u30c6\u30e0\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002use_xim \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\n        xim \u3092\u7121\u52b9\u306b\u3057\u305f\u5834\u5408\u3001xim \u3092\u6307\u5b9a\u3057\u3066\u3082\u7121\u8996\u3055\u308c\u307e\u3059\u3002\n\n        uim \u306e\u5834\u5408:\n        uim:[conversion engine]\n        [conversion engine] \u306b\u5909\u63db\u30a8\u30f3\u30b8\u30f3(anthy, prime, hangul2\u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n        \u3059\u3002\u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f uim \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5909\u63db\u30a8\u30f3\u30b8\u30f3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n\n        m17nlib \u306e\u5834\u5408:\n        m17nlib:[language id]:[input method]\n        [language id] \u306b\u306f ISO-639 \u306b\u5f93\u3063\u3066\u8a00\u8a9e(ar, zh, ja \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\n        \u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u30b7\u30b9\u30c6\u30e0\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u304b\u3089\u53d6\u5f97\u3057\u305f\u8a00\u8a9e\u304c\u4f7f\u308f\u308c\u307e\u3059\n        [input_method] \u3067\u4f7f\u7528\u3059\u308b\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9(anthy, py \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\u3059\n        \u6307\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f [language id] \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u304c\u4f7f\n        \u7528\u3055\u308c\u307e\u3059\u3002m17nlib \u3092\u6307\u5b9a\u3057\u305f\u6642\u306f key \u30d5\u30a1\u30a4\u30eb\u3067 IM_HOTKEY \u3092\u6307\u5b9a\u3057\u3066\n        \u304f\u3060\u3055\u3044\u3002\n\n        scim \u306e\u5834\u5408:\n        scim (\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057)\n\n        ibus \u306e\u5834\u5408\uff1a\n        ibus:[conversion engine]\n        [conversion engine] \u306b\u5909\u63db\u30a8\u30f3\u30b8\u30f3(anthy, prime, hangul2\u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n        \u3059\u3002\u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f ibus \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5909\u63db\u30a8\u30f3\u30b8\u30f3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n        (ibus\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u6ce8\u610f\u70b9)\n        ibus \u306e preferences \u753b\u9762\u304b\u3089\u30ad\u30fc\u30dc\u30fc\u30c9\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u5834\u5408\u3001\u30e2\u30c7\n        \u30a3\u30d5\u30a1\u30a4\u30a2\u306e Release \u306b\u306f\u30c1\u30a7\u30c3\u30af\u3092\u4ed8\u3051\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\n\n        fcitx \u306e\u5834\u5408:\n        fcitx (\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057)\n\n        wnn \u306e\u5834\u5408:\n        wnn:[server]\n        [server] \u306b\u306f\u3001\u63a5\u7d9a\u3059\u308b\u304b\u306a\u6f22\u5b57\u5909\u63db\u30b5\u30fc\u30d0\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\n        \u306a\u304a\u3001JSERVER \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\n        \u307e\u305f\u3001WNNENVRC \u74b0\u5883\u5909\u6570\u306b\u3088\u308a wnnenvrc \u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n\n        canna \u306e\u5834\u5408:\n        canna (\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057)\n\n        skk \u306e\u5834\u5408:\n        skk:dict=[dictionary](:utf8),sskey=[sticky shift key]\n        [dictionary] \u306b\u3001\u63a5\u7d9a\u3059\u308b\u8f9e\u66f8\u30b5\u30fc\u30d0(skkserv)\u306e \"\u30db\u30b9\u30c8\u540d:\u30dd\u30fc\u30c8\u756a\u53f7\" \u53c8\n        \u306f\u3001\u8f9e\u66f8\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u8f9e\u66f8\u304c UTF-8 \u306e\u5834\u5408\u306b\u306f\u3001\u672b\u5c3e\u306b\n        :utf8 \u3092\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002\n        SKK_DICTIONARY \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\n        \u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u306f\u3001localhost \u306e\u8f9e\u66f8\u30b5\u30fc\u30d0\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002\n        \u306a\u304a\u3001\u4e0a\u8a18\u3068\u306f\u5225\u306b\u3001~/.mlterm/skk-jisyo \u3092\u30ed\u30fc\u30ab\u30eb\u306e\u8f9e\u66f8\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002\n\n        [sticky shift key] \u306b\u306f\u3001sticky shift key \u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\n        \u3060\u3055\u3044\u3002\u5370\u5237\u53ef\u80fd\u306a\u6587\u5b57\u306e\u30ad\u30fc\u3092\u6307\u5b9a\u3059\u308b\u5834\u5408\u306f\u305d\u306e\u6587\u5b57(\\x3b\u306e\u3088\u3046\u306b16\u9032\u6570\n        \u3067\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef)\u3092\u3001\u305d\u308c\u4ee5\u5916\u306e\u5834\u5408\u306f <X11/keysymdef.h> \u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30b7\n        \u30f3\u30dc\u30eb(XK_\u3092\u9664\u304f)\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n        SKK_STICKY_SHIFT_KEY \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\n\n        kbd \u306e\u5834\u5408:\n        kbd(:hide):[lang]\n        US \u30ad\u30fc\u30dc\u30fc\u30c9\u3067\u5165\u529b\u3055\u308c\u305f\u6587\u5b57\u3092\u3001\u6307\u5b9a\u3057\u305f\u30ad\u30fc\u30dc\u30fc\u30c9\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u6587\u5b57\u306b\u5909\n        \u63db\u3057\u307e\u3059\u3002\n        :hide \u3092\u6307\u5b9a\u3057\u305f\u5834\u5408\u306f\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u307e\u305b\u3093\u3002\n        [lang]\u306b\u306f\u3001\u6b21\u306e\u3044\u305a\u308c\u304b\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n        arabic, hebrew, de, fr, es, pt, jp106, isciixxx\n        \u306a\u304a\u3001[lang]\u3092\u7701\u7565\u3057\u305f\u5834\u5408\u3001ISCII \u30e2\u30fc\u30c9\u306e\u6642\u306f ISCII \u914d\u5217\u3001\u305d\u308c\u4ee5\u5916\u3067\u306f\n        \u30ed\u30fc\u30b1\u30fc\u30eb\u306b\u3088\u308a\u5224\u5b9a\u3057\u307e\u3059\u3002\n        kbd \u3092\u6307\u5b9a\u3057\u305f\u6642\u306f key \u30d5\u30a1\u30a4\u30eb\u3067 IM_HOTKEY \u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n        iiimf \u306e\u5834\u5408:\n        iiimf:[language id]:[language engine]\n        [language id] \u306b\u306f RFC1766 \u306b\u5f93\u3063\u3066\u8a00\u8a9e(ar, zh_CN, ja \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n        \u3059\u3002\u6307\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u30b7\u30b9\u30c6\u30e0\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u304b\u3089\u53d6\u5f97\u3057\u305f\u8a00\u8a9e\u304c\u4f7f\u308f\u308c\n        \u307e\u3059\u3002[language engine] \u3067\u306f\u4f7f\u7528\u3059\u308b LE (CannaLE, newpy \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n        \u3059\u3002\u6307\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f [language id] \u306e\u30c7\u30d5\u30a9\u30eb\u30c8 LE \u304c\u4f7f\u7528\u3055\u308c\u307e\n        \u3059\u3002\n        \u306a\u304a\u3001HTT_SERVER_ADDRESS \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u3001\u63a5\u7d9a\u3059\u308b\u30b5\u30fc\u30d0\u306e\u30a2\u30c9\u30ec\u30b9(Unix\n        Domain Socket \u306e\u5834\u5408\u306f\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9)\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002\n        \u307e\u305f\u3001HTT_SHOW_STATUS_WINDOW=true\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u8868\u793a\u7528\u306e\n        \u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u307e\u3059\u3002\n        HTT_AUX_BASE_DIR \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u3001aux \u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u3042\u308b\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b\u3053\n        \u3068\u304c\u3067\u304d\u307e\u3059(\u30c7\u30d5\u30a9\u30eb\u30c8\u306f/usr/lib/iiim/le)\u3002
\n
\n
\n
\n

mlterm \u306e\u30ed\u30b0\u3092\u898b\u308b\u3068fcitx \u304c\u8aad\u307f\u8fbc\u3081\u3066\u3044\u307e\u305b\u3093\uff0e

\n
\n
\n
~/.mlterm/msg.log
\n
\n
    Jan 21 19:22:50[3188254] ERROR(Resource temporarily unavailable): fcitx: Could not load.
\n
\n
\n
\n

\u3053\u306e\u7aef\u672b\u306b\u306fmlterm \u306e\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u30d7\u30e9\u30b0\u30a4\u30f3\u306e mlterm-im-fcitx \u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u5c0e\u5165\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f\uff0eibus \u306f\u5165\u3063\u3066\u3044\u305f\u306e\u3067fcitx \u5207\u66ff\u6642\u306b\u5165\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u3059\u306d\uff0e\u305d\u3057\u3066mlterm plugin \u3092\u4f7f\u308f\u305a\u65e5\u672c\u8a9e\u5165\u529b\u3092\u3057\u3066\u3044\u305f\u3068\uff0e
\nmlterm-im-fcitx \u3092\u5c0e\u5165\u3057\u3066mlterm \u3092\u8d77\u52d5\u3057\u76f4\u3059\u3053\u3068\u3067\u30de\u30a6\u30b9\u30a2\u30a6\u30c8\u6642\u3082\u6587\u5b57\u5165\u529b\u3067\u304d\u308b\u3057\u65e5\u672c\u8a9e\u5165\u529b\u3082\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ apt-cache search mlterm input method\nmlterm-im-fcitx - MultiLingual TERMinal, Flexible Input Method plugin\nmlterm-im-ibus - MultiLingual TERMinal, IBus input method plugin\nmlterm-im-m17nlib - MultiLingual TERMinal, m17nlib input method plugin\nmlterm-im-scim - MultiLingual TERMinal, scim input method plugin\nmlterm-im-skk - MultiLingual TERMinal, SKK input method plugin\nmlterm-im-uim - MultiLingual TERMinal, uim input method plugin\n$ sudo apt install mlterm-im-fcitx
\n
\n
\n
\n

\"mlterm

\n
\n
\n
\u74b0\u5883
\n
\n
$ dpkg-query -W mlterm*\nmlterm  3.9.4-3\nmlterm-common:amd64     3.9.4-3\nmlterm-im-fcitx:amd64   3.9.4-3\nmlterm-im-ibus  3.9.4-3\nmlterm-im-m17nlib\nmlterm-im-scim\nmlterm-im-uim\nmlterm-tiny\nmlterm-tools    3.9.4-3\n$ echo \"${XDG_SESSION_TYPE}\"\nx11\n$ lsb_release -dr\nDescription:    Debian GNU/Linux forky/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n\n\n
\n
\n", "content_text": "\u305f\u304f\u3055\u3093\u306e\u74b0\u5883\u3067\u52d5\u4f5c\u3059\u308b\u8efd\u91cf\u3067\u591a\u6a5f\u80fd\u306a\u30bf\u30fc\u30df\u30ca\u30eb\u30a8\u30df\u30e5\u30ec\u30fc\u30bf\u30fc\u306emlterm(Multi Lingual TERMinal)\u3092\u8fd1\u5e74\u30e1\u30a4\u30f3\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\nmlterm\n\n\n\n\n\u6700\u8fd1\u306e\u554f\u984c\u3068\u3057\u3066mlterm \u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u304b\u3089\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u5916\u308c\u308b\u3068mlterm \u304c\u30a2\u30af\u30c6\u30a3\u30d6\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3082\u6587\u5b57\u304c\u5165\u529b\u3067\u304d\u307e\u305b\u3093\uff0e\u6587\u5b57\u304c\u5165\u529b\u3067\u304d\u306a\u3044→\u30ab\u30fc\u30bd\u30eb\u3092mlterm \u306b\u6301\u3063\u3066\u304f\u308b\u3068\u3044\u3046\u306e\u304c\u5730\u5473\u306b\u9762\u5012\u3067\u3059\uff0e\n\u4eca\u56de\u3053\u308c\u3092\u8abf\u3079\u3066\u89e3\u6c7a\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\u307e\u305a\u691c\u7d22\u3057\u3066\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff0e\n\n\n\n\n\u89e3\u6c7a\u65b9\u6cd5\u306f\u3001\n\n\n~/.mlterm/main\n\n\n\u306b\n\n\ninput_method=ibus\n\n\n\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3002\n\n\n\n— mlterm \u3067\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u5916\u308c\u308b\u3068\u6587\u5b57\u5165\u529b\u304c\u3067\u304d\u306a\u304f\u306a\u308b\u75c7\u72b6: hama \u306e record of life\n‘\n\n\n\n\u76f4\u63a5\u30de\u30a6\u30b9\u30a2\u30a6\u30c8\u306e\u3068\u304d\u306e\u8a2d\u5b9a\u3067\u306f\u306a\u3044\u306e\u3067\u3059\u304c\uff0c\u3053\u308c\u3092\u771f\u4f3c\u3059\u308b\u3068\u78ba\u304b\u306b\u30de\u30a6\u30b9\u30a2\u30a6\u30c8\u3057\u3066\u3082\u6587\u5b57\u304c\u5165\u529b\u3067\u304d\u307e\u3059\uff0e\n\n\n~/.mlterm/main \u306b\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0\n\ninput_method = fcitx\n\n\n\n\u3057\u304b\u3057\uff0c\u4eca\u5ea6\u306f\u65e5\u672c\u8a9e\u304c\u5165\u529b\u3067\u304d\u307e\u305b\u3093\uff0e\nmlterm \u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u898b\u3066\u3082\u8a2d\u5b9a\u306f\u5927\u4e08\u592b\u305d\u3046\uff0e\n\n\ndoc/ja/README.ja \u3088\u308a\n\n o input_method (*default*) (#)\n \u4f7f\u7528\u3059\u308b\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\n default \u306f\u3001x11 \u7248\u306e mlterm \u3067\u306f xim\u3001\u305d\u308c\u4ee5\u5916\u306f\u3001\u30b7\u30b9\u30c6\u30e0\u304c\u63d0\u4f9b\u3059\u308b\u6a19\u6e96\n \u306e\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\n\n [input method];[option1]:[option2]\n\n [input method] \u306b\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9(xim/uim/m17nlib/scim/kbd/skk/wnn/\n canna/iiimf)\u3092\u6307\u5b9a\u3057\u3001\u5fc5\u8981\u3067\u3042\u308c\u3070 \":\" \u3067\u533a\u5207\u3063\u3066\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5217\u6319\u3057\u307e\u3059\u3002\n\n \u5404\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002\n\n xim \u306e\u5834\u5408: xim:[xim server]:[locale]\n [xim server] \u3067 XIM \u30b5\u30fc\u30d0\u30fc\u540d(kinput2, Ami, xcin \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\n \u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u3001\u74b0\u5883\u5909\u6570 XMODIFIERS \u3067\u6307\u5b9a\u3057\u305f XIM \u30b5\u30fc\u30d0\u30fc\u304c\n \u4f7f\u7528\u3055\u308c\u307e\u3059\u3002[locale] \u306b\u306f XIM \u30b5\u30fc\u30d0\u30fc\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u6307\u5b9a\u3057\n \u306a\u304b\u3063\u305f\u5834\u5408\u306f\u30b7\u30b9\u30c6\u30e0\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002use_xim \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\n xim \u3092\u7121\u52b9\u306b\u3057\u305f\u5834\u5408\u3001xim \u3092\u6307\u5b9a\u3057\u3066\u3082\u7121\u8996\u3055\u308c\u307e\u3059\u3002\n\n uim \u306e\u5834\u5408:\n uim:[conversion engine]\n [conversion engine] \u306b\u5909\u63db\u30a8\u30f3\u30b8\u30f3(anthy, prime, hangul2\u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n \u3059\u3002\u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f uim \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5909\u63db\u30a8\u30f3\u30b8\u30f3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n\n m17nlib \u306e\u5834\u5408:\n m17nlib:[language id]:[input method]\n [language id] \u306b\u306f ISO-639 \u306b\u5f93\u3063\u3066\u8a00\u8a9e(ar, zh, ja \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\n \u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u30b7\u30b9\u30c6\u30e0\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u304b\u3089\u53d6\u5f97\u3057\u305f\u8a00\u8a9e\u304c\u4f7f\u308f\u308c\u307e\u3059\n [input_method] \u3067\u4f7f\u7528\u3059\u308b\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9(anthy, py \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\u3059\n \u6307\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f [language id] \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u304c\u4f7f\n \u7528\u3055\u308c\u307e\u3059\u3002m17nlib \u3092\u6307\u5b9a\u3057\u305f\u6642\u306f key \u30d5\u30a1\u30a4\u30eb\u3067 IM_HOTKEY \u3092\u6307\u5b9a\u3057\u3066\n \u304f\u3060\u3055\u3044\u3002\n\n scim \u306e\u5834\u5408:\n scim (\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057)\n\n ibus \u306e\u5834\u5408\uff1a\n ibus:[conversion engine]\n [conversion engine] \u306b\u5909\u63db\u30a8\u30f3\u30b8\u30f3(anthy, prime, hangul2\u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n \u3059\u3002\u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f ibus \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5909\u63db\u30a8\u30f3\u30b8\u30f3\u304c\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002\n (ibus\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u6ce8\u610f\u70b9)\n ibus \u306e preferences \u753b\u9762\u304b\u3089\u30ad\u30fc\u30dc\u30fc\u30c9\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b\u5834\u5408\u3001\u30e2\u30c7\n \u30a3\u30d5\u30a1\u30a4\u30a2\u306e Release \u306b\u306f\u30c1\u30a7\u30c3\u30af\u3092\u4ed8\u3051\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\n\n fcitx \u306e\u5834\u5408:\n fcitx (\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057)\n\n wnn \u306e\u5834\u5408:\n wnn:[server]\n [server] \u306b\u306f\u3001\u63a5\u7d9a\u3059\u308b\u304b\u306a\u6f22\u5b57\u5909\u63db\u30b5\u30fc\u30d0\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\n \u306a\u304a\u3001JSERVER \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\n \u307e\u305f\u3001WNNENVRC \u74b0\u5883\u5909\u6570\u306b\u3088\u308a wnnenvrc \u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n\n canna \u306e\u5834\u5408:\n canna (\u30aa\u30d7\u30b7\u30e7\u30f3\u7121\u3057)\n\n skk \u306e\u5834\u5408:\n skk:dict=[dictionary](:utf8),sskey=[sticky shift key]\n [dictionary] \u306b\u3001\u63a5\u7d9a\u3059\u308b\u8f9e\u66f8\u30b5\u30fc\u30d0(skkserv)\u306e \"\u30db\u30b9\u30c8\u540d:\u30dd\u30fc\u30c8\u756a\u53f7\" \u53c8\n \u306f\u3001\u8f9e\u66f8\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u8f9e\u66f8\u304c UTF-8 \u306e\u5834\u5408\u306b\u306f\u3001\u672b\u5c3e\u306b\n :utf8 \u3092\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002\n SKK_DICTIONARY \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\n \u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\u306f\u3001localhost \u306e\u8f9e\u66f8\u30b5\u30fc\u30d0\u306b\u63a5\u7d9a\u3057\u307e\u3059\u3002\n \u306a\u304a\u3001\u4e0a\u8a18\u3068\u306f\u5225\u306b\u3001~/.mlterm/skk-jisyo \u3092\u30ed\u30fc\u30ab\u30eb\u306e\u8f9e\u66f8\u3068\u3057\u3066\u4f7f\u7528\u3057\u307e\u3059\u3002\n\n [sticky shift key] \u306b\u306f\u3001sticky shift key \u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u3066\u304f\n \u3060\u3055\u3044\u3002\u5370\u5237\u53ef\u80fd\u306a\u6587\u5b57\u306e\u30ad\u30fc\u3092\u6307\u5b9a\u3059\u308b\u5834\u5408\u306f\u305d\u306e\u6587\u5b57(\\x3b\u306e\u3088\u3046\u306b16\u9032\u6570\n \u3067\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef)\u3092\u3001\u305d\u308c\u4ee5\u5916\u306e\u5834\u5408\u306f <X11/keysymdef.h> \u306b\u5b9a\u7fa9\u3055\u308c\u305f\u30b7\n \u30f3\u30dc\u30eb(XK_\u3092\u9664\u304f)\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n SKK_STICKY_SHIFT_KEY \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u6307\u5b9a\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002\n\n kbd \u306e\u5834\u5408:\n kbd(:hide):[lang]\n US \u30ad\u30fc\u30dc\u30fc\u30c9\u3067\u5165\u529b\u3055\u308c\u305f\u6587\u5b57\u3092\u3001\u6307\u5b9a\u3057\u305f\u30ad\u30fc\u30dc\u30fc\u30c9\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u6587\u5b57\u306b\u5909\n \u63db\u3057\u307e\u3059\u3002\n :hide \u3092\u6307\u5b9a\u3057\u305f\u5834\u5408\u306f\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u307e\u305b\u3093\u3002\n [lang]\u306b\u306f\u3001\u6b21\u306e\u3044\u305a\u308c\u304b\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\n arabic, hebrew, de, fr, es, pt, jp106, isciixxx\n \u306a\u304a\u3001[lang]\u3092\u7701\u7565\u3057\u305f\u5834\u5408\u3001ISCII \u30e2\u30fc\u30c9\u306e\u6642\u306f ISCII \u914d\u5217\u3001\u305d\u308c\u4ee5\u5916\u3067\u306f\n \u30ed\u30fc\u30b1\u30fc\u30eb\u306b\u3088\u308a\u5224\u5b9a\u3057\u307e\u3059\u3002\n kbd \u3092\u6307\u5b9a\u3057\u305f\u6642\u306f key \u30d5\u30a1\u30a4\u30eb\u3067 IM_HOTKEY \u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n iiimf \u306e\u5834\u5408:\n iiimf:[language id]:[language engine]\n [language id] \u306b\u306f RFC1766 \u306b\u5f93\u3063\u3066\u8a00\u8a9e(ar, zh_CN, ja \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n \u3059\u3002\u6307\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u30b7\u30b9\u30c6\u30e0\u306e\u30ed\u30fc\u30b1\u30fc\u30eb\u304b\u3089\u53d6\u5f97\u3057\u305f\u8a00\u8a9e\u304c\u4f7f\u308f\u308c\n \u307e\u3059\u3002[language engine] \u3067\u306f\u4f7f\u7528\u3059\u308b LE (CannaLE, newpy \u306a\u3069)\u3092\u6307\u5b9a\u3057\u307e\n \u3059\u3002\u6307\u5b9a\u3055\u308c\u306a\u304b\u3063\u305f\u5834\u5408\u306f [language id] \u306e\u30c7\u30d5\u30a9\u30eb\u30c8 LE \u304c\u4f7f\u7528\u3055\u308c\u307e\n \u3059\u3002\n \u306a\u304a\u3001HTT_SERVER_ADDRESS \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u3001\u63a5\u7d9a\u3059\u308b\u30b5\u30fc\u30d0\u306e\u30a2\u30c9\u30ec\u30b9(Unix\n Domain Socket \u306e\u5834\u5408\u306f\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9)\u3092\u6307\u5b9a\u3067\u304d\u307e\u3059\u3002\n \u307e\u305f\u3001HTT_SHOW_STATUS_WINDOW=true\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u30b9\u30c6\u30fc\u30bf\u30b9\u8868\u793a\u7528\u306e\n \u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u8868\u793a\u3057\u307e\u3059\u3002\n HTT_AUX_BASE_DIR \u74b0\u5883\u5909\u6570\u306b\u3088\u308a\u3001aux \u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u3042\u308b\u30d1\u30b9\u3092\u6307\u5b9a\u3059\u308b\u3053\n \u3068\u304c\u3067\u304d\u307e\u3059(\u30c7\u30d5\u30a9\u30eb\u30c8\u306f/usr/lib/iiim/le)\u3002\n\n\n\nmlterm \u306e\u30ed\u30b0\u3092\u898b\u308b\u3068fcitx \u304c\u8aad\u307f\u8fbc\u3081\u3066\u3044\u307e\u305b\u3093\uff0e\n\n\n~/.mlterm/msg.log\n\n Jan 21 19:22:50[3188254] ERROR(Resource temporarily unavailable): fcitx: Could not load.\n\n\n\n\u3053\u306e\u7aef\u672b\u306b\u306fmlterm \u306e\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u30d7\u30e9\u30b0\u30a4\u30f3\u306e mlterm-im-fcitx \u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u5c0e\u5165\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3067\u3057\u305f\uff0eibus \u306f\u5165\u3063\u3066\u3044\u305f\u306e\u3067fcitx \u5207\u66ff\u6642\u306b\u5165\u308c\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u3059\u306d\uff0e\u305d\u3057\u3066mlterm plugin \u3092\u4f7f\u308f\u305a\u65e5\u672c\u8a9e\u5165\u529b\u3092\u3057\u3066\u3044\u305f\u3068\uff0e\nmlterm-im-fcitx \u3092\u5c0e\u5165\u3057\u3066mlterm \u3092\u8d77\u52d5\u3057\u76f4\u3059\u3053\u3068\u3067\u30de\u30a6\u30b9\u30a2\u30a6\u30c8\u6642\u3082\u6587\u5b57\u5165\u529b\u3067\u304d\u308b\u3057\u65e5\u672c\u8a9e\u5165\u529b\u3082\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n$ apt-cache search mlterm input method\nmlterm-im-fcitx - MultiLingual TERMinal, Flexible Input Method plugin\nmlterm-im-ibus - MultiLingual TERMinal, IBus input method plugin\nmlterm-im-m17nlib - MultiLingual TERMinal, m17nlib input method plugin\nmlterm-im-scim - MultiLingual TERMinal, scim input method plugin\nmlterm-im-skk - MultiLingual TERMinal, SKK input method plugin\nmlterm-im-uim - MultiLingual TERMinal, uim input method plugin\n$ sudo apt install mlterm-im-fcitx\n\n\n\n\n\n\n\u74b0\u5883\n\n$ dpkg-query -W mlterm*\nmlterm 3.9.4-3\nmlterm-common:amd64 3.9.4-3\nmlterm-im-fcitx:amd64 3.9.4-3\nmlterm-im-ibus 3.9.4-3\nmlterm-im-m17nlib\nmlterm-im-scim\nmlterm-im-uim\nmlterm-tiny\nmlterm-tools 3.9.4-3\n$ echo \"${XDG_SESSION_TYPE}\"\nx11\n$ lsb_release -dr\nDescription: Debian GNU/Linux forky/sid\nRelease: n/a\n$ arch\nx86_64\n\n\n\nSEE ALSO\n\n\nmlterm \u306e\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9\u30d7\u30e9\u30b0\u30a4\u30f3\u306b\u3064\u3044\u3066 #\u7aef\u672b\u30a8\u30df\u30e5\u30ec\u30fc\u30bf – Qiita\n\n\n\n\ntoot\n\n\nmatoken:susie: (@matoken@snac.matoken.org)", "date_published": "2026-01-21T20:31:37+09:00", "date_modified": "2026-01-21T22:46:51+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "mlterm", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=5160", "url": "https://matoken.org/blog/2026/01/20/snac-2-88-muted_words-strip_metadata/", "title": "\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u3067\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u3084\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u6a5f\u80fd\u8ffd\u52a0", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n
\n
\n
\n

2.88

\n
\n
\n

If disable_emojireact is set to true in server.json, EmojiReacts (incoming and outgoing) are totally disabled.

\n
\n
\n

New command-line option top_ten, that returns the top ten most popular posts by a user (ordered by the sum of likes and boosts) (contributed by aov).

\n
\n
\n

Added a new set of per-user muted words; if a post contains any of them, it’s hidden behind a dropdown (contributed by byte).

\n
\n
\n

If an account has a metadata named pronouns, it’s shown by the name (contributed by violette).

\n
\n
\n

Mastodon API: children of a post are returned recursively, not just the first level (contributed by violette).

\n
\n
\n

Implemented optional metadata stripping for images and videos using external tools (contributed by Stefano Marinelli).

\n
\n
\n
\n— https://codeberg.org/grunfink/snac2/src/branch/master/RELEASE_NOTES.md#2-88\n
\n
\n
\n

\u305d\u308c\u305e\u308c\u306ecommit \u306f\u3053\u306e\u3042\u305f\u308a\u3067\u3057\u3087\u3046\u304b

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

\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u7121\u52b9\u8a2d\u5b9a

\n
\n
\n

\u4eca\u56de\u306e\u66f4\u65b0\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u306e\u4e2d\u306b disable_emojireact \u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u3053\u308c\u3092 true \u306b\u3059\u308b\u3053\u3068\u3067\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u9001\u53d7\u4fe1\u304c\u7121\u52b9\u5316\u3067\u304d\u307e\u3059\uff0e
\n\u81ea\u5206\u306f\u6709\u52b9\u306b\u3057\u305f\u3044\u306e\u3067\u3053\u306e\u8a2d\u5b9a\u306f\u30b9\u30eb\u30fc\uff0e

\n
\n
\n
\n
$ man doc/snac.8 | grep -A1 disable_emojireact\n       disable_emojireact\n                   If set to true, all EmojiReact support (for input and output) is disabled.
\n
\n
\n
\n
\n
\n

top_ten \u30b3\u30de\u30f3\u30c9

\n
\n
\n

top_ten \u3068\u3044\u3046\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\uff0e\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc\u306e\u3044\u3044\u306d\u3068\u30d6\u30fc\u30b9\u30c8\u6570\u304b\u3089\u6700\u3082\u4eba\u6c17\u306e\u3042\u3063\u305f\u6295\u7a3f\u306e\u30c8\u30c3\u30d710\u304c\u8868\u793a\u3067\u304d\u307e\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u4ef6\u6570\u306b\u3082\u3067\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ ./snac2/snac top_ten\nsnac 2.88 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n\ntop_ten {basedir} {uid} [{N}]        Prints the most popular posts\n$ ./snac2/snac top_ten snac-data matoken 5\nhttps://snac.matoken.org/matoken/p/1768641700.668031 1\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768600460.460220 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690681.713879 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690814.893464 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690913.716133 0\u2605 0\u21ba
\n
\n
\n
\n
man doc/snac.1 | grep -A1 top_ten
\n
\n
             top_ten basedir uid [N]\n                     Returns the ids of the top ten (or top N) most popular posts (considering the sum of likes and boosts).
\n
\n
\n
\n
\n
\n

\u30e6\u30fc\u30b6\u30fc\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9

\n
\n
\n

\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u6295\u7a3f\u306b\u8a2d\u5b9a\u30ef\u30fc\u30c9\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u5834\u5408\u96a0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e
\n\u8a2d\u5b9a\u306f\uff0c\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u300cprivate\u300d → \u300cMuted words…​\u300d\u306b\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n
$ man doc/snac.5 | grep muted
\n
\n
       muted/      This directory contains files which names are hashes of muted actors. The content is a line containing the actor URL.  Messages from these actors will be ignored on input and not shown in any timeline.
\n
\n
\n
\n
\n
\n

\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb

\n
\n
\n

\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u5229\u7528\u3057\u3066\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u9664\u53bb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e
\n\u65e2\u5b9a\u5024\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\uff0cserver.json \u3067 \"strip_exif\": true, \u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff0e
\n\u753b\u50cf\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fImageMagick\u306emogrify \u3092\uff0c\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fffmpeg \u3092\u5229\u7528\u3057\u307e\u3059\uff0e\u5c0e\u5165\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5c0e\u5165\u304c\u5fc5\u8981\u3067\u3059\uff0e
\n\u5916\u90e8\u30c4\u30fc\u30eb\u304c\u30d1\u30b9\u306e\u901a\u3063\u3066\u3044\u306a\u3044\u5834\u6240\u306b\u3042\u308b\u5834\u5408\u306f\uff0cmogrify_path, ffmpeg_path \u3067\u6307\u5b9a\u53ef\u80fd\u3067\u3059\uff0e

\n
\n
\n
server.json \u8a2d\u5b9a\u4f8b
\n
\n
    \"strip_exif\": true,\n    \"mogrify_path\": \"/usr/local/bin/mogrify\",\n    \"ffmpeg_path\": \"/usr/local/bin/ffmpeg\",
\n
\n
\n
\n

\u5b9f\u969b\u306bexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u306e\u5165\u624b\u3068\u78ba\u8a8d
\n
\n
$ wget https://raw.githubusercontent.com/ianare/exif-samples/refs/heads/master/jpg/Pentax_K10D.jpg\n$ exif Pentax_K10D.jpg\nEXIF tags in '/home/matoken/Downloads/Pentax_K10D.jpg' ('Intel' byte order):\n--------------------+----------------------------------------------------------\nTag                 |Value\n--------------------+----------------------------------------------------------\nManufacturer        |PENTAX Corporation\nModel               |PENTAX K10D\nOrientation         |Top-left\nX-Resolution        |350\nY-Resolution        |350\nResolution Unit     |Inch\nSoftware            |GIMP 2.4.5\nDate and Time       |2008:07:31 15:56:49\nCopyright           |Laitche (This file is in the public domain.) (Photographer\nXP Author           |www.laitche.com\nCompression         |JPEG compression\nX-Resolution        |72\nY-Resolution        |72\nResolution Unit     |Inch\nExposure Time       |1/180 sec.\nF-Number            |f/11.0\nExposure Program    |Aperture priority\nISO Speed Ratings   |200\nExif Version        |Exif Version 2.21\nDate and Time (Origi|2008:05:04 16:47:24\nDate and Time (Digit|2008:05:04 16:47:24\nExposure Bias       |0.00 EV\nMetering Mode       |Pattern\nFlash               |Flash did not fire, compulsory flash mode\nFocal Length        |90.0 mm\nFlashPixVersion     |FlashPix Version 1.0\nColor Space         |sRGB\nPixel X Dimension   |100\nPixel Y Dimension   |72\nSensing Method      |One-chip color area sensor\n--------------------+----------------------------------------------------------\nEXIF data contains a thumbnail (1349 bytes).
\n
\n
\n
\n

exif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u307e\u3059\uff0e

\n
\n
\n

\"snac

\n
\n
\n

\u6295\u7a3f\u3055\u308c\u305f\u753b\u50cf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u78ba\u8a8d\u3059\u308b\u3068exif \u306f\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ wget http://127.0.0.1:8001/test/s/post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\n$ exif ./post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\nCorrupt data\nThe data provided does not follow the specification.\nExifLoader: The data supplied does not seem to contain EXIF data.
\n
\n
\n
\n

\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
mogrify
\n
\n
            xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -auto-orient -strip \\\"%s\\\" 2>/dev/null\", srv_basedir, mp, r_fn);
\n
\n
\n
\n
ffmpeg
\n
\n
 \t            /* -map_metadata -1 strips all global metadata */\n\t            /* -c copy copies input streams without re-encoding */\n\t            /* we don't silence stderr so we can debug issues */\n\t            /* we explicitly cd to srv_basedir to ensure relative paths work */\n\t            xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -y -i \\\"%s\\\" -map_metadata -1 -c copy \\\"%s\\\"\", srv_basedir, fp, r_fn, tmp_fn);
\n
\n
\n
\n
man doc/snac.8 | grep -A1 metadata
\n
\n
$ man doc/snac.8 | grep strip_exif -A7\n       strip_exif  If  set  to  true,  EXIF and other metadata will be stripped from uploaded images (jpg, png, webp, heic, avif, tiff, gif, bmp) and videos (mp4, m4v, mov, webm, mkv, avi). This requires the mogrify (from ImageMagick) and\n                   ffmpeg tools to be installed. If snac cannot find or execute these tools at startup, it will refuse to run.\n\n       mogrify_path\n                   Overrides the default \"mogrify\" command name or path. Use this if the tool is not in the system PATH or has a different name.\n\n       ffmpeg_path\n                   Overrides the default \"ffmpeg\" command name or path. Use this if the tool is not in the system PATH or has a different name.
\n
\n
\n
\n
\n", "content_text": "\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.88 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink@comam.es)\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\n2.88\n\n\nIf disable_emojireact is set to true in server.json, EmojiReacts (incoming and outgoing) are totally disabled.\n\n\nNew command-line option top_ten, that returns the top ten most popular posts by a user (ordered by the sum of likes and boosts) (contributed by aov).\n\n\nAdded a new set of per-user muted words; if a post contains any of them, it’s hidden behind a dropdown (contributed by byte).\n\n\nIf an account has a metadata named pronouns, it’s shown by the name (contributed by violette).\n\n\nMastodon API: children of a post are returned recursively, not just the first level (contributed by violette).\n\n\nImplemented optional metadata stripping for images and videos using external tools (contributed by Stefano Marinelli).\n\n\n\n— https://codeberg.org/grunfink/snac2/src/branch/master/RELEASE_NOTES.md#2-88\n\n\n\n\u305d\u308c\u305e\u308c\u306ecommit \u306f\u3053\u306e\u3042\u305f\u308a\u3067\u3057\u3087\u3046\u304b\n\n\n\n\nAdded emoji categories. \u00b7 de9d546d70 – grunfink/snac2 – Codeberg.org\n\n\nNew command-line option top_ten. \u00b7 99375a7b66 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘user-specified word mutes and matching’ (#518) from byte/snac2:user_mutes into master \u00b7 4a2a05c6a0 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘simple cosmetic counters’ (#519) from byte/snac2:counters into master \u00b7 33b066733e – grunfink/snac2 – Codeberg.org\n\n\nmastoapi: also return children of children. \u00b7 54bb1626d2 – grunfink/snac2 – Codeberg.org\n\n\nMerge pull request ‘Implement metadata stripping for uploaded photos and videos’ (#515) from draga79/snac2:master into master \u00b7 3ffdf91a4c – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u7121\u52b9\u8a2d\u5b9a\n\n\n\u4eca\u56de\u306e\u66f4\u65b0\u3067\uff0c\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e server.json \u306e\u4e2d\u306b disable_emojireact \u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u3053\u308c\u3092 true \u306b\u3059\u308b\u3053\u3068\u3067\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u9001\u53d7\u4fe1\u304c\u7121\u52b9\u5316\u3067\u304d\u307e\u3059\uff0e\n\u81ea\u5206\u306f\u6709\u52b9\u306b\u3057\u305f\u3044\u306e\u3067\u3053\u306e\u8a2d\u5b9a\u306f\u30b9\u30eb\u30fc\uff0e\n\n\n\n$ man doc/snac.8 | grep -A1 disable_emojireact\n disable_emojireact\n If set to true, all EmojiReact support (for input and output) is disabled.\n\n\n\n\n\ntop_ten \u30b3\u30de\u30f3\u30c9\n\n\ntop_ten \u3068\u3044\u3046\u65b0\u3057\u3044\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5b9f\u88c5\u3055\u308c\u307e\u3057\u305f\uff0e\u3053\u308c\u3092\u5b9f\u884c\u3059\u308b\u3068\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc\u306e\u3044\u3044\u306d\u3068\u30d6\u30fc\u30b9\u30c8\u6570\u304b\u3089\u6700\u3082\u4eba\u6c17\u306e\u3042\u3063\u305f\u6295\u7a3f\u306e\u30c8\u30c3\u30d710\u304c\u8868\u793a\u3067\u304d\u307e\u3059\uff0e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u6307\u5b9a\u4ef6\u6570\u306b\u3082\u3067\u304d\u307e\u3059\uff0e\n\n\n\n$ ./snac2/snac top_ten\nsnac 2.88 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n\ntop_ten {basedir} {uid} [{N}] Prints the most popular posts\n$ ./snac2/snac top_ten snac-data matoken 5\nhttps://snac.matoken.org/matoken/p/1768641700.668031 1\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768600460.460220 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690681.713879 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690814.893464 0\u2605 0\u21ba\nhttps://snac.matoken.org/matoken/p/1768690913.716133 0\u2605 0\u21ba\n\n\n\nman doc/snac.1 | grep -A1 top_ten\n\n top_ten basedir uid [N]\n Returns the ids of the top ten (or top N) most popular posts (considering the sum of likes and boosts).\n\n\n\n\n\n\u30e6\u30fc\u30b6\u30fc\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\n\n\n\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u30df\u30e5\u30fc\u30c8\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\u6295\u7a3f\u306b\u8a2d\u5b9a\u30ef\u30fc\u30c9\u304c\u542b\u307e\u308c\u3066\u3044\u305f\u5834\u5408\u96a0\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\u8a2d\u5b9a\u306f\uff0c\u5bfe\u8c61\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u300cprivate\u300d → \u300cMuted words…​\u300d\u306b\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\n\n$ man doc/snac.5 | grep muted\n\n muted/ This directory contains files which names are hashes of muted actors. The content is a line containing the actor URL. Messages from these actors will be ignored on input and not shown in any timeline.\n\n\n\n\n\n\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\n\n\n\u5916\u90e8\u30c4\u30fc\u30eb\u3092\u5229\u7528\u3057\u3066\u753b\u50cf\u3068\u30d3\u30c7\u30aa\u304b\u3089\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u9664\u53bb\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\u65e2\u5b9a\u5024\u3067\u306f\u7121\u52b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\u6709\u52b9\u306b\u3057\u305f\u3044\u5834\u5408\u306f\uff0cserver.json \u3067 \"strip_exif\": true, \u3092\u8a2d\u5b9a\u3057\u307e\u3059\uff0e\n\u753b\u50cf\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fImageMagick\u306emogrify \u3092\uff0c\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u9664\u53bb\u306b\u306fffmpeg \u3092\u5229\u7528\u3057\u307e\u3059\uff0e\u5c0e\u5165\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u5c0e\u5165\u304c\u5fc5\u8981\u3067\u3059\uff0e\n\u5916\u90e8\u30c4\u30fc\u30eb\u304c\u30d1\u30b9\u306e\u901a\u3063\u3066\u3044\u306a\u3044\u5834\u6240\u306b\u3042\u308b\u5834\u5408\u306f\uff0cmogrify_path, ffmpeg_path \u3067\u6307\u5b9a\u53ef\u80fd\u3067\u3059\uff0e\n\n\nserver.json \u8a2d\u5b9a\u4f8b\n\n \"strip_exif\": true,\n \"mogrify_path\": \"/usr/local/bin/mogrify\",\n \"ffmpeg_path\": \"/usr/local/bin/ffmpeg\",\n\n\n\n\u5b9f\u969b\u306bexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u3066\u78ba\u8a8d\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\u30b5\u30f3\u30d7\u30eb\u753b\u50cf\u306e\u5165\u624b\u3068\u78ba\u8a8d\n\n$ wget https://raw.githubusercontent.com/ianare/exif-samples/refs/heads/master/jpg/Pentax_K10D.jpg\n$ exif Pentax_K10D.jpg\nEXIF tags in '/home/matoken/Downloads/Pentax_K10D.jpg' ('Intel' byte order):\n--------------------+----------------------------------------------------------\nTag |Value\n--------------------+----------------------------------------------------------\nManufacturer |PENTAX Corporation\nModel |PENTAX K10D\nOrientation |Top-left\nX-Resolution |350\nY-Resolution |350\nResolution Unit |Inch\nSoftware |GIMP 2.4.5\nDate and Time |2008:07:31 15:56:49\nCopyright |Laitche (This file is in the public domain.) (Photographer\nXP Author |www.laitche.com\nCompression |JPEG compression\nX-Resolution |72\nY-Resolution |72\nResolution Unit |Inch\nExposure Time |1/180 sec.\nF-Number |f/11.0\nExposure Program |Aperture priority\nISO Speed Ratings |200\nExif Version |Exif Version 2.21\nDate and Time (Origi|2008:05:04 16:47:24\nDate and Time (Digit|2008:05:04 16:47:24\nExposure Bias |0.00 EV\nMetering Mode |Pattern\nFlash |Flash did not fire, compulsory flash mode\nFocal Length |90.0 mm\nFlashPixVersion |FlashPix Version 1.0\nColor Space |sRGB\nPixel X Dimension |100\nPixel Y Dimension |72\nSensing Method |One-chip color area sensor\n--------------------+----------------------------------------------------------\nEXIF data contains a thumbnail (1349 bytes).\n\n\n\nexif \u4ed8\u304d\u306e\u753b\u50cf\u3092\u6295\u7a3f\u3057\u307e\u3059\uff0e\n\n\n\n\n\n\u6295\u7a3f\u3055\u308c\u305f\u753b\u50cf\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u78ba\u8a8d\u3059\u308b\u3068exif \u306f\u6d88\u3048\u3066\u3044\u307e\u3057\u305f\uff0e\n\n\n\n$ wget http://127.0.0.1:8001/test/s/post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\n$ exif ./post-d2e2931a72bbe1cafaaf94e82ea27e66.jpg\nCorrupt data\nThe data provided does not follow the specification.\nExifLoader: The data supplied does not seem to contain EXIF data.\n\n\n\n\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3057\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\nmogrify\n\n xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -auto-orient -strip \\\"%s\\\" 2>/dev/null\", srv_basedir, mp, r_fn);\n\n\n\nffmpeg\n\n \t /* -map_metadata -1 strips all global metadata */\n\t /* -c copy copies input streams without re-encoding */\n\t /* we don't silence stderr so we can debug issues */\n\t /* we explicitly cd to srv_basedir to ensure relative paths work */\n\t xs *cmd = xs_fmt(\"cd \\\"%s\\\" && %s -y -i \\\"%s\\\" -map_metadata -1 -c copy \\\"%s\\\"\", srv_basedir, fp, r_fn, tmp_fn);\n\n\n\nman doc/snac.8 | grep -A1 metadata\n\n$ man doc/snac.8 | grep strip_exif -A7\n strip_exif If set to true, EXIF and other metadata will be stripped from uploaded images (jpg, png, webp, heic, avif, tiff, gif, bmp) and videos (mp4, m4v, mov, webm, mkv, avi). This requires the mogrify (from ImageMagick) and\n ffmpeg tools to be installed. If snac cannot find or execute these tools at startup, it will refuse to run.\n\n mogrify_path\n Overrides the default \"mogrify\" command name or path. Use this if the tool is not in the system PATH or has a different name.\n\n ffmpeg_path\n Overrides the default \"ffmpeg\" command name or path. Use this if the tool is not in the system PATH or has a different name.", "date_published": "2026-01-20T07:29:13+09:00", "date_modified": "2026-01-20T07:29:18+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5150", "url": "https://matoken.org/blog/2026/01/19/lets-encrypts-short-term-certificates-and-ip-address-certificates/", "title": "Let\u2019s Encrypt \u306e\u77ed\u671f\u8a3c\u660e\u66f8\u3068IP\u8a3c\u660e\u66f8\u3092\u5c11\u3057\u8a66\u3059", "content_html": "
\n
\n

\n
\n

\u7121\u6599\u3067\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3067\u304d\u308bLet’s Encrypt \u3067\u77ed\u671f\u8a3c\u660e\u66f8\u3068 IP \u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u306e\u4e00\u822c\u63d0\u4f9b\u304c\u958b\u59cb\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
\n

Short-lived and IP address certificates are now generally available from Let\u2019s Encrypt. These certificates are valid for 160 hours, just over six days. In order to get a short-lived certificate subscribers simply need to select the \u2018shortlived\u2019 certificate profile in their ACME client.

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

\u8208\u5473\u304c\u3042\u308b\u306e\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

certbot \u30b3\u30de\u30f3\u30c9\u3067\u8a66\u305d\u3046\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0cDebian package\u7248\u306ecertbot \u306funstable \u3067\u30824.0.0 \u3067\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\uff0e

\n
\n
\n
\n
$ certbot --ip-address\nusage:\n  certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...\n\nCertbot can obtain and install HTTPS/TLS/SSL certificates.  By default,\nit will attempt to use a webserver both for obtaining and installing the\ncertificate.\ncertbot: error: unrecognized arguments: --ip-address\n$ certbot --version\ncertbot 4.0.0\n$ rmadison certbot\ncertbot    | 1.12.0-2      | oldoldstable | all\ncertbot    | 2.1.0-4       | oldstable    | all\ncertbot    | 4.0.0-2       | stable       | all\ncertbot    | 4.0.0-2       | testing      | all\ncertbot    | 4.0.0-2       | unstable     | all
\n
\n
\n
\n

2\u65e5\u524d\u306e 58724f6 \u3067Commit \u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067Developer Guide \u3092\u898b\u306a\u304c\u3089source \u304b\u3089\u5c0e\u5165\u3057\u3066\u8a66\u3057\u307e\u3057\u305f\uff0e

\n
\n\n
\n
certbot \u3092source \u304b\u3089build
\n
\n
$ sudo apt install python3-dev python3-venv libaugeas-dev gcc (1)\n$ git clone https://github.com/certbot/certbot (2)\n$ cd certbot\n$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ python3 tools/venv.py (3)\n$ source venv/bin/activate (4)\n$ which certbot\n/home/matoken/src/certbot/venv/bin/certbot\n$ certbot --version\ncertbot 5.3.0.dev0
\n
\n
\n
\n
    \n
  1. \n

    \u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u5c0e\u5165

    \n
  2. \n
  3. \n

    source \u5165\u624b

    \n
  4. \n
  5. \n

    build

    \n
  6. \n
  7. \n

    certbot\u74b0\u5883\u306b\u5165\u308b

    \n
  8. \n
\n
\n
\n
\u4eca\u56de\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u306ehelp
\n
\n
$ certbot help all | grep -A2 -- --ip-address\n  --ip-address IP_ADDRESSES\n                        IP addresses to include. For multiple IP addresses you\n                        can use multiple --ip-address flags. All IP addresses\n                        will be included as Subject Alternative Names on the\n                        certificate. (default: [])\n$ certbot help all | grep -A8 -- --preferred-profile\n  --preferred-profile PREFERRED_PROFILE\n                        Request the given profile name from the ACME server,\n                        or fallback to default. If the given profile name\n                        exists in the ACME directory, use it to request a a\n                        certificate. Otherwise, fall back to requesting a\n                        certificate without a profile (which means the CA will\n                        use its default profile). This allows renewals to\n                        succeed even if the CA deprecates and removes a given\n                        profile. (default: None)
\n
\n
\n
\n
IP\u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u3092\u53d6\u5f97
\n
\n
$ sudo bash -c \"source venv/bin/activate && certbot certonly --ip-address 84.247.152.162 --preferred-profile shortlived\"
\n
\n
\n
\n
\u51fa\u6765\u4e0a\u304c\u3063\u305f\u8a3c\u660e\u66f8\u3092\u78ba\u8a8d
\n
\n
$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -issuer -subject -dates\nissuer=C=US, O=Let's Encrypt, CN=YE2\nsubject=\nnotBefore=Jan 18 23:06:01 2026 GMT\nnotAfter=Jan 25 15:06:00 2026 GMT\n$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -text\nCertificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number:\n            06:e7:4e:65:fe:41:f7:9b:9e:38:12:12:64:13:85:b4:f3:dd\n        Signature Algorithm: ecdsa-with-SHA384\n        Issuer: C=US, O=Let's Encrypt, CN=YE2\n        Validity\n            Not Before: Jan 18 23:06:01 2026 GMT\n            Not After : Jan 25 15:06:00 2026 GMT\n        Subject:\n        Subject Public Key Info:\n            Public Key Algorithm: id-ecPublicKey\n                Public-Key: (256 bit)\n                pub:\n                    04:d9:d9:68:d2:fe:7b:09:0d:c4:97:1e:fc:e4:1e:\n                    65:50:90:cc:63:ec:6a:98:a3:5c:77:b6:d0:33:f5:\n                    4d:8f:ec:38:d5:e8:1d:01:75:fb:d6:93:15:b9:f3:\n                    f8:7e:a4:a9:7b:bf:d7:4d:a3:5e:d0:ca:8f:74:e5:\n                    7a:98:bc:8e:9e\n                ASN1 OID: prime256v1\n                NIST CURVE: P-256\n        X509v3 extensions:\n            X509v3 Key Usage: critical\n                Digital Signature\n            X509v3 Extended Key Usage:\n                TLS Web Server Authentication\n            X509v3 Basic Constraints: critical\n                CA:FALSE\n            X509v3 Authority Key Identifier:\n                B9:59:F2:8E:CF:22:F0:86:D3:37:48:FF:76:14:18:BA:82:D8:55:87\n            Authority Information Access:\n                CA Issuers - URI:http://ye2.i.lencr.org/\n            X509v3 Subject Alternative Name: critical\n                IP Address:84.247.152.162\n            X509v3 Certificate Policies:\n                Policy: 2.23.140.1.2.1\n            X509v3 CRL Distribution Points:\n                Full Name:\n                  URI:http://ye2.c.lencr.org/94.crl\n\n            CT Precertificate SCTs:\n                Signed Certificate Timestamp:\n                    Version   : v1 (0x0)\n                    Log ID    : 0E:57:94:BC:F3:AE:A9:3E:33:1B:2C:99:07:B3:F7:90:\n                                DF:9B:C2:3D:71:32:25:DD:21:A9:25:AC:61:C5:4E:21\n                    Timestamp : Jan 19 00:04:31.276 2026 GMT\n                    Extensions: none\n                    Signature : ecdsa-with-SHA256\n                                30:45:02:20:19:47:12:58:F2:D7:9C:08:A5:0D:C0:5B:\n                                F0:E7:DF:73:0F:64:77:B2:39:39:A4:3C:A1:D3:F0:39:\n                                4E:7B:0D:91:02:21:00:87:BA:CE:E6:6E:F6:D3:52:D2:\n                                BC:C4:ED:BE:26:6F:DE:BC:B7:17:5F:B6:47:4A:82:75:\n                                A9:95:56:A0:68:FD:1F\n                Signed Certificate Timestamp:\n                    Version   : v1 (0x0)\n                    Log ID    : E3:23:8D:F2:8D:A2:88:E0:AA:E0:AC:F0:FA:90:C9:85:\n                                F0:B6:BF:F5:D2:A5:27:B0:01:FC:1C:44:58:C4:B6:E8\n                    Timestamp : Jan 19 00:04:31.523 2026 GMT\n                    Extensions: 00:00:05:00:2F:CD:F8:E5\n                    Signature : ecdsa-with-SHA256\n                                30:46:02:21:00:CD:4B:99:89:27:23:A9:B5:4E:68:D9:\n                                A0:59:63:45:F5:8F:6A:5C:1F:C2:39:24:AF:60:E4:25:\n                                FF:E6:53:08:4E:02:21:00:DE:9F:73:AB:35:BC:7D:5D:\n                                E7:7A:CB:DE:A7:25:FE:2E:09:A3:2A:33:6E:3B:E4:4E:\n                                D7:AD:67:B9:02:E5:36:B8\n    Signature Algorithm: ecdsa-with-SHA384\n    Signature Value:\n        30:64:02:30:09:90:c5:7b:2d:7c:21:7e:7a:21:77:3a:2d:8e:\n        cd:a1:4d:d1:5e:08:2f:8c:e7:b9:ad:19:39:33:d7:67:41:76:\n        68:39:26:f5:cf:8e:4d:42:5e:cf:45:69:e2:8a:18:ef:02:30:\n        2b:7f:6c:90:27:d1:e5:b1:dd:a2:2a:cb:20:d4:8c:27:0c:7c:\n        6d:9b:06:c8:52:bd:23:d6:aa:83:61:f5:13:fd:77:55:e9:ab:\n        29:e2:bd:82:84:4d:4f:81:4b:3b:76:8a
\n
\n
\n
\n
\u6709\u52b9\u671f\u9650\u306e\u6642\u9593\u3092\u78ba\u8a8d
\n
\n
$ echo $(( $( date +%s --date 'Jan 25 15:06:00 2026 GMT' ) - $( date +%s --date='Jan 18 23:06:01 2026 GMT' ) )) (1)\n575999\n$ echo $((160*60*60)) (2)\n576000
\n
\n
\n
\n
    \n
  1. \n

    notBefore \u3068 notAfter \u306e\u9593\u306e\u79d2\u6570\u3092\u78ba\u8a8d

    \n
  2. \n
  3. \n

    160\u6642\u9593\u3092\u79d2\u6570\u306b\u5909\u63db

    \n
  4. \n
\n
\n
\n
\u74b0\u5883
\n
\n
$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ dpkg-query -W python3-dev python3-venv libaugeas-dev gcc\ngcc     4:14.2.0-1\nlibaugeas-dev:amd64     1.14.1-1+b3\npython3-dev     3.13.5-1\npython3-venv    3.13.5-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u7121\u6599\u3067\u8a3c\u660e\u66f8\u3092\u767a\u884c\u3067\u304d\u308bLet’s Encrypt \u3067\u77ed\u671f\u8a3c\u660e\u66f8\u3068 IP \u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u306e\u4e00\u822c\u63d0\u4f9b\u304c\u958b\u59cb\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nShort-lived and IP address certificates are now generally available from Let\u2019s Encrypt. These certificates are valid for 160 hours, just over six days. In order to get a short-lived certificate subscribers simply need to select the \u2018shortlived\u2019 certificate profile in their ACME client.\n\n\n\n— 6-day and IP Address Certificates are Generally Available – Let's Encrypt\n\n\n\n\u8208\u5473\u304c\u3042\u308b\u306e\u3067\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\ncertbot \u30b3\u30de\u30f3\u30c9\u3067\u8a66\u305d\u3046\u3068\u601d\u3063\u305f\u306e\u3067\u3059\u304c\uff0cDebian package\u7248\u306ecertbot \u306funstable \u3067\u30824.0.0 \u3067\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\uff0e\n\n\n\n$ certbot --ip-address\nusage:\n certbot [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...\n\nCertbot can obtain and install HTTPS/TLS/SSL certificates. By default,\nit will attempt to use a webserver both for obtaining and installing the\ncertificate.\ncertbot: error: unrecognized arguments: --ip-address\n$ certbot --version\ncertbot 4.0.0\n$ rmadison certbot\ncertbot | 1.12.0-2 | oldoldstable | all\ncertbot | 2.1.0-4 | oldstable | all\ncertbot | 4.0.0-2 | stable | all\ncertbot | 4.0.0-2 | testing | all\ncertbot | 4.0.0-2 | unstable | all\n\n\n\n2\u65e5\u524d\u306e 58724f6 \u3067Commit \u3055\u308c\u3066\u3044\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n\nAdd CLI flag –ip-address (#10495) \u00b7 certbot/certbot@58724f6\n\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067Developer Guide \u3092\u898b\u306a\u304c\u3089source \u304b\u3089\u5c0e\u5165\u3057\u3066\u8a66\u3057\u307e\u3057\u305f\uff0e\n\n\n\n\nDeveloper Guide \u2014 Certbot 5.2.2 documentation\n\n\n\n\ncertbot \u3092source \u304b\u3089build\n\n$ sudo apt install python3-dev python3-venv libaugeas-dev gcc (1)\n$ git clone https://github.com/certbot/certbot (2)\n$ cd certbot\n$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ python3 tools/venv.py (3)\n$ source venv/bin/activate (4)\n$ which certbot\n/home/matoken/src/certbot/venv/bin/certbot\n$ certbot --version\ncertbot 5.3.0.dev0\n\n\n\n\n\n\u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u5c0e\u5165\n\n\nsource \u5165\u624b\n\n\nbuild\n\n\ncertbot\u74b0\u5883\u306b\u5165\u308b\n\n\n\n\n\u4eca\u56de\u4f7f\u3046\u30aa\u30d7\u30b7\u30e7\u30f3\u306ehelp\n\n$ certbot help all | grep -A2 -- --ip-address\n --ip-address IP_ADDRESSES\n IP addresses to include. For multiple IP addresses you\n can use multiple --ip-address flags. All IP addresses\n will be included as Subject Alternative Names on the\n certificate. (default: [])\n$ certbot help all | grep -A8 -- --preferred-profile\n --preferred-profile PREFERRED_PROFILE\n Request the given profile name from the ACME server,\n or fallback to default. If the given profile name\n exists in the ACME directory, use it to request a a\n certificate. Otherwise, fall back to requesting a\n certificate without a profile (which means the CA will\n use its default profile). This allows renewals to\n succeed even if the CA deprecates and removes a given\n profile. (default: None)\n\n\n\nIP\u30a2\u30c9\u30ec\u30b9\u8a3c\u660e\u66f8\u3092\u53d6\u5f97\n\n$ sudo bash -c \"source venv/bin/activate && certbot certonly --ip-address 84.247.152.162 --preferred-profile shortlived\"\n\n\n\n\u51fa\u6765\u4e0a\u304c\u3063\u305f\u8a3c\u660e\u66f8\u3092\u78ba\u8a8d\n\n$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -issuer -subject -dates\nissuer=C=US, O=Let's Encrypt, CN=YE2\nsubject=\nnotBefore=Jan 18 23:06:01 2026 GMT\nnotAfter=Jan 25 15:06:00 2026 GMT\n$ sudo cat /etc/letsencrypt/live/84.247.152.162/cert.pem | openssl x509 -noout -text\nCertificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 06:e7:4e:65:fe:41:f7:9b:9e:38:12:12:64:13:85:b4:f3:dd\n Signature Algorithm: ecdsa-with-SHA384\n Issuer: C=US, O=Let's Encrypt, CN=YE2\n Validity\n Not Before: Jan 18 23:06:01 2026 GMT\n Not After : Jan 25 15:06:00 2026 GMT\n Subject:\n Subject Public Key Info:\n Public Key Algorithm: id-ecPublicKey\n Public-Key: (256 bit)\n pub:\n 04:d9:d9:68:d2:fe:7b:09:0d:c4:97:1e:fc:e4:1e:\n 65:50:90:cc:63:ec:6a:98:a3:5c:77:b6:d0:33:f5:\n 4d:8f:ec:38:d5:e8:1d:01:75:fb:d6:93:15:b9:f3:\n f8:7e:a4:a9:7b:bf:d7:4d:a3:5e:d0:ca:8f:74:e5:\n 7a:98:bc:8e:9e\n ASN1 OID: prime256v1\n NIST CURVE: P-256\n X509v3 extensions:\n X509v3 Key Usage: critical\n Digital Signature\n X509v3 Extended Key Usage:\n TLS Web Server Authentication\n X509v3 Basic Constraints: critical\n CA:FALSE\n X509v3 Authority Key Identifier:\n B9:59:F2:8E:CF:22:F0:86:D3:37:48:FF:76:14:18:BA:82:D8:55:87\n Authority Information Access:\n CA Issuers - URI:http://ye2.i.lencr.org/\n X509v3 Subject Alternative Name: critical\n IP Address:84.247.152.162\n X509v3 Certificate Policies:\n Policy: 2.23.140.1.2.1\n X509v3 CRL Distribution Points:\n Full Name:\n URI:http://ye2.c.lencr.org/94.crl\n\n CT Precertificate SCTs:\n Signed Certificate Timestamp:\n Version : v1 (0x0)\n Log ID : 0E:57:94:BC:F3:AE:A9:3E:33:1B:2C:99:07:B3:F7:90:\n DF:9B:C2:3D:71:32:25:DD:21:A9:25:AC:61:C5:4E:21\n Timestamp : Jan 19 00:04:31.276 2026 GMT\n Extensions: none\n Signature : ecdsa-with-SHA256\n 30:45:02:20:19:47:12:58:F2:D7:9C:08:A5:0D:C0:5B:\n F0:E7:DF:73:0F:64:77:B2:39:39:A4:3C:A1:D3:F0:39:\n 4E:7B:0D:91:02:21:00:87:BA:CE:E6:6E:F6:D3:52:D2:\n BC:C4:ED:BE:26:6F:DE:BC:B7:17:5F:B6:47:4A:82:75:\n A9:95:56:A0:68:FD:1F\n Signed Certificate Timestamp:\n Version : v1 (0x0)\n Log ID : E3:23:8D:F2:8D:A2:88:E0:AA:E0:AC:F0:FA:90:C9:85:\n F0:B6:BF:F5:D2:A5:27:B0:01:FC:1C:44:58:C4:B6:E8\n Timestamp : Jan 19 00:04:31.523 2026 GMT\n Extensions: 00:00:05:00:2F:CD:F8:E5\n Signature : ecdsa-with-SHA256\n 30:46:02:21:00:CD:4B:99:89:27:23:A9:B5:4E:68:D9:\n A0:59:63:45:F5:8F:6A:5C:1F:C2:39:24:AF:60:E4:25:\n FF:E6:53:08:4E:02:21:00:DE:9F:73:AB:35:BC:7D:5D:\n E7:7A:CB:DE:A7:25:FE:2E:09:A3:2A:33:6E:3B:E4:4E:\n D7:AD:67:B9:02:E5:36:B8\n Signature Algorithm: ecdsa-with-SHA384\n Signature Value:\n 30:64:02:30:09:90:c5:7b:2d:7c:21:7e:7a:21:77:3a:2d:8e:\n cd:a1:4d:d1:5e:08:2f:8c:e7:b9:ad:19:39:33:d7:67:41:76:\n 68:39:26:f5:cf:8e:4d:42:5e:cf:45:69:e2:8a:18:ef:02:30:\n 2b:7f:6c:90:27:d1:e5:b1:dd:a2:2a:cb:20:d4:8c:27:0c:7c:\n 6d:9b:06:c8:52:bd:23:d6:aa:83:61:f5:13:fd:77:55:e9:ab:\n 29:e2:bd:82:84:4d:4f:81:4b:3b:76:8a\n\n\n\n\u6709\u52b9\u671f\u9650\u306e\u6642\u9593\u3092\u78ba\u8a8d\n\n$ echo $(( $( date +%s --date 'Jan 25 15:06:00 2026 GMT' ) - $( date +%s --date='Jan 18 23:06:01 2026 GMT' ) )) (1)\n575999\n$ echo $((160*60*60)) (2)\n576000\n\n\n\n\n\nnotBefore \u3068 notAfter \u306e\u9593\u306e\u79d2\u6570\u3092\u78ba\u8a8d\n\n\n160\u6642\u9593\u3092\u79d2\u6570\u306b\u5909\u63db\n\n\n\n\n\u74b0\u5883\n\n$ git log --pretty=oneline -1\n58724f68ec46c57dd3c3c8ed4ae686c2d7ad893b (HEAD -> 58724f6) Add CLI flag --ip-address (#10495)\n$ dpkg-query -W python3-dev python3-venv libaugeas-dev gcc\ngcc 4:14.2.0-1\nlibaugeas-dev:amd64 1.14.1-1+b3\npython3-dev 3.13.5-1\npython3-venv 3.13.5-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux 13 (trixie)\nRelease: 13\n$ arch\nx86_64", "date_published": "2026-01-19T19:36:54+09:00", "date_modified": "2026-01-19T19:36:56+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "certbot", "certificates", "LetsEncrypt", "Debian", "Linux", "trixie" ] }, { "id": "https://matoken.org/blog/?p=5140", "url": "https://matoken.org/blog/2026/01/12/snac-2-86-2-87/", "title": "\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u306a\u3069\u304c\u8ffd\u52a0\u3055\u308c\u305fsnac 2.86, 2.87", "content_html": "
\n
\n
\n

\"snac

\n
\n
\n

\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.86, 2.87 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n\n

\n

\n
\n
\n

RELEASE NOTES

\n
\n
\n

RELEASE_NOTES.md \u3092\u898b\u308b\u3068\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e

\n
\n
\n
\n
\n

2.87

\n
\n
\n

Hide EmojiReacts from muted actors and blocked instances.

\n
\n
\n

2.86

\n
\n
\n

Truncate RSS titles at UTF-8 character boundaries (contributed by lxo).

\n
\n
\n

Link contacts to single-user people pages. Also, user’s posts are shown (contributed by lxo).

\n
\n
\n

Added emoji reactions (contributed by violette).

\n
\n
\n

Mastodon API: Fix for some client notifications (contributed by violette), fix for a status visibility error (contributed by fruye).

\n
\n
\n

If the query variable terse of a public post page is set to anything, no header is shown.

\n
\n
\n

Fixed search failures when the query string has any leading blank.

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

\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3

\n
\n
\n

\u8208\u5473\u6df1\u3044\u65b0\u6a5f\u80fd\u3068\u3057\u3066\u306f\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5bfe\u5fdc\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u306b\u3088\u308aMastodon \u3084Misskey \u306a\u3069\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3068\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u3084\u308a\u53d6\u308a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n

\u4ee5\u4e0b\u306fsnac \u3068Misskey \u3067\u305d\u308c\u305e\u308c\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u884c\u3063\u305f\u3068\u304d\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u3059\uff0esnac \u304b\u3089\u306e\u9001\u4fe1\u6642\u306f\u7d75\u6587\u5b57\u306e\u6587\u5b57\u5217\u3092\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e

\n
\n
\n

\"snac\u304b\u3089\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u9001\u4fe1\"
\n\"Misskey\u3078\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u9001\u4fe1\"
\n\"\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u53d7\u4fe1\"

\n
\n
\n

\u4ee5\u4e0b\u306f\u5b9f\u969b\u306e\u6295\u7a3f\uff0e

\n
\n\n
\n

\u3069\u3046\u3082\u3053\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u305f\u5acc\u304c\u3089\u305b\u304c\u767a\u751f\u3057\u305f\u3088\u3046\u3067\u305d\u308c\u306e\u5bfe\u7b56\u3068\u3057\u3066\u30df\u30e5\u30fc\u30c8\u3057\u305f\u30a2\u30af\u30bf\u30fc\u3068\u30d6\u30ed\u30c3\u30af\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u6a5f\u80fd\u304c 2.87 \u3068\u3057\u3066\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n

\u3082\u3057\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u4f7f\u3044\u305f\u304f\u306a\u3044\u5834\u5408\u306f 2.86, 2.87 \u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3067\u7121\u52b9\u306b\u3067\u304d\u308b\u5909\u66f4\u3092\u542b\u3093\u3060\u30ea\u30ea\u30fc\u30b9\u3092\u5f85\u3064\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n\n
\n

\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u767b\u9332\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e

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

RRS \u30bf\u30a4\u30c8\u30eb\u3092UTF-8 \u306e\u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b

\n
\n
\n

RSS \u306etitle \u3092UTF-8 \u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\u306e\u306f\u65e5\u672c\u8a9e\u3067\u6587\u5b57\u5316\u3051\u3059\u308b\u3053\u3068\u304c\u7121\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u4ee5\u4e0b\u3088\u3046\u306b\u3057\u3066\u78ba\u8a8d\u3067\u304d\u305d\u3046\u3067\u3059\u304c\u4fee\u6b63\u524d\u306e2.85 \u3067\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u4e01\u5ea6\u554f\u984c\u306e\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3060\u3063\u305f\u3088\u3046\u3067\u3053\u306e\u3068\u304d\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n
\n
$ curl -s https://snac.kagolug.org/matoken.rss | nkf | xmllint --format - | grep title | head
\n
\n
\n\n
\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9

\n
\n
\n

\u7279\u306b\u554f\u984c\u306a\u304f\u3044\u3064\u3082\u306e\u624b\u9806\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(source)

\n
\n
\n
$ cd $SNAC-SRC\n$ git pull\n$ git checkout 2.87\nPrevious HEAD position was b84b92d Version 2.86 RELEASED.\nHEAD is now at c2b050c Version 2.87 RELEASED.\n$ make\n$ ./snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u snac tar cvf snac2-`date +%F_%T-$$`.tar ~snac/snac-data\n$ sudo -u snac /home/snac/snac2/snac upgrade ~snac/snac-data\n05:52:38 OK\n$ sudo service snac2 start
\n
\n
\n
\n
\n

snac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(Debian package)

\n
\n
\n
$ snac | head -2\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n$ sudo apt update\n$ sudo apt upgrade\n$ snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u debian-snac tar cvf snac2-`date +%F_%T-$$`.tar /var/lib/snac2\n$ sudo -u debian-snac snac upgrade /var/lib/snac2\n18:56:22 Linux sandbox not compiled in\n18:56:22 OK\n$ sudo service snac2 start
\n
\n
\n
\n
\n
\n", "content_text": "\u30df\u30cb\u30de\u30e0\u3067\u8efd\u91cf\u306aActivityPub Server \u306esnac 2.86, 2.87 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n\nThe Real Grunfink (@grunfink\\@comam.es) 2.86\n\n\nThe Real Grunfink (@grunfink\\@comam.es) 2.87\n\n\nsnac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\n\nRELEASE NOTES\n\n\nRELEASE_NOTES.md \u3092\u898b\u308b\u3068\u4e3b\u306a\u5909\u66f4\u70b9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\uff0e\n\n\n\n\n2.87\n\n\nHide EmojiReacts from muted actors and blocked instances.\n\n\n2.86\n\n\nTruncate RSS titles at UTF-8 character boundaries (contributed by lxo).\n\n\nLink contacts to single-user people pages. Also, user’s posts are shown (contributed by lxo).\n\n\nAdded emoji reactions (contributed by violette).\n\n\nMastodon API: Fix for some client notifications (contributed by violette), fix for a status visibility error (contributed by fruye).\n\n\nIf the query variable terse of a public post page is set to anything, no header is shown.\n\n\nFixed search failures when the query string has any leading blank.\n\n\n\n— snac2/RELEASE_NOTES.md at master – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\n\n\n\u8208\u5473\u6df1\u3044\u65b0\u6a5f\u80fd\u3068\u3057\u3066\u306f\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5bfe\u5fdc\u304c\u3042\u308a\u307e\u3059\uff0e\u3053\u308c\u306b\u3088\u308aMastodon \u3084Misskey \u306a\u3069\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u3068\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u3084\u308a\u53d6\u308a\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\u4ee5\u4e0b\u306fsnac \u3068Misskey \u3067\u305d\u308c\u305e\u308c\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u884c\u3063\u305f\u3068\u304d\u306e\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3067\u3059\uff0esnac \u304b\u3089\u306e\u9001\u4fe1\u6642\u306f\u7d75\u6587\u5b57\u306e\u6587\u5b57\u5217\u3092\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\n\u4ee5\u4e0b\u306f\u5b9f\u969b\u306e\u6295\u7a3f\uff0e\n\n\n\n\nmatoken (@matoken\\@snac.matoken.org)\n\n\n\u30ce\u30fc\u30c8 | Misskey.io\n\n\n\n\n\u3069\u3046\u3082\u3053\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u305f\u5acc\u304c\u3089\u305b\u304c\u767a\u751f\u3057\u305f\u3088\u3046\u3067\u305d\u308c\u306e\u5bfe\u7b56\u3068\u3057\u3066\u30df\u30e5\u30fc\u30c8\u3057\u305f\u30a2\u30af\u30bf\u30fc\u3068\u30d6\u30ed\u30c3\u30af\u3057\u305f\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304b\u3089\u306e\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u975e\u8868\u793a\u306b\u3059\u308b\u6a5f\u80fd\u304c 2.87 \u3068\u3057\u3066\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\u3082\u3057\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u4f7f\u3044\u305f\u304f\u306a\u3044\u5834\u5408\u306f 2.86, 2.87 \u3092\u30b9\u30ad\u30c3\u30d7\u3057\u3066\u7d75\u6587\u5b57\u30ea\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3067\u7121\u52b9\u306b\u3067\u304d\u308b\u5909\u66f4\u3092\u542b\u3093\u3060\u30ea\u30ea\u30fc\u30b9\u3092\u5f85\u3064\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\n\n\n#516 – FR: add a toggle to users’ settings to hide emoji reactions (and the ability to emoji react)? – grunfink/snac2 – Codeberg.org\n\n\n\n\n\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u306e\u767b\u9332\u306b\u3064\u3044\u3066\u306f\u4ee5\u4e0b\u306e\u8a18\u4e8b\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff0e\n\n\n\n\nsnac \u3067\u30ab\u30b9\u30bf\u30e0\u7d75\u6587\u5b57\u3092\u5229\u7528 \u2013 matoken’s blog\n\n\n\n\n\n\nRRS \u30bf\u30a4\u30c8\u30eb\u3092UTF-8 \u306e\u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\n\n\nRSS \u306etitle \u3092UTF-8 \u5883\u754c\u3067\u5207\u308a\u6368\u3066\u308b\u306e\u306f\u65e5\u672c\u8a9e\u3067\u6587\u5b57\u5316\u3051\u3059\u308b\u3053\u3068\u304c\u7121\u304f\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u4ee5\u4e0b\u3088\u3046\u306b\u3057\u3066\u78ba\u8a8d\u3067\u304d\u305d\u3046\u3067\u3059\u304c\u4fee\u6b63\u524d\u306e2.85 \u3067\u78ba\u8a8d\u3057\u305f\u3068\u3053\u308d\u4e01\u5ea6\u554f\u984c\u306e\u306a\u3044\u30bf\u30a4\u30df\u30f3\u30b0\u3060\u3063\u305f\u3088\u3046\u3067\u3053\u306e\u3068\u304d\u306f\u554f\u984c\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\n\n$ curl -s https://snac.kagolug.org/matoken.rss | nkf | xmllint --format - | grep title | head\n\n\n\n\n\n#514 – rss.c (rss_from_timeliine) cuts multi-byte characters from item titles – grunfink/snac2 – Codeberg.org\n\n\n\n\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\n\n\n\u7279\u306b\u554f\u984c\u306a\u304f\u3044\u3064\u3082\u306e\u624b\u9806\u3067\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(source)\n\n\n$ cd $SNAC-SRC\n$ git pull\n$ git checkout 2.87\nPrevious HEAD position was b84b92d Version 2.86 RELEASED.\nHEAD is now at c2b050c Version 2.87 RELEASED.\n$ make\n$ ./snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u snac tar cvf snac2-`date +%F_%T-$$`.tar ~snac/snac-data\n$ sudo -u snac /home/snac/snac2/snac upgrade ~snac/snac-data\n05:52:38 OK\n$ sudo service snac2 start\n\n\n\n\nsnac \u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f8b(Debian package)\n\n\n$ snac | head -2\nsnac 2.85 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2025 grunfink et al. / MIT license\n$ sudo apt update\n$ sudo apt upgrade\n$ snac | head -2\nsnac 2.87 - A simple, minimalistic ActivityPub instance\nCopyright (c) 2022 - 2026 grunfink et al. / MIT license\n$ sudo service snac2 stop\n$ sudo -u debian-snac tar cvf snac2-`date +%F_%T-$$`.tar /var/lib/snac2\n$ sudo -u debian-snac snac upgrade /var/lib/snac2\n18:56:22 Linux sandbox not compiled in\n18:56:22 OK\n$ sudo service snac2 start", "date_published": "2026-01-12T19:42:13+09:00", "date_modified": "2026-01-12T19:43:05+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "bookworm", "Debian", "Linux" ] }, { "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/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?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/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?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=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/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?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/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "japanese", "kitty", "Debian", "Linux", "trixie" ] }, { "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/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?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/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?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/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?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": "2026-02-19T05:24:17+09:00", "authors": [ { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" } ], "author": { "name": "matoken", "url": "https://matoken.org/blog/author/matoken/", "avatar": "https://secure.gravatar.com/avatar/38f5f3b575c5eb45cda6aa659bca119ac7a5e16b46565e869d0030e3bd66981d?s=512&d=mm&r=g" }, "tags": [ "ActivityPub", "snac", "theme", "Debian", "Linux", "trixie" ] } ] }