分類
程序

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-----

mQGNBF1N978BDADTV6gHpM3jhUPLgyaS86UP911kgFBjfSh+GySZ/lVsVm4blAZG
t/qq4YnTJbNE8sKWL5yC9mzPfwd/jlbr4o9h8aldWE+dJwtffStKSMQewrQUIF75
c02AdBivFJcXrj3lCNL4MliN5U9AXklsgJsKbUTYXpx1VjPkjvofyEXYPmNjd3Lc
Og+znyT8y6YcVWNnprqdb53MoT065esADkn27eAyCAPB9BvNqq5PPnlTOiKY6UWH
dRaX9AIAT6D5Wf72+7Jv6BPhKx1niKtsoAwF9gyPGaFzZdVgVxmfbEGbJPZQLDUA
W5dpuaVoV6qXr3OfDWuSHjvcqrcf5CxNr6ZRxf8+QGJ4z4YhdILOVDuuk0eW5IBm
s5CE6rw63FycpvQm5ZwOPQTGK+V9d53k0CafELtnm54XZSWT5JGEnfegtbBQK99M
gkRpZ0WtXL7XCq2O3iXUwFdQH4SaV4b2tdyUklZR2m3W2O6oDm2AOzwpvsa7+ZpG
iEGloNmGqUbzveUAEQEAAbQbRnJlZDQyIDxmcmVkNDJAZGlzcm9vdC5vcmc+iQGw
BBMBCgAaBAsJCAcCFQoCFgECGQEFgl1N978CngECmwMACgkQFffyCjPYNSVBmgv6
AlqvMnOv8pPwitX9fGpu05UV4WiFKMLUdXW2Ss3Um2yOv6vHnOpznM8QAmngZ8Jr
j5670L6BwZx/JjetZTfnDpN7Jv8M9l5rpc/yJtXj9sr9QlI/nhx0A8K9L8OQJkVM
nHH9y9q5Cyy00Rebfqkyqgyirpi6qZTuPWVM0DlRugiSFKusjJnRM+ZbfKCwtxL9
awkvteuaC7B06pAAhDglucBQiqWCTlR3ZtP+8Z+e6vBybmHd6KTh3ZGkDWN8xXe5
w8GlSx4NwbJVptmMmuCnrUOc/gjXzvzo3no8RaI2yGaRgEIofo3D+uemVMz41hw5
PtsizHKGjLexuatKp4LXYvcsqxnPdIPWf4I9o+WmoNA3TjHaa6/KOmRQQ1svvzFk
5mGLMvtGX8RY3kVqRwRjebMcwNv00gevcdR6LBMHij2RBHQ7eEGfgSinXi/z8w6H
3b/6ULUANeLHF5mkZzOvVzu3wK61uWTKU7jrhpVb/2HmMaErGGuuXG0gxPL5NTrq
uQGNBF1N978BDADK9WMf4iHk3WUwtdK/s6CcciWd8JzbxYs+mSNh8cgxNlIQTZTD
3nlGycxQHe2fSQL1ppLf54zth5VKXc6ihmbPpwSTMfag9I0yz3q8ymWnzme11Mt4
TKGrdRjsjSBkHPoDLsiTNtY3BhtDZ4B8sew9a5VHadBuEX9FQ3D4zSmAoMojMFjk
ovcKq9LG09ZWoCmKIr1+rrqiVAF/K6unh9jekLCqGBy8Y9YLlTve2DsKTS6nbMM8
ltBi3Viq0vdfBK5+4PAopeXuTmF2u9cpYhgO/W2IjbhLASEGErNaniP1UXrYsJ0K
j96z5Y0qA5jOonyYOqRPBCNVGhr2kW3FbViF/TKlVMnebSHp/zvmISzJkrROxSH8
e8JDIY+4zNuPgv9S+Rgb2ugeGkg/He+P8ZwbtL3AVtZSyBHxKuk1OsbM7uDR8tTN
8rRP8n6mNFVgHP4umYxC7SoVDH8HN0ZuJAOYqr+bBQ9FHlfyG0cUD4LHnE69eckO
2F4f8cGFcLX0QfkAEQEAAYkBnwQYAQoACQWCXU33vwKbDAAKCRAV9/IKM9g1JcI6
C/4tnYwBk4L/3j7BY0cCA8Tmga0cGVBN4BtjyXnuh1eLad19bKPRw37szJKjg6Ij
FJpX0C5Gs+F+EbsYGxIa0vdpM7SOc9THrdXtBrCrqJA2efphIEsmCiyUlyQlmHG4
b/bNAVfk8apmQLt8zaScxcOh4IwOjSzXZnq0iZ/5SIkCs37T2gl/6uYopbCZwtIv
gLgS6dg/0KKRhFlz7H7UFLWQrS2tBWvRM5Pnt+ZJzSphpyU8GthfXefi9XL2zUAt
z1UqnJgzbXxUDZ7bktogpBqidyaSbtfNyrzZY4jPm4okSe6ZDmj5leVqfz8TkKju
TkneYQTXZ9huSYJKL9RI6qPtDYlYD0yDu3iFEhLobvvgSzZK+wok4+EY6D1QCE4P
Xfu2763Qgp1AZ1HK6MNgqEdZQfwAB2ryF//zkpCObxmu79+2RmzTFWD3N8zCQQCn
I6DNVLqyBdvGMWomy6Vc3v9o9eIDhINTQiE3hRjn+UaLba7Rz0xgQ9IWW8CAxpqk
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。

