Android套用日文字體

據說有的手機(三星,LG,HTC)可以直接選擇系統字體,真好,但是索尼不行。我只是修改了系統的字體配置文件,讓顯示簡體中文時,首先套用日語SomcUDGothic-Regular.ttf字體,如果沒有再用回原來的NotoSansCJK-Regular.ttc字體。這樣不會出現口口口,但時畢竟字體差異在那裡,如果追求完美顯示的話,這個方法是不合適的。

#備份原始文件
cp /system/etc/fonts.xml /system/etc/fonts.xml.bak
vi /system/etc/fonts.xml
#添加如下三行到<family lang="zh-Hans">前。
    <family lang="zh-Hans">
        <font weight="400" style="normal">SomcUDGothic-Regular.ttf</font>
    </family>
#重啟手機即可

python查詢aqicn的空氣質量數據

#!/data/data/com.termux/files/usr/bin/python
# -*- coding: utf8 -*-

#aqicn空氣質量 #https://aqicn.org/api/
import json,requests,sys

#token從https://aqicn.org/data-platform/token/獲取,只需郵箱即可
token = 'demo'
#預設為當前IP位置,可自行指定基站,幫助 --help
station = "here"

def getAqi(station):    
    aqiUrl = "https://api.waqi.info/feed/"+station+"/?token="+token
    try:
        res = requests.get(aqiUrl)
        a = res.json()
        if a['status']=="ok":
            return a
        else:
            res = requests.get(aqiUrl)
            a = res.json()
            return a
    except:
        return {"status":"net error"}

def searchStation(keyword):
    searchUrl = "https://api.waqi.info/search/?token="+token+"&keyword="+keyword
    try:
        res = requests.get(searchUrl)
        a = res.json()
        res = []
        if a['status']=="ok":
            for s in a['data']:
                resT={}
                resT['uid']=s['uid']
                resT['name']=s['station']['name']
                resT['aqi']=s['aqi']+" ("+s['time']['stime']+")"
                res.append(resT)
            return res
        else:
            return a
    except:
        return {"status":"net error"}
def processAqi(aqiJson):
    s=aqiJson
#     print(json.dumps(s, indent=4))
    res={}
    if s['status']=="ok":
        res['cityName']=s['data']['city']['name']
        res['time']=s['data']['time']['s']
        res['aqi']=s['data']['aqi']
        try:
            res['pm25']=s['data']['iaqi']['pm25']['v']
        except:
            res['pm25']="N/A"
        try:
            res['pm10']=s['data']['iaqi']['pm10']['v']
        except:
            res['pm10']="N/A"
        try:
            res['temp']=s['data']['iaqi']['t']['v']
        except:
            res['temp']="N/A"
        try:
            res['humidity']=s['data']['iaqi']['h']['v']
        except:
            res['humidity']="N/A"
        try:
            res['wind']=s['data']['iaqi']['w']['v']
        except:
            res['wind']="N/A"
    else:
        res=s
    return res

def main():
    global station
    if len(sys.argv)==1:
        res = processAqi(getAqi(station))
    elif len(sys.argv)==2:
        station = str(sys.argv[1])
        if station == "--help":
            res={"@5851":"根據觀測點編號查詢","Nanyang":"根據城市名稱查詢",
                 "here":"根據IP查詢","s shenzhen":"查詢深圳觀測點",}
        else:
            res = processAqi(getAqi(station))
    elif len(sys.argv)==3:
        res = searchStation(str(sys.argv[2]))
    
    print(json.dumps(res, indent=2, ensure_ascii=False))
    
if __name__ == '__main__':
    main()
    

前天迎來如秋後的第一場中度霧霾。

18081708

最近看到騰訊牽頭成立的微眾銀行,定期存款年利率最高可達4.875%,比普通理財產品都有高很多。於是決定試一試。在微信搜索微眾銀行可以方便進入其小程序,但小程序說完整功能請使用微眾銀行APP。通過微眾銀行公眾號的鏈接下載,跳轉瀏覽器,順利下載到了微眾銀行APP,不過我留意到下載鏈接竟然是http開頭的。安裝後打開,APP即提示有新版本,建議更新。點擊更新後不能安裝,因為下載到的新安裝包版本比現在安裝的還舊。於是通過微眾銀行官網的下載鏈接下載apk後安裝,獲得的仍然是舊版本,舊到不更新不能使用。多次嘗試無果後,將手機切換到電信網絡下,下來就是最新的APP了。

所以我粗略判斷,天威網絡緩存了微眾銀行的舊版本包,導致用戶無法升級。作為金融類APP,安裝包居然是明文傳輸,這就是國內一線大企業的做法。

