分類
方法

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>
#重啟手機即可

本文更新於 2020/08/30。

分類
程序

python查詢aqicn的空氣質量數據

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

#aqicn空氣質量 #https://aqicn.org/api/
#v2 同時指定多個監測站,已防止單個站點很久不更新數據
import json,requests,sys,time

#token從https://aqicn.org/data-platform/token/獲取,只需郵箱即可
token = 'YourToken'
#預設為當前IP位置,可自行指定基站,幫助 --help
stationList = ["@5851","@5855","@5860"]

def getAqi(station):    
    aqiUrl = "https://api.waqi.info/feed/"+station+"/?token="+token
    try:
        res = requests.get(aqiUrl)
        a = res.json()
        if a['status']=="ok":            
            if time.time() - a['data']['time']['v'] < 86400:
                return a
            else:
                return {"status":a['data']['city']['name']+"的數據已過期。"}
        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:
        for station in stationList:
            res = processAqi(getAqi(station))
            print(json.dumps(res, indent=2, ensure_ascii=False))
    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))
        print(json.dumps(res, indent=2, ensure_ascii=False))
    elif len(sys.argv)==3:
        res = searchStation(str(sys.argv[2]))
        print(json.dumps(res, indent=2, ensure_ascii=False))
    
if __name__ == '__main__':
    main()

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

本文更新於 2018/11/08。

分類
說說

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作業系統與自由軟體運動了解下。

把證書從OpenKeychain導出並導入Fedora的GnuPG2

#手機上選擇要備份的證書,右上角菜單,備份證書
#抄下來44位密碼,勾選已抄下,按一下保存備份
#然後把生成的文件backup_YYYY-MM-DD.pgp傳送的Fedora
#在Fedora上備份文件的所在目錄執行
gpg2 --decrypt backup_YYYY-MM-DD.pgp | gpg2 --import
#按照提示輸入剛剛抄下來44位密碼
#列出已有的密鑰,最長那串就是ID
gpg2 --list-keys
#編輯密鑰
gpg2 --edit-key [ID]
#由於我們是物理傳輸過來的,所以不用對比指紋了,直接trust
trust
5
y
save
#這樣就可以了

使用 GnuPG2 加密和解密文件

#將 A.txt 加密
gpg2 --encrypt -r [email protected] A.txt
#可選參數還有
# --sign 加密者信息
# --armor 把文件加密成 ASCII 文件

#解密 A.txt.gpg
gpg --decrypt A.txt.gpg > A.txt

其他GnuPG2常用命令

##生成一對密鑰
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

我的公鑰指紋:F296 FC4F B714 BA14 6366 FEDF 15F7 F20A 33D8 3525和公鑰:

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

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
Gck=
=CXuU
-----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

本文更新於 2020/10/30。

分類
讀書

18070313

儘管有機器縫製的靴子並且價格低廉,鞋匠在村裡卻依然站得住腳,顧客還為數不少。在地裡幹活的人需要防水的靴子,所以必須要手工縫製。鞋匠在勞動者之中生活了一輩子,比那些城裡的手藝人更明白他們想要的是什麼,也更明白如何用釘子撐起鞋底,如何給鞋掌和後跟釘上金屬片——靴子最後被弄得簡直如甲胄一般。就連這裡的小孩子也穿靴子,不過以他們的個頭而言,靴子過於沉重了。很多自己做工的農場主也會把自己的靴子送到鞋匠這裡來修。和村裡的鞋匠打交道時未已需要記得的一點就是:你若是想要一雙靴子,需要提前六個月定製,否則一定會失望而歸的,因為他做雙鞋的時間比得上船工造船的時間那麼久。


……己的一整套獨特的音節,它唱出的每個音符都有着明顯不同的含義,可以輕易區別開來。

它的哨音覆蓋了各個音域,從尖利、刺耳的高音到低沉、空洞的低音。它能唱出完整的全音階,既有“顫音”、囀聲,也有回蕩不已的震顫音,花樣繁多。它用一種獨特的咯咯聲作裝飾音,那聲音就好像是從它的胸腔深處發出來的,此時它筆直地站立在煙囪邊上,不停地撲騰着翅膀。別的鳥兒唱歌似乎單純為了享受唱歌的愉悅,最多不過是想吸引那些藏在灌木叢裡的異性同伴。但八哥會對着它的同伴滔滔不絕——我覺得這樣說沒錯,八哥在視線之內沒有同伴,孤單一人時從不唱歌。它真的是在和它的同伴說話。我幾乎可以聽懂那些對話並大致猜出意思。


到了傍晚,夜色漸濃的時候,草地上也陷入一片寂靜,這時候兔子就會出來與同伴追逐嬉戲。兩隻兔子相互玩鬧時,有一隻會猛竄出去十一二碼遠的距離,然後低頭開始吃草,好像完全不在意另一隻兔子似的。第二隻兔子也開始吃草,但同時偷偷地向前移動——不是直線移動,而是斜插過去,一邊假裝吃草一邊朝第一隻兔子摸過去。突然,它猛地向前一撲,但是第一隻兔子實際上一直在用眼角的餘光偷偷瞥視,見狀就風一般地跑掉了。有時,它也會轉過來面對第二隻兔子,平地彈跳起一尺來高,乾淨利落地從後者上方跳過去。有時候,兩隻兔子甚至一同歡快地蹦跳起來。

《維爾特郡的鄉野生靈》——[英] 理查德·傑弗里斯

本文更新於 2018/07/10。