2026年9月8日 星期二

和AI聊有AI之後的未來世界

今晚和Chatgpt聊天:

說個嚴肅的話題,如果領導人沒有正確的使用AI,人類的下一代終究會被AI害慘,大部份都被AI取代,接下來終究是要由AI的各種產品來負責人類的生活食衣住行,一切將不在由人親自動手,賺多少薪水將不再重要,因為一切由政府佈局AI來照顧人民,最終不知什麼時候,世界毀在AI程式的bug,不論開發者規定了多少AI不能做的事,終究會出漏洞,我只慶幸那時候我的年紀也差不多要掛了,但我的小孩,我真不知她們會怎麼樣,幾年前作夢也想不到AI這樣的進展,不喜歡這樣的未來

2026年1月6日 星期二

搞懂 OOXX的Luma Key 筆記

Luma

  • 用「亮度」當作 key 來決定哪些畫面要透明、哪些要留下
  • 高過 key 的亮度的部份是以 key 的亮度為基準(相當於0),往上的差值當作新的亮度

假設:

  • Key Source 的亮度 = K
  • 你的畫面亮度 = Y
  • Black Mode / White Mode 已設定
    那系統的處理方式:
  • 以 Key Source 的亮度 K 作為基準
  • 計算「畫面比 Key Source 高或低多少」
    • 高於 Key → 留下來(可透明/不透明)
    • 低於 Key → 透明
  • 這個「差值」可以再乘上 Transparency,得到最終顯示亮度

2025年12月10日 星期三

怎麼在html元素裡自定變數

 

HTML 元素裡自定義變數,通常有兩種常見方式:


方法一:使用 HTML data-* 屬性(最常用)

HTML 本身不能直接放「變數」,但可以用 data- 屬性存放自定義資料。

▶ 寫法:

<div id="box" data-color="red" data-size="20"></div>

▶ 在 JavaScript 中取得:

const box = document.getElementById("box"); console.log(box.dataset.color); // red console.log(box.dataset.size); // 20

▶ 在 JavaScript 中修改:

box.dataset.color = "blue";

方法二:使用 CSS 變數(Custom Properties)

如果你指的是在 HTML 元素上定義「CSS 變數」,可以直接寫在 style 中:

▶ 寫法:

<div id="card" style="--main-color: #4CAF50; --padding: 10px;"> Card content </div>

2025年11月5日 星期三

[Linux] 設定開機啟動core dump

在your_app.service裡加上

 [Service]

LimitCORE=infinity

ExecStartPre=/bin/bash -c 'echo "/home/pi/core.%e.%p" > /proc/sys/kernel/core_pattern'


 "/home/pi/core.%e.%p"是指定要產生core檔的目錄和檔名,這會在/home/pi/產生core.your_app_name.your_app_pid,例如core.myapp.3234


2025年10月12日 星期日

設定github ssh key後,在別台電腦也要用ssh key登入

把private key 放到新電腦的~/.ssh/下。Windows就是C:\Users\User\.ssh

在~/.ssh/下建立config如下

Host github.com

  HostName github.com

2025年9月7日 星期日

Access Token正確流程及建議

正確的流程應該是這樣:

目標:讓 Server 能確認 Client 身分 + 發給 access token,並用私鑰做後續身份驗證


1. Client 生成公私鑰對

  • Client 裝置內部(或 Secure Element)產生金鑰對

    • 私鑰保留在本地(永不離開)

    • 公鑰送給 Server 註冊(一次性或定期)


 

Ed25519和RSA-1024比較,尤其安全性

當比較 Ed25519RSA-1024,特別是從「安全性」的角度來看,Ed25519 在幾乎所有方面都明顯優於 RSA-1024。下面是詳細的比較分析:


1. 安全性強度

項目Ed25519RSA-1024
對應安全強度約 128-bit(對標 AES-128)約 80-bit(已被視為不安全)
抗量子攻擊不具抗量子能力不具抗量子能力
抗碰撞攻擊高抗性(基於 Curve25519)弱(容易被大規模運算破解)
  • RSA-1024 的安全性已經被普遍認為 不夠安全。目前主流建議的最低 RSA 長度是 2048 位元,因為 1024 位 RSA 可以被有足夠資源的國家級對手在實務中破解。

  • Ed25519 是基於橢圓曲線加密的現代演算法,安全性相當於約 3072-bit 的 RSA,但計算與儲存成本低很多。