分類
方法

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

本文更新於 2018/07/10。

分類
方法

Xperia X Compact with Android 8

請參考Root the Xperia X Compact來安裝Flashtool和Xperia X Compact驅動,安裝後就可以使用adb命令來調試手機了。

手機上開啟調試模式

設置/系統/關於手機/(最下方)Build number,點擊版本號7次即可開啟開發者選項。在系統菜單里,進入開發者選項,找到Debugging類目下的USB debugging開關,打開它。手機用USB連接電腦就可以了。注意此種模式連接電腦有被安裝病毒軟件風險,所以不要隨便以這種狀態連接任何不明設備。用完後記得關閉調試開關。

去除Wifi標誌上的叉號

出現叉號是因為谷歌的聯通性檢測網址無法被訪問。可以自行搭建一個這樣的服務,v2ex也有提供,這裡使用高通中國(https://www.qualcomm.cn/generate_204)聯通性檢測網址。

2021-10-26 開始高通中國的聯通性測試不行了,所以我自建了一個,順便還能檢查服務器是不是掛了。當然也歡迎大家使用,地址如下:(注意實際請求是到 Cloudflare 的服務器)

adb shell "settings put global captive_portal_https_url https://manchuria.eu.org/generate_204"
adb shell "settings put global captive_portal_http_url https://manchuria.eu.org/generate_204"

禁用或刪除不使用的自帶軟件

universal-android-debloater 提供了更加方便又安全的禁用自帶軟件的辦法,請先參考它。

如果root了,有很多軟件可以選擇,如link2sd。未root可以使用下面命令來實現,參考自:Which Apps are safe to remove after Root

#通過adb打開手機終端
adb shell
#查看所有app
pm list packages | more
#禁用startupflagservice,可以解決手機自動重啟
pm disable-user com.sonyericsson.startupflagservice
#禁用warrantytime,可以去掉開機後的狀態欄提示
pm disable-user com.sonyericsson.warrantytime
#更多可禁用app可參考上面鏈接
#查看已禁用的app
pm list packages -d
#退出終端
exit
#卸載What's New命令
adb uninstall --user 0 com.sonymobile.entrance

換機

大概去年 9 月份的時候,手機的移動信號忽然開始不穩定。一開始是偶爾沒有數據網絡,後來直接「無服務」了。我用聯通和電信卡做測試,以及重新刷機(原裝系統和第三方系統),都未能解決,所以判斷是硬件除了問題。於是又從網上買了一個 Xperia X Compact ,由於日版較港版便宜一些,於是這次買了日版,用了一年多了,也挺好的。沒有移動信號的手機則專門用來短期旅行的時候看地圖和紀錄 GPS 位置用,再也不用擔心手機沒電了。

由於是日版機,所以也就沒有 Root,但是微信和銀行應用又不得不用,好在有 Shelter 。Shelter 可以隔離您的老大哥應用,對於不常用的應用還可以方便的凍結掉。

順帶一提,之前的二手港版機大概是四百多塊,而這個日版大概是三百多塊。我和 Emanon 都是用這款小屏手機,目前都運行良好。之所以買這個手機其實有諸多考慮:比如這款手機屏幕小,4.6";拍照方便,有獨立對焦攝影鍵,視頻防抖也不錯;使用二手機可以為環保事業作出微弱貢獻;資料安全一丟丟,沒有百度等底層服務。不過從 DNS 記錄中可以看到,手機偶爾會連接索尼的服務器,域名包含 geoip、update 等字樣。我家以及我的手機有配置 dns-proxy,所以一些可疑的域名請求都被攔截了,如果是國內廠商,我就不知道該怎麼攔截了;當然還有一點就是能夠在網上買的到。這些電子垃圾從日本倒賣過來,應該是不合法的,隨着經濟下行政策收緊,不知道那家店能做到什麼時候。20200809

本文更新於 2024/04/02。