sttsのソースコードMemoブログ

色々やってみた結果のMemo

OllamaとOpen WebUIとVS Code拡張Continueのメモ

ローカルLLMを試したときのMEMO

Ollama

ローカルLLMを動かすAPIサーバです。

下記URLが参考になります。

Ollamaで体験する国産LLM入門

Linuxだと"curl -fsSL https://ollama.com/install.sh | sh"でインストールです。

他のサーバから繋ぐには"sudo vi /etc/systemd/system/ollama.service"でファイルを書き換えます。

Environment="OLLAMA_HOST=0.0.0.0"

他にEnvironment行があった場合、別に定義です。

 

GGUFフォーマットのLLMモデルが使えるようです。

ダウンロードされているLLMモデル一覧を表示

$ ollama list

 

Open WebUI

ChatGPTのようなWebUIです。裏にOllama等のAPIが使えます。

下記でインストールして起動します。

$ python -m venv open-webui

$ pip install open-webui

$ open-webui serve

どのAPIサーバとつなぐかは起動してログインしてからの設定で行います。

設定ファイルはopen-webuiをvenvで作成した"./envs/open-webui/lib/python3.11/site-packages/open_webui/data/webui.db"に保存されていました。

VS Code拡張Continue

VS CodeのTab補完候補にLLMが使えるようになります。

HOMEディレクトリに.continue/config.jsonが出来ているので下記を書き足すと動きました。

    {
      "title": "qwen2.5-coder:7b",
      "model": "qwen2.5-coder:7b",
      "provider": "ollama",
      "apiBase": "http://192.168.1.111:11434"
    }
  ],
  "tabAutocompleteModel": {
    "title": "qwen2.5-coder:7b",
    "model": "qwen2.5-coder:7b",
    "provider": "ollama",
    "apiBase": "http://192.168.1.111:11434"
  },
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "uvx",
          "args": [
            "blender-mcp"
          ]
        }
      }
    ]
  },

チャット欄で使える@指定は下記に載っていました

Context selection | Continue

タブ補完のおすすめmodelはstarcoder2:3bのようです。
Model setup | Continue
2024/12/07に上記リンクを見るとqwen2.5-coder:1.5bがバランスが良い。
GPUスペックが良かったらqwen2.5-coder:7bが良いに変わっていました。
2025/4追記: 流行りのMCPを試す場合、チャットを入力欄の左下のAgent/Chat/Editの選択しをAgentにする必要がありました。

qwen3:8b等、Toolsをサポートしたmodelを選ばないとAgentは有効になりませんでした。

Agent | Continue

 

LM Studioのモデルを使うには下記のようにしました。LM Studioの設定でサーバを有効にする必要もありました。

    {
      "title": "local-lmstudio-qwen3-8b",
      "provider": "lmstudio",
      "model": "qwen3-8b",
      "apiBase": "http://127.0.0.1:1234/v1/"
    },
    {
      "title": "local-lmstudio-qwen2.5-coder-3b",
      "provider": "lmstudio",
      "model": "qwen2.5-coder-3b",
      "apiBase": "http://127.0.0.1:1234/v1/"
    }

 

wsl2でOllamaを動かして他のPCからアクセスしたMemo

Download Ollama on Windows

からOllamaをwsl2にインストールしました。

/etc/systemd/system/ollama.serviceに設定ファイルができたので他のPCからアクセスできるようにOLLAMA_HOSTとOLLAMA_ORIGINS環境変数の設定をPATH環境変数の次の行に足しました。

Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=192.168.1.*"

 

さらにwsl2他のPCからアクセスできるようにポートフォワードの設定を足した。

管理者権限のコマンドプロンプトから下記を実行

netsh interface portproxy add v4tov4 listenaddress=192.168.1.111 listenport=11434 connectaddress=172.19.49.138 connectport=11434

 

このポートフォワードは以下を参考にした。

WSL2で起動したサーバーに外部の端末からアクセスする – GUNMA GIS GEEK

設定(管理者権限が必要)

netsh.exe interface portproxy add v4tov4 listenaddress=<ホストOSのipアドレス>listenport=3000 connectaddress=<wslのipアドレス> connectport=3000 

設定確認

> netsh.exe interface portproxy show v4tov4

設定削除するときは以下

> netsh.exe interface portproxy delete v4tov4 listenport=3000 listenaddress=<ホストOSのipアドレス

 

NginxでBasic認証したリバースプロキシを作ったMemo

/etc/nginx/sites-available/defaultに下記を書くだけ

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        ssl_certificate     /etc/nginx/server.crt;
        ssl_certificate_key /etc/nginx/server.key;

        location / {
                proxy_pass http://localhost:8080/;
                auth_basic "Restricted";
                auth_basic_user_file /etc/nginx/.htpasswd;
        }

}

証明書と.htpasswdは用意する必要がある。

HTML/CSSを再入門したMEMO

HTMLタグ

<!DOCTYPE html>: HTML5で有ることを示す。先頭に記載する

<meta name="viewport" content="width=device-width, inital-sacle=1"> headタグの中に書く。1倍でデバイスの幅いっぱい使うの意味。スマホ向けの定番らしい。

<p>: 段落

 

CSS

CSSのルールや定番

@アットマークの記載

@charset "UTF-8"; 文字コードの指定

@import url(index.css); 他のCSSを参照

@media (mini-width: 768px) {ここに設定} メディアの条件によって設定

設定範囲の指定方法(セレクタ)

