搞定中國安卓ICP備案號沒那麼難!有了「APP備案助手」,MD5、公鑰資訊一秒取得
隨著中國法律規定 APP 必須申請備案號碼,不管是 iOS 或是 Android 都必須申請,尤其是 Android 申請時候需要輸入 APP 的MD5 與 公鑰資料。
還好有「APP備案助手」,只要這個APP安裝在安卓上,就可以抓出手機上我們要上架的APP的MD5與公鑰,非常方便。


隨著中國法律規定 APP 必須申請備案號碼,不管是 iOS 或是 Android 都必須申請,尤其是 Android 申請時候需要輸入 APP 的MD5 與 公鑰資料。
還好有「APP備案助手」,只要這個APP安裝在安卓上,就可以抓出手機上我們要上架的APP的MD5與公鑰,非常方便。
Obsidian 匯出 PDF 不含筆記屬性內容,本篇文章記錄如何解決此問題。
此方式可以把所有的屬性展現出來,匯出PDF就可以看見了,但無法選擇要展現那些屬性。
```dataview
TABLE WITHOUT ID file.frontmatter AS Properties
WHERE file.name = this.file.name
```
此方法可以自行決定那些欄位要呈現出來,比較有彈性。
```dataviewjs
// 檢索當前檔案的 Frontmatter
let frontmatter = dv.current().file.frontmatter;
// 定義要排除的欄位(視需要調整)
let excludeFields = ['tags', 'created']
// 根據排除列表提取並過濾鍵和值
let filtered_keys = Object.keys(frontmatter).filter(key => ! excludeFields.includes(key));
let filtered_values = filtered_keys.map(key => frontmatter[key]);
// 定義一個陣列來儲存表格的每一行
let rows = [];
// 使用鍵值對填充行陣列
for (let i = 0; i < filtered_keys.length; i++) {
// 將陣列值(例如標籤)轉換為以逗號分隔的單一字串
let value = Array.isArray(filtered_values[i]) ? filtered_values[i].join(', ') : filtered_values [i];
rows.push([filtered_keys[i], value])
}
// 生成一個包含兩列的表格並填充行
dv.table(['Properties', 'Values'], rows)
```
現在主流文件辨識,應該都交由vision功能的AI模型處裡,辨識度高;若不想花錢使用AI,可以用apache tika頂著用。
docker 安裝 apache tika
docker run -d -p 9998:9998 --name tika-server-ocr apache/tika:latest-full
# 目前是3.1.0
安裝完畢,進入容器,安裝中文語言套件
docker exec -u root -it tika-server-ocr bash
###
apt update
apt-get install tesseract-ocr-chi-sim tesseract-ocr-chi-tra
###
測試
# Linux
# 中文圖檔 test.png
curl -T test.png http://127.0.0.1:9998/tika --header "X-Tika-OCRLanguage: eng+chi_tra+chi_sim"
N8N(nodemation)設定
前一個節點要把檔案準備好,再新增以下節點,丟給tika處理,回傳設定為text
我這種老派工程師,一直以來都用apache httpd 做反向代理,也沒用docker安裝,直到為了n8n能用mcp,果斷改用docker 安裝 nginx proxy manager。
nginx proxy manager 安裝方式請參考官方文件,安裝完畢反向對應到本地端的n8n(docker),此時需要額外設定,避開gzip壓縮問題,才能順利搭上n8n上的mcp server。
# disable gzip and proxy buffering for both /mcp/ and /mcp-test/
location ~* ^/(?:mcp|mcp-test)/ {
gzip off;
proxy_buffering off;
chunked_transfer_encoding off;
# prevent upstream compression
proxy_set_header Connection "";
proxy_set_header Accept-Encoding "";
# re‑declare NPM’s proxy headers using built‑in variables
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# send to your upstream based on NPM’s variables
proxy_pass $forward_scheme://$server:$port;
}
PVE 8 加上GPU Passthrough(顯卡通透),可能是PVE、5090、或主機板太新,一直卡關,因此我有必要紀錄一下如何攻克。
話說我前幾天終於說服公司購買好一點的顯示卡,因為先前提早研究,知道顯卡很吃PCI-E 16x,但那是什麼鬼我都不懂,於是快馬加鞭衝去原價屋,找專業店家買主機,服務人員聽說要買頂規的5090,很熱情地自動展開相關配置,這些專業建議不額外收費。
主機板:Z890 Aorus master
CPU:Intel Core ultra 9 285K
記憶體:256GB
M.2.: 1T
顯卡:ASUS ROG ASTRAL RTX 5090 32G 水冷
power:1300 瓦
原價屋組裝好,我收到貨之後,想說主機這麼好,應該要安裝pve多工使用。
爬文得知兩個重點:
首先我安裝pve 8.4.1,且照著官網建議的設定,但一直不成功,VM開不起來;後來想說是不是pve版本太新,因此改用8.3.1也不行,再改成8.2.2也不行。我總共參考以下文章,也測試了N輪,都快放棄了 XD
文章都說只要開通vfio-pci以及iommu就可以了,我照做也很順利。
執行 lspci -nnk,可以看出顯卡已開通 vfio-pci
執行 dmesg | grep -e DMAR -e IOMMU ,可看到IOMMU enabled
可惜無論如何努力,vm一直無法出現開機畫面,一看就知道通透失敗。
甚至我都扒出有些設定新版pve 8已棄用,也修改 /etc/default/grup ,加上新的設定 initcall_blacklist=sysfb_init,做完要執行 update-grub,但一樣GG,。
不死心,失敗了N次,我無意間在這裡發現新大陸,裡面提到一個設定disable_denylist=1要加到vfio.conf,雖然最後還是失敗XD
很神奇,當時突然如到電影盜夢空間(全面啟動)情節,彷彿有人偷偷修改我的記憶,不自覺自己無意識下了一個指令 modinfo -p vfio-pci,系統居然多嘴跟我說還有其他設定要加上企。
最後,我把系統建議的這些設定都加到 /etc/modprobe.d/vfio.conf 裡面( 加完記得要 update-initramfs -u -k all )。
disable_vga=1 disable_denylist=1 disable_idle_d3=1 enable_sriov=1
再重開vm就成功進入開機畫面了,太棒了!
vm 安裝ubuntu 24.04,還要加裝 nvidia 驅動。
vm如何安裝nvidia驅動,我參考了以下這兩篇
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html#ubuntu-installation
安裝完畢,記得重開機,pve主機要重開,不能只重開vm。
等pve主機,與其vm重開後, 進 vm 執行 nvidia-smi,看到心愛的 5090 就安心了。
再下指令讓 Persistence-M 變成On
sudo nvidia-smi -pm 1
接下來安裝docker,我參考張騰元文章 。
docker安裝完畢,咱門還需要讓docker也能使用 nvidia ,請參考 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 。
最後啟動ollama docker
docker run -d –gpus=all -v ollama:/root/.ollama -p 11434:11434 –name ollama ollama/ollama
至此大功告成。
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"
修改完畢,記得套用 update-grub 生效。
/etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
kvm
kvm_intel
kvmgt
xengt
vfio-mdev
i915.enable_gvt=1
/etc/modprobe.d/pve-blacklist.conf
blacklist nouveau
blacklist i2c_nvidia_gpu
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist nvidia*
/etc/modprobe.d/vfio.conf
以下紅色部分,是顯卡的代號,請自己修改
nvidia有兩個video與audio硬體代號,可執行 lspci -nnk | grep -i nvidia 取得
softdep nouveau pre: vfio-pci
softdep nvidia pre: vfio-pci
softdep nvidiafb pre: vfio-pci
softdep nvidia_drm pre: vfio-pci
softdep drm pre: vfio-pci
options vfio-pci ids=10de:2b85,10de:22e8 disable_vga=1 disable_denylist=1 disable_idle_d3=1 enable_sriov=1
修改modprobe相關檔案,記得要執行 update-initramfs -u 套用更新。
VM的設定
重點在紅框的 host、PCI Device(hostpci0)、 與 q35
使用容器 docker 自架N8N社群版非常簡單,但功能有所限制;雲端付費版每月最低20歐元,可解鎖更多功能,建議先使用雲端版14天試用看看,不符合期待再考慮自架。自架方式有很多種,容器方式為首選。
我的環境是:
1. 容器主機
RockyLinux 9.4,docker ce 27.03,postgres sql server 17
2. 代理伺服器主機 apache httpd 2.4
3. dns n8n.test.com
1. 建立docker-compose.yaml檔案
紅字部分須注意斟酌修改
version: "3"
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER
- N8N_BASIC_AUTH_PASSWORD
- N8N_HOST=n8n.test.com
- N8N_PORT=5678
- N8N_PROTOCOL=http
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.test.com/
- DB_TYPE=postgresdb
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_HOST=postgres主機ip
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_USER=使用者
- DB_POSTGRESDB_PASSWORD=密碼
- DB_POSTGRESDB_SCHEMA=public
- TZ=Asia/Taipei
- GENERIC_TIMEZONE=Asia/Taipei
- N8N_RUNNERS_ENABLED=true
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=mail.hlmt.com.tw
- N8N_SMTP_PORT=587
- N8N_SMTP_USER=郵件帳號
- N8N_SMTP_PASS=郵件密碼
- N8N_SMTP_SENDER=sender@test.com
- N8N_SMTP_SSL=false
- N8N_SMTP_STARTTLS=true
- EXPRESS_TRUST_PROXY=true
- N8N_PROXY_HOPS=1
- N8N_PUSH_BACKEND=sse
# 若使用httpd proxy透過web socket請改成N8N_PUSH_BACKEND=websocket
volumes:
- .n8n:/home/node/.n8n
經過測試這版v1.86版,有權限問題,需要先手動建立.n8n,使用者設定為 1000
# mkdir -p .n8n
# chown -R 1000:1000 .n8n
2. 啟用n8n容器
執行 https://n8n.test.com 之後,就可以設定主人了
安裝完畢 ***社群版限制一個帳號,若郵件設定正確,可以再邀請別人加入。
一開始先新增RSS Feed trigger:每天晚上查看一次咖啡偶網站 https://kafeiou.pw/feed
中間增加過濾器 filter,過濾當天是否有新的文章,若有就發email通知。
左邊使用java script,左邊變數名稱可以用拖拉的,把第一關卡日期拉進去,再調整日期格式。
右邊則為目前系統日期。
左右相同才會觸發右邊發郵件通知
測試一下,大功告成。
另外在步驟一有提到使用web socket的方式進行反向代理參數設定,須修改docker-compose.yaml檔案
請改為N8N_PUSH_BACKEND=websocket 。httpd config 設定參考如下:
<VirtualHost *:443>
ServerName n8n.test.com
ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/n8n.test.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/n8n.test.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt//live/n8n.test.com/fullchain.pem
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto "https"
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://容器主機IP:5678/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://容器主機IP:5678/$1 [P,L]
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
上一篇文章「Tolgee」協助您開發多語系APP我建議公司內部使用tolgee;本篇簡易tolgee教學「tolgee該如何使用docker自行架設」。
docker-compose.yaml檔案
version: '3'
services:
app:
image: tolgee/tolgee:latest
volumes:
- ./data:/data
- ./config.yaml:/config.yaml
ports:
- '8090:8080'
deploy:
restart_policy:
condition: on-failure
env_file:
- .env
#若不使用外部postgres,可自架內部專用postgres
# db:
# image: postgres:13
# environment:
# POSTGRES_DB: tolgee
# POSTGRES_USER: admin
# POSTGRES_PASSWORD: admin
# volumes:
# - ./data/postgres:/var/lib/postgresql/data
# ports:
# - '5432ˊ:5432' # 讓外面也可存取
.config.yaml檔案
tolgee:
postgres-autostart:
enabled: false
spring:
datasource:
url: jdbc:postgresql://外部postgreIP:5432/tolgee
username: 帳號
password: 密碼
.env檔案
spring.config.additional-location: file:///config.yaml
TOLGEE_AUTHENTICATION_ENABLED=true
TOLGEE_AUTHENTICATION_INITIAL_PASSWORD=admin
TOLGEE_AUTHENTICATION_INITIAL_USERNAME=admin
TOLGEE_AUTHENTICATION_JWT_SECRET=my_jwt_secret #長度必須大於64
#TOLGEE_MACHINE_TRANSLATION_GOOGLE_API_KEY=my_google_api_key
TOLGEE_SMTP_AUTH=true
TOLGEE_SMTP_FROM=Tolgee <no-reply@mydomain.com>
TOLGEE_SMTP_HOST=email-smtp.regional-region.amazonaws.com
TOLGEE_SMTP_PASSWORD=omg/my/password
TOLGEE_SMTP_PORT=465
TOLGEE_SMTP_SSL_ENABLED=true
TOLGEE_SMTP_USERNAME=user@company.com
# 停用自行註冊功能,只能管理者邀請
TOLGEE_AUTHENTICATION_REGISTRATIONS_ALLOWED=false
# 搞定反向代理之後,請設定網站名稱(不然邀請函只會出現ip)
TOLGEE_FRONT_END_URL=https://tolgee.test.com
安裝完畢,管理者就可以寄發邀請email,或是連結給使用者,讓使用者加入專案
心得結論
Tolgee自架版本雖說有些限制,但已經很好用了,一般小公司有開發app的人已經不得了,不需要用企業版複雜功能。
windows 10 22h2 已經停用 sslv3 加密, 但是有些公司郵件伺服器還在使用sslv3,以及很老舊的加密方式,所以有必要啟用他們。
要啟用sslv3,可到 Nartac Software 下載 IIS Crypto 4.0 。
執行IIS Crypto程式,如下圖所示,點選 「Best Practices」-> 再選SSL3.0 ,或是全選也可,然後套用 Apply ->重開機,就可以重新讓windows 10 22h2 重振雄風繼續支援老舊加密法。
這樣就能爭取時間,趕緊升級舊系統囉。
選擇 “Cipher Suites”(如下圖) ,將能勾選的都選上,然後手動加上以下加密法,最後再一次apply,Reboot。
#請手動加入
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_3DES_EDE_CBC_SHA
Prevent Macbook Pro to sleep when lid closed
sudo pmset -a disablesleep 1
# 這個指令我測試會讓螢幕無法關閉,就不建議使用了 - 20250423
此外還要停用進入保護模式,以及休眠
Click Lock Screen, then select the menu next to Turn display off on power adapter when inactive. Pick Never.
https://www.lifewire.com/prevent-macbook-from-sleeping-when-lid-is-closed-5203069
另外我不喜歡開螢幕就開機,或是接電源也開機(Mac 版本需為 Sequoia 15.4.x ),可執行以下指令
sudo nvram BootPreference=%00
# 出處這裡
try
{
var request = WebRequest.Create("https://tw.yahoo.com");
request.Timeout = 5000;
request.Method = "HEAD";
using (var response = (HttpWebResponse)request.GetResponse())
{
String s = response.StatusCode.ToString();
response.Close();
return s.Equals(System.Net.HttpStatusCode.OK.ToString());
}
}
catch (System.Net.WebException exception)
{
return false;
}