分類
软件

去中心化的 XMPP 聊天系統初體驗

XMPP 的聊天系統就像電子郵件系統一樣,大家擁有不同的賬戶,卻可以相互通信。

一般使用

關於賬號,雖然可以自建 XMPP 服務器,但是輕度使用的話,我還是推薦 404.city 提供的免費服務。

關於客戶端,Linux 下推薦 Dino,Windows 下推薦 Psi+,安卓下推薦 Conversations。均支持 圖文消息,群組聊天及 OMEMO 端對端加密。Dino 正在開發語音和視頻聊天,Psi+ 不清楚,Conversations 應該是支持的,但是我沒用過。

一點資料

如果想用 Cloudflare 隱藏自己的服務器 IP,那麼在其上搭建 XMPP 服務將會面臨巨大挑戰,因為 Cloudflare 只代理 HTTP 協議的請求,不代理 XMPP 協議的請求。BOSH 是一種通過 HTTP 協議來中轉 XMPP 協議的解決方案,我試了下沒有成功。

分類
软件

简单使用影音管理軟件 digiKam

digiKam 是 KDE 家族的一款影音管理軟件,支持 Linux、Windows 和 Mac 平台。其主要特點有開源、輕鬆處理大量(大於十萬張)照片、高效的處理 raw 和 JPEG并發佈至社交媒體、查看和編輯媒體的元數據等。基於我的使用體驗,我認為 digiKam 確實是一款非常好用又功能強大的媒體管理編輯器。我目前主要使用了給照片和影片添加地理位置信息和批量縮放壓縮圖片這兩個功能,但是其媒體管理功能是操作系統自帶的文件管理器所不具備的,也很好用。自帶的人臉識別功能也挺好玩的。我是在 Windows 平台使用的 7.0.0 版本,繁體中文翻譯的有些問題,但我還是按照軟件里的顯示來記錄吧。

使用 digiKam 爲媒體添加地理位置信息

使用 GPX 文件自動爲媒體添加地理位置信息

首先選中要添加地理位置的媒體,然後在菜單欄選擇 Item > Edit Geolocation(或者按下快捷鍵 Ctrl + Shift + G),之後 Geolocation 編輯器會打開。在地理位置編輯器中,地圖的左下方有一個地球的圖示,在這裏可以選擇地圖爲開放街圖。挨著的兩個圖標是拉近或推遠地圖。GPX 檔案通過最右邊的「 GPS 相關器」中的「載入 GPX 檔」載入。然後按下右下角的「關聯」,程序就會自動將地理位置信息關聯到照片中了。左下角的媒體列表可供檢查,沒有問題的話的就按右下角的「 Apply 」將位置信息保存到媒體。如果沒有關聯到則有兩個辦法處理,一是調教關聯的參數,參考官方幫助文檔 The Correlator ,二是手動給文件指定地理位置。

手動爲媒體添加地理位置信息

選擇媒體并按下快捷鍵 Ctrl + Shift + G 打開 Geolocation 編輯器后,放大地圖,將地圖中心設置到目標位置,然後右鍵選擇「複製坐標」,最後在左下角的照片上右鍵,選擇「貼上坐標」。重複上面步驟待所有照片都添加位置信息后就可以按右下角的「 Apply 」將信息寫入文件了。

給媒體添加反向地理定位信息

所謂反向地理定位是指把經緯度轉化為日常使用的城市街道名等。還是在 Geolocation 編輯器中,右側選擇「反向地理定位」,服務的話建議選擇「Open Street Map」,因為 Geonames 沒有開放街圖准。如果是第一次添加反向地理定位,需要為其增加一個根標籤:在標籤樹空白處右鍵,按「新增標籤」,取個名字比如叫「 Location 」,然後在「 Location 」上右鍵,選擇「新增所有地址元素」。然後按下右下角的「Process reverse geocoding」,成功後就可以看到標籤列表中增加了包含國家城市等地名的標籤。當然也可以自定義地理標籤,比如只保留國家和城市。最後不要忘記按下「 Apply 」把信息寫入媒體。

GPS 僅出現在 digiKam 中而沒有保存到文件中?