<p>に対してはp { color: #00FF00;}

<p class="classname">に対しては .classname{ color: #00FF00;}。classnameは重複できる

<p id="idname">に対しては#idname { color: #00FF00;}。idは重複できない

a:hover { color: #0000FF;} のように条件指定できる

p strong { color: #121212;}のようにするとpタグの中のstrongタグに設定される

p,strong { color: #121212;}のよう","区切りにするとpタグとstrongタグに対して設定される

* { color: #121212;)のようにすると全てに設定される

.classname * { color: #121212;} のようにするとclass="classname"が付いた子供全てに適用される。

幅や高さ

p { box-size: border-box; width: 100%; }とすると親要素と揃う

html *,::before,::after {box-sizing: border-box;} とすると全ての要素にborder-boxがつく。これが定番なようだ

 

スタイルの適用される順番

同じのを複数回た場合、後から書いた方が優先

p { font-size: 10px;}

p { font-size: 20px;}

となっていると20pxとなる。

.classnameや#idnameのように細かく指定されていた場合細かい方が優先さえる。

後から書いた方が優先されるため最後に

@media (min-width: 768px) {

    /* PC向けの設定*/

}

のようにしてレイアウト設定を更新する

Normalize.css

ブラウザ間の差分を初期化する。

Normalize.css: Make browsers render all elements more consistently. (necolas.github.io)

レイアウト

フレックスでレイアウト

<div class="flexroot">

  <div class="flexcntent">コンテンツ1</div>

  <div class="flexcntent">コンテンツ2</div>

</div>

.flexroot { display: flex; }

.flexcont { flex: 1 1 auto; }

とするとコンテンツ1とコンテンツ2が横いっぱいに広がる。 

グリッドレイアウト

<div class="gridroot">

  <div class="gridcntent">コンテンツ1</div>

  <div class="gridcntent">コンテンツ2</div>

  <div class="gridcntent">コンテンツ3</div>

  <div class="gridcntent">コンテンツ4</div>

  <div class="gridcntent">コンテンツ5</div>

  <div class="gridcntent">コンテンツ6</div>

</div>

.gridroot {

  display: grid;

  grid-template-columns: 1fr 1fr 1fr;

}

とすると3列のgridになる。

コンテンツ1 コンテンツ2 コンテンツ3

コンテンツ4 コンテンツ5 コンテンツ6

画像にテキストを回り込ませる

flowやfloatは画像にしか使わない

<div class="flowroot">

 <img src="./img/hoge.jpg" class="flowleft">

 <p>回り込む文字列</p>

</div>

<div><p>回り込まない次の段落</p>

のようにする。

css

.flowroot {

  display: flow-root;

}

.flowleft {

  float: left;

}

のようにする。"display: fow-root"を指定しないと後ろが回り込み続ける。

 

デザイン

角を丸くする

border-radius: 100px;

いまさらtmuxのメモ

window操作

ctrl+b c : windowを新しく開く

ctrl+b w : windowを選択

pane(ペイン)操作

ctrl+b " もしくは ctrl+b % : 上下もしくは左右に新しくpaneを開く

ctrl+b o : アクティブなペインの切り替え

ctrl+b :select-pane -T 名前 : ペインに名前を付ける

ctrl+m : ペインをマーク

ctrl+b :join-pane : マークしたペインを現在のwindowに持ってくる

Raspberry Pi OS BullseyeでリモートデスクトップやVNC

ラズパイをリモートデスクトップのサーバにする

Windowsで使われているリモートデスクトップです。

xrdpをインストールするだけです。

$ sudo apt update

$ sudo apt install xrdp

$ shutdown -r now

再起動後、リモートデスクトップで接続します。ポート番号は3389です。

ただし、3389はリモートデスクトップのデフォルトポート番号です。そのためWindowsリモートデスクトップクライアントからは、ラズパイのIPを指定するだけで接続可能です。

別ユーザが同時にそれぞれ接続できそうです。(ラズパイのパワー不足で重そうですが)

ラズパイをVNCサーバにする

まずVNCサーバを有効にします。

左上ラズパイマーク -> 設定 -> Raspberry Piの設定

インタフェース -> VNCを有効

/root/.vnc/config.d/vncserver-x11 に次の行を追記します。($ sudo vi /root/.vnc/config.d/vncserver-x11等で編集)

Authentication=VncAuth

VNCのパスワードを設定設定します。

  $ sudo  vncpasswd  -service

ポート番号は5900です。こちらもVNCのデフォルトポート番号なため、VNCクライアントからラズパイのIPを指定するだけで接続可能です。

2023年4月1日追記: UltraVNCから繋がらなくなった。ラズパイの右上のVNCのアイコン->右上のハンバーガーメニュー->Optionから下記でつながる状態に戻った。

 - Security -> Encryption "Prefer off"

 - Users & Permissions -> "Standard user(user)"のパスワードを再設定。Legacyクライアントからの接続を許可

Arduino IDEでM5Stamp C3U 2022年3月時点

Arduino IDEの安定板1.8.19をインストール

ファイル->環境設定

追加のボードマネージャのURL: 

https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

 

ツール->ボード->ボードマネージャ

M5Stackをインストール

ツール->ボード->M5Stack Arduino->STAMP-C3

USB CDC OnBootをEnableへ

 

スケッチ->ライブラリをインクルード->ライブラリを管理

Adafruint NeoPixelをインストール(カラーLED用ライブラリ)

ArduinoJsonをインストール(JSONライブラリ)

Adafruit PWM Servo Driver libraryをインストール(PCA9685サーボモータードライバ用ライブラリ)

 

SDAがGPIO8、SDLがGPIO9