般若波羅蜜多心經

《般若波羅蜜多心經》 唐·三藏法師玄奘譯

觀自在菩薩,行深般若波羅蜜多時。照見五蘊皆空,度一切苦厄。舍利子,色不異空,空不異色,色即是空,空即是色。受想行識,亦復如是。舍利子,是諸法空相,不生不減,不垢不凈,不增不減。是故空中無色,無受想行識,無眼耳鼻舌身意,無色聲香味觸法,無眼界,乃至無意識界。無無明,亦無無明盡,乃至無老死,亦無老死盡。無苦集滅道,無智亦無得,以無所得故。菩提薩埵,依般若波羅蜜多故,心無罣礙,無罣礙故,無有恐怖,遠離顛倒夢想,究竟涅盤。三世諸佛,依般若波羅蜜多故,得阿耨多羅三藐三菩提。故知般若波羅蜜多,是大神咒,是大明咒,是無上咒,是無等等咒,能除一切苦,真實不虛故。說般若波羅蜜多咒,即說咒曰:揭諦、揭諦、波羅揭諦,波羅僧揭諦,菩提薩婆訶。


bō rě bō luó mì duō xīn jīng


guān zì zài pú sà,xíng shēn bō rě bō luó mì duō shí。
zhào jiàn wǔ yùn jiē kōng,dù yī qiē kǔ è。
shè lì zǐ,sè bù yì kōng,kōng bù yì sè,sè jí shì kōng,kōng jí shì sè。
shòu xiǎng xíng shí,yì fù rú shì。
shè lì zǐ,shì zhū fǎ kōng xiàng,
bù shēng bù miè,bù gòu bù jìng,bù zēng bù jiǎn。
shì gù kōng zhōng wú sè,wú shòu xiǎng xíng shí,
wú yǎn ěr bí shé shēn yì,wú sè shēng xiāng wèi chù fǎ,
wú yǎn jiè,nǎi zhì wú yì shí jiè。
wú wú míng,yì wú wú míng jìn,nǎi zhì wú lǎo sǐ,yì wú lǎo sǐ jìn。
wú kǔ jí miè dào,wú zhì yì wú dé,yǐ wú suǒ dé gù。
pú tí sà duǒ,yī bō rě bō luó mì duō gù,xīn wú guà ài,
wú guà ài gù,wú yǒu kǒng bù,yuǎn lí diān dǎo mèng xiǎng,jiū jìng niè pán。
sān shì zhū fó,yī bō rě bō luó mì duō gù,dé ā nòu duō luó sān miǎo sān pú tí。
gù zhī bō rě bō luó mì duō,shì dà shén zhòu,shì dà míng zhòu,
shì wú shàng zhòu,shì wú děng děng zhòu。néng chú yī qiē kǔ,zhēn shí bù xū gù。
shuō bō rě bō luó mì duō zhòu,jí shuō zhòu yuē:
jiē dì jiē dì, bō luó jiē dì, bō luó sēng jiē dì, pú tí sà pó hē。

1808111345

中午的酸菜炒飯真是好吃!可惜我不是美食家,也不是作家,無法將它到底有多好吃描述出來。我只能說它好吃到我幾乎要哭出來,如果有一天我離開了這個城市,這個國家,這個世界,我一定會懷念這家的炒飯!希望,我能繼續像以前一樣,每週去吃一次。

使用GnuPG加密文件

GnuPG加密情景

42想發送一條消息給55,並且這條消息只有55能看到。首先42和55都用GnuPG生成自己的公鑰和私鑰。然後55把公鑰交給42,公鑰怎麼傳遞都行,不需要保密。42使用自己的私鑰和55的公鑰來把消息加密,生成加密的消息發給55。55拿到加密的消息後用自己的私鑰解密即可看到原始消息。

安卓使用OpenKeychain

F-Droid或Google Play下載OpenKeychain,導入已有證書(公鑰私鑰均可導入)或生成新的證書。然後通過二維碼或你喜歡的其他方式分享公鑰。發送者使用接收者的公鑰和自己的私鑰加密文件,然後發送加密文件給接收者,接收者用自己的私鑰解開文件。使用OpenKeychain,不僅可以方便的加密與解密文件和文本,更可與K-9 Mail搭配實現加密的郵件。

命令行使用GnuPG

Fedora似乎時預裝了GnuPG和GnuPG2,我們可以用gpg和gpg2來使用它。Termux可以使用pkg install gunpg,用法是一樣的,而且版本是最新版。Fedora26比最新版還差一個小版本。我樂於追新,所以這裡都用gpg2。順便提一下,GnuPG念做“格努皮即”。關於GNU有興趣的朋友可以到GNU作業系統與自由軟體運動了解下。