先選擇要保存地理位置信息的圖片,然後在菜單欄選擇 Item > Write Metadata to file 即可。為什麼要有這麼一步呢,那是因為第一次打開 digiKam 的時候按照推薦,當問及是否要將 digiKam 保存的元數據寫入文件中時,選擇了「什麼也不做(Do nothing)」。如果選擇了「Add infomation to files」應該就無需這一步了,但是 digiKam 提醒說這樣回減慢照片的操作速度,所以我還是每次手動寫入下文件。另外值得一提的是 digiKam 不支持往視頻文件寫入地理位置信息。

批量自動調整顏色和縮放照片

Emanon 看書的時候用手機拍攝了很多書頁,但是手機拍出來的照片尺寸和文件大小都很大,有些甚至超過 10 MB,對於書頁來說是不必要的。經過 digiKam 自帶的影像編輯器將尺寸縮放 50% 後文件大小能縮小到 1 MB 以內,節省了很多空間,畫質也幾乎看不到變化(畢竟主要是白紙黑字)。但是一共有快兩千張這樣的文件,於是就要用到批處理了。

先選擇要進行批處理的照片,可以從「相簿」頁面直接選取,也可以從「搜尋」頁面搜尋後選取。由於 Emanon 的書頁都是手機拍攝的,我就可以只搜索「讀書筆記」相簿中,相機製造商為「 Sony 」的照片。選中照片後,按下菜單欄 Tools > 批次佇列管理器(或按下快捷鍵 Shift + B)打開批次佇列管理器窗口。需要對照片進行的操作可以通過雙擊右下角的「基本工具」中的對應工具,將其選擇到「指定的工具」中。然後在「指定的工具」中單擊後,就可以在「工具設定值」中調教工具的參數。比如我的這個操作用到兩個動作:顏色自動矯正>標準化和調整大小>使用自訂長度> Use Percentage > 50% 。設置好操作步驟,就可以在左下角的「佇列設定值」中設置保存文件相關的參數。由於我是要覆蓋保存,所以「目標」選擇「使用原始專輯」,「檔案重新命名」選擇「使用原始檔名」,行為中「如果目標檔案已存在」選擇「自動覆寫」並取消勾選「 Save image as a newly created branch 」。「儲存影像」標籤頁可以設置圖片的品質,我在默認值的基礎上將其調高了,JPEG 品質改為 85% 仍然獲得很好的壓縮效果。這些做完後就可以按工具欄的「執行」來處理佇列了。如果想要復用剛才設定的工作流,可以按菜單欄的 Queues > 儲存工作流,下次只需要在「工作流」標籤頁選擇就可以用了。

digiKam 其他小撇步

添加新的文件夾到 digiKam

菜單欄 Settings > 設定 digiKam > 收藏。點擊「本機收藏」後面的「加入收藏」按鈕。

分類
软件

Linux 使用 Python 操作剪切板

還是那個簡繁轉換的需求, zhconv 似乎不能直接給它傳一段文字來轉換,只能轉換文件或者在 Python 中調用。

Fedora

先安裝 xclip 依賴,再安裝 pyperclip:

sudo dnf install xclip
sudo pip3 install pyperclip

然後新建一個 Python 腳本 /home/[YOURNAME]/scripts/s2t.py:

import pyperclip
from zhconv import convert

clipString = pyperclip.paste()
clipStringTC = convert(clipString, 'zh-hant')
pyperclip.copy(clipStringTC)

最後為了方便使用,給腳本設置一個別名

alias t='python3 /home/[YOURNAME]/scripts/s2t.py'

Termux

Termux 無法使用 pyperclip 來操作剪切板,但是可以通過 Termux API 來操作。對應的 Python 這樣:

import subprocess
from zhconv import convert

clipString = subprocess.getoutput("termux-clipboard-get")
clipStringTC = convert(clipString, 'zh-hant')
subprocess.getoutput("termux-clipboard-set \'"+clipStringTC+"\'")
分類
软件

安卓手機把短信導出成 JSON 文本

本來打算用 Termux API 中的讀取短信功能,結果官方說谷歌不允許,所以後來找到了 hydrargyrum 開發的 Epistolaire。 Epistolaire 可以把本機的短信和彩信全部導出到 JSON 文本中,使用非常簡單。