2025年7月30日 星期三

無桌面的rpi開機後,插入USB,沒自動掛載插入的usb

Raspberry Pi(或一般 Linux)預設在無桌面環境(headless 或用 systemd)情況下,插入 USB 裝置後不會自動掛載。這需要額外處理,以下是常見解法:


使用 udev + 腳本自動掛載

udev 是 Linux 處理熱插拔裝置(如 USB)的系統,搭配腳本可實現「插入 USB 時自動掛載」。

步驟:

2025年5月28日 星期三

x11和wayland誰佔用記憶體比較少,效能比較好

針對 嵌入式設備資源有限的系統,選擇 X11 或 Wayland 會影響系統效能與穩定性。以下是從 記憶體佔用、效能、延遲、啟動速度、Qt 整合程度 等多面向的比較。


 1. 記憶體佔用:Wayland 通常較低

項目WaylandX11
基本架構現代化、模組化、最小核心過去累積多功能,龐大
使用最小 compositor(如 weston, cage)時佔用小,~10–50MBXorg 本身就約 50–100MB(無桌面環境)
搭配桌面環境(GNOME/KDE)增加不少,GNOME Wayland >200MBGNOME X11 類似甚至稍低
➤ 小結Wayland 較省 RAM(在最小配置下)X11 偏重,但成熟

2025年5月8日 星期四

修改開機畫面

 

目標

在 Raspberry Pi 3 上,開機時顯示自訂圖片(如公司 logo、個人圖片)取代開機訊息。


你需要準備

  • 一張圖片:建議解析度 800x480(適合 7 吋螢幕),格式為 .png

  • 圖片命名為 splash.png(或其他也行)


2025年5月2日 星期五

怎麼在 linux 下找檔案或 lib

 

要在 /usr/lib 下尋找 libQt5Multimedia.so.5 這個 Qt 多媒體相關的共享函式庫,你可以用以下方法來找出它是否存在、位於哪裡:


方法一:用 find 指令搜尋整個 /usr/lib

sudo find /usr/lib -name 'libQt5Multimedia.so.5'

這會遞迴搜尋 /usr/lib 下所有名稱為 libQt5Multimedia.so.5 的檔案。


方法二:使用 ldconfig 配合 grep 查找動態連結庫資訊

ldconfig -p | grep libQt5Multimedia

這會查詢系統目前可用的共享函式庫,列出所有與 libQt5Multimedia 有關的版本及其實體路徑(通常是軟連結)。


方法三:使用 dpkg 查是哪個套件安裝了它(Debian / RPi OS)

dpkg -S libQt5Multimedia.so.5

如果已安裝,它會顯示對應的套件名稱,例如:

libqt5multimedia5:armhf: /usr/lib/arm-linux-gnueabihf/libQt5Multimedia.so.5

2025年4月30日 星期三

怎麼對 linux base 的 OS 做系統更新

 

主要是透過 APT (Advanced Package Tool) 套件管理器來完成。這裡是具體的步驟:


步驟 1:更新套件列表

首先,先確保你的套件列表是最新的:

sudo apt update

這會讓系統從官方的軟體源下載最新的套件列表。

剛裝好linux base OS,怎麼設定root的密碼,之後用root登入

 在 Raspberry Pi 3 上設定 root 密碼並允許用 root 用戶登入,你需要按照以下步驟操作:


步驟:

  1. 開機並登入你的 Raspberry Pi

    通常你會用 pi 用戶登入 Raspberry Pi,默認密碼是 raspberry

  2. 開啟 root 帳戶

rsync 能不覆蓋相同檔名的檔案嗎?還有注意事項

rsync 可以設定不覆蓋目標端已存在的檔案,即使檔名相同,方法如下:


使用 --ignore-existing 參數

rsync -av --ignore-existing source/ destination/

說明:

  • -a:archive 模式,保留權限、符號連結、時間等

  • -v:verbose,顯示處理過的檔案

  • --ignore-existing只傳送「目標端不存在」的檔案

2025年4月24日 星期四

MSYS2 編譯器通常放哪