##生成一對密鑰
gpg2 --full-generate-key
#密鑰種類默認RSA和RSA即可
#RSA密鑰長度默認2048即可
#過期日期默認0即永久,後面會講撤銷方法
#繼續輸入名字、郵箱和注釋
#然後就開始生成密鑰了,這時可以做些移動鼠標敲擊鍵盤的動作幫助程序獲取隨機數
#Termux可能要一兩分鐘,Fedora貌似20秒就搞定了
##導入導出刪除撤銷密鑰
#列出已有的密鑰
gpg2 --list-keys
#列出密鑰的指紋
gpg2 --fingerprint
#為密鑰生成撤銷證書
gpg2 --gen-revoke fred42 > revoke_fred42.txt
#導出一把公鑰,-a表示轉換為可打印字符
gpg2 --export -a fred42 > public.key
#導出一把公鑰,-a表示轉換為可打印字符
gpg2 --export-secret-key fred42 > private.key
#導入一把密鑰
gpg2 --import public.key
#刪除一把公鑰
gpg2 --delete-key fred42
#刪除一把私鑰
gpg2 --delete-secret-key fred42
##使用密鑰服務器上傳搜索與下載公鑰
#Please blame the wall

我的公鑰指紋:E7F7 D0FE C38C 3975 67AA 3FC1 1168 09F0 24AF 514A和公鑰:

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFs9g5gBCADaGfBtFMSsNeGDhej021SuvCWOQUFbLnBxkNUIuolcy564AlA6
AqX4R/HC286Yy3Si4m4bJsNjDQASl79sE99DBi4nL66gko6R+5/o62b/QfuZ0R1N
sUGHNSyfzM65zqTeAcow7ukzRe67q1fMDKMr1/R4uXlpXhTMmVJ9mTvO8zy7hX7B
NT77wdLIP2m/ywI2l2LmeoQMkxzKNWwDa8I1OY36NLrpWd4F4vVIg3MMwazMeHGe
CkWMq60oEkfcy/VSiVxF+4XTv97IZ7/xSi+NzNvt56AJr/VbSMvIyQLkNtIotH4A
3+l3h9ckFwhUr+0DgLzoLWLc0BV215zSYu+hABEBAAG0JmZyZWQ0MiAoRnJlZCBa
ZW5nKSA8aW5uZXI0MkBnbWFpbC5jb20+iQFOBBMBCAA4FiEE5/fQ/sOMOXVnqj/B
EWgJ8CSvUUoFAls9g5gCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQEWgJ
8CSvUUohnQgAoXrDgRKN4+NLmX3o2Jlr89TzfgTnS5mr/COEOBQX60rk6AGhXRN6
xH7TXz8DW84JjgWHl5GHuso2qlsdl565KjzaisV3KyVdD/f4wZae2uDnnzkrmQcR
SuusV1iqWaNdArOEi1WC5MDsfCVP8ulILI8rK6YAOwp6Fj/5BGBm2V9gSfjB3eat
WaSoDTeCwoHVcpXtBbFZ8wDiy9IfW9YT7HPmIhwn+pevE6QfBLDseajklvSNgupR
1dp/mXTSlbcTqVMn1hR4yByeiFF5MXakPF0O9bSQLwx0RkybLUychcjoecmT3iIZ
Xm2PCaic3j/XwXsqbsqL5OxoCi3B6Fyrk7kBDQRbPYOYAQgAq73LJIbu24l73zLF
XQfH8XVuRCe94qjKuNYdaJRqd3FJqkNFnIJG1E2hhaXj2z869QNsqcRUXr0R0y6k
vayRZLWQhn/jM99kuCioRKt2X8eak+M8kGip94jaqwNpJbiJa2iJjCnMEgTC/6Cm
R8q37m3/EjIMRRVUFxezkZWWNWo3qklIcPatc92aCOEu3ztZ/xvF/E93CDRl//+p
FPLdO8ba/iVcJszQp8S6opRu8moTz6qEzA70hldv0IZC1/syWAjliFBa9P8Xpq5e
cEoGvaBPgXG6MENeI8j5sv8m9abtHtmZZtGt2MyVKNAbz30cJ8t2k6+fG1Jl3W3q
gi31NQARAQABiQE2BBgBCAAgFiEE5/fQ/sOMOXVnqj/BEWgJ8CSvUUoFAls9g5gC
GwwACgkQEWgJ8CSvUUqY0QgAm3ldNHrdv1LIhP/J3WJgqlWK4/aW4p/hgtfJSlje
2N9Kgs5CeBdW3m9AdgGQNfpmXPDaRM5EaaNo87QH6z8BLfxtCltEhmiMfy1CjEG3
Hu/gPcQ+thwHQwH+7ejmafQAGmljDgjyB+ZMUej2nwLagh2uGhsls/xGI2EJxw8l
W/Gk8sh3Fqir2mqoK4/OcFzdvo4MhoT2m8zjEH3OVTjyNzekL5FNLhb61RL2aAsV
mgA7d0YXIh/OJ9dEVMLy7xr0eP+UD7Mr/zJjX18+egDjdfMAfM7XERyq9OPiCdpt
v67laBzdE3m99lgFkqwap9O6lzIdV06LPx6oXZzpbJq9ww==
=vA+d
-----END PGP PUBLIC KEY BLOCK-----