分類
软件

[18+] Hendroid 同人與變態漫畫瀏覽器

發現一個令人墮落的應用( ͡° ͜ʖ ͡°) Hendroid:Doujinshi & Hentai-Manga archiving and viewing app.

分類
软件

安卓手機使用 dnscrypt proxy

目的:未 root 的安卓 8 手機在 WiFi 和 4G 下使用 dnscrypt-proxy 2 避免 DNS 污染。

跑起來

使用 Termux 來運行 dnscrypt-proxy 2,配置方法參考Fedora使用DNSCrypt。由於手機未 root ,所以無法監聽 53 端口,可以用 5353 替代。配置成功後 dig ft.wupo.info -p 5353 @127.0.0.1 應該可以能正確返回 DNS 查詢。

使用 DNSfilter去 F-droid 下載)實現的本地 VPN 來修改系統的DNS查詢,它同時還能攔截廣告。配置非常簡單,只需要在DNS配置欄選中禁用 DNS 服務器查找,並在輸入框中輸入下面一行即可。

127.0.0.1::5050::UDP

日常使用

新建文件 /data/data/com.termux/files/home/scripts/dns.sh 並給予執行權限。

startDns(){
  nohup /data/data/com.termux/files/home/opt/dnscrypt/dnscrypt-proxy -config /data/data/com.termux/files/home/opt/dnscrypt/dnscrypt-proxy.toml&
  echo "starting dns"
  sleep 10
  am start --user 0 -n  dnsfilter.android/.DNSProxyActivity
  sleep 2
}
stopDns(){
  am start --user 0 -n  dnsfilter.android/.DNSProxyActivity
  sleep 8
  pkill dnscrypt-proxy
  echo "killed dns"
}

status(){
  vt1="$(ps -ef | grep dnscrypt-proxy | wc -l)"
  vt2=" "
  if [[ $vt1 = "2" ]]; then
    dnsproxyStatus="1"
    vt2="$(dig -p 5353 +short www.v2ex.com @127.0.0.1)"
  else
    dnsproxyStatus="0"
  fi  
}
if [[ $1 = "1" ]]; then
  echo "start"          
  startDns
elif [[ $1 = "2" ]]; then
  echo "restart"  
  stopDns         
  sleep 3           
  startDns  
elif [[ $1 = "0" ]]; then
  echo "stop"
  stopDns
elif [[ $1 = "s" ]]; then
  status
  echo "dns: $dnsproxyStatus | $vt2"   
fi

在 ~/.bash_profile 中增加快捷命令

alias d1='/data/data/com.termux/files/home/scripts/dns.sh 1'
alias d0='/data/data/com.termux/files/home/scripts/dns.sh 0'
alias dt='/data/data/com.termux/files/home/scripts/dns.sh s'

使用的時候,運行 d1 即可啟動 dnscrypt-proxy 服務,並且拉起 DNSfilter。運行 d0 則會先拉起 DNSfilter,此時需要手動點下 Close 退出 APP,然後會關閉 dnscrypt-proxy 服務。

分類
软件

簡易中文簡繁轉換 Python 庫 zhconv

zhconv 提供基于 MediaWiki 和 OpenCC 词汇表的最大正向匹配简繁转换,支持地区词转换:zh-cn, zh-tw, zh-hk, zh-sg, zh-hans, zh-hant。Python 2、3通用。

若要求高精确度,参见 OpenCCopencc-python

用起來方便準確,轉換模式若是 zh-tw 會進行地區詞轉換,如將「软件」轉換為「軟體」。而使用 zh-hant 則只轉換簡繁,如將「软件」轉換為「軟件」。

pip install zhconv
from zhconv import convert
print(convert('他說「我幹什麼不干你事。」', 'zh-cn'))
#他说“我干什么不干你事。”
print(convert('计算机软件', 'zh-tw'))
#計算機軟體
print(convert('计算机软件', 'zh-hant'))
#計算機軟件

命令行工具

python -mzhconv [-w] {zh-cn|zh-tw|zh-hk|zh-sg|zh-hans|zh-hant|zh} < input > output
#如
python -mzhconv zh-hant <山东合村并居的真实情况.txt> 山東合村並居的真實情況.txt