{ "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/tag/include/feed/json/ -- and add it your reader.", "home_page_url": "https://matoken.org/blog/tag/include/", "feed_url": "https://matoken.org/blog/tag/include/feed/json/", "language": "ja", "title": "include – 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=4080", "url": "https://matoken.org/blog/2024/08/12/m-is-displayed-only-in-git-diff-differences/", "title": "git diff \u306e \u5dee\u5206\u306b\u3060\u3051 ^M \u304c\u8868\u793a\u3055\u308c\u308b", "content_html": "
\n

git diff \u3067\u5909\u7a2e\u7b87\u6240\u3060\u3051 ^M \u304c\u4ed8\u3044\u3066\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e
\n\u7de8\u96c6\u30df\u30b9\u3066\u6539\u884c\u30b3\u30fc\u30c9\u3092\u9593\u9055\u3048\u305f\u304b\u3068\u601d\u3063\u305f\u3051\u3069\u5143\u3005 \\r\\n \u306a\u30d5\u30a1\u30a4\u30eb\u3067\u7de8\u96c6\u7b87\u6240\u4ee5\u5916\u3082\u540c\u3058 \\r\\n \u3067\u3059\uff0e
\n\u3067\u3082\u975e\u7de8\u96c6\u7b87\u6240\u306f ^M \u304c\u51fa\u307e\u305b\u3093\uff0e

\n
\n


\n

\n
\n
git diff
\n
\n
$ git diff -p\ndiff --git a/src/onnxstream.cpp b/src/onnxstream.cpp\nindex 5ace952..bbc62f6 100644\n--- a/src/onnxstream.cpp\n+++ b/src/onnxstream.cpp\n@@ -503,7 +503,7 @@ public:\n             throw std::runtime_error(\"failed to initialize XNNPACK\");\n     }\n\n-    ~XnnPack()\n+    ~XnnPack() noexcept(false)^M (1)\n     {\n         for (auto& entry : m_ops_cache)\n         {\ndiff --git a/src/onnxstream.h b/src/onnxstream.h\nindex 6746f61..9c2755a 100644\n--- a/src/onnxstream.h\n+++ b/src/onnxstream.h\n@@ -1,5 +1,6 @@                                                                          e           '\n #pragma once\n\n+#include <algorithm>^M (2)\n #include <limits>\n #include <vector>\n #include <functional>
\n
\n
\n
\n
    \n
  1. \n

    \u3053\u3053\u3068

    \n
  2. \n
  3. \n

    \u3053\u3053\u306e\u7de8\u96c6\u5dee\u5206\u306b ^M

    \n
  4. \n
\n
\n
\n
od \u3067\u898b\u308b\u3068\u7de8\u96c6\u7b87\u6240\u3082\u305d\u308c\u4ee5\u5916\u3082 \\r\\n \u306b\u306a\u3063\u3066\u3044\u308b
\n
\n
$ head -4 ../../src/onnxstream.h | od -xc\n0000000    7023    6172    6d67    2061    6e6f    6563    0a0d    0a0d\n          #   p   r   a   g   m   a       o   n   c   e  \\r  \\n  \\r  \\n\n0000020    6923    636e    756c    6564    3c20    6c61    6f67    6972\n          #   i   n   c   l   u   d   e       <   a   l   g   o   r   i\n0000040    6874    3e6d    0a0d    6923    636e    756c    6564    3c20\n          t   h   m   >  \\r  \\n   #   i   n   c   l   u   d   e       <\n0000060    696c    696d    7374    0d3e    000a\n          l   i   m   i   t   s   >  \\r  \\n\n0000071
\n
\n
\n
\n

\u3068\u3044\u3046\u3053\u3068\u3067\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u306f\u554f\u984c\u7121\u3055\u305d\u3046\u3067\u3059\u304c\uff0c git diff \u306e\u8868\u793a\u4e0a\u306e\u554f\u984c\u306e\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n

\u691c\u7d22\u3057\u3066\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff0e

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

\u3044\u308d\u3044\u308d\u306a\u65b9\u6cd5\u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\u304c\uff0c\u3061\u3087\u3063\u3068\u8a66\u3057\u305f\u3044\u30ea\u30dd\u30b8\u30c8\u30ea\u306a\u306e\u3067\u6539\u884c\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u306e\u3067\u306f\u306a\u304f \\M \u306e\u8868\u793a\u3092\u6291\u5236\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3067\u3059\uff0e

\n
\n
\n

\u4e00\u756a\u304a\u624b\u8efd\u305d\u3046\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u3044\u304f\u3064\u304b\u8a66\u3057\u307e\u3057\u305f\u304c\u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3059\u3079\u3066\u5909\u5316\u304c\u898b\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n
git diff \u306e\u30aa\u30d7\u30b7\u30e7\u30f3
\n
\n
$ git diff -b\n$ git diff --ignore-cr-at-eol\n$ git diff --ignore-space-change\n$ git diff --ignore-all-space
\n
\n
\n
\n

git-config \u306b whitespace = cr-at-eol \u3092\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e CR/LF \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3042\u307e\u308a\u4f7f\u3046\u3053\u3068\u306f\u306a\u3044\u306e\u3067 --local \u306b\u8a2d\u5b9a\u3057\u3066\u304a\u304d\u307e\u3059\uff0e

\n
\n
\n
\n
$ git config --local core.whitespace cr-at-eol\n$ grep cr-at-eol .git/config\n        whitespace = cr-at-eol
\n
\n
\n
\n

\u3053\u306e\u8a2d\u5b9a\u3092\u3059\u308b\u3053\u3068\u3067 ^M \u304c\u8868\u793a\u3055\u308c\u306a\u304f\u306a\u308a\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ git diff\ndiff --git a/src/onnxstream.cpp b/src/onnxstream.cpp\nindex 5ace952..bbc62f6 100644\n--- a/src/onnxstream.cpp\n+++ b/src/onnxstream.cpp\n@@ -503,7 +503,7 @@ public:\n             throw std::runtime_error(\"failed to initialize XNNPACK\");\n     }\n\n-    ~XnnPack()\n+    ~XnnPack() noexcept(false)\n     {\n         for (auto& entry : m_ops_cache)\n         {\ndiff --git a/src/onnxstream.h b/src/onnxstream.h\nindex 6746f61..9c2755a 100644\n--- a/src/onnxstream.h\n+++ b/src/onnxstream.h\n@@ -1,5 +1,6 @@\n #pragma once\n\n+#include <algorithm>\n #include <limits>\n #include <vector>\n #include <functional>
\n
\n
\n
\n
\u74b0\u5883
\n
\n
$ git --version\ngit version 2.45.2\n$ dpkg-query -W git\ngit     1:2.45.2-1\n$ lsb_release -dr\nDescription:    Debian GNU/Linux trixie/sid\nRelease:        n/a\n$ arch\nx86_64
\n
\n
\n", "content_text": "git diff \u3067\u5909\u7a2e\u7b87\u6240\u3060\u3051 ^M \u304c\u4ed8\u3044\u3066\u308b\u306e\u306b\u6c17\u3065\u304d\u307e\u3057\u305f\uff0e\n\u7de8\u96c6\u30df\u30b9\u3066\u6539\u884c\u30b3\u30fc\u30c9\u3092\u9593\u9055\u3048\u305f\u304b\u3068\u601d\u3063\u305f\u3051\u3069\u5143\u3005 \\r\\n \u306a\u30d5\u30a1\u30a4\u30eb\u3067\u7de8\u96c6\u7b87\u6240\u4ee5\u5916\u3082\u540c\u3058 \\r\\n \u3067\u3059\uff0e\n\u3067\u3082\u975e\u7de8\u96c6\u7b87\u6240\u306f ^M \u304c\u51fa\u307e\u305b\u3093\uff0e\n\n\n\n\ngit diff\n\n$ git diff -p\ndiff --git a/src/onnxstream.cpp b/src/onnxstream.cpp\nindex 5ace952..bbc62f6 100644\n--- a/src/onnxstream.cpp\n+++ b/src/onnxstream.cpp\n@@ -503,7 +503,7 @@ public:\n throw std::runtime_error(\"failed to initialize XNNPACK\");\n }\n\n- ~XnnPack()\n+ ~XnnPack() noexcept(false)^M (1)\n {\n for (auto& entry : m_ops_cache)\n {\ndiff --git a/src/onnxstream.h b/src/onnxstream.h\nindex 6746f61..9c2755a 100644\n--- a/src/onnxstream.h\n+++ b/src/onnxstream.h\n@@ -1,5 +1,6 @@ e '\n #pragma once\n\n+#include <algorithm>^M (2)\n #include <limits>\n #include <vector>\n #include <functional>\n\n\n\n\n\n\u3053\u3053\u3068\n\n\n\u3053\u3053\u306e\u7de8\u96c6\u5dee\u5206\u306b ^M\n\n\n\n\nod \u3067\u898b\u308b\u3068\u7de8\u96c6\u7b87\u6240\u3082\u305d\u308c\u4ee5\u5916\u3082 \\r\\n \u306b\u306a\u3063\u3066\u3044\u308b\n\n$ head -4 ../../src/onnxstream.h | od -xc\n0000000 7023 6172 6d67 2061 6e6f 6563 0a0d 0a0d\n # p r a g m a o n c e \\r \\n \\r \\n\n0000020 6923 636e 756c 6564 3c20 6c61 6f67 6972\n # i n c l u d e < a l g o r i\n0000040 6874 3e6d 0a0d 6923 636e 756c 6564 3c20\n t h m > \\r \\n # i n c l u d e <\n0000060 696c 696d 7374 0d3e 000a\n l i m i t s > \\r \\n\n0000071\n\n\n\n\u3068\u3044\u3046\u3053\u3068\u3067\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u306f\u554f\u984c\u7121\u3055\u305d\u3046\u3067\u3059\u304c\uff0c git diff \u306e\u8868\u793a\u4e0a\u306e\u554f\u984c\u306e\u3088\u3046\u3067\u3059\uff0e\n\n\n\u691c\u7d22\u3057\u3066\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff0e\n\n\n\n\nnewline – Make ‘git diff’ ignore ^M – Stack Overflow\n\n\n\n\n\u3044\u308d\u3044\u308d\u306a\u65b9\u6cd5\u304c\u66f8\u304b\u308c\u3066\u3044\u307e\u3059\u304c\uff0c\u3061\u3087\u3063\u3068\u8a66\u3057\u305f\u3044\u30ea\u30dd\u30b8\u30c8\u30ea\u306a\u306e\u3067\u6539\u884c\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u306e\u3067\u306f\u306a\u304f \\M \u306e\u8868\u793a\u3092\u6291\u5236\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3067\u3059\uff0e\n\n\n\u4e00\u756a\u304a\u624b\u8efd\u305d\u3046\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u3044\u304f\u3064\u304b\u8a66\u3057\u307e\u3057\u305f\u304c\u4ee5\u4e0b\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u3059\u3079\u3066\u5909\u5316\u304c\u898b\u3089\u308c\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\ngit diff \u306e\u30aa\u30d7\u30b7\u30e7\u30f3\n\n$ git diff -b\n$ git diff --ignore-cr-at-eol\n$ git diff --ignore-space-change\n$ git diff --ignore-all-space\n\n\n\ngit-config \u306b whitespace = cr-at-eol \u3092\u8a2d\u5b9a\u3057\u3066\u307f\u307e\u3059\uff0e CR/LF \u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3042\u307e\u308a\u4f7f\u3046\u3053\u3068\u306f\u306a\u3044\u306e\u3067 --local \u306b\u8a2d\u5b9a\u3057\u3066\u304a\u304d\u307e\u3059\uff0e\n\n\n\n$ git config --local core.whitespace cr-at-eol\n$ grep cr-at-eol .git/config\n whitespace = cr-at-eol\n\n\n\n\u3053\u306e\u8a2d\u5b9a\u3092\u3059\u308b\u3053\u3068\u3067 ^M \u304c\u8868\u793a\u3055\u308c\u306a\u304f\u306a\u308a\u307e\u3057\u305f\uff0e\n\n\n\n$ git diff\ndiff --git a/src/onnxstream.cpp b/src/onnxstream.cpp\nindex 5ace952..bbc62f6 100644\n--- a/src/onnxstream.cpp\n+++ b/src/onnxstream.cpp\n@@ -503,7 +503,7 @@ public:\n throw std::runtime_error(\"failed to initialize XNNPACK\");\n }\n\n- ~XnnPack()\n+ ~XnnPack() noexcept(false)\n {\n for (auto& entry : m_ops_cache)\n {\ndiff --git a/src/onnxstream.h b/src/onnxstream.h\nindex 6746f61..9c2755a 100644\n--- a/src/onnxstream.h\n+++ b/src/onnxstream.h\n@@ -1,5 +1,6 @@\n #pragma once\n\n+#include <algorithm>\n #include <limits>\n #include <vector>\n #include <functional>\n\n\n\n\u74b0\u5883\n\n$ git --version\ngit version 2.45.2\n$ dpkg-query -W git\ngit 1:2.45.2-1\n$ lsb_release -dr\nDescription: Debian GNU/Linux trixie/sid\nRelease: n/a\n$ arch\nx86_64", "date_published": "2024-08-12T21:43:00+09:00", "date_modified": "2024-08-12T21:43:02+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": [ "git", "git-diff", "include", "pragma", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=4067", "url": "https://matoken.org/blog/2024/08/05/try-the-transcription-tool-galene-stt-using-whister-cpp-for-galene/", "title": "Galene \u7528\u306e Whister.cpp \u3092\u4f7f\u3063\u305f\u6587\u5b57\u8d77\u3053\u3057\u30c4\u30fc\u30eb\u306e galene-stt \u3092\u8a66\u3059", "content_html": "
\n
\n
\n

Gal\u00e8ne \u306b\u63a5\u7d9a\u3057\uff0c Whisper.cpp \u306e Speach To Text \u3067\u6587\u5b57\u8d77\u3053\u3057\u3057\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u30c6\u30ad\u30b9\u30c8\u30c1\u30e3\u30c3\u30c8\u6b04\u306b\u6295\u7a3f\u3059\u308b galene-stt \u3092\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n

\n
\n

\u6700\u8fd1\uff0c\u81ea\u5206\u306e\u30db\u30b9\u30c8\u3059\u308b\u52c9\u5f37\u4f1a\u306a\u3069\u3067\u306f Gal\u00e8ne \u3068\u3044\u3046\u30d3\u30c7\u30aa\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3057\u3066\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e
\n\u3053\u308c\u306f WebRTC \u306e SFU \u3092\u5229\u7528\u3057\u3066\u3044\u308b\u306e\u3067\u30b5\u30fc\u30d0\u30fc\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u3068\u3066\u3082\u5c11\u306a\u304f\u3066\u6e08\u307f\u307e\u3059\uff0eLinux/armv7 \u3084Linux/mips \u306e OpenWRT \u3067\u3082\u52d5\u4f5c\u3057\u3066\u5c11\u4eba\u6570\u3067\u3042\u308c\u3070 Raspberry Pi \u521d\u4ee3\u304f\u3089\u3044\u306e\u30b9\u30da\u30c3\u30af\u3067\u3082\u5341\u5206\u52d5\u4f5c\u3057\u307e\u3059\uff0e
\n\u3088\u304f\u5229\u7528\u3055\u308c\u308b Jitsi meet \u3084 BigBlueButton \u306a\u3069\u306f\u5927\u91cf\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u5fc5\u8981\u306a\u306e\u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3059\u308b\u306e\u306f\u3061\u3087\u3063\u3068\u8f9b\u3044\u3067\u3059\uff0e

\n
\n\n

\n\n
\n\n\n\n\n\n
\n
Note
\n
\nJitsi Meet \u3067\u306f 8×8 \u304c\u30b9\u30dd\u30f3\u30b5\u30fc\u3057\u3066\u3044\u308b https://meet.jit.si/ \u3092\u4f7f\u3063\u305f\u308a\uff0cGoogle Compute Engine \u306a\u3069\u306b\u5c0e\u5165\u3057\u3066\uff0c\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u5b57\u3060\u3051\u8d77\u52d5\u3057\u3066\u8cbb\u7528\u3092\u6291\u3048\u308b\u3068\u3044\u3046\u4f7f\u3044\u65b9\u3092\u3057\u3066\u3044\u308b\u4eba\u3082\u5c45\u307e\u3059\uff0e\n
\n
\n
\n\n\n\n\n\n
\n
Note
\n
\n
\n

\u4eca\u5e74\u306e LibrePlanet \u3067\u306f\u30d3\u30c7\u30aa\u30b5\u30fc\u30d0\u30fc\u306b BigBlueButton \u306b\u4ee3\u308f\u308a Gal\u00e8ne \u304c\u4f7f\u308f\u308c\u305f\u305d\u3046\u3067\u3059\uff0e

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

galene-stt \u306e\u5c0e\u5165

\n
\n
\n

galene-stt \u306f Galene \u306b\u63a5\u7d9a\u3057\u3066\u30aa\u30fc\u30c7\u30a3\u3092 Whisper.cpp \u3092\u4f7f\u3063\u3066\u6587\u5b57\u8d77\u3053\u3057\u3092\u3057\uff0c\u7d50\u679c\u3092 Galene \u306e\u30c6\u30ad\u30b9\u30c8\u30c1\u30e3\u30c3\u30c8\u306b\u6295\u7a3f\u3059\u308b\u3082\u306e\u306e\u3088\u3046\u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u3067\u306f\u5229\u7528\u8005\u304c\u3072\u3068\u308a\u5897\u3048\u308b\u3060\u3051\u306a\u306e\u3067\u3042\u307e\u308a\u8ca0\u8377\u304c\u304b\u304b\u3089\u306a\u3044\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n

Whisper.cpp \u306e\u5c0e\u5165

\n
\n

galene-stt \u306f Whisper.cpp \u3092\u4f7f\u3044\u6587\u5b57\u8d77\u3053\u3057\u3092\u884c\u3046\u306e\u3067\u5148\u305a\u306f Whisper.cpp \u3092\u5c0e\u5165\u3057\u307e\u3059\uff0e

\n
\n
\n
Whisper.cpp \u306e\u5c0e\u5165
\n
\n
$ git clone https://github.com/ggerganov/whisper.cpp\n$ cd whisper.cpp\n$ cmake -Bbuild\n$ cd build\n$ make -j`nproc`\n$ sudo make install\n$ cd ..
\n
\n
\n
\n
\u30e2\u30c7\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9
\n
\n
$ make base (1)\n$ cd ..
\n
\n
\n
\n
    \n
  1. \n

    \u30e2\u30c7\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\uff0e\u3053\u3053\u3067\u306f base \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u308b\uff0e\u30de\u30b7\u30f3\u30b9\u30da\u30c3\u30af\u306a\u3069\u306b\u3088\u308a\u9078\u629e\u3059\u308b\uff0e

    \n
  2. \n
\n
\n
\n
\n

galene-stt \u306e\u30d3\u30eb\u30c9

\n
\n

\u6b21\u306b galene-stt \u3092\u30d3\u30eb\u30c9\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ git clone https://github.com/jech/galene-stt\n$ cd galene-stt\n$ go build
\n
\n
\n
\n

\u3044\u304f\u3064\u304b\u30a8\u30e9\u30fc\u304c\u51fa\u307e\u3057\u305f\uff0e

\n
\n
\n

\u30a8\u30e9\u30fc1\uff0copus \u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4e0d\u8db3\u3057\u3066\u3044\u305f

\n
\n

opus \u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4e0d\u8db3\u3057\u3066\u3044\u305f\u306e\u3067 Debian \u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ go build\n# gopkg.in/hraban/opus.v2\n# [pkg-config --cflags  -- opus opus opus opus opusfile opusfile]\nPackage opusfile was not found in the pkg-config search path.\nPerhaps you should add the directory containing `opusfile.pc'\nto the PKG_CONFIG_PATH environment variable\nPackage 'opusfile', required by 'virtual:world', not found\nPackage 'opusfile', required by 'virtual:world', not found\n$ sudo apt install libopus-dev libopusfile-dev (1)
\n
\n
\n
\n
    \n
  1. \n

    >Debian \u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089\u5c0e\u5165

    \n
  2. \n
\n
\n
\n
\n

\u30a8\u30e9\u30fc2\uff0cWhisper.cpp \u306e\u30d8\u30c3\u30c0\u30fc\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u3089\u306a\u3044

\n
\n

Whisper.cpp \u3092 build \u3057\u305f\u5f8c\u30b7\u30b9\u30c6\u30e0\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\uff0e

\n
\n
\n
\n
$ go build\n# galene-stt\n./whisper.go:13:10: fatal error: whisper.h: No such file or directory\n   13 | #include \"whisper.h\"\n\t  |          ^~~~~~~~~~~\ncompilation terminated.
\n
\n
\n
\n
\n

\u30a8\u30e9\u30fc3\uff0eWhosper \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u898b\u3064\u304b\u3089\u306a\u3044

\n
\n

build \u304c\u7d42\u308f\u3063\u305f\u306e\u3067\u5b9f\u884c\u3059\u308b\u3068 Whisper.cpp \u306e\u5171\u6709\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u898b\u3064\u304b\u3089\u305a\u52d5\u304d\u307e\u305b\u3093\u3067\u3057\u305f\uff0e

\n
\n
\n
\n
$ ./galene-stt https://127.0.0.1:8443/group/test/\n./galene-stt: error while loading shared libraries: libwhisper.so.1: cannot open shared object file: No such file or directory
\n
\n
\n
\n

Whisper.cpp \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f /usr/local/lib \u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u308b\u306e\u3067 LD_LIBRARY_PATH \u3067\u6307\u5b9a\u3057\u3066\u307f\u308b\u3068\u52d5\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n
\u30a2\u30c9\u30db\u30c3\u30af\u306b\u6307\u5b9a\u3057\u3066\u5b9f\u884c
\n
\n
$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ./galene-stt https://127.0.0.1:8443/group/test/
\n
\n
\n
\n

\u6bce\u56de\u6307\u5b9a\u3059\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u30b7\u30b9\u30c6\u30e0\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e /etc/ld.so.conf \u306b\u30d1\u30b9\u3092\u8ffd\u8a18\u3057\u3066 ldconfig \u30b3\u30de\u30f3\u30c9\u3067\u53cd\u6620\u3057\u307e\u3059\uff0e

\n
\n
\n
\u6c38\u7d9a\u5316
\n
\n
$ echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf (1)\n/usr/local/lib\n$ sudo ldconfig (2)\n$ sudo ldconfig -p | grep -i whisper (3)\n        libwhisper.so.1 (libc6,x86-64) => /usr/local/lib/libwhisper.so.1\n        libwhisper.so (libc6,x86-64) => /usr/local/lib/libwhisper.so
\n
\n
\n
\n
    \n
  1. \n

    Whisper.cpp \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u542b\u307e\u308c\u308b /usr/local/lib \u3092 /etc/ld.so.conf \u306b\u8ffd\u8a18

    \n
  2. \n
  3. \n

    ldconfig \u30b3\u30de\u30f3\u30c9\u3067 /etc/ld.so.cache \u306b\u53cd\u6620

    \n
  4. \n
  5. \n

    Whisper.cpp \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u78ba\u8a8d

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

Galene-stt \u52d5\u4f5c\u78ba\u8a8d

\n
\n
\n

help \u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e

\n
\n
\n
\n
$ ./galene-stt --help\nUsage: ./galene-stt group [file...]\n  -debug\n        enable protocol logging\n  -discard-silence\n        discard segments of silence early\n  -insecure\n        don't check server certificates\n  -model filename\n        whisper model filename (default \"models/ggml-small.bin\")\n  -password password\n        password to use for login\n  -silence volume\n        maximum volume required to start a new phrase (default 0.025)\n  -silence-time seconds\n        seconds of silence required to start a new phrase (default 0.3)\n  -username username\n        username to use for login (default \"speech-to-text\")
\n
\n
\n
\n

\u9069\u5f53\u306a Galene group \u306b\u63a5\u7d9a\u3057\u307e\u3059\uff0e
\n\u4eca\u56de\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u8d77\u52d5\u3057\u305f Galene \u306e test group \u306b\u63a5\u7d9a\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
group \u306e url \u3092\u6307\u5b9a\u3057\u3066\u5b9f\u884c
\n
\n
$ ./galene-stt https://127.0.0.1:8443/group/test/\n2024/07/30 20:10:20 Get group status: Get \"https://127.0.0.1:8443/group/test/.status.json\": tls: failed to verify certificate: x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs
\n
\n
\n
\n

\u8a3c\u660e\u66f8\u304c\u3044\u308f\u3086\u308b\u30aa\u30ec\u30aa\u30ec\u8a3c\u660e\u66f8\u306a\u306e\u3067\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3059\uff0e
\n-insecure \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u3066\u8a3c\u660e\u66f8\u306e\u78ba\u8a8d\u3092\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\uff0e

\n
\n
\n

\u3082\u3046\u4e00\u3064\uff0e\u898f\u5b9a\u5024\u306e\u30e2\u30c7\u30eb\u306f\u82f1\u8a9e\u5c02\u7528\u306e small.bin \u306a\u306e\u3067\u65e5\u672c\u8a9e\u3082\u5229\u7528\u3067\u304d\u308b\u304b\u3064\u3082\u3046\u5c11\u3057\u7cbe\u5ea6\u306e\u3044\u3044 base \u30e2\u30c7\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\uff0e

\n
\n
\n
\n
$ ./galene-stt -insecure -model models/ggml-base.bin https://127.0.0.1:8443/group/test/
\n
\n
\n
\n

\u8a72\u5f53\u30b0\u30eb\u30fc\u30d7\u306b speech-to-text \u304c\u73fe\u308c\u307e\u3059\uff0e
\n\u3053\u306e\u72b6\u614b\u3067\u3057\u3083\u3079\u308b\u3068\u6587\u5b57\u8d77\u3053\u3057\u7d50\u679c\u304c\u30c6\u30ad\u30b9\u30c8\u30c1\u30e3\u30c3\u30c8\u306b\u6295\u7a3f\u3055\u308c\u3066\u3044\u304d\u307e\u3059\uff0e

\n
\n
\n

\u3053\u3053\u3067\u554f\u984c\u304c\u767a\u751f\uff0e
\nWhisper.cpp \u306e\u82f1\u8a9e\u3078\u306e\u7ffb\u8a33\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u304a\u308a\u65e5\u672c\u8a9e\u3092\u6587\u5b57\u8d77\u3053\u3057\u3057\u3066\u3082\u82f1\u8a9e\u3067\u7d50\u679c\u304c\u6295\u7a3f\u3055\u308c\u3066\u3057\u307e\u3044\u307e\u3059\uff0e\u6050\u3089\u304f\u4ed6\u306e\u8a00\u8a9e\u3067\u3082\u540c\u3058\u3067\u3057\u3087\u3046\uff0e\u3053\u308c\u304c\u4fee\u6b63\u3055\u308c\u306a\u3044\u3068\u82f1\u8a9e\u4ee5\u5916\u306e\u74b0\u5883\u3067\u306f\u8f9b\u3044\u611f\u3058\uff0e
\n\u3068\u308a\u3042\u3048\u305a issue \u306b\u6295\u3052\u307e\u3057\u305f\uff0e

\n
\n
\n
\u52d5\u753b\u3092\u5171\u6709\u3057\u3066\u305d\u306e\u97f3\u58f0\u3092\u8a8d\u8b58\u3055\u305b\u305f\u304c\u82f1\u8a9e\u306b\u7ffb\u8a33\u3055\u308c\u3066\u6295\u7a3f\u3055\u308c\u305f
\n

\"galene

\n
\n
\n
\n
\n
\u8ffd\u8a18)
\n

08-11 \u306e 622de1914d049ce403d4e51ec0f2df4fa365a42a \u3067 -lang \u3068 -translate \u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ git log -1 622de1914d049ce403d4e51ec0f2df4fa365a42a\ncommit 622de1914d049ce403d4e51ec0f2df4fa365a42a\nAuthor: Juliusz Chroboczek <jch@irif.fr>\nDate:   Sun Aug 11 00:33:02 2024 +0200\n\n    Add flags -lang and -translate.
\n
\n
\n
\n
Usage \u629c\u7c8b
\n
\n
  -lang language\n        language of input, or \"auto\" for autodetection (default \"en\")\n  -translate\n        translate foreign languages
\n
\n
\n
\n

-lang ja \u3092\u4ed8\u3051\u308b\u3053\u3068\u3067\u65e5\u672c\u8a9e\u304c\u65e5\u672c\u8a9e\u3068\u3057\u3066\u51fa\u529b\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f :)
\n\u3057\u304b\u3057\uff0c base \u30e2\u30c7\u30eb\u3060\u3068\u3044\u307e\u3044\u3061\u306a\u6587\u5b57\u8d77\u3053\u3057\uff0c\u305d\u308c\u4ee5\u4e0a\u306e\u30e2\u30c7\u30eb\u3060\u3068cpu\u304c\u8db3\u3092\u5f15\u3063\u5f35\u3063\u3066\u8ffd\u3044\u3064\u304b\u306a\u3044\u611f\u3058\u3067\u3059\uff0eWhisper.cpp \u306f 4core \u3057\u304b\u4f7f\u3063\u3066\u304f\u308c\u306a\u3044\u3088\u3046\u306a\u306e\u3067\u305d\u308c\u3092\u3069\u3046\u306b\u304b\u3059\u308b\u304b\uff0cNVIDIA GPU \u3092\u4f7f\u308f\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\u3044\u307e\u3044\u3061\u306a\u65e5\u672c\u8a9e\u6587\u5b57\u8d77\u3053\u3057(base model)
\n

\"\u3044\u307e\u3044\u3061\u306a\u65e5\u672c\u8a9e\u6587\u5b57\u8d77\u3053\u3057(base

\n
\n
\n
\n
\n
\u74b0\u5883
\n
\n
$ git remote -v\norigin  https://github.com/jech/galene-stt (fetch)\norigin  https://github.com/jech/galene-stt (push)\n$ git log -1\ncommit ae763df9372405a85ed55a52f45f8ea32c74501f (HEAD -> master, origin/master, origin/HEAD)\nAuthor: Juliusz Chroboczek <jch@irif.fr>\nDate:   Wed Jul 31 18:06:32 2024 +0200\n\n    Rename drop-silence to discard-silence.\n$ git remote -v\norigin  https://github.com/ggerganov/whisper.cpp.git (fetch)\norigin  https://github.com/ggerganov/whisper.cpp.git (push)\n$ git log -1\ncommit 6739eb83c3ca5cf40d24c6fe8442a761a1eb6248 (HEAD -> master, origin/master, origin/HEAD)\nAuthor: Georgi Gerganov <ggerganov@gmail.com>\nDate:   Sat Jul 27 20:35:04 2024 +0300\n\n    whisper : handle empty mel (#2324)\n$ dpkg-query -W golang cmake build-essential\nbuild-essential 12.10\ncmake   3.30.2-1\ngolang:amd64    2:1.22~3\n$ lsb_release -dr\nDescription:    Debian GNU/Linux trixie/sid\nRelease:        n/a\n$ arch\nx86_64\n$ cpu-info\nPackages:\n        0: Intel Core i7-10510U\nMicroarchitectures:\n        4x Sky Lake\nCores:\n        0: 2 processors (0-1), Intel Sky Lake\n        1: 2 processors (2-3), Intel Sky Lake\n        2: 2 processors (4-5), Intel Sky Lake\n        3: 2 processors (6-7), Intel Sky Lake\nLogical processors (System ID):\n        0 (0): APIC ID 0x00000000\n        1 (4): APIC ID 0x00000001\n        2 (1): APIC ID 0x00000002\n        3 (5): APIC ID 0x00000003\n        4 (2): APIC ID 0x00000004\n        5 (6): APIC ID 0x00000005\n        6 (3): APIC ID 0x00000006\n        7 (7): APIC ID 0x00000007\n$ grep ^MemTotal: /proc/meminfo\nMemTotal:       15986772 kB
\n
\n
\n
\n
\n", "content_text": "Gal\u00e8ne \u306b\u63a5\u7d9a\u3057\uff0c Whisper.cpp \u306e Speach To Text \u3067\u6587\u5b57\u8d77\u3053\u3057\u3057\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u30c6\u30ad\u30b9\u30c8\u30c1\u30e3\u30c3\u30c8\u6b04\u306b\u6295\u7a3f\u3059\u308b galene-stt \u3092\u5c11\u3057\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\n\u6700\u8fd1\uff0c\u81ea\u5206\u306e\u30db\u30b9\u30c8\u3059\u308b\u52c9\u5f37\u4f1a\u306a\u3069\u3067\u306f Gal\u00e8ne \u3068\u3044\u3046\u30d3\u30c7\u30aa\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u30b5\u30fc\u30d0\u30fc\u3092\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3057\u3066\u5229\u7528\u3057\u3066\u3044\u307e\u3059\uff0e\n\u3053\u308c\u306f WebRTC \u306e SFU \u3092\u5229\u7528\u3057\u3066\u3044\u308b\u306e\u3067\u30b5\u30fc\u30d0\u30fc\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u3068\u3066\u3082\u5c11\u306a\u304f\u3066\u6e08\u307f\u307e\u3059\uff0eLinux/armv7 \u3084Linux/mips \u306e OpenWRT \u3067\u3082\u52d5\u4f5c\u3057\u3066\u5c11\u4eba\u6570\u3067\u3042\u308c\u3070 Raspberry Pi \u521d\u4ee3\u304f\u3089\u3044\u306e\u30b9\u30da\u30c3\u30af\u3067\u3082\u5341\u5206\u52d5\u4f5c\u3057\u307e\u3059\uff0e\n\u3088\u304f\u5229\u7528\u3055\u308c\u308b Jitsi meet \u3084 BigBlueButton \u306a\u3069\u306f\u5927\u91cf\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u5fc5\u8981\u306a\u306e\u3067\u30bb\u30eb\u30d5\u30db\u30b9\u30c8\u3059\u308b\u306e\u306f\u3061\u3087\u3063\u3068\u8f9b\u3044\u3067\u3059\uff0e\n\n\n\n\nGal\u00e8ne videoconference server\n\n\njech/galene-stt: Speech-to-text support for Galene\n\n\n\n\n\n\n\n\u7701\u30ea\u30bd\u30fc\u30b9\u3067\u52d5\u4f5c\u3059\u308b\u30d3\u30c7\u30aa\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306eGal\u00e8ne – Speaker Deck\n\n\nhttps://gitlab.com/matoken/kagolug-2022.06/-/blob/main/slide/Gal%C3%A8ne.adoc\n\n\n\n\n\n\n\nNote\n\n\nJitsi Meet \u3067\u306f 8×8 \u304c\u30b9\u30dd\u30f3\u30b5\u30fc\u3057\u3066\u3044\u308b https://meet.jit.si/ \u3092\u4f7f\u3063\u305f\u308a\uff0cGoogle Compute Engine \u306a\u3069\u306b\u5c0e\u5165\u3057\u3066\uff0c\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u5b57\u3060\u3051\u8d77\u52d5\u3057\u3066\u8cbb\u7528\u3092\u6291\u3048\u308b\u3068\u3044\u3046\u4f7f\u3044\u65b9\u3092\u3057\u3066\u3044\u308b\u4eba\u3082\u5c45\u307e\u3059\uff0e\n\n\n\n\n\n\n\n\nNote\n\n\n\n\u4eca\u5e74\u306e LibrePlanet \u3067\u306f\u30d3\u30c7\u30aa\u30b5\u30fc\u30d0\u30fc\u306b BigBlueButton \u306b\u4ee3\u308f\u308a Gal\u00e8ne \u304c\u4f7f\u308f\u308c\u305f\u305d\u3046\u3067\u3059\uff0e\n\n\n\n\nA world where software freedom has a fighting chance and hope exists \u2014 Free Software Foundation \u2014 Working together for free software\n\n\n\n\n\n\n\n\n\n\ngalene-stt \u306e\u5c0e\u5165\n\n\ngalene-stt \u306f Galene \u306b\u63a5\u7d9a\u3057\u3066\u30aa\u30fc\u30c7\u30a3\u3092 Whisper.cpp \u3092\u4f7f\u3063\u3066\u6587\u5b57\u8d77\u3053\u3057\u3092\u3057\uff0c\u7d50\u679c\u3092 Galene \u306e\u30c6\u30ad\u30b9\u30c8\u30c1\u30e3\u30c3\u30c8\u306b\u6295\u7a3f\u3059\u308b\u3082\u306e\u306e\u3088\u3046\u3067\u3059\uff0e\u30b5\u30fc\u30d0\u30fc\u3067\u306f\u5229\u7528\u8005\u304c\u3072\u3068\u308a\u5897\u3048\u308b\u3060\u3051\u306a\u306e\u3067\u3042\u307e\u308a\u8ca0\u8377\u304c\u304b\u304b\u3089\u306a\u3044\u306e\u304c\u826f\u3055\u305d\u3046\u3067\u3059\uff0e\n\n\nWhisper.cpp \u306e\u5c0e\u5165\n\ngalene-stt \u306f Whisper.cpp \u3092\u4f7f\u3044\u6587\u5b57\u8d77\u3053\u3057\u3092\u884c\u3046\u306e\u3067\u5148\u305a\u306f Whisper.cpp \u3092\u5c0e\u5165\u3057\u307e\u3059\uff0e\n\n\nWhisper.cpp \u306e\u5c0e\u5165\n\n$ git clone https://github.com/ggerganov/whisper.cpp\n$ cd whisper.cpp\n$ cmake -Bbuild\n$ cd build\n$ make -j`nproc`\n$ sudo make install\n$ cd ..\n\n\n\n\u30e2\u30c7\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\n\n$ make base (1)\n$ cd ..\n\n\n\n\n\n\u30e2\u30c7\u30eb\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\uff0e\u3053\u3053\u3067\u306f base \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u3044\u308b\uff0e\u30de\u30b7\u30f3\u30b9\u30da\u30c3\u30af\u306a\u3069\u306b\u3088\u308a\u9078\u629e\u3059\u308b\uff0e\n\n\n\n\n\ngalene-stt \u306e\u30d3\u30eb\u30c9\n\n\u6b21\u306b galene-stt \u3092\u30d3\u30eb\u30c9\u3057\u307e\u3059\uff0e\n\n\n\n$ git clone https://github.com/jech/galene-stt\n$ cd galene-stt\n$ go build\n\n\n\n\u3044\u304f\u3064\u304b\u30a8\u30e9\u30fc\u304c\u51fa\u307e\u3057\u305f\uff0e\n\n\n\u30a8\u30e9\u30fc1\uff0copus \u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4e0d\u8db3\u3057\u3066\u3044\u305f\n\nopus \u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4e0d\u8db3\u3057\u3066\u3044\u305f\u306e\u3067 Debian \u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e\n\n\n\n$ go build\n# gopkg.in/hraban/opus.v2\n# [pkg-config --cflags -- opus opus opus opus opusfile opusfile]\nPackage opusfile was not found in the pkg-config search path.\nPerhaps you should add the directory containing `opusfile.pc'\nto the PKG_CONFIG_PATH environment variable\nPackage 'opusfile', required by 'virtual:world', not found\nPackage 'opusfile', required by 'virtual:world', not found\n$ sudo apt install libopus-dev libopusfile-dev (1)\n\n\n\n\n\n>Debian \u30d1\u30c3\u30b1\u30fc\u30b8\u304b\u3089\u5c0e\u5165\n\n\n\n\n\n\u30a8\u30e9\u30fc2\uff0cWhisper.cpp \u306e\u30d8\u30c3\u30c0\u30fc\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u3089\u306a\u3044\n\nWhisper.cpp \u3092 build \u3057\u305f\u5f8c\u30b7\u30b9\u30c6\u30e0\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u306a\u304b\u3063\u305f\u306e\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u305f\uff0e\n\n\n\n$ go build\n# galene-stt\n./whisper.go:13:10: fatal error: whisper.h: No such file or directory\n 13 | #include \"whisper.h\"\n\t | ^~~~~~~~~~~\ncompilation terminated.\n\n\n\n\n\u30a8\u30e9\u30fc3\uff0eWhosper \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u898b\u3064\u304b\u3089\u306a\u3044\n\nbuild \u304c\u7d42\u308f\u3063\u305f\u306e\u3067\u5b9f\u884c\u3059\u308b\u3068 Whisper.cpp \u306e\u5171\u6709\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u898b\u3064\u304b\u3089\u305a\u52d5\u304d\u307e\u305b\u3093\u3067\u3057\u305f\uff0e\n\n\n\n$ ./galene-stt https://127.0.0.1:8443/group/test/\n./galene-stt: error while loading shared libraries: libwhisper.so.1: cannot open shared object file: No such file or directory\n\n\n\nWhisper.cpp \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f /usr/local/lib \u306b\u5c0e\u5165\u3055\u308c\u3066\u3044\u308b\u306e\u3067 LD_LIBRARY_PATH \u3067\u6307\u5b9a\u3057\u3066\u307f\u308b\u3068\u52d5\u304d\u307e\u3057\u305f\uff0e\n\n\n\u30a2\u30c9\u30db\u30c3\u30af\u306b\u6307\u5b9a\u3057\u3066\u5b9f\u884c\n\n$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ./galene-stt https://127.0.0.1:8443/group/test/\n\n\n\n\u6bce\u56de\u6307\u5b9a\u3059\u308b\u306e\u306f\u9762\u5012\u306a\u306e\u3067\u30b7\u30b9\u30c6\u30e0\u306b\u8a2d\u5b9a\u3057\u307e\u3059\uff0e /etc/ld.so.conf \u306b\u30d1\u30b9\u3092\u8ffd\u8a18\u3057\u3066 ldconfig \u30b3\u30de\u30f3\u30c9\u3067\u53cd\u6620\u3057\u307e\u3059\uff0e\n\n\n\u6c38\u7d9a\u5316\n\n$ echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf (1)\n/usr/local/lib\n$ sudo ldconfig (2)\n$ sudo ldconfig -p | grep -i whisper (3)\n libwhisper.so.1 (libc6,x86-64) => /usr/local/lib/libwhisper.so.1\n libwhisper.so (libc6,x86-64) => /usr/local/lib/libwhisper.so\n\n\n\n\n\nWhisper.cpp \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u542b\u307e\u308c\u308b /usr/local/lib \u3092 /etc/ld.so.conf \u306b\u8ffd\u8a18\n\n\nldconfig \u30b3\u30de\u30f3\u30c9\u3067 /etc/ld.so.cache \u306b\u53cd\u6620\n\n\nWhisper.cpp \u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u78ba\u8a8d\n\n\n\n\n\n\n\n\nGalene-stt \u52d5\u4f5c\u78ba\u8a8d\n\n\nhelp \u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\uff0e\n\n\n\n$ ./galene-stt --help\nUsage: ./galene-stt group [file...]\n -debug\n enable protocol logging\n -discard-silence\n discard segments of silence early\n -insecure\n don't check server certificates\n -model filename\n whisper model filename (default \"models/ggml-small.bin\")\n -password password\n password to use for login\n -silence volume\n maximum volume required to start a new phrase (default 0.025)\n -silence-time seconds\n seconds of silence required to start a new phrase (default 0.3)\n -username username\n username to use for login (default \"speech-to-text\")\n\n\n\n\u9069\u5f53\u306a Galene group \u306b\u63a5\u7d9a\u3057\u307e\u3059\uff0e\n\u4eca\u56de\u306f\u30ed\u30fc\u30ab\u30eb\u3067\u8d77\u52d5\u3057\u305f Galene \u306e test group \u306b\u63a5\u7d9a\u3057\u307e\u3057\u305f\uff0e\n\n\ngroup \u306e url \u3092\u6307\u5b9a\u3057\u3066\u5b9f\u884c\n\n$ ./galene-stt https://127.0.0.1:8443/group/test/\n2024/07/30 20:10:20 Get group status: Get \"https://127.0.0.1:8443/group/test/.status.json\": tls: failed to verify certificate: x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs\n\n\n\n\u8a3c\u660e\u66f8\u304c\u3044\u308f\u3086\u308b\u30aa\u30ec\u30aa\u30ec\u8a3c\u660e\u66f8\u306a\u306e\u3067\u63a5\u7d9a\u306b\u5931\u6557\u3057\u307e\u3059\uff0e\n-insecure \u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u4ed8\u3051\u3066\u8a3c\u660e\u66f8\u306e\u78ba\u8a8d\u3092\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\uff0e\n\n\n\u3082\u3046\u4e00\u3064\uff0e\u898f\u5b9a\u5024\u306e\u30e2\u30c7\u30eb\u306f\u82f1\u8a9e\u5c02\u7528\u306e small.bin \u306a\u306e\u3067\u65e5\u672c\u8a9e\u3082\u5229\u7528\u3067\u304d\u308b\u304b\u3064\u3082\u3046\u5c11\u3057\u7cbe\u5ea6\u306e\u3044\u3044 base \u30e2\u30c7\u30eb\u3092\u6307\u5b9a\u3057\u307e\u3059\uff0e\n\n\n\n$ ./galene-stt -insecure -model models/ggml-base.bin https://127.0.0.1:8443/group/test/\n\n\n\n\u8a72\u5f53\u30b0\u30eb\u30fc\u30d7\u306b speech-to-text \u304c\u73fe\u308c\u307e\u3059\uff0e\n\u3053\u306e\u72b6\u614b\u3067\u3057\u3083\u3079\u308b\u3068\u6587\u5b57\u8d77\u3053\u3057\u7d50\u679c\u304c\u30c6\u30ad\u30b9\u30c8\u30c1\u30e3\u30c3\u30c8\u306b\u6295\u7a3f\u3055\u308c\u3066\u3044\u304d\u307e\u3059\uff0e\n\n\n\u3053\u3053\u3067\u554f\u984c\u304c\u767a\u751f\uff0e\nWhisper.cpp \u306e\u82f1\u8a9e\u3078\u306e\u7ffb\u8a33\u304c\u6709\u52b9\u306b\u306a\u3063\u3066\u304a\u308a\u65e5\u672c\u8a9e\u3092\u6587\u5b57\u8d77\u3053\u3057\u3057\u3066\u3082\u82f1\u8a9e\u3067\u7d50\u679c\u304c\u6295\u7a3f\u3055\u308c\u3066\u3057\u307e\u3044\u307e\u3059\uff0e\u6050\u3089\u304f\u4ed6\u306e\u8a00\u8a9e\u3067\u3082\u540c\u3058\u3067\u3057\u3087\u3046\uff0e\u3053\u308c\u304c\u4fee\u6b63\u3055\u308c\u306a\u3044\u3068\u82f1\u8a9e\u4ee5\u5916\u306e\u74b0\u5883\u3067\u306f\u8f9b\u3044\u611f\u3058\uff0e\n\u3068\u308a\u3042\u3048\u305a issue \u306b\u6295\u3052\u307e\u3057\u305f\uff0e\n\n\n\u52d5\u753b\u3092\u5171\u6709\u3057\u3066\u305d\u306e\u97f3\u58f0\u3092\u8a8d\u8b58\u3055\u305b\u305f\u304c\u82f1\u8a9e\u306b\u7ffb\u8a33\u3055\u308c\u3066\u6295\u7a3f\u3055\u308c\u305f\n\n\n\n\n\n\u8ffd\u8a18)\n08-11 \u306e 622de1914d049ce403d4e51ec0f2df4fa365a42a \u3067 -lang \u3068 -translate \u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\uff0e\n\n\n\n$ git log -1 622de1914d049ce403d4e51ec0f2df4fa365a42a\ncommit 622de1914d049ce403d4e51ec0f2df4fa365a42a\nAuthor: Juliusz Chroboczek <jch@irif.fr>\nDate: Sun Aug 11 00:33:02 2024 +0200\n\n Add flags -lang and -translate.\n\n\n\nUsage \u629c\u7c8b\n\n -lang language\n language of input, or \"auto\" for autodetection (default \"en\")\n -translate\n translate foreign languages\n\n\n\n-lang ja \u3092\u4ed8\u3051\u308b\u3053\u3068\u3067\u65e5\u672c\u8a9e\u304c\u65e5\u672c\u8a9e\u3068\u3057\u3066\u51fa\u529b\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f :)\n\u3057\u304b\u3057\uff0c base \u30e2\u30c7\u30eb\u3060\u3068\u3044\u307e\u3044\u3061\u306a\u6587\u5b57\u8d77\u3053\u3057\uff0c\u305d\u308c\u4ee5\u4e0a\u306e\u30e2\u30c7\u30eb\u3060\u3068cpu\u304c\u8db3\u3092\u5f15\u3063\u5f35\u3063\u3066\u8ffd\u3044\u3064\u304b\u306a\u3044\u611f\u3058\u3067\u3059\uff0eWhisper.cpp \u306f 4core \u3057\u304b\u4f7f\u3063\u3066\u304f\u308c\u306a\u3044\u3088\u3046\u306a\u306e\u3067\u305d\u308c\u3092\u3069\u3046\u306b\u304b\u3059\u308b\u304b\uff0cNVIDIA GPU \u3092\u4f7f\u308f\u306a\u3044\u3068\u30c0\u30e1\u305d\u3046\u3067\u3059\uff0e\n\n\n\u3044\u307e\u3044\u3061\u306a\u65e5\u672c\u8a9e\u6587\u5b57\u8d77\u3053\u3057(base model)\n\n\n\n\n\n\u74b0\u5883\n\n$ git remote -v\norigin https://github.com/jech/galene-stt (fetch)\norigin https://github.com/jech/galene-stt (push)\n$ git log -1\ncommit ae763df9372405a85ed55a52f45f8ea32c74501f (HEAD -> master, origin/master, origin/HEAD)\nAuthor: Juliusz Chroboczek <jch@irif.fr>\nDate: Wed Jul 31 18:06:32 2024 +0200\n\n Rename drop-silence to discard-silence.\n$ git remote -v\norigin https://github.com/ggerganov/whisper.cpp.git (fetch)\norigin https://github.com/ggerganov/whisper.cpp.git (push)\n$ git log -1\ncommit 6739eb83c3ca5cf40d24c6fe8442a761a1eb6248 (HEAD -> master, origin/master, origin/HEAD)\nAuthor: Georgi Gerganov <ggerganov@gmail.com>\nDate: Sat Jul 27 20:35:04 2024 +0300\n\n whisper : handle empty mel (#2324)\n$ dpkg-query -W golang cmake build-essential\nbuild-essential 12.10\ncmake 3.30.2-1\ngolang:amd64 2:1.22~3\n$ lsb_release -dr\nDescription: Debian GNU/Linux trixie/sid\nRelease: n/a\n$ arch\nx86_64\n$ cpu-info\nPackages:\n 0: Intel Core i7-10510U\nMicroarchitectures:\n 4x Sky Lake\nCores:\n 0: 2 processors (0-1), Intel Sky Lake\n 1: 2 processors (2-3), Intel Sky Lake\n 2: 2 processors (4-5), Intel Sky Lake\n 3: 2 processors (6-7), Intel Sky Lake\nLogical processors (System ID):\n 0 (0): APIC ID 0x00000000\n 1 (4): APIC ID 0x00000001\n 2 (1): APIC ID 0x00000002\n 3 (5): APIC ID 0x00000003\n 4 (2): APIC ID 0x00000004\n 5 (6): APIC ID 0x00000005\n 6 (3): APIC ID 0x00000006\n 7 (7): APIC ID 0x00000007\n$ grep ^MemTotal: /proc/meminfo\nMemTotal: 15986772 kB", "date_published": "2024-08-05T06:32:24+09:00", "date_modified": "2024-08-14T06:06:50+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": [ "Galene", "include", "transcription", "whisper.cpp", "Debian", "Linux", "sid" ] }, { "id": "https://matoken.org/blog/?p=3809", "url": "https://matoken.org/blog/2023/01/10/try-tilck-apps/", "title": "\u5c0f\u3055\u306aLinux\u4e92\u63db\u30ab\u30fc\u30cd\u30eb\u306eTilck\u3067\u30a2\u30d7\u30ea\u3092\u3044\u304f\u3064\u304b\u8a66\u3059", "content_html": "
\n
\n
\n

\u5c0f\u3055\u306aLinux\u4e92\u63db\u30ab\u30fc\u30cd\u30eb\u306eTilck\u3068\u3044\u3046\u3082\u306e\u3092\u77e5\u3063\u305f\u306e\u3067\u5c11\u3057\u89e6\u3063\u3066\u307f\u307e\u3057\u305f\uff0e\u305d\u306e\u5f8cWiki\u3092\u898b\u306a\u304c\u3089build_toolchain script \u3092\u5229\u7528\u3057\u3066\u3044\u304f\u3064\u304b\u306e\u30e6\u30fc\u30b6\u30b9\u30da\u30fc\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e

\n
\n\n

\n
\n
\n
\n

fbDOOM

\n
\n
\n

\u307e\u305a\u306f\u697d\u3057\u3052\u306afbDOOM\u3092\u5c0e\u5165

\n
\n
\n
fbDOOM
\n
\n
$ ./scripts/build_toolchain -s build_fbdoom\n$ ./scripts/cmake_run -DEXTRA_FBDOOM=1\n$ make rem
\n
\n
\n
\n

\u30de\u30a6\u30b9\u30c7\u30d0\u30a4\u30b9\u304c\u306a\u3044\u306e\u3067\u30ad\u30fc\u30dc\u30fc\u30c9\u3067\u306e\u64cd\u4f5c\u306e\u307f\u3067\u3059\u304c\u305d\u3053\u305d\u3053\u904a\u3079\u307e\u3059\uff0e

\n
\n
\n

\"tilck

\n
\n
\n
\n
\n

FrameBuffer

\n
\n
\n

\u6b21\u306fFrameBuffer\u306e\u30a2\u30d7\u30ea\u3092

\n
\n
\n
framebuffer
\n
\n
./scripts/build_toolchain -s build_tfblib\n$ ./scripts/cmake_run -DEXTRA_FBDOOM=1\n$ make rem
\n
\n
\n
\n

\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
fb_drawing      fb_keyinput     fb_text         fbtest\nfb_hello_world  fb_tetris
\n
\n
\n
\n

\u30de\u30f3\u30c7\u30eb\u30d6\u30ed\u96c6\u5408\u3044\u3044\u3067\u3059\u3088\u306d\uff0efb_drawing \u306e\u4e2d\u306b\u6709\u308a\u307e\u3059\uff0e

\n
\n
\n

\"tilck

\n
\n
\n
\n
\n

TinyCC

\n
\n
\n

TinyCC \u3082\u4f7f\u3048\u307e\u3059\uff0e

\n
\n
\n
\n
$ ./scripts/build_toolchain -s tcc\n$ ./scripts/cmake_run -DEXTRA_TCC=1\n$ make rem
\n
\n
\n
\n

\u305f\u3060\u3057\uff0c\u73fe\u6642\u70b9\u3067\u306f\u9759\u7684\u30ea\u30f3\u30af\u304c\u5fc5\u9808\u3067\u3059\uff0e

\n
\n
\n
\n
root@tilck:/# cat lib/tcc-examples/ex1.c\n#!/usr/local/bin/tcc -run\n#include <tcclib.h>\n\nint main()\n{\n    printf(\"Hello World\\n\");\n    return 0;\n}\nroot@tilck:/# tcc lib/tcc-examples/ex1.c -o ex1\nroot@tilck:/# ./ex1\nKilled\nroot@tilck:/# tcc -static lib/tcc-examples/ex1.c -o ex1\nroot@tilck:/# ./ex1\nHello World
\n
\n
\n
\n\n\n\n\n\n\n\n
\n
Tip
\n
\n
\n

\u3053\u3046\u3044\u3046\u64cd\u4f5c\u6642\u306fqemu\u306eGUI\u30b3\u30f3\u30bd\u30fc\u30eb\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\u306e\u3067 -serial stdio \u3092\u4ed8\u3051\u3066\u30db\u30b9\u30c8\u30de\u30b7\u30f3\u3067\u64cd\u4f5c\u3059\u308b\u3068\u4fbf\u5229\u3067\u3059\uff0e

\n
\n
\n
\n
$ qemu-system-i386 -rtc base=localtime -device sb16 -drive id=img1,format=raw,if=none,file=/home/matoken/src/tilck/build/tilck.img -device ide-hd,drive=img1,cyls=74,heads=16,secs=63 -serial stdio
\n
\n
\n
\n
\n
\n

\u4ed6\u306b\u3082\u3044\u304f\u3064\u304b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u52d5\u304d\u307e\u3059\uff0eWIki\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e
\nbuild_toolchain script \u306b\u8272\u3005\u52a0\u3048\u308b\u3068\u697d\u3057\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\u74b0\u5883
\n
\n
[    0.111] Hello from Tilck 0.1.4, commit: 5835b80f\n[    0.111] Build type: Debug, compiler: gcc 8.4.0\n[    0.115] timer_hz: 250; time_slice: 40 ms; in_hypervisor: yes\n\n                    \u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2592\u2592\u2510 \u2592\u2592\u2510       \u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2592\u2592\u2510  \u2592\u2592\u2510\n                    \u2514\u2500\u2500\u2592\u2592\u250c\u2500\u2500\u2518 \u2592\u2592\u2502 \u2592\u2592\u2502      \u2592\u2592\u250c\u2500\u2500\u2500\u2500\u2518 \u2592\u2592\u2502 \u2592\u2592\u250c\u2518\n                       \u2592\u2592\u2502    \u2592\u2592\u2502 \u2592\u2592\u2502      \u2592\u2592\u2502      \u2592\u2592\u2592\u2592\u2592\u250c\u2518\n                       \u2592\u2592\u2502    \u2592\u2592\u2502 \u2592\u2592\u2502      \u2592\u2592\u2502      \u2592\u2592\u250c\u2500\u2592\u2592\u2510\n                       \u2592\u2592\u2502    \u2592\u2592\u2502 \u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2514\u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2592\u2592\u2502  \u2592\u2592\u2510\n                       \u2514\u2500\u2518    \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518  \u2514\u2500\u2518\n\n$ dpkg-query -W qemu-system-x86\nqemu-system-x86 1:7.2+dfsg-1+b2\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Debian\nDescription:    Debian GNU/Linux bookworm/sid\nRelease:        n/a\nCodename:       bookworm\n$ arch\nx86_64
\n
\n
\n
\n
\n", "content_text": "\u5c0f\u3055\u306aLinux\u4e92\u63db\u30ab\u30fc\u30cd\u30eb\u306eTilck\u3068\u3044\u3046\u3082\u306e\u3092\u77e5\u3063\u305f\u306e\u3067\u5c11\u3057\u89e6\u3063\u3066\u307f\u307e\u3057\u305f\uff0e\u305d\u306e\u5f8cWiki\u3092\u898b\u306a\u304c\u3089build_toolchain script \u3092\u5229\u7528\u3057\u3066\u3044\u304f\u3064\u304b\u306e\u30e6\u30fc\u30b6\u30b9\u30da\u30fc\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\uff0e\n\n\n\nvvaltchev/tilck: A Tiny Linux-Compatible Kernel\n\u5c0f\u3055\u306aLinux\u4e92\u63db\u30ab\u30fc\u30cd\u30eb\u306eTilck\u3092\u5c11\u3057\u8a66\u3059 \u2013 matoken\u2019s meme\nHome \u00b7 vvaltchev/tilck Wiki\n\n\n\n\n\n\nfbDOOM\n\n\n\u307e\u305a\u306f\u697d\u3057\u3052\u306afbDOOM\u3092\u5c0e\u5165\n\n\nfbDOOM\n\n$ ./scripts/build_toolchain -s build_fbdoom\n$ ./scripts/cmake_run -DEXTRA_FBDOOM=1\n$ make rem\n\n\n\n\u30de\u30a6\u30b9\u30c7\u30d0\u30a4\u30b9\u304c\u306a\u3044\u306e\u3067\u30ad\u30fc\u30dc\u30fc\u30c9\u3067\u306e\u64cd\u4f5c\u306e\u307f\u3067\u3059\u304c\u305d\u3053\u305d\u3053\u904a\u3079\u307e\u3059\uff0e\n\n\n\n\n\n\n\nFrameBuffer\n\n\n\u6b21\u306fFrameBuffer\u306e\u30a2\u30d7\u30ea\u3092\n\n\nframebuffer\n\n./scripts/build_toolchain -s build_tfblib\n$ ./scripts/cmake_run -DEXTRA_FBDOOM=1\n$ make rem\n\n\n\n\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff0e\n\n\n\nfb_drawing fb_keyinput fb_text fbtest\nfb_hello_world fb_tetris\n\n\n\n\u30de\u30f3\u30c7\u30eb\u30d6\u30ed\u96c6\u5408\u3044\u3044\u3067\u3059\u3088\u306d\uff0efb_drawing \u306e\u4e2d\u306b\u6709\u308a\u307e\u3059\uff0e\n\n\n\n\n\n\n\nTinyCC\n\n\nTinyCC \u3082\u4f7f\u3048\u307e\u3059\uff0e\n\n\n\n$ ./scripts/build_toolchain -s tcc\n$ ./scripts/cmake_run -DEXTRA_TCC=1\n$ make rem\n\n\n\n\u305f\u3060\u3057\uff0c\u73fe\u6642\u70b9\u3067\u306f\u9759\u7684\u30ea\u30f3\u30af\u304c\u5fc5\u9808\u3067\u3059\uff0e\n\n\n\nroot@tilck:/# cat lib/tcc-examples/ex1.c\n#!/usr/local/bin/tcc -run\n#include <tcclib.h>\n\nint main()\n{\n printf(\"Hello World\\n\");\n return 0;\n}\nroot@tilck:/# tcc lib/tcc-examples/ex1.c -o ex1\nroot@tilck:/# ./ex1\nKilled\nroot@tilck:/# tcc -static lib/tcc-examples/ex1.c -o ex1\nroot@tilck:/# ./ex1\nHello World\n\n\n\n\n\n\n\nTip\n\n\n\n\u3053\u3046\u3044\u3046\u64cd\u4f5c\u6642\u306fqemu\u306eGUI\u30b3\u30f3\u30bd\u30fc\u30eb\u3061\u3087\u3063\u3068\u4f7f\u3044\u3065\u3089\u3044\u306e\u3067 -serial stdio \u3092\u4ed8\u3051\u3066\u30db\u30b9\u30c8\u30de\u30b7\u30f3\u3067\u64cd\u4f5c\u3059\u308b\u3068\u4fbf\u5229\u3067\u3059\uff0e\n\n\n\n$ qemu-system-i386 -rtc base=localtime -device sb16 -drive id=img1,format=raw,if=none,file=/home/matoken/src/tilck/build/tilck.img -device ide-hd,drive=img1,cyls=74,heads=16,secs=63 -serial stdio\n\n\n\n\n\n\n\n\n\u4ed6\u306b\u3082\u3044\u304f\u3064\u304b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u52d5\u304d\u307e\u3059\uff0eWIki\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u307e\u3057\u3087\u3046\uff0e\nbuild_toolchain script \u306b\u8272\u3005\u52a0\u3048\u308b\u3068\u697d\u3057\u305d\u3046\u3067\u3059\uff0e\n\n\n\u74b0\u5883\n\n[ 0.111] Hello from Tilck 0.1.4, commit: 5835b80f\n[ 0.111] Build type: Debug, compiler: gcc 8.4.0\n[ 0.115] timer_hz: 250; time_slice: 40 ms; in_hypervisor: yes\n\n \u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2592\u2592\u2510 \u2592\u2592\u2510 \u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2592\u2592\u2510 \u2592\u2592\u2510\n \u2514\u2500\u2500\u2592\u2592\u250c\u2500\u2500\u2518 \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u250c\u2500\u2500\u2500\u2500\u2518 \u2592\u2592\u2502 \u2592\u2592\u250c\u2518\n \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u2592\u2592\u2592\u250c\u2518\n \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u250c\u2500\u2592\u2592\u2510\n \u2592\u2592\u2502 \u2592\u2592\u2502 \u2592\u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2514\u2592\u2592\u2592\u2592\u2592\u2592\u2510 \u2592\u2592\u2502 \u2592\u2592\u2510\n \u2514\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2518 \u2514\u2500\u2518\n\n$ dpkg-query -W qemu-system-x86\nqemu-system-x86 1:7.2+dfsg-1+b2\n$ lsb_release -a\nNo LSB modules are available.\nDistributor ID: Debian\nDescription: Debian GNU/Linux bookworm/sid\nRelease: n/a\nCodename: bookworm\n$ arch\nx86_64", "date_published": "2023-01-10T19:35:54+09:00", "date_modified": "2023-01-10T19:35:55+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": [ "include", "kernel", "Linux", "Tilck", "bookworm", "Debian" ] }, { "id": "http://matoken.org/blog/?p=2840", "url": "https://matoken.org/blog/2020/07/24/hello-world-in-sipeed-lichee-nano/", "title": "Sipeed Lichee Nano\u3067hello world", "content_html": "
\n

2020-07-23\u4f4e\u30ec\u30d9\u30eb\u52c9\u5f37\u4f1a\u306b\u53c2\u52a0\u3057\u307e\u3057\u305f\uff0eZoom.us\u3067\u306e\u958b\u50ac\u3067\u3057\u305f\uff0e

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

\u5185\u5bb9\u306fLinux\u540d\u523a\u7684\u306a\u3082\u306e\u3092\u958b\u767a\u3057\u3088\u3046\u3068\u3044\u3046\u5185\u5bb9\u3067\uff0c\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3068\u3057\u3066SD\u30ab\u30fc\u30c9\u30b5\u30a4\u30ba\u306e\u5c0f\u3055\u306aLinux\u306e\u52d5\u4f5c\u3059\u308barm\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306eSipeed Lichee Nano\u3092\u4f7f\u3044\u307e\u3057\u305f\uff0e

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

\u6b32\u3057\u3044\u5834\u5408\u306f1000\u5186\u3061\u3087\u3044\u304f\u3089\u3044\u304b\u3089\u3067\u5165\u624b\u3067\u304d\u305d\u3046\u3067\u3059\uff0e

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

Lichee Nano\u3092\u6301\u3063\u3066\u3044\u306a\u3044\u4eba\u306f\u30ea\u30e2\u30fc\u30c8\u3067\u89e6\u308c\u308b\u3088\u3046\u306b\u3057\u3066\u3042\u3063\u305f\u306e\u3067\u6301\u3063\u3066\u3044\u306a\u3044\u79c1\u3082\u697d\u3057\u3081\u307e\u3057\u305f\uff0e

\n
\n
\n

\u3053\u306e\u30ea\u30e2\u30fc\u30c8\u958b\u767a\u306e\u4ed5\u7d44\u307f\u306fLichee Nano\u3068Raspberry Pi\u3092USB\u7d4c\u7531\u306eUART\u3067\u63a5\u7d9a\u3057\uff0cRaspberry Pi\u3067GNU screen\u3092\u8d77\u52d5\uff0cssh\u7d4c\u7531\u3067GNU screen\u306b\u7e4b\u3044\u3067\u64cd\u4f5c\u3068\u3044\u3046\u611f\u3058\u3067\u3059\uff0e
\nGNU screen\u3092Gotty\u7b49\u306b\u3059\u308b\u3068\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3067\u53c2\u52a0\u3067\u304d\u3066\u3061\u3087\u3063\u3068\u4fbf\u5229\u304b\u3082\u3068\u601d\u3063\u305f\u308a\u3082\uff0e(GoTTY\u306f\u958b\u767a\u6b62\u307e\u3063\u3066\u308b\u3088\u3046\u306b\u898b\u3048\u308b\u304b\u3089\u5225\u306e\u3082\u306e\u306e\u307b\u3046\u304c\u3044\u3044\u304b\u3082\u3057\u308c\u306a\u3044)

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

Lichee Nano\u3067\u4f55\u304b\u3092\u52d5\u304b\u3057\u305f\u3044\uff0earm\u3060\u3051\u3069armhf\u52d5\u304f\u306e\u304b\u306a?\u3068\u308a\u3042\u3048\u305a\u306a\u306b\u304b\u8ee2\u9001\u3057\u3066\u52d5\u304b\u3057\u3066\u307f\u3088\u3046\u3068\uff0e

\n
\n
\n

\u3068\u308a\u3042\u3048\u305aDebian\u306earmhf\u30d0\u30a4\u30ca\u30ea\u3092uuencode\u3057\u3066\u30b3\u30d4\u30da\u3067\u8ee2\u9001\u3057\u3066\u307f\u307e\u3059.\u3053\u308c\u304c\u52d5\u3051\u3070Debian\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u7fa4\u304c\u5229\u7528\u3067\u304d\u308b\u304b\u3082\u3060\u3051\u3069\u2026\u2026\uff0e

\n
\n
\n

\u307e\u305a\u306f\u7c21\u5358\u305d\u3046\u306afortune\u3092\u8a66\u3057\u307e\u3059.

\n
\n
\n
Debian sid\u3067fortune-mod\u30d1\u30c3\u30b1\u30fc\u30b8\u306earmhf\u30d0\u30a4\u30ca\u30ea\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5c55\u958b(add archtecture armhf\u3057\u3066\u3042\u308b\u74b0\u5883)
\n
\n
$ apt download -t armhf fortune-mod\n$ unar fortune-mod_1.99.1-7+b1_armhf.deb\n$ cd fortune-mod_1.99.1-7+b1_armhf\n$ tar xf data.tar.xz\n$ cd usr/games
\n
\n
\n
\n

Lichee Nano\u306fserial\u3067\u63a5\u7d9a\u3055\u308c\u3066\u3044\u3066\uff0cInternet\u306b\u306f\u7e4b\u304c\u3063\u3066\u3044\u306a\u3044\u306e\u3067\u30d0\u30a4\u30ca\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u8ee2\u9001\u306b\u306fuudecode/uuencode\u3092\u4f7f\u3044\u307e\u3057\u305f\uff0e\u4e45\u3005\u3067\u3059\uff0e
\n\u624b\u5143\u306eGNU sharutils 4.15.2\u306euudecode\u306b\u306fbase64\u3092\u4f7f\u3046 -m, --base64 \u304c\u3042\u308b\u306e\u3067\u826f\u3055\u305d\u3046\uff0e\u3068\u601d\u3063\u305f\u3051\u3069Lichee Nano\u306e\u65b9\u306fbusybox\u306e\u3082\u306e\u3067\u975e\u5bfe\u5fdc\u3067\u3057\u305f\uff0e

\n
\n
\n
\u30ed\u30fc\u30ab\u30eb\u7aef\u672b\u3067\u5727\u7e2e\u3057\u3066uuencode\u3057\u3066\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u3078
\n
\n
$ gzip -c fortune | uuencode fortune.gz > fortune.gz.uu\n$ cat fortune.gz.uu | xclip
\n
\n
\n
\n
\u30ea\u30e2\u30fc\u30c8\u3067\u4f38\u5f35\u3057\u3066\u89e3\u51cd
\n
\n
# cat | uudecode    #\u3053\u3053\u3067\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u304b\u3089\u8cbc\u308a\u4ed8\u3051\n# zcat fortune.gz > fortune\n# rm fortune.gz
\n
\n
\n
\n

\u305d\u3057\u3066\u2026\u200b\u2026\u200b

\n
\n
\n
\n
# ./fortune\n-sh: ./fortune: not found\n# ldd ./fortune\nchecking sub-depends for 'not found'\nchecking sub-depends for '/lib/libc.so.6'\n/lib/ld-linux.so.3 (0xb6fa0000)\nlibrecode.so.0 => not found (0x00000000)\nlibc.so.6 => /lib/libc.so.6 (0x00000000)\n/lib/ld-linux.so.3 => /lib/ld-linux.so.3 (0x00000000)
\n
\n
\n
\n

\u3053\u308c\u3092\u52d5\u304b\u3059\u306e\u306f\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3092\u7528\u610f\u3057\u3066\u3042\u3052\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u5bb9\u91cf\u7684\u306b\u96e3\u3057\u3044\u3067\u3059\u306d\uff0e

\n
\n
\n

\u3053\u3053\u3067\u306fgzip\u3067\u5727\u7e2e\u3057\u307e\u3057\u305f\u304c\uff0cLichee Nano\u306ebusybox\u306bxz\u304c\u3042\u308a\u307e\u3057\u305f\uff0egzip\u3088\u308axz\u306b\u3057\u305f\u307b\u3046\u304c\u5c0f\u3055\u304f\u306a\u308a\u307e\u3059\u306d\uff0e\u8a66\u3057\u3066\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u3057\u305f\uff0e$ xz -c fortune | uuencode fortune.xz > fortune.xz.uu

\n
\n
\n
\u30b5\u30a4\u30ba\u6bd4\u8f03
\n
\n
-rw-r--r-- 1 matoken matoken 22368 Jul 23 15:11 fortune #\u5143\u30d5\u30a1\u30a4\u30eb\n-rw-r--r-- 1 matoken matoken 30844 Jul 23 14:58 fortune.uu #uudecode\n-rw-r--r-- 1 matoken matoken 14975 Jul 23 15:08 fortune.gz.uu #zip + uudecode\n-rw-r--r-- 1 matoken matoken 13047 Jul 23 15:47 fortune.xz.uu #xz + uudecode
\n
\n
\n
\n

\u305d\u3046\u3044\u3048\u3070\u3042\u307e\u308a\u6709\u540d\u3067\u306f\u306a\u3044\u3067\u3059\u304cbasE91\u306a\u3093\u3066\u3082\u306e\u3082\u3042\u308a\u307e\u3059\uff0ebase64\u3088\u308a\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u304f\u306a\u308a\u307e\u3059\u304c\u5c0e\u5165\u304b\u3089\u3084\u3089\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u3061\u3087\u3063\u3068\u9762\u5012\uff0e

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

Hello world\u3092\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\u9069\u5f53\u306b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7528\u610f\u3057\u3066\u30b9\u30bf\u30c6\u30a3\u30c3\u30af\u30ea\u30f3\u30af\u3067\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u307f\u307e\u3059\uff0e

\n
\n
\n
\n
$ cat hello.c\n#include <stdio.h>\nint\nmain(void)\n{\n    printf(\"Hello, world!\\n\");\n    return 0;\n}\n$ gcc -static ./hello.c\n$ ./a.out\nHello, world!\n$ ls -l a.out\n-rwxr-xr-x 1 pi pi 571120 7\u6708 23 16:18 a.out
\n
\n
\n
\n

\u3067\u304b\u3044\u2026\u200b\u2026\u200b

\n
\n
\n

\u3068\u308a\u3042\u3048\u305a\u3067\u304b\u3044\u306e\u306f\u304a\u3044\u3068\u3044\u3066\u3053\u308c\u3060\u3068arm64\u306a\u306e\u3067\u52d5\u304f\u306f\u305a\u304c\u306a\u3044\uff0e\u3068\u3044\u3046\u3053\u3068\u3067\u30af\u30ed\u30b9\u30b3\u30f3\u30d1\u30a4\u30eb\u74b0\u5883\u3092\u7528\u610f\u3057\u307e\u3059\uff0e

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

\u4eca\u56de\u8a66\u3057\u305f\u30db\u30b9\u30c8\u306fDebian sid amd64/Ubuntu 20.04 LTS arm64/Raspberry Pi OS arm64\u3067\u3059\uff0e\u3044\u305a\u308c\u3082\u540c\u3058\u624b\u9806\u3067OK\u3067\u3057\u305f\uff0e

\n
\n
\n

crossbuild-essential-<arch> \u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u5404\u7a2e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u74b0\u5883\u304c\u5c0e\u5165\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
$ apt-cache search crossbuild-essential-\ncrossbuild-essential-amd64 - Informational list of cross-build-essential packages\ncrossbuild-essential-arm64 - Informational list of cross-build-essential packages\ncrossbuild-essential-armel - Informational list of cross-build-essential packages\ncrossbuild-essential-armhf - Informational list of cross-build-essential packages\ncrossbuild-essential-i386 - Informational list of cross-build-essential packages\ncrossbuild-essential-powerpc - Informational list of cross-build-essential packages\ncrossbuild-essential-ppc64el - Informational list of cross-build-essential packages\ncrossbuild-essential-s390x - Informational list of cross-build-essential packages\ncrossbuild-essential-mips - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64 - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64el - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64r6 - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64r6el - Informational list of cross-build-essential packages\ncrossbuild-essential-mipsel - Informational list of cross-build-essential packages\ncrossbuild-essential-mipsr6 - Informational list of cross-build-essential packages\ncrossbuild-essential-mipsr6el - Informational list of cross-build-essential packages
\n
\n
\n
\n

\u6ca2\u5c71\u3042\u308a\u307e\u3059\uff0e\u4eca\u56de\u306farmlf/armhf\u306e crossbuild-essential-armel, crossbuild-essential-armhf \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ sudo apt install crossbuild-essential-armel crossbuild-essential-armhf
\n
\n
\n
\n

gcc\u3060\u3051\u3067\u3044\u3044\u5834\u5408\u306farmlf\u306f gcc-arm-linux-gnueabi\uff0carmhf\u306f gcc-arm-linux-gnueabihf \u3060\u3051\u3067OK\u3067\u3059\uff0e

\n
\n
\n

\u307e\u305a\u306f arm-linux-gnueabihf-gcc \u3092\u4f7f\u3063\u3066armhf\u306e\u30d0\u30a4\u30ca\u30ea\u3092\u4f5c\u308a\u307e\u3059\uff0e

\n
\n
\n
\n
$ /usr/bin/arm-linux-gnueabihf-gcc -static ./hello.c\n$ strip a.out\n$ xz -c a.out | uuencode a.out.xz > a.out.xz.uu
\n
\n
\n
\n

armhf\u306f\u99c4\u76ee\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n
\n
# cat | uudecode\n^d\n# xzcat ./a.out.xz > ./a.out\n# chmod +x ./a.out\n# ./a.out\nSegmentation fault
\n
\n
\n
\n

\u6b21\u306f gcc-arm-linux-gnueabi \u3067armlf\u306e\u30d0\u30a4\u30ca\u30ea\u3092\u4f5c\u3063\u3066\u8a66\u3059\u3068\u52d5\u304d\u307e\u3057\u305f\uff0e

\n
\n
\n
\n
$ /usr/bin/arm-linux-gnueabi-gcc -static ./hello.c\n$ strip a.out\n$ xz -c a.out | uuencode a.out.xz > a.out.xz.uu
\n
\n
\n
\n
\n
# cat | uudecode\n^d\n# xzcat ./a.out.xz > ./a.out\n# chmod +x ./a.out\n# ./a.out\nHello, world!\n# /usr/bin/time -f \"%M KB\" ./a.out\nHello, world!\n2144 KB
\n
\n
\n
\n

\u3053\u306e\u8fba\u308a\u3067\u4eca\u56de\u306f\u6642\u9593\u5207\u308c\uff0e\u6b21\u56de\u306e\u540c\u3058\u3088\u3046\u306a\u611f\u3058\u306b\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u8208\u5473\u306e\u3042\u308b\u65b9\u306f\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u304b\u3089\uff0e

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

\u3068\u308a\u3042\u3048\u305aarmel\u306e\u30d0\u30a4\u30ca\u30ea\u304c\u52d5\u304f\u3088\u3046\u306a\u306e\u304c\u308f\u304b\u3063\u305f\u306e\u3067\u9762\u767d\u305d\u3046\u306a\u5c0f\u3055\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u8a66\u305d\u3046\u304b\u306a\u3068\u601d\u3063\u3066\u3044\u307e\u3059\uff0ecowsay\u3068\u304b\u597d\u304d\u306a\u3093\u3060\u3051\u3069\u3053\u308c\u306fPerl\u306a\u306e\u3067\u5bb9\u91cf\u7684\u306b\u96e3\u3057\u305d\u3046\uff0e\u3068\u308a\u3042\u3048\u305afortune\u3042\u305f\u308a\u304b\u306a?

\n
\n
\n

\u4ee5\u524dPQI Air Pen\u3067\u3084\u3063\u305f\u3088\u3046\u306bSD card\u3092\u7528\u610f\u3057\u3066\u305d\u3053\u306bDebian armlf\u74b0\u5883\u3092\u5c55\u958b\u3057\u3066chroot\u3068\u304b\u3082\u3067\u304d\u305d\u3046\u3067\u3059\uff0e

\n
\n
\n\n
\n", "content_text": "2020-07-23\u4f4e\u30ec\u30d9\u30eb\u52c9\u5f37\u4f1a\u306b\u53c2\u52a0\u3057\u307e\u3057\u305f\uff0eZoom.us\u3067\u306e\u958b\u50ac\u3067\u3057\u305f\uff0e\n\n\n\n\u4f4e\u30ec\u30d9\u30eb\u52c9\u5f37\u4f1a2020\u5e7407\u6708 – connpass\n\n\n\n\u5185\u5bb9\u306fLinux\u540d\u523a\u7684\u306a\u3082\u306e\u3092\u958b\u767a\u3057\u3088\u3046\u3068\u3044\u3046\u5185\u5bb9\u3067\uff0c\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3068\u3057\u3066SD\u30ab\u30fc\u30c9\u30b5\u30a4\u30ba\u306e\u5c0f\u3055\u306aLinux\u306e\u52d5\u4f5c\u3059\u308barm\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306eSipeed Lichee Nano\u3092\u4f7f\u3044\u307e\u3057\u305f\uff0e\n\n\n\n\u8354\u679d\u6d3eNano \u5168\u6d41\u7a0b\u6307\u5357 \u2014 \u8354\u679d\u6d3eNano \u5168\u6d41\u7a0b\u6307\u5357 documentation\n\n\n\n\u6b32\u3057\u3044\u5834\u5408\u306f1000\u5186\u3061\u3087\u3044\u304f\u3089\u3044\u304b\u3089\u3067\u5165\u624b\u3067\u304d\u305d\u3046\u3067\u3059\uff0e\n\n\n\nSipeed Lichee Nano – \u30b9\u30a4\u30c3\u30c1\u30b5\u30a4\u30a8\u30f3\u30b9 1045\u5186 + \u9001\u6599200\u5186 =1245\u5186\nLichee Nano \u2013 Shigezone Online 990\u5186 + \u9001\u6599400\u5186 = 1390\u5186\n\u30105705\u3011SIPEED-LICHEE-NANO Sipeed Lichee Nano 1050\u5186 + \u9001\u6599350\u5186 = 1400\u5186\n\uff2c\uff49\uff43\uff48\uff45\uff45\uff30\uff49\u3000\uff2e\uff41\uff4e\uff4f\u3000\uff11\uff16\uff2d\u3000\uff46\uff4c\uff41\uff53\uff48: \u30de\u30a4\u30b3\u30f3\u95a2\u9023 \u79cb\u6708\u96fb\u5b50\u901a\u5546-\u96fb\u5b50\u90e8\u54c1\u30fb\u30cd\u30c3\u30c8\u901a\u8ca9\u30001000\u5186 + \u9001\u6599500\u5186 = 1500\u5186\nSipeed Lichee Nano Linux \u958b\u767a\u30dc\u30fc\u30c9 16M Flash – Seeed Studio 707\u5186+ shipping\n\n\n\nLichee Nano\u3092\u6301\u3063\u3066\u3044\u306a\u3044\u4eba\u306f\u30ea\u30e2\u30fc\u30c8\u3067\u89e6\u308c\u308b\u3088\u3046\u306b\u3057\u3066\u3042\u3063\u305f\u306e\u3067\u6301\u3063\u3066\u3044\u306a\u3044\u79c1\u3082\u697d\u3057\u3081\u307e\u3057\u305f\uff0e\n\n\n\u3053\u306e\u30ea\u30e2\u30fc\u30c8\u958b\u767a\u306e\u4ed5\u7d44\u307f\u306fLichee Nano\u3068Raspberry Pi\u3092USB\u7d4c\u7531\u306eUART\u3067\u63a5\u7d9a\u3057\uff0cRaspberry Pi\u3067GNU screen\u3092\u8d77\u52d5\uff0cssh\u7d4c\u7531\u3067GNU screen\u306b\u7e4b\u3044\u3067\u64cd\u4f5c\u3068\u3044\u3046\u611f\u3058\u3067\u3059\uff0e\nGNU screen\u3092Gotty\u7b49\u306b\u3059\u308b\u3068\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3067\u53c2\u52a0\u3067\u304d\u3066\u3061\u3087\u3063\u3068\u4fbf\u5229\u304b\u3082\u3068\u601d\u3063\u305f\u308a\u3082\uff0e(GoTTY\u306f\u958b\u767a\u6b62\u307e\u3063\u3066\u308b\u3088\u3046\u306b\u898b\u3048\u308b\u304b\u3089\u5225\u306e\u3082\u306e\u306e\u307b\u3046\u304c\u3044\u3044\u304b\u3082\u3057\u308c\u306a\u3044)\n\n\n\n\u7aef\u672b\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b Web \u3067\u5171\u6709\u3067\u304d\u308b GoTTY \u2013 matoken\u2019s meme\n\n\n\nLichee Nano\u3067\u4f55\u304b\u3092\u52d5\u304b\u3057\u305f\u3044\uff0earm\u3060\u3051\u3069armhf\u52d5\u304f\u306e\u304b\u306a?\u3068\u308a\u3042\u3048\u305a\u306a\u306b\u304b\u8ee2\u9001\u3057\u3066\u52d5\u304b\u3057\u3066\u307f\u3088\u3046\u3068\uff0e\n\n\n\u3068\u308a\u3042\u3048\u305aDebian\u306earmhf\u30d0\u30a4\u30ca\u30ea\u3092uuencode\u3057\u3066\u30b3\u30d4\u30da\u3067\u8ee2\u9001\u3057\u3066\u307f\u307e\u3059.\u3053\u308c\u304c\u52d5\u3051\u3070Debian\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u7fa4\u304c\u5229\u7528\u3067\u304d\u308b\u304b\u3082\u3060\u3051\u3069\u2026\u2026\uff0e\n\n\n\u307e\u305a\u306f\u7c21\u5358\u305d\u3046\u306afortune\u3092\u8a66\u3057\u307e\u3059.\n\n\nDebian sid\u3067fortune-mod\u30d1\u30c3\u30b1\u30fc\u30b8\u306earmhf\u30d0\u30a4\u30ca\u30ea\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u5c55\u958b(add archtecture armhf\u3057\u3066\u3042\u308b\u74b0\u5883)\n\n$ apt download -t armhf fortune-mod\n$ unar fortune-mod_1.99.1-7+b1_armhf.deb\n$ cd fortune-mod_1.99.1-7+b1_armhf\n$ tar xf data.tar.xz\n$ cd usr/games\n\n\n\nLichee Nano\u306fserial\u3067\u63a5\u7d9a\u3055\u308c\u3066\u3044\u3066\uff0cInternet\u306b\u306f\u7e4b\u304c\u3063\u3066\u3044\u306a\u3044\u306e\u3067\u30d0\u30a4\u30ca\u30ea\u30d5\u30a1\u30a4\u30eb\u306e\u8ee2\u9001\u306b\u306fuudecode/uuencode\u3092\u4f7f\u3044\u307e\u3057\u305f\uff0e\u4e45\u3005\u3067\u3059\uff0e\n\u624b\u5143\u306eGNU sharutils 4.15.2\u306euudecode\u306b\u306fbase64\u3092\u4f7f\u3046 -m, --base64 \u304c\u3042\u308b\u306e\u3067\u826f\u3055\u305d\u3046\uff0e\u3068\u601d\u3063\u305f\u3051\u3069Lichee Nano\u306e\u65b9\u306fbusybox\u306e\u3082\u306e\u3067\u975e\u5bfe\u5fdc\u3067\u3057\u305f\uff0e\n\n\n\u30ed\u30fc\u30ab\u30eb\u7aef\u672b\u3067\u5727\u7e2e\u3057\u3066uuencode\u3057\u3066\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u3078\n\n$ gzip -c fortune | uuencode fortune.gz > fortune.gz.uu\n$ cat fortune.gz.uu | xclip\n\n\n\n\u30ea\u30e2\u30fc\u30c8\u3067\u4f38\u5f35\u3057\u3066\u89e3\u51cd\n\n# cat | uudecode #\u3053\u3053\u3067\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u304b\u3089\u8cbc\u308a\u4ed8\u3051\n# zcat fortune.gz > fortune\n# rm fortune.gz\n\n\n\n\u305d\u3057\u3066\u2026\u200b\u2026\u200b\n\n\n\n# ./fortune\n-sh: ./fortune: not found\n# ldd ./fortune\nchecking sub-depends for 'not found'\nchecking sub-depends for '/lib/libc.so.6'\n/lib/ld-linux.so.3 (0xb6fa0000)\nlibrecode.so.0 => not found (0x00000000)\nlibc.so.6 => /lib/libc.so.6 (0x00000000)\n/lib/ld-linux.so.3 => /lib/ld-linux.so.3 (0x00000000)\n\n\n\n\u3053\u308c\u3092\u52d5\u304b\u3059\u306e\u306f\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u308b\u3082\u306e\u3092\u7528\u610f\u3057\u3066\u3042\u3052\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u30b9\u30c8\u30ec\u30fc\u30b8\u306e\u5bb9\u91cf\u7684\u306b\u96e3\u3057\u3044\u3067\u3059\u306d\uff0e\n\n\n\u3053\u3053\u3067\u306fgzip\u3067\u5727\u7e2e\u3057\u307e\u3057\u305f\u304c\uff0cLichee Nano\u306ebusybox\u306bxz\u304c\u3042\u308a\u307e\u3057\u305f\uff0egzip\u3088\u308axz\u306b\u3057\u305f\u307b\u3046\u304c\u5c0f\u3055\u304f\u306a\u308a\u307e\u3059\u306d\uff0e\u8a66\u3057\u3066\u307f\u308b\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u3057\u305f\uff0e$ xz -c fortune | uuencode fortune.xz > fortune.xz.uu\n\n\n\u30b5\u30a4\u30ba\u6bd4\u8f03\n\n-rw-r--r-- 1 matoken matoken 22368 Jul 23 15:11 fortune #\u5143\u30d5\u30a1\u30a4\u30eb\n-rw-r--r-- 1 matoken matoken 30844 Jul 23 14:58 fortune.uu #uudecode\n-rw-r--r-- 1 matoken matoken 14975 Jul 23 15:08 fortune.gz.uu #zip + uudecode\n-rw-r--r-- 1 matoken matoken 13047 Jul 23 15:47 fortune.xz.uu #xz + uudecode\n\n\n\n\u305d\u3046\u3044\u3048\u3070\u3042\u307e\u308a\u6709\u540d\u3067\u306f\u306a\u3044\u3067\u3059\u304cbasE91\u306a\u3093\u3066\u3082\u306e\u3082\u3042\u308a\u307e\u3059\uff0ebase64\u3088\u308a\u30b5\u30a4\u30ba\u304c\u5c0f\u3055\u304f\u306a\u308a\u307e\u3059\u304c\u5c0e\u5165\u304b\u3089\u3084\u3089\u306a\u3044\u3068\u3044\u3051\u306a\u3044\u306e\u3067\u3061\u3087\u3063\u3068\u9762\u5012\uff0e\n\n\n\nunix:commands:base91 [wiki.matoken.org]\n\n\n\nHello world\u3092\u8a66\u3057\u3066\u307f\u307e\u3059\uff0e\u9069\u5f53\u306b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7528\u610f\u3057\u3066\u30b9\u30bf\u30c6\u30a3\u30c3\u30af\u30ea\u30f3\u30af\u3067\u30b3\u30f3\u30d1\u30a4\u30eb\u3057\u3066\u307f\u307e\u3059\uff0e\n\n\n\n$ cat hello.c\n#include <stdio.h>\nint\nmain(void)\n{\n printf(\"Hello, world!\\n\");\n return 0;\n}\n$ gcc -static ./hello.c\n$ ./a.out\nHello, world!\n$ ls -l a.out\n-rwxr-xr-x 1 pi pi 571120 7\u6708 23 16:18 a.out\n\n\n\n\u3067\u304b\u3044\u2026\u200b\u2026\u200b\n\n\n\u3068\u308a\u3042\u3048\u305a\u3067\u304b\u3044\u306e\u306f\u304a\u3044\u3068\u3044\u3066\u3053\u308c\u3060\u3068arm64\u306a\u306e\u3067\u52d5\u304f\u306f\u305a\u304c\u306a\u3044\uff0e\u3068\u3044\u3046\u3053\u3068\u3067\u30af\u30ed\u30b9\u30b3\u30f3\u30d1\u30a4\u30eb\u74b0\u5883\u3092\u7528\u610f\u3057\u307e\u3059\uff0e\n\n\n\nCrossToolchains – Debian Wiki\n\n\n\n\u4eca\u56de\u8a66\u3057\u305f\u30db\u30b9\u30c8\u306fDebian sid amd64/Ubuntu 20.04 LTS arm64/Raspberry Pi OS arm64\u3067\u3059\uff0e\u3044\u305a\u308c\u3082\u540c\u3058\u624b\u9806\u3067OK\u3067\u3057\u305f\uff0e\n\n\ncrossbuild-essential-<arch> \u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u5404\u7a2e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u74b0\u5883\u304c\u5c0e\u5165\u3067\u304d\u308b\u3088\u3046\u3067\u3059\uff0e\n\n\n\n$ apt-cache search crossbuild-essential-\ncrossbuild-essential-amd64 - Informational list of cross-build-essential packages\ncrossbuild-essential-arm64 - Informational list of cross-build-essential packages\ncrossbuild-essential-armel - Informational list of cross-build-essential packages\ncrossbuild-essential-armhf - Informational list of cross-build-essential packages\ncrossbuild-essential-i386 - Informational list of cross-build-essential packages\ncrossbuild-essential-powerpc - Informational list of cross-build-essential packages\ncrossbuild-essential-ppc64el - Informational list of cross-build-essential packages\ncrossbuild-essential-s390x - Informational list of cross-build-essential packages\ncrossbuild-essential-mips - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64 - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64el - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64r6 - Informational list of cross-build-essential packages\ncrossbuild-essential-mips64r6el - Informational list of cross-build-essential packages\ncrossbuild-essential-mipsel - Informational list of cross-build-essential packages\ncrossbuild-essential-mipsr6 - Informational list of cross-build-essential packages\ncrossbuild-essential-mipsr6el - Informational list of cross-build-essential packages\n\n\n\n\u6ca2\u5c71\u3042\u308a\u307e\u3059\uff0e\u4eca\u56de\u306farmlf/armhf\u306e crossbuild-essential-armel, crossbuild-essential-armhf \u3092\u5c0e\u5165\u3057\u307e\u3057\u305f\uff0e\n\n\n\n$ sudo apt install crossbuild-essential-armel crossbuild-essential-armhf\n\n\n\ngcc\u3060\u3051\u3067\u3044\u3044\u5834\u5408\u306farmlf\u306f gcc-arm-linux-gnueabi\uff0carmhf\u306f gcc-arm-linux-gnueabihf \u3060\u3051\u3067OK\u3067\u3059\uff0e\n\n\n\u307e\u305a\u306f arm-linux-gnueabihf-gcc \u3092\u4f7f\u3063\u3066armhf\u306e\u30d0\u30a4\u30ca\u30ea\u3092\u4f5c\u308a\u307e\u3059\uff0e\n\n\n\n$ /usr/bin/arm-linux-gnueabihf-gcc -static ./hello.c\n$ strip a.out\n$ xz -c a.out | uuencode a.out.xz > a.out.xz.uu\n\n\n\narmhf\u306f\u99c4\u76ee\u305d\u3046\u3067\u3059\uff0e\n\n\n\n# cat | uudecode\n^d\n# xzcat ./a.out.xz > ./a.out\n# chmod +x ./a.out\n# ./a.out\nSegmentation fault\n\n\n\n\u6b21\u306f gcc-arm-linux-gnueabi \u3067armlf\u306e\u30d0\u30a4\u30ca\u30ea\u3092\u4f5c\u3063\u3066\u8a66\u3059\u3068\u52d5\u304d\u307e\u3057\u305f\uff0e\n\n\n\n$ /usr/bin/arm-linux-gnueabi-gcc -static ./hello.c\n$ strip a.out\n$ xz -c a.out | uuencode a.out.xz > a.out.xz.uu\n\n\n\n\n# cat | uudecode\n^d\n# xzcat ./a.out.xz > ./a.out\n# chmod +x ./a.out\n# ./a.out\nHello, world!\n# /usr/bin/time -f \"%M KB\" ./a.out\nHello, world!\n2144 KB\n\n\n\n\u3053\u306e\u8fba\u308a\u3067\u4eca\u56de\u306f\u6642\u9593\u5207\u308c\uff0e\u6b21\u56de\u306e\u540c\u3058\u3088\u3046\u306a\u611f\u3058\u306b\u306a\u308a\u305d\u3046\u3067\u3059\uff0e\u8208\u5473\u306e\u3042\u308b\u65b9\u306f\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u304b\u3089\uff0e\n\n\n\n\u4f4e\u30ec\u30d9\u30eb\u52c9\u5f37\u4f1a2020\u5e7408\u6708 – connpass\n\n\n\n\u3068\u308a\u3042\u3048\u305aarmel\u306e\u30d0\u30a4\u30ca\u30ea\u304c\u52d5\u304f\u3088\u3046\u306a\u306e\u304c\u308f\u304b\u3063\u305f\u306e\u3067\u9762\u767d\u305d\u3046\u306a\u5c0f\u3055\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u8a66\u305d\u3046\u304b\u306a\u3068\u601d\u3063\u3066\u3044\u307e\u3059\uff0ecowsay\u3068\u304b\u597d\u304d\u306a\u3093\u3060\u3051\u3069\u3053\u308c\u306fPerl\u306a\u306e\u3067\u5bb9\u91cf\u7684\u306b\u96e3\u3057\u305d\u3046\uff0e\u3068\u308a\u3042\u3048\u305afortune\u3042\u305f\u308a\u304b\u306a?\n\n\n\u4ee5\u524dPQI Air Pen\u3067\u3084\u3063\u305f\u3088\u3046\u306bSD card\u3092\u7528\u610f\u3057\u3066\u305d\u3053\u306bDebian armlf\u74b0\u5883\u3092\u5c55\u958b\u3057\u3066chroot\u3068\u304b\u3082\u3067\u304d\u305d\u3046\u3067\u3059\uff0e\n\n\n\nPQI Air Pen Hack – Speaker Deck", "date_published": "2020-07-24T23:46:32+09:00", "date_modified": "2020-07-24T23:46: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": [ "gcc", "include", "Lichee Nano", "Sipeed", "uudecode", "xz", "zip", "Buster", "Debian", "Focal Fossa(20.04)", "Linux", "Raspberry Pi OS", "sid", "Ubuntu", "\u52c9\u5f37\u4f1a", "\u96fb\u5b50\u5de5\u4f5c" ] } ] }