使用GnuPG生成隨機密碼

生成一個16位的隨機密碼

gpg2 --gen-random -a 0 16 | head -c 16

也可將下面代碼存為password.sh,運行./password.sh 16來獲得。

#!/bin/bash
if [ $# -eq 0 ]
then echo "請指定待生成密碼的長度"
else gpg2 --gen-random -a 0 $1 | head -c $1
echo ""
fi

Root the Xperia X Compact

先說一下速成方案,電腦是win7,手機是港版F5321,刷的是德國o2 34.4.A.2.85/R2E。然後使用Magisk獲得Root和Busybox。

  1. 按需要進行備份,我就是新機,所以沒有備份。
  2. 下載Xperia X Compact的驅動。手動安裝驅動的方式是,開始/控制面板/設備管理器。樹行圖中選擇根PC,然後在操作菜單選擇添加過時硬件/手動選擇/顯示所有設備/從磁盤安裝/瀏覽。找到解壓出的inf文件安裝即可。
  3. 下載或升級FlashTool,安裝完畢後運行其安裝目錄下的Drivers/Flashtool-drivers.exe,選擇前兩個即Flashmode Drivers和Fashboot Drivers安裝。安裝後可能需要重啟電腦。然後打開FlashTool,點擊XF圖標下載系統盤,文件約有1.7GB。
  4. 打開[stock 8.0][Unlocked bl][34.4.A.2.19; ...32; ...85] Root and Recovery (3 clicks),下載Modded boot img for 34.4.A.2.85、Updated TWRP with working decryption和 serajr's zip。打開Magisk v16.0 - Root & Universal Systemless Interface,下載Latest Magisk。然後將DRM-Fix_System_Mode.zip和Magisk-v16.0.zip複製到手機的外置sd卡。
  5. 手機關機,按住音量減,插入usb線,待FlashTool顯示Flashmode已連接,鬆開音量鍵。然後點擊Flashtool左上角的雷電標誌(Flash),選擇FlashMode,Firmwares里選中下載好的系統,Wipe全部選中,Exclude全部不選,安後按下Flash開始刷機。
  6. 刷機完畢,拔出USB線,關閉FlashTool,不要將手機開機。然後按住音量加鍵並插入USB線,此時進入fastboot模式。在下载文件夹按住Shift键,然后右键单击空白处选择打開命令行工具,然后執行fastboot flash boot boot85.img和fastboot flash recovery twrp-3.2.1-v7.img。然後拔出USB線。
  7. 同時按下電源鍵和音量減鍵,等到手機振動一下,迅速放開電源鍵但保持音量減鍵按下,直到TWRP出現。找到外部SD卡里的DRM-Fix_System_Mode.zip和Magisk-v16.0.zip,刷進手機。開機。打开Magisk,安装Busybox模块即可。

刷後感

手機是港版,為什麼要刷德版呢?因為論壇里提供的img只有.85的,沒有.70的。由於.85有本月的安全更新,所以xposed是用不了的。論壇也有提供自製img的方法,但是我用兩台電腦測試修改.70的img,均報錯。用報錯的img進行刷機貌似失敗,所以用了論壇里的.85img。在第一次操作的時候試圖去備份TA,依然失敗。解鎖bootloader倒是成功了,但這不是必須的。獲得root只是第一部,要想正常使用還需要更多的調教,請參考Xperia X Compact with Android 8

Magisk安裝新模塊後bootloop

#進入TWRP:同時按下電源鍵和音量減鍵,等到手機振動一下,迅速放開電源鍵但保持音量減鍵按下,直到TWRP出現
#Go to "advanced" and then click on "terminal command"
cp /data/magisk.img /data/magisk.img.bk
mkdir /mktmp
mount -o loop /data/magisk.img /mktmp
#查看已安裝的模塊
ls /mktmp
#刪除可疑模塊
rm -rf /mktmp/xxxx
umount /mktmp
#返回,重啟手機即可