MSYS2 通常安裝在 C:\msys64,那編譯器位置就根據你安裝的 toolchain(如 mingw64、ucrt64、clang64) 而定。

🎯 常見 MSYS2 編譯器路徑對照表

✅ 如果你使用的是 MinGW-w64 (64-bit GCC)

Toolchain編譯器 binary 路徑常用變數名
mingw64C:\msys64\mingw64\bin\gcc.exex86_64-w64-mingw32-gcc
ucrt64C:\msys64\ucrt64\bin\gcc.exe(有時改成 ucrt gcc)
clang64C:\msys64\clang64\bin\clang.execlang for Windows
msys2(純 POSIX)C:\msys64\usr\bin\gcc.exe(不建議用來編 Win binary)只適合 MSYS shell 程式

2025年4月21日 星期一

ubuntu如何設固定IP

在 Ubuntu 上設定固定 IP(Static IP)可以依照你的 Ubuntu 版本和使用的網路管理方式略有不同。以下是針對較新版本(Ubuntu 18.04 起)使用 Netplan 的設定方式,也補充舊版使用 interfaces 的方式。


Ubuntu 18.04 / 20.04 / 22.04(使用 Netplan)

找出你的網路介面名稱:
ip link show

通常會是像 enp3s0, ens33, eth0 等。

2025年3月27日 星期四

p2p on TCP

使用 C 语言 实现 P2P 通信,并且不希望使用 TURN(例如因性能问题或不想依赖外部服务器),而且希望能够通过 TCP 实现更高效的 NAT 穿越,以下是一些符合这些条件的库和解决方案。

1. PJSIP (使用 STUN 但不依赖 TURN)

虽然你提到不希望使用 TURN,但 PJSIP 是一个非常强大的 SIP 协议栈,支持 TCPUDP,并且可以通过 STUN 实现基本的 NAT 穿越。如果不依赖 TURN,而是仅仅使用 STUN 来帮助设备发现公共地址,应该能达到较高的效率。

2025年3月17日 星期一

修改 rpi 開機啟動顯示過程

禁用彩虹屏

sudo nano /boot/firmware/config.txt

在最後一行加上
disable_splash=1

關閉開機顯訊息及logo

sudo nano /etc/systemd/system/cmdline.txt

加上 consoleblank=1 logo.nologo quiet loglevel=0 plymouth.enable=0 vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fastboot noatime nodiratime noram


這段文字是 Linux 核心啟動參數的配置項,通常會被放入 bootloader 的設定檔(例如 GRUB),用來設定系統啟動時的各種行為。每個選項對應著一個特定的行為或功能,讓我們逐一解析每個參數的作用:

2025年3月9日 星期日

在cmake中印debug msg

在 CMake 中輸出調試信息,可以使用 message() 函數。這個函數允許你在 CMake 配置過程中打印訊息到命令行,對於調試 CMake 配置或檢查變數的值非常有用。

使用 message() 函數印出調試訊息

基本語法:

message([<mode>] "your message")

其中,<mode> 可以是以下幾個選項之一:

  • STATUS: 默認模式,會以普通訊息的形式顯示。
  • WARNING: 顯示警告訊息,會以黃色的警告形式顯示。
  • AUTHOR_WARNING: 只有當你在 CMake 中啟用了 CMAKE_SUPPRESS_DEVELOPER_WARNINGS 時,這個訊息才會顯示。
  • SEND_ERROR: 顯示錯誤訊息,並且會中止 CMake 的處理過程。
  • FATAL_ERROR: 顯示致命錯誤訊息,並且立即終止 CMake 的處理過程。

2025年3月5日 星期三

在RPI 4 上設定開機啟動你的程式

在 Raspberry Pi 4 上,如果沒有 rc.local 文件,這是因為現代的 Linux 系統使用了 systemd 來管理啟動過程。你可以使用 systemd 創建一個自定義的服務來在啟動時執行你的應用程序。

以下是如何使用 systemd 設置開機啟動的步驟:

1. 創建 systemd 服務文件

  1. /etc/systemd/system/ 目錄中創建一個新的服務單元文件。例如,我們可以將其命名為 appPlayer.service

    sudo nano /etc/systemd/system/appPlayer.service
  2. 在該文件中,添加以下